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

Insti

Aktives Mitglied
Mitglied seit
19 Aug 2016
Beiträge
902
Punkte für Reaktionen
109
Punkte
43
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.
 
Probiere es doch aus.
Wenn es klappt, dann hast du es richtig gemacht.
 
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.
 
Das macht man ja normalerweise auch nicht mit einer Produktivbox.
Du hast doch noch mindestens 3000 und 7560 und vielleicht noch anderes.
 
Zuletzt bearbeitet:
Ja, du hast recht. Danke.
 
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
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?
 
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.
 
Du hast mir ja schon im OK Forum geholfen ;) danke.
Code:
root@ubuntu /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.
root@ubuntu /opt/Fritzbox-Image7530 > ls
7530_25.11.2020:20:45:36.image   7530.image  fs.sqfs  kernel.bin  modfs  squashfs-root  YourFritz
root@ubuntu /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.
 
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.
 
Irgendetwas stimmt da nicht.

Ja, musste das erst ein TAR Archiv erstellen.
Code:
root@ubuntu /opt/Fritzbox-Image7530 > tar cf 7530.tar kernel.bin fs.sqfs
root@ubuntu /opt/Fritzbox-Image7530 > ls
7530.image  7530.tar  avm.tar  fs.sqfs  kernel.bin  modfs  squashfs-root  YourFritz
root@ubuntu /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.
 
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.
 
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:
root@ubuntu /opt/Fritzbox-Image7530 > du *.image
28196   7530.image
root@ubuntu /opt/Fritzbox-Image7530 > tar -cvf 7530.tar 7530.image
7530.image
root@ubuntu /opt/Fritzbox-Image7530 > du 7530*
28196   7530.image
28200   7530.tar
root@ubuntu /opt/Fritzbox-Image7530 > rm -r 7530.image
root@ubuntu /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
root@ubuntu /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
P@SW
================
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.
 
  • Like
Reaktionen: Insti
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?
 
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.
 
Guten Morgen,

habe es Heute nochmal probiert hat aber nicht geklappt.
Weiß nicht weshalb es nicht geht
Code:
root@ubuntu /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
root@ubuntu /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:

Neueste Beiträge

Statistik des Forums

Themen
244,695
Beiträge
2,216,691
Mitglieder
371,315
Neuestes Mitglied
jack-mack
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.