Firnware Images von SNOM sind verschlüsselt und signiert. Wer seine eigenen Updates auf das Telefon bringen möchte, muss das öffentliche Zertifikat am Telefon durch sein eigenes tauschen.
Das ganze funktioniert nur für jene Modelle für welche das Update vorgesehen wurde. Ihr könnt aber auch gerne testen, was passiert wenn man das Update vom D765 auf 760 spielt…
Über die serielle Schnittstelle auf der Rückseite erhält man ein Terminal. uBoot mit einem Tastendruck anhalten und folgendes eintippen.
setenv norm_bootargs 'mem=192M console=ttyS0,115200n8 root=/dev/mtdblock7 rw rootfstype=jffs2 noinitrd init=/bin/sh'
ODER wir aktivieren den Test-Modus mit
setenv development 'yes'
dabei wird der SSH Server gestartet. Der Bootvorgang dauert etwas, da die Zertifikate erstellt werden müssen.
Wir möchten das Zertifikat (firmware1.pub), sucht einfach am Telefon danach..
find / -name firmware1.pub
Wenn wir das haben, können wir die Update-Files schon entpacken….
#!/bin/bash imgFile="$1" updateFile="$1" sigFile="update.sig" pubFile="firmware-1.pub" keyFile="update.key"
dd if=$imgFile bs=128 count=1 > $sigFile dd if=$imgFile bs=128 skip=1 2>/dev/null | openssl dgst -sha1 -verify "$pubFile" -signature $sigFile
Jetzt holen wir uns den Key zum entschlüsseln
dd if=$imgFile bs=128 skip=1 count=1 2>/dev/null | openssl rsautl -verify -out $keyFile -inkey "$pubFile" -pubin
und entschlüsseln das Image mit
dd if=$updateFile bs=128 skip=2 | openssl enc -aes128 -d -kfile $keyFile >> image.tar.gz
Nun einfach entpacken und mal schauen was drin ist…
Wenn ihr möchtet, erstellt euer eigenes Schlüssel-Paar, ersetzt den firmware1.pub durch euren eigenen Schlüssel und euer SNOM nimmt nur noch Updates von euch an!
Image verpacken:
tar -czvf $imgFolder image
Das vorliegende tar.gz wird nun verschlüsselt
openssl aes256 -kfile $keyFile -in $imgFolder -out firmware
Jetzt signieren wir es mit unserem Privaten Key
openssl dgst -sha1 -sign private.pem -out sign.sha1 firmware
und erstellen anschliessend unser neues SNOM Image
dd if=sign.sha1 of=firmware-s1 bs=1 count=128 seek=1 dd if=firmware of=firmware-s1 bs=1024 seek=128
Fertig.