Vraag:
Firmware-analyse en bestandssysteemextractie?
Moustache
2013-08-28 19:14:32 UTC
view on stackexchange narkive permalink

Ik probeer het firmwarebeeld van een NAS-apparaat te analyseren.

Ik heb verschillende tools gebruikt om de analyse te helpen (binwalk, deezee, signsrch, firmware-mod-kit die binwalk AFAIK gebruikt), maar ze zijn tot nu toe allemaal niet succesvol geweest.

Binwalk lijkt bijvoorbeeld vals-positief te genereren met betrekking tot met gzip gecomprimeerde gegevens en de experimentele microcode van Cisco IOS.

  Scantijd: 2013- 08-27 14:52:15 Handtekeningen: 196 Doelbestand: firmware.imgMD5 Checksum: 4d34d45db310bf599b62370f92d0a425 BESCHRIJVING DECIMALE HEX ------------------------------ -------------------------------------------------- ----------------------------------- 80558935 0x4CD3B57 gzip gecomprimeerde gegevens, ASCII, heeft CRC, laatst gewijzigd: vr 4 oktober 17:37:33 201982433954 0x4E9D7A2 Cisco IOS experimentele microcode145038048 0x8A51AE0 gzip gecomprimeerde gegevens, ASCII, extra veld, laatst gewijzigd: ma 26 mei 20:11:40 2014 

Bij het decomprimeren de gegevens die ik heb t e volgende fout bij het gebruik van gunzip / gzip

  gzip: 4CD3B57.gz is een meerdelig gzip-bestand - niet ondersteund  

Volgens gzip FAQ ( http://www.gzip.org/#faq2) dit komt door een overdracht die niet in binaire modus is uitgevoerd, waardoor de gzip-header is beschadigd.

Het lijkt meer op een false positief van binwalk voor mij, vooral omdat het magische getal dat wordt gebruikt om gzip-gegevens te identificeren gemakkelijk vals-positief kan activeren en de datums verkeerd zijn.

Ik heb ook strings en hexdump-opdracht uitgevoerd om een ​​idee te hebben van de inhoud van het bestand en probeer een bekend patroon te identificeren, maar het hielp tot nu toe niet veel (ik heb hier waarschijnlijk geen ervaring met dat soort dingen).

De enige niet-wartaal / identificeerbare strings bevinden zich aan het einde van de firmware-image.

  00000000 f5 7b 47 03 d5 08 bf 64 ba e9 99 d8 48 cf 81 18 |. {G .... d .... H ... | 00000010 b1 69 1e 2c c2 f3 46 6b 53 2b b7 63 e8 ce 78 c9 | .i., .. FkS + .c..x. |
00000020 87 fd b8 68 41 4d b2 61 71 cb cc 75 eb 8c e0 75 | ... hAM.aq..u ... u | 00000030 25 d1 ec bd 6d 46 e8 16 37 c6 f5 2e 2a e0 dc 07 | % ... mF..7 ... * ... | 00000040 65 b1 ce 7f 20 57 7c d7 cb 1d 91 fc 05 25 ad af | e ... W | ......% .. | 00000050 58 56 ff 13 4d 03 95 7f ad 58 0e 84 85 2f 73 5c | XV..M .... X ... / s \ | 00000060 d9 19 d4 d4 2c 27 be c6 45 f2 9f a4 b1 e1 04 f1 | ...., '.. E ....... | 00000070 c1 28 17 9c e1 f7 9d 2b 63 c3 7d e1 95 56 06 05 |. (..... + c.} .. V .. | [...] 09ec9d60 4b 29 75 20 46 6e fb e3 0f 14 d4 93 54 8e 4f bb | K) u Fn ...... TO | 09ec9d70 4b ab 91 bf e7 8a b9 4e c8 ff 87 17 93 19 e9 3f | K ...... N .......? | 09ec9d80 70 fe a6 9f d3 36 48 83 34 48 83 34 48 83 34 48 | p .... 6H.4H .4H.4H | 09ec9d90 83 34 48 83 34 48 83 34 48 83 34 48 83 34 48 83 | .4H.4H.4H.4H.4H. | 09ec9da0 34 48 83 34 48 83 34 48 83 34 48 83 34 48 83 34 | 4H.4H.4H.4H.4H.4 | 09ec9db0 48 83 34 48 83 34 48 83 34 48 83 34 48 83 24 a7 | H.4H.4H.4H.4H. $. | 09ec9dc0 ff 07 e9 0d 37 73 00 20 08 0a 69 63 70 6e 61 73 | .... 7s. ..icpnas | 09ec9dd0 00 00 10 00 54 53 2d 35 36 39 00 00 00 00 00 00 | .... TS-569 ...... | 09ec9de0 00 00 00 00 33 2e 38 2e 33 00 00 00 00 00 00 00 | .... 3.8.3 ....... | 09ec9df0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ............. ... | * 09ec9e14  

Het is de eerste keer dat ik dat soort oefeningen doe en ik weet niet zeker wat ik nu moet doen. Het beeld lijkt op de een of andere manier versluierd (dat kan een verkeerde veronderstelling zijn).

Heb je suggesties / trucs die me kunnen helpen om enige vooruitgang te boeken?

Vier antwoorden:
David
2013-08-31 05:09:45 UTC
view on stackexchange narkive permalink

Ik heb de firmware voor een ander type ingebed apparaat al een tijdje ontleed en dacht dat ik zou kijken of ik iets zou kunnen vinden. Na een paar uur kwam ik erachter! Er is een moeilijke manier en een gemakkelijke manier die ik pas vond nadat ik op de harde manier had gegraven. Dit is een lang bericht, maar ik hoop dat het anderen in vergelijkbare ondernemingen zal helpen.

Een beetje Googelen en ik vond http://wiki.qnap.com/wiki/Firmware_Recovery met een beschrijving van de volledige methoden voor het herstellen van de firmware en een andere pagina op dezelfde wiki voor "Handmatig bijwerken van firmware" met voorbeelden van opdrachtregels. Een paar dingen vielen op ...

  • Het NAS OS heeft een script voor het verwerken van een firmware-update-image:

      # / etc / init .d / update.sh /mnt/HDA_ROOT/update/TS-209_2.1.2_build1031.img
  • Er is een checksum ingebed in het binaire bestand en DAN daar is deze regel in de uitvoer:

      "Met 120-bits codering - (QNAPNASVERSION4)"  

Ik ging ten onder 2 paden: de moeilijke manier, en de zeer gemakkelijke manier ...

The Hard Way (maar met handige tips)

Ik heb de TS-569 volledige systeemherstelimage gedownload van de Firmware Recovery-pagina die bijna 2 uur duurde voor 500 MB. Nu moest ik uitzoeken waar ik mee werkte:

  # file F_TS-569_20120628-1.2.2.imgF_TS-569_20120628-1.2.2.img: x86 opstartsector; GRand Unified Bootloader, ...  

Een volledige schijfkopie die er als volgt uitziet:

  $ fdisk -l F_TS-569_20120628-1.2.2.img Apparaat Start Start Eindblokken Id SystemF_TS-569_20120628-1.2.2.img1 32 4351 2160 83 LinuxF_TS-569_20120628-1.2.2.img2 * 4352 488959 242304 83 LinuxF_TS-569_20120628-1.2.2.img3 488960 9735_67 242304 83 LinuxF_TS-67 242304 83- 1.2.2.img4 973568 1007615 17024 5 ExtendedF_TS-569_20120628-1.2.2.img5 973600 990207 8304 83 Linux
F_TS-569_20120628-1.2.2.img6 990240 1007615 8688 83 Linux  

Scheid de partities (of je zou de afbeelding naar een reserveschijf kunnen schrijven):

  # dd if = F_TS-569_20120628-1.2.2.img bs = 512 of = part1 skip = 32 count = 2160w # dd if = F_TS-569_20120628-1.2.2.img bs = 512 of = part2 skip = 4352 count = 242304w # dd if = F_TS-569_20120628-1.2.2.img bs = 512 of = part3 skip = 488960 count = 242304w # dd if = F_TS-569_20120628-1.2.2.img bs = 512 of = part5 skip = 973600 count = 8304w # dd if = F_TS-569_20120628-1.2.2.img bs = 512 of = part6 skip = 990240 count = 8688w ... wat -rw-r - r-- 1 root root 2211840 2013-08-30 15:41 part1-rw-r - r-- 1 root root 248119296 2013-08-30 15:42 part2-rw-r - r-- 1 root root 248119296 2013-08-30 15:42 part3-rw -r - r-- 1 root root 8503296 2013-08-30 15:42 part5-rw-r - r-- 1 root root 8896512 2013-08-30 15:42 part6  

Partitie 3 is een spiegel van partitie 2, geverifieerd via md5sum. Partities 5 en 6 zijn leeg, waarschijnlijk vanwege krasruimte. Partitie 1 is / boot / grub en bevat modules en dergelijke voor het opstarten en hardwareconfiguratie. Laten we dus kijken naar partitie 2, de opstartpartitie.

  # mkdir / mnt / ts2 # mount -r part2 / mnt / ts2 -o loop # ls -la / mnt / ts2 / boot- rw-r - r-- 1 root root 3982976 27-06-2012 22:17 bzImage-rw-r - r-- 1 root root 81 2012-06-27 22:17 bzImage.cksum-rw-r- -r-- 1 root root 8890727 2012-06-27 22:17 initrd.boot-rw-r - r-- 1 root root 85 2012-06-27 22:17 initrd.boot.cksum-rw-r- -r-- 1 root root 73175040 2012-06-27 22:17 qpkg.tar-rw-r - r-- 1 root root 83 2012-06-27 22:17 qpkg.tar.cksum-rw-r- -r-- 1 root root 33593992 2012-06-27 22:17 rootfs2.bz-rw-r - r-- 1 root root 85 2012-06-27 22:17 rootfs2.bz.cksum-rw-r- -r-- 1 root root 31160679 2012-06-27 22:17 rootfs_ext.tgz-rw-r - r-- 1 root root 87 2012-06-27 22:17 rootfs_ext.tgz.cksum # bestand -z / mnt / ts2 / boot / initrd.boot
/mnt/ts2/boot/initrd.boot: Linux rev 1.0 ext2 bestandssysteemgegevens, UUID = 770ce31c-d03f-484e-81e8-6911340bdcbf (gzip gecomprimeerde gegevens, van Unix, laatst gewijzigd: wo 27 juni 22:16:58 2012, max compressie)  
  • bzImage is de gecomprimeerde kernelimage
  • initrd is het initiële ramdisk rootbestandssysteem dat het besturingssysteem laat draaien
  • qpkg .tar bevat verschillende softwarepakketten voor de NAS
  • rootfs2.bz is een gecomprimeerde tarball van enkele / home-, / lib- en / usr-bestanden
  • rootfs_ext.tgz is een gecomprimeerde tarball van een ander ext2-bestandssysteem van / opt / source voor apache, php5, mysql en wat een back-up lijkt te zijn van de NVRAM-instellingen.

Alle magie zit in het initrd-bestandssysteemimage. Als we daarin turen, krijgen we:

  # gunzip -c /mnt/ts2/boot/initrd.boot > / tmp / initrd.boot.img # mkdir / mnt / tsinitrd # mount -r / tmp / initrd.boot.img / mnt / tsinitrd -o loop # ls -la / mnt / tsinitrddrwxr-xr-x 2 root root 2048 2012-06-27 22:05 bindrwxr-xr-x 5 root root 13312 2012-06 -27 22:11 devdrwxr-xr-x 22 root root 2048 2012-06-27 22:15 etcdrwxr-xr-x 3 root root 3072 2012-06-27 22:05 libdrwxr-xr-x 2 root root 1024 2010- 11-03 04:53 lib64lrwxrwxrwx 1 root root 11 2012-06-27 22:16 linuxrc -> bin / busyboxdrwx ------ 2 root root 12288 2012-06-27 22:16 verloren + gevondendrwxr-xr-x 4 root root 1024 2012-06-27 22:04 mntdrwxr-sr-x 2 root root 1024 2012-06-27 22:16 optlrwxrwxrwx 1 root root 19 2012-06-27 22:16 php.ini -> / etc / config / php.inidrwxr-sr-x 2 root root 1024 1999-11-02 18:54 proclrwxrwxrwx 1 root root 18 2012-06-27 22:16 Qmultimedia -> / share / Qmultimediadrwxr-xr-x 3 root root 1024 2007 -07-18 05:24 rootdrwxr-xr-x 2 root root 5120 2012-06-27 22:15 sbindrwxrwxr-x 29 root root 1024 2006-02-28 00:57 sharedrwxrwxrwx 4 root root 1024 2006-02-28 00:57 tmpdrwxrwxrwx 8 root root 1024 2012-06-27 22:15 var  

Herinner je je de 2 dingen die opvielen op de pagina Firmwareherstel? Het updatescript en de versleutelingsreferentie:

  # more /mnt/tsinitrd/etc/init.d/update.sh ...... regel 223 / sbin / PC1 d QNAPNASVERSION4 $ path_name $ {_ tgz}; ...  

Er is een verwijzing naar wat de coderingssleutel lijkt te zijn en misschien de decrypter! Aangezien dit NAS-firmwarebeeld gebaseerd is op x86, zit ik in een x86 VM, kan het net zo goed proberen:

  # / mnt / tsinitrd / sbin / PC1 Gebruik: pc1 e | d "key" bronbestand <targetfile> waar: e - versleutelen, d - ontsleutelen & "sleutel" is de coderingssleutel. De lengte van de sleutel bepaalt de sterkte van de codering. Als er geen doelbestand is, is de naam van het uitvoerbestand gelijk aan de naam van het bronbestand: 5 tekens is 40-bits codering.  

En tot slot:

  # / mnt / tsinitrd / sbin / PC1 d QNAPNASVERSION4 TS-569_20130726-4.0.2.img TS-569_20130726-4.0.2.tgz 120-bits codering gebruiken - (QNAPNASVERSION4) len = 1048576 modelnaam = TS-569version = 4.0.2 # tar -tvf TS-569_20130726-4.0.2.tgz -rw-r - r-- root / root 106 2013-0 7-25 20:49 bios_layoutdrwxr-xr-x root / root 0 2013-07-25 20:49 boot / -rw-r - r-- root / root 4557984 2013-07-25 20:49 bzImage-rw- r - r-- root / root 69 2013-07-25 20:49 bzImage.cksumdrwxr-xr-x root / root 0 2013-07-25 20:49 config / -rwxr-xr-x root / root 48408 2013 -07-25 20:49 dmidecode-rwxr-xr-x root / root 356714 2013-07-25 20:49 flashrom-rw-r - r-- root / root 2097152 2013-07-25 20:49 flashrom. img-rw-r - r-- root / root 33 2013-07-25 20:49 fw_info-rw-r - r-- root / root 8480290 2013-07-25 20:49 initrd.boot-rw- r - r-- root / root 73 2013-07-25 20:49 initrd.boot.cksum-rwxr-xr-x root / root 1606508 2013-07-25 20:49 libcrypto.so.1.0.0-rwxr -xr-x root / root 372708 2013-07-25 20:49 libssl.so.1.0.0-rw-r - r-- root / root 81090560 2013-07-25 20:49 qpkg.tar-rw- r - r-- root / root 72 2013-07-25 20:49 qpkg.tar.cksum-rw-r - r-- root / root 41185897 2013-07-25 20:49 rootfs2.bz
-rw-r - r-- root / root 74 2013-07-25 20:49 rootfs2.bz.cksum-rw-r - r-- root / root 47500086 2013-07-25 20:49 rootfs_ext.tgz -rw-r - r-- root / root 78 2013-07-25 20:49 rootfs_ext.tgz.cksumdrwxr-xr-x root / root 0 2013-07-25 20:49 update / -rw-r-- r-- root / root 105 2013-07-25 20:49 update_bios.conf-rwxr-xr-x root / root 3188 2013-07-25 20:49 update_bios.sh-rwxr-xr-x root / root 6088 2013 -07-25 20:49 update_check-rwxr-xr-x root / root 22041 2013-07-25 20:49 update_img.sh  

Dit alles om naar een uitvoerbaar bestand te gaan dat decodeert de firmware-afbeelding voor ons, een script dat ons de decoderingssleutel in platte tekst geeft, en een manier om alles weer samen te verpakken als we iets wilden wijzigen.

... en nu voor iets heel anders

De zeer gemakkelijke manier

Toen ik eenmaal aan het einde van de "moeilijke weg" kwam, besloot ik om te googelen voor de coderingssleutel "QNAPNASVERSION4". Het eerste resultaat was voor het PC1 enc / dec-algoritme in C dat iemand al zo vriendelijk heeft aangepast om de specifieke firmwareformaten voor ons af te handelen: http://www.r00ted.com/downloads/pc1.c

Update: link is als gebroken gemeld, hier is een dump: http://pastebin.com/KHbX85nG

  # gcc -o pc1 pc1.c # pc1 d QNAPNASVERSION4 TS-569_20130726-4.0.2.img TS-569_20130726-4.0.2.tgz # tar -tvf TS-569_20130726-4.0.2.tgz-rw-r-- r-- root / root 106 2013-07-25 20:49 bios_layoutdrwxr-xr-x root / root 0 2013-07-25 20:49 boot / -rw-r - r-- root / root 4557984 2013-07 -25 20:49 bzImage ... hetzelfde resultaat als op de moeilijke manier  

Nu heb je een hulpprogramma dat je firmwarebestand ontsleutelt vanuit het comfort van je eigen besturingssysteem zonder fysieke toegang tot het NAS.

Geweldige werkmaat, ik had meer tijd op de leverancierspagina moeten doorbrengen. Bedankt
De pc1.c-link is verbroken.
Ik heb het bericht bijgewerkt met een pastebin-link naar de broncode.
Igor Skochinsky
2013-08-28 21:54:53 UTC
view on stackexchange narkive permalink

Het bestand ziet er inderdaad versleuteld of versluierd uit. Het is misschien mogelijk om erachter te komen met behulp van wat cryptoanalyse (die 34 48 83 reeks aan het einde ziet er niet willekeurig uit), maar het is waarschijnlijk beter om UART- of JTAG-pinnen te vinden, of misschien een actieve telnet-server of een andere service die u een weg kan geven.

BEWERK : op de downloadpagina voor de NAS zijn er kleinere downloads genaamd "Qfix". Het lijken eenvoudige, zichzelf uitpakkende shellscript + tar.gz-gegevens te zijn. Ik raad je aan om je eigen .qfix te maken met een shell-script dat bestanden van het apparaat kopieert in plaats van normaal.

Er is echter de bestandsvoettekst die waarschijnlijk wordt gebruikt voor integriteitscontrole. Het nummer naast "SambaFix" ziet eruit als een checksum.

Het probleem is dat ik alleen werk vanaf een gedownloade afbeelding van de firmware zonder toegang tot het fysieke apparaat. Waarschijnlijk niet de gemakkelijkste manier om te leren. Ik ga naar die reeks 34 48 83 kijken en kijken of ik iets kan verzinnen. Elk advies is welkom.
Ik denk niet dat je deze oplost zonder fysieke toegang.
Ik ben het met Igor eens. Elke firmwareversie heeft dezelfde eerste vier bytes (waarschijnlijk magische handtekening) en aan het einde enkele model- / versiereeksen. Anders zijn ze totaal verschillend. Er zijn veel verschillende reeksen van herhalende bytes in de firmware, die waarschijnlijk niet zouden voorkomen bij compressie, zodat versleuteling / verduistering achterblijft. FWIW, entropie lijkt te hoog voor XOR-codering, maar te laag voor sterke crypto zoals AES CBC en dergelijke.
Waarschijnlijk een beetje te geavanceerd om op te lossen, maar niettemin echt bruikbare antwoorden. Ik zal de thread updaten als ik iets vind dat het waard is om te delen.
jumpjack
2014-02-09 19:34:27 UTC
view on stackexchange narkive permalink

Ik heb een aantal tools gevonden om met firmwares te spelen, maar geen ervan is nuttig om te "spelen" met firmware die ik heb gedownload voor mijn mediaspeler, misschien is het nuttiger voor jou:

http://www.routertech.org/tools/firmware_tool-097b.zip

firmwaremod-kit: http://code.google.com/p/firmware- mod-kit / downloads / list

Ik wilde gewoon uitzoeken welke webpagina's op het apparaat zijn opgeslagen, dat kan werken als NAS, maar ik heb geen toegang tot Linux-boxen.

Philosopath
2015-02-20 05:45:04 UTC
view on stackexchange narkive permalink

Ik weet dat dit een oudere vraag is, maar ik wil alleen wat bijgewerkte informatie toevoegen aan de discussie voor toekomstige antwoordzoekers.

Ik experimenteer hier ook mee. Nieuwere versies van binwalk hebben een automatische extractiefunctie. Voer gewoon:

  binwalk -e ./firmwarefile.bin

Het zal de verschillende partities uitpakken en in aparte mappen opsplitsen. Dit is veel, veel gemakkelijker dan het gebruik van dd , waarbij als je de waarden verkeerd krijgt, squashfs / gzip / ... het alleen zal zien als beschadigd.

Pak ook een kopie van Kali of Backtrack linux (Backtrack kan nu worden afgeschreven. Ik denk dat Kali de voorkeur heeft) Ze hebben binwalk en firmware mod utils geïnstalleerd of in de apt pakketbeheerder repo voor eenvoudige installatie.

Wat betreft het opnieuw verpakken van firmware voor uploaden, ben ik zelf nog niet zo ver gekomen. Met de firmware die ik gebruik, extraheert binwalk ook het bestand met de handtekeningen. Dit bevat de MD5-gegevens voor het verifiëren van de firmware op het apparaat.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...