[Erledigt] Was muss alles bei modifizierter Firmware signiert werden?

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Guten Morgen zusammen,
würde gerne die selbst erstellten Image über das WebIF flashen.
Es wurde der Hinweis gegeben das es am einfachsten ist, wenn der öffentlichen Schlüssel der generiert wurde in das fertige Script mod_yourfritz_key geschrieben wird.
Das wurde gemacht und die Frage ist, ob nur das rootfs signiert werden muss oder rootfs + kernel?
Nur rootfs
Code:
cd modfs/
wget -P /opt/Fritzbox-Image7530/modfs/modscripts http://das.ist.der.vps/mod_yourfritz_key
./run_modscripts ../squashfs-root 
YourFritz/bin/squashfs/$(uname -m)/mksquashfs4-le squashfs-root/ fs.sqfs -all-root -no-progress
YourFritz/signimage/sign_image fs.sqfs >fs.sqfs1
cat kernel.bin fs.sqfs1 >7530_$(date +%d.%m.%Y:%H:%M:%S).image
rootfs + kernel
Code:
wget -P /opt/Fritzbox-Image7530/modfs/modscripts http://das.ist.der.vps/mod_yourfritz_key
./run_modscripts ../squashfs-root 
YourFritz/bin/squashfs/$(uname -m)/mksquashfs4-le squashfs-root/ fs.sqfs -all-root -no-progress
cat kernel.bin fs.sqfs >7530.image
YourFritz/signimage/sign_image 7530.image >7530_$(date +%d.%m.%Y:%H:%M:%S).image
Danke schonmal für eure Antworten.
 

eisbaerin

IPPF-Promi
Mitglied seit
29 Sep 2009
Beiträge
9,946
Punkte für Reaktionen
668
Punkte
113
Probiere es doch aus.
Wenn es klappt, dann hast du es richtig gemacht.
 

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Bei mir hat der letzte Connect zum ISP nach einem reboot 19 min gedauert bei der 7520.
Wollte das vermeiden und es gleich beim ersten Mal richtig zu machen.
 

eisbaerin

IPPF-Promi
Mitglied seit
29 Sep 2009
Beiträge
9,946
Punkte für Reaktionen
668
Punkte
113
Das macht man ja normalerweise auch nicht mit einer Produktivbox.
Du hast doch noch mindestens 3000 und 7560 und vielleicht noch anderes.
 
Zuletzt bearbeitet:

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Ja, du hast recht. Danke.
 

NDiIPP

IPPF-Promi
Mitglied seit
13 Apr 2017
Beiträge
3,976
Punkte für Reaktionen
743
Punkte
113
Code:
YourFritz/signimage/sign_image fs.sqfs >fs.sqfs1
Es wird nicht das SquashFS-Image signiert sondern nur das fertige TAR-Image.

Und in das Filesystem wird zuvor der (eigene) öffentliche Schlüssel hinzugefügt. Also die Datei "image_signing.asc" (das ist der (eigene) öffentliche Schlüssel) bspw. als "avm_firmware_public_key9" in die eigene (modifizierte) Firmware aufnehmen (im Filesystem unter "./etc").

---

Wollte das vermeiden und es gleich beim ersten Mal richtig zu machen.
Zum testen ist doch "check_signed_image" da:
Rich (BBCode):
$ bash ./check_signed_image ~/Downloads/fritzbox/images/FRITZ.Box_####_modified.xxx.yy.zz.signed.image -a ~/image_signing.asc
Found OpenSSL 1.1.1h  22 Sep 2020
Check dgst command ... OK
Check rsautl command ... OK
Checking the public key from /home/user/image_signing.asc ... OK
Checking support for the used hash algorithm md5 ... OK
Verification succeeded.
 
  • Like
Reaktionen: Insti

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Und in das Filesystem wird zuvor der (eigene) öffentliche Schlüssel hinzugefügt. Also die Datei "image_signing.asc" (das ist der (eigene) öffentliche Schlüssel) bspw. als "avm_firmware_public_key9" in die eigene (modifizierte) Firmware aufnehmen (im Filesystem unter "./etc").
Das ist alles schon erledigt. Habe den Schlüssel wie in #1 geschrieben in mod_yourfritz_key rein und der der drinnen stand überschrieben.
das fertige TAR-Image
Ist das TAR Image das gleiche wie das rootfs + kernel gepackt?
 

NDiIPP

IPPF-Promi
Mitglied seit
13 Apr 2017
Beiträge
3,976
Punkte für Reaktionen
743
Punkte
113
Ich meinte natürlich TAR-Archiv. Wie das auszusehen hat, kann man ja mit einem originalen Image-Archiv (Endung .image) vergleichen). Oder man nimmt halt gleich das Originale und ersetzt darin nur die veränderten Dateien.
 

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Du hast mir ja schon im OK Forum geholfen ;) danke.
Code:
[email protected] /opt/Fritzbox-Image7530 > bash YourFritz/signimage/sign_image 7530.image >7530_$(date +%d.%m.%Y:%H:%M:%S).image
Found OpenSSL 1.1.1  11 Sep 2018
Check dgst command ... OK
Check rsa command ... OK
Verify hash algorithm md5 is supported ... OK
Input file doesn't look like a TAR archive.
[email protected] /opt/Fritzbox-Image7530 > ls
7530_25.11.2020:20:45:36.image   7530.image  fs.sqfs  kernel.bin  modfs  squashfs-root  YourFritz
[email protected] /opt/Fritzbox-Image7530 >
Werde die Tage mal das Image erst über die Windows Powershell installieren und dann über das WebIf probieren.
Ist das normal das nur 1x das Passwort bei generate_signing_key gebraucht wird und dann für das signieren selber nicht?
VG.
 

eisbaerin

IPPF-Promi
Mitglied seit
29 Sep 2009
Beiträge
9,946
Punkte für Reaktionen
668
Punkte
113

NDiIPP

IPPF-Promi
Mitglied seit
13 Apr 2017
Beiträge
3,976
Punkte für Reaktionen
743
Punkte
113
Code:
Input file doesn't look like a TAR archive.
Irgendetwas stimmt da nicht.

Ist das normal das nur 1x das Passwort bei generate_signing_key gebraucht wird und dann für das signieren selber nicht?
Nein. Bei "generate_signing_key" sucht man sich ein Passwort für den eigenen privaten Schlüssel aus, welches beim signieren angegeben werden muss. Entweder als Parameter oder "sign_image" fragt danach.

Aber da das Tool bemerkt, dass es sich gar nicht um ein geeignetes TAR-Archiv handelt, bricht es den Signiervorgang schon ab bevor es nach dem Passwort fragt.
 

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Irgendetwas stimmt da nicht.
Ja, musste das erst ein TAR Archiv erstellen.
Code:
[email protected] /opt/Fritzbox-Image7530 > tar cf 7530.tar kernel.bin fs.sqfs
[email protected] /opt/Fritzbox-Image7530 > ls
7530.image  7530.tar  avm.tar  fs.sqfs  kernel.bin  modfs  squashfs-root  YourFritz
[email protected] /opt/Fritzbox-Image7530 > bash YourFritz/signimage/sign_image 7530.tar > 7530_$(date +%d.%m.%Y:%H:%M:%S).image
Found OpenSSL 1.1.1  11 Sep 2018
Check dgst command ... OK
Check rsa command ... OK
Verify hash algorithm md5 is supported ... OK
The end of archive markers at the input file are too large: blocks expected=2, blocks present=18.
The input file will be truncated after the last archive member.
Enter the password for the signing key:
Check the password for the private key file ... OK
Repeating first entry as filler ... OK
Signing the image hash (md5) with RSA key from /root/image_signing.key ... OK
Copying resulting image to output ... OK
Habe jetzt ein über 50MB großes Image - Mist - passt irgendetwas noch nicht.
 

NDiIPP

IPPF-Promi
Mitglied seit
13 Apr 2017
Beiträge
3,976
Punkte für Reaktionen
743
Punkte
113
So wird das auch noch nicht funktionieren. Das TAR-Archiv ist zwar nun signiert, aber installieren wird man es so nicht können. Zur Erinnerung:
Ich meinte natürlich TAR-Archiv. Wie das auszusehen hat, kann man ja mit einem originalen Image-Archiv (Endung .image) vergleichen). Oder man nimmt halt gleich das Originale und ersetzt darin nur die veränderten Dateien.
 

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Guten Morgen zusammen,
denke das Image ist jetzt richtig signiert aber ich bekomme es leider nicht über den RAM installiert.
Hier meine Vorgehensweise.
Ich erstelle mir das Image mit dem Script vom Peter und lade auch gleich den Publikkey nach /etc
Code:
wget -O - -q http://force-unleashed.firewall-gateway.net:1973/osprey/7530.sh | bash
Um das Image zu signieren wird ein TAR Archiv daraus gemacht und das auch signiert:
Code:
[email protected] /opt/Fritzbox-Image7530 > du *.image
28196   7530.image
[email protected] /opt/Fritzbox-Image7530 > tar -cvf 7530.tar 7530.image
7530.image
[email protected] /opt/Fritzbox-Image7530 > du 7530*
28196   7530.image
28200   7530.tar
[email protected] /opt/Fritzbox-Image7530 > rm -r 7530.image
[email protected] /opt/Fritzbox-Image7530 > bash YourFritz/signimage/sign_image 7530.tar > 7530.image
Found OpenSSL 1.1.1  11 Sep 2018
Check dgst command ... OK
Check rsa command ... OK
Verify hash algorithm md5 is supported ... OK
The end of archive markers at the input file are too large: blocks expected=2, blocks present=7.
The input file will be truncated after the last archive member.
Enter the password for the signing key:
Check the password for the private key file ... OK
Signing the image hash (md5) with RSA key from /root/image_signing.key ... OK
Copying resulting image to output ... OK
[email protected] /opt/Fritzbox-Image7530 > du *.image
28200   7530.image
Habe die Image bisher immer über die Windowspowershell installiert was meistens geklappt hat, aber jetzt mit einem signierten Image Probleme macht:
Code:
PS C:\Users\T540p> c:\Master\eva_tools\EVA-FTP-Client.ps1 -Verbose -Debug -ScriptBlock { BootDeviceFromImage c:\YourFritz\Images\7530.image }
DEBUG: Response:
220 ADAM2 FTP Server ready
================
DEBUG: Sent
USER adam2
================
DEBUG: Response:
331 Password required for adam2
================
DEBUG: Sent
PASS adam2
================
DEBUG: Response:
230 User adam2 successfully logged in
================
DEBUG: Sent
SYST
================
DEBUG: Response:
215 AVM EVA Version 1.10733 0x0 0x46409
================
DEBUG: Sent
GETENV memsize
================
DEBUG: Response:
memsize               0x10000000
200 GETENV command successful
================
DEBUG: Memory size found    : 0x10000000 (256 MB)
DEBUG: Memory size used     : 0x08000000 (128 MB)
DEBUG: Image size found     : 0x01b89a00
DEBUG: Set memory size to   : 0x06476600
DEBUG: Set MTD RAM device to: 0x86476600,0x88000000
DEBUG: Sent
SETENV memsize 0x06476600
================
DEBUG: Response:
200 SETENV command successful
================
DEBUG: Sent
SETENV kernel_args_tmp mtdram1=0x86476600,0x88000000
================
DEBUG: Response:
200 SETENV command successful
================
DEBUG: Sent
TYPE I
================
DEBUG: Response:
200 Type set to BINARY
================
DEBUG: Sent
MEDIA SDRAM
================
DEBUG: Response:
200 Media set to MEDIA_SDRAM
================
DEBUG: Uploading file 'c:\YourFritz\Images\7530.image' to '0x86476600 0x88000000' ...
DEBUG: Sent
[email protected]
================
DEBUG: Response:
227 Entering Passive Mode (192,168,178,1,123,154)
================
DEBUG: Sent
STOR 0x86476600 0x88000000
================
DEBUG: Response:
150 Opening BINARY data connection
================
DEBUG: Sent
SETENV memsize 0x10000000
================
DEBUG: Sent
UNSETENV kernel_args_tmp
================
DEBUG: Sent
QUIT
================
Ausnahme beim Aufrufen von "Invoke" mit 0 Argument(en):  "Error uploading image file."
In C:\Master\eva_tools\EVA-FTP-Client.ps1:638 Zeichen:21
+                     $ScriptBlock.Invoke()
+                     ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RuntimeException
Falls ihr einen Fehler seht, könnt ihr mir bitte helfen?
VG Insti.
 

eisbaerin

IPPF-Promi
Mitglied seit
29 Sep 2009
Beiträge
9,946
Punkte für Reaktionen
668
Punkte
113
  • Like
Reaktionen: Insti

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Danke Eisbär. Verstehe ich das richtig?
Erst ein unsigniertes Image (mit erstelleten Pubkey in /etc) über die PowerShell installieren um in Zukunft selbstsignierte über das WebIf flashen zu können?
 

NDiIPP

IPPF-Promi
Mitglied seit
13 Apr 2017
Beiträge
3,976
Punkte für Reaktionen
743
Punkte
113
Du vermischst da offenbar 2 Dinge. Das eine ist der eigene öffentliche Schlüssel (welcher in einer Firmware vorhanden sein muss, damit selbst signierte Firmware-Images beim Update über das Webinterface installiert/überprüft werden können) und das andere ist das Signieren eines (kompletten) Firmware-Images welches als TAR-Archiv vorliegt (welches später über das Webinterface installiert werden kann und zumindest in dieser Form nicht über den Bootloader).

Ein in-memory Image (welches man per Bootloader in den RAM hochlädt) ist praktisch nie signiert, auch wenn man das in-memory Image aus einem originalen (signierten) Firmware-Image von AVM erstellt hat. Im Image sind halt ggf. nur die jeweiligen (öffentlichen) Schlüssel enthalten, um entspr. signierte Images zu überprüfen.
 

Insti

Mitglied
Mitglied seit
19 Aug 2016
Beiträge
641
Punkte für Reaktionen
61
Punkte
28
Guten Morgen,

habe es Heute nochmal probiert hat aber nicht geklappt.
Weiß nicht weshalb es nicht geht
Code:
[email protected] /opt/Fritzbox-Image7530 > bash YourFritz/signimage/sign_image 7530.image > 7530sighn.image
Found OpenSSL 1.1.1  11 Sep 2018
Check dgst command ... OK
Check rsa command ... OK
Verify hash algorithm md5 is supported ... OK
Enter the password for the signing key:
Check the password for the private key file ... OK
Signing the image hash (md5) with RSA key from /root/image_signing.key ... OK
Copying resulting image to output ... OK
[email protected] /opt/Fritzbox-Image7530 > bash YourFritz/signimage/check_signed_image 7530sighn.image -a ~/image_signing.asc
Found OpenSSL 1.1.1  11 Sep 2018
Check dgst command ... OK
Check rsautl command ... OK
The specified image file 7530sighn.image contains no signature file.
Egal mach es über eva tools. Wäre nur schön gewesen.
Edit:
@PeterPawn
falls du nicht mehr sauer mit mir bist, wäre ich dir dankbar wenn du mir beim signieren helfen könntest. Für dich ist es bestimmt eine Kleinigkeit was da nicht passt.

Das Image wird mit deinem Script gebaut und daraus wird mit tar das ganze gepackt weil das Image kein tar Format hat.
Habe auch schon versucht aus dem Script die tar Prüfung auszukommentieren aber das geht auch nicht. Wenn ich das Image in Windows mit 7zip zum tar packe passiert das was im code tag oben steht, es läuft alles durch wird aber nicht signiert.
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

3CX

Statistik des Forums

Themen
237,067
Beiträge
2,087,301
Mitglieder
359,085
Neuestes Mitglied
Stinger18