Firmware Analysis
Reading time: 14 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Utangulizi
Rasilimali zinazohusiana
Synology Encrypted Archive Decryption
Firmware ni programu muhimu inayowezesha vifaa kufanya kazi ipasavyo kwa kusimamia na kuwezesha mawasiliano kati ya vipengele vya vifaa na programu ambayo watumiaji wanashirikiana nayo. Inahifadhiwa katika kumbukumbu ya kudumu, kuhakikisha kwamba kifaa kinaweza kufikia maagizo muhimu tangu wakati kinapowashwa, na kusababisha uzinduzi wa mfumo wa uendeshaji. Kuchunguza na labda kubadilisha firmware ni hatua muhimu katika kubaini udhaifu wa usalama.
Kukusanya Taarifa
Kukusanya taarifa ni hatua ya awali muhimu katika kuelewa muundo wa kifaa na teknolojia zinazotumika. Mchakato huu unahusisha kukusanya data kuhusu:
- Mifumo ya CPU na mfumo wa uendeshaji unaotumika
- Maelezo ya bootloader
- Mpangilio wa vifaa na karatasi za data
- Vipimo vya msingi wa msimbo na maeneo ya chanzo
- Maktaba za nje na aina za leseni
- Historia za sasisho na vyeti vya udhibiti
- Mchoro wa usanifu na mtiririko
- Tathmini za usalama na udhaifu ulioainishwa
Kwa kusudi hili, zana za intelligence ya chanzo wazi (OSINT) ni muhimu, kama vile uchambuzi wa vipengele vyovyote vya programu za chanzo wazi vinavyopatikana kupitia mchakato wa ukaguzi wa mikono na wa kiotomatiki. Zana kama Coverity Scan na Semmleβs LGTM hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua matatizo yanayoweza kutokea.
Kupata Firmware
Kupata firmware kunaweza kufanywa kwa njia mbalimbali, kila moja ikiwa na ngazi yake ya ugumu:
- Moja kwa moja kutoka kwa chanzo (waendelezaji, watengenezaji)
- Kujenga kutoka kwa maelekezo yaliyotolewa
- Kupakua kutoka kwenye tovuti rasmi za msaada
- Kutumia Google dork maswali ya kutafuta faili za firmware zilizohifadhiwa
- Kufikia hifadhi ya wingu moja kwa moja, kwa kutumia zana kama S3Scanner
- Kukamata sasisho kupitia mbinu za mtu katikati
- Kutoa kutoka kwa kifaa kupitia muunganisho kama UART, JTAG, au PICit
- Kusikiliza maombi ya sasisho ndani ya mawasiliano ya kifaa
- Kutambua na kutumia nukta za sasisho zilizowekwa
- Kutoa kutoka kwa bootloader au mtandao
- Kuondoa na kusoma chip ya uhifadhi, wakati njia zote zinafeli, kwa kutumia zana sahihi za vifaa
Kuchambua firmware
Sasa kwamba una firmware, unahitaji kutoa taarifa kuhusu hiyo ili kujua jinsi ya kuitendea. Zana tofauti unazoweza kutumia kwa hiyo:
file <bin>
strings -n8 <bin>
strings -tx <bin> #print offsets in hex
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
Ikiwa hujapata mengi na zana hizo, angalia entropy ya picha kwa kutumia binwalk -E <bin>
, ikiwa entropy ni ya chini, basi haiwezekani kuwa imefungwa. Ikiwa entropy ni ya juu, inawezekana kuwa imefungwa (au imepandwa kwa njia fulani).
Zaidi ya hayo, unaweza kutumia zana hizi kutoa faili zilizojumuishwa ndani ya firmware:
File/Data Carving & Recovery Tools
Au binvis.io (code) kuchunguza faili hiyo.
Kupata Mfumo wa Faili
Kwa zana zilizotajwa hapo awali kama binwalk -ev <bin>
, unapaswa kuwa umeweza kutoa mfumo wa faili.
Binwalk kawaida hutoa ndani ya folda iliyopewa jina kama aina ya mfumo wa faili, ambayo mara nyingi ni mojawapo ya yafuatayo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Utoaji wa Mfumo wa Faili kwa Mikono
Wakati mwingine, binwalk haitakuwa na byte ya kichawi ya mfumo wa faili katika saini zake. Katika kesi hizi, tumia binwalk kupata offset ya mfumo wa faili na kuchonga mfumo wa faili uliofinywa kutoka kwa binary na kutoa kwa mikono mfumo wa faili kulingana na aina yake kwa kutumia hatua zilizo hapa chini.
$ binwalk DIR850L_REVB.bin
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------------------- ---
0 0x0 DLOB firmware header, boot partition: """"dev=/dev/mtdblock/1""""
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5213748 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
Kimbia amri ifuatayo ya dd ikichora mfumo wa faili wa Squashfs.
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536+0 records in
8257536+0 records out
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
Alternately, amri ifuatayo inaweza pia kutekelezwa.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
- Kwa squashfs (iliyotumika katika mfano hapo juu)
$ unsquashfs dir.squashfs
Faili zitakuwa katika "squashfs-root
" directory baada ya hapo.
- Faili za archive za CPIO
$ cpio -ivd --no-absolute-filenames -F <bin>
- Kwa mifumo ya faili ya jffs2
$ jefferson rootfsfile.jffs2
- Kwa mifumo ya faili ya ubifs yenye NAND flash
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Kuchambua Firmware
Mara firmware inapopatikana, ni muhimu kuichambua ili kuelewa muundo wake na uwezekano wa udhaifu. Mchakato huu unahusisha kutumia zana mbalimbali kuchambua na kutoa data muhimu kutoka kwa picha ya firmware.
Zana za Uchambuzi wa Awali
Seti ya amri imetolewa kwa ukaguzi wa awali wa faili ya binary (inayorejelewa kama <bin>
). Amri hizi husaidia katika kubaini aina za faili, kutoa nyuzi, kuchambua data ya binary, na kuelewa maelezo ya sehemu na mfumo wa faili:
file <bin>
strings -n8 <bin>
strings -tx <bin> #prints offsets in hexadecimal
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
Ili kutathmini hali ya usimbaji wa picha, entropy inakaguliwa kwa binwalk -E <bin>
. Entropy ya chini inaashiria ukosefu wa usimbaji, wakati entropy ya juu inaonyesha uwezekano wa usimbaji au ufinyanzi.
Kwa ajili ya kutoa faili zilizojumuishwa, zana na rasilimali kama vile file-data-carving-recovery-tools nyaraka na binvis.io kwa ajili ya ukaguzi wa faili zinapendekezwa.
Kutolewa kwa Faili za Mfumo
Kwa kutumia binwalk -ev <bin>
, mtu anaweza kawaida kutoa mfumo wa faili, mara nyingi katika saraka iliyopewa jina la aina ya mfumo wa faili (mfano, squashfs, ubifs). Hata hivyo, wakati binwalk inashindwa kutambua aina ya mfumo wa faili kutokana na kukosekana kwa byte za kichawi, utoaji wa mikono unahitajika. Hii inahusisha kutumia binwalk
kutafuta offset ya mfumo wa faili, ikifuatiwa na amri ya dd
ili kuchonga mfumo wa faili:
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
Baada ya hapo, kulingana na aina ya mfumo wa faili (kwa mfano, squashfs, cpio, jffs2, ubifs), amri tofauti hutumika kutoa maudhui kwa mikono.
Uchambuzi wa Mfumo wa Faili
Mara mfumo wa faili umepatikana, utafutaji wa kasoro za usalama huanza. Kipaumbele kinatolewa kwa daemons zisizo salama za mtandao, akidi za siri zilizowekwa kwa nguvu, mwisho wa API, kazi za seva za sasisho, msimbo usio na muundo, skripti za kuanzisha, na binaries zilizokusanywa kwa uchambuzi wa mbali.
Mikoa muhimu na vitu vya kukagua ni pamoja na:
- etc/shadow na etc/passwd kwa akidi za watumiaji
- Vyeti vya SSL na funguo katika etc/ssl
- Faili za usanidi na skripti kwa uwezekano wa udhaifu
- Binaries zilizojumuishwa kwa uchambuzi zaidi
- Seva za wavuti za vifaa vya IoT na binaries
Zana kadhaa husaidia katika kufichua taarifa nyeti na udhaifu ndani ya mfumo wa faili:
- LinPEAS na Firmwalker kwa utafutaji wa taarifa nyeti
- The Firmware Analysis and Comparison Tool (FACT) kwa uchambuzi wa kina wa firmware
- FwAnalyzer, ByteSweep, ByteSweep-go, na EMBA kwa uchambuzi wa statiki na wa dinamik
Ukaguzi wa Usalama kwenye Binaries Zilizokusanywa
Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili zinapaswa kuchunguzwa kwa udhaifu. Zana kama checksec.sh kwa binaries za Unix na PESecurity kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumiwa.
Kuiga Firmware kwa Uchambuzi wa Dinamik
Mchakato wa kuiga firmware unaruhusu uchambuzi wa dinamik ama wa uendeshaji wa kifaa au programu binafsi. Njia hii inaweza kukutana na changamoto za utegemezi wa vifaa au usanifu, lakini kuhamasisha mfumo wa faili wa mzizi au binaries maalum kwa kifaa chenye usanifu na endianness inayolingana, kama Raspberry Pi, au kwa mashine halisi iliyojengwa mapema, kunaweza kuwezesha majaribio zaidi.
Kuiga Binaries Binafsi
Kwa kuchunguza programu moja, kubaini endianness ya programu na usanifu wa CPU ni muhimu.
Mfano na Usanifu wa MIPS
Ili kuiga binary ya usanifu wa MIPS, mtu anaweza kutumia amri:
file ./squashfs-root/bin/busybox
Na ili kufunga zana za emulation zinazohitajika:
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
Kwa MIPS (big-endian), qemu-mips
inatumika, na kwa binaries za little-endian, qemu-mipsel
itakuwa chaguo.
Uigaji wa Muktadha wa ARM
Kwa binaries za ARM, mchakato ni sawa, na emulator qemu-arm
inatumika kwa uigaji.
Uigaji wa Mfumo Kamili
Zana kama Firmadyne, Firmware Analysis Toolkit, na zingine, zinawezesha uigaji kamili wa firmware, zikifanya mchakato kuwa wa kiotomatiki na kusaidia katika uchambuzi wa dynamic.
Uchambuzi wa Dynamic katika Vitendo
Katika hatua hii, mazingira halisi au ya uigaji ya kifaa hutumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na filesystem. Uigaji huenda usifanane kikamilifu na mwingiliano wa vifaa, hivyo inahitajika mara kwa mara kuanzisha upya uigaji. Uchambuzi unapaswa kutembelea filesystem, kutumia kurasa za wavuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Majaribio ya uadilifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo.
Mbinu za Uchambuzi wa Wakati wa Uendeshaji
Uchambuzi wa wakati wa uendeshaji unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kwa kuweka breakpoints na kubaini udhaifu kupitia fuzzing na mbinu nyingine.
Ukatili wa Binary na Ushahidi wa Dhihirisho
Kuendeleza PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa wakati wa uendeshaji wa binary katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu.
Mifumo ya Uendeshaji Iliyoandaliwa kwa Uchambuzi wa Firmware
Mifumo ya uendeshaji kama AttifyOS na EmbedOS hutoa mazingira yaliyoandaliwa mapema kwa ajili ya mtihani wa usalama wa firmware, yakiwa na zana muhimu.
Mifumo ya Uendeshaji Iliyoandaliwa Kuchambua Firmware
- AttifyOS: AttifyOS ni distro inayokusudia kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa mapema na zana zote muhimu zilizopakiwa.
- EmbedOS: Mfumo wa uendeshaji wa mtihani wa usalama wa embedded unaotegemea Ubuntu 18.04 uliojaa zana za mtihani wa usalama wa firmware.
Mashambulizi ya Kupunguza Firmware na Mechanisms za Sasisho zisizo Salama
Hata wakati muuzaji anatekeleza ukaguzi wa saini za cryptographic kwa picha za firmware, ulinzi wa kurudi nyuma (kupunguza) toleo mara nyingi huachwa. Wakati boot- au recovery-loader inathibitisha tu saini na funguo za umma zilizojumuishwa lakini hailinganishe toleo (au counter monotonic) ya picha inayowekwa, mshambuliaji anaweza halali kufunga firmware ya zamani, yenye udhaifu ambayo bado ina saini halali na hivyo kuanzisha tena udhaifu uliofanyiwa marekebisho.
Mchakato wa shambulizi wa kawaida:
- Pata picha ya zamani iliyosainiwa
- Iteue kutoka kwenye portal ya kupakua ya umma ya muuzaji, CDN au tovuti ya msaada.
- Iondoe kutoka kwa programu za simu/kompyuta za mezani (kwa mfano ndani ya APK ya Android chini ya
assets/firmware/
). - Irejeshe kutoka kwa hifadhi za wahusika wengine kama VirusTotal, archives za mtandao, forums, nk.
- Pakia au tolea picha hiyo kwa kifaa kupitia njia yoyote ya sasisho iliyofichuliwa:
- Web UI, API ya programu ya simu, USB, TFTP, MQTT, nk.
- Vifaa vingi vya IoT vya watumiaji vinatoa mipangilio isiyoidhinishwa ya HTTP(S) ambayo inakubali blobs za firmware zilizopakiwa kwa Base64, kuzifungua upande wa seva na kuanzisha urejeleaji/kuinua.
- Baada ya kupunguza, tumia udhaifu ambao ulifanyiwa marekebisho katika toleo jipya (kwa mfano, chujio cha kuingiza amri ambacho kiliongezwa baadaye).
- Kwa hiari flash picha ya hivi karibuni tena au zima sasisho ili kuepuka kugundulika mara tu uvumilivu unapatikana.
Mfano: Kuingiza Amri Baada ya Kupunguza
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
Host: 192.168.0.1
Content-Type: application/octet-stream
Content-Length: 0
Katika firmware iliyo hatarini (iliyoshushwa), parameter ya md5
imeunganishwa moja kwa moja katika amri ya shell bila kusafishwa, ikiruhusu kuingizwa kwa amri za kiholela (hapa β kuwezesha ufikiaji wa mizizi kwa kutumia funguo za SSH). Baadaye toleo la firmware lilileta kichujio cha wahusika wa msingi, lakini ukosefu wa ulinzi wa kushusha unafanya marekebisho kuwa yasiyo na maana.
Kutolewa kwa Firmware Kutoka kwa Programu za Simu
Wauzaji wengi hujumuisha picha kamili za firmware ndani ya programu zao za simu za washirika ili programu iweze kusasisha kifaa kupitia Bluetooth/Wi-Fi. Paket hizi kwa kawaida huhifadhiwa bila usimbaji katika APK/APEX chini ya njia kama assets/fw/
au res/raw/
. Zana kama apktool
, ghidra
, au hata unzip
rahisi zinakuruhusu kutoa picha zilizotiwa saini bila kugusa vifaa vya kimwili.
$ apktool d vendor-app.apk -o vendor-app
$ ls vendor-app/assets/firmware
firmware_v1.3.11.490_signed.bin
Orodha ya Kuangalia Mantiki ya Sasisho
- Je, usafirishaji/uidhinishaji wa kituo cha sasisho umehifadhiwa ipasavyo (TLS + uidhinishaji)?
- Je, kifaa kinalinganisha nambari za toleo au kikadiriaji cha kuzuia kurudi nyuma kabla ya kuandika?
- Je, picha inathibitishwa ndani ya mnyororo wa kuanza salama (kwa mfano, saini zinakaguliwa na msimbo wa ROM)?
- Je, msimbo wa userland unafanya ukaguzi wa ziada wa akili (kwa mfano, ramani ya sehemu inayoruhusiwa, nambari ya mfano)?
- Je, mchakato wa sasisho ya sehemu au hifadhi unatumia mantiki ile ile ya uthibitishaji?
π‘ Ikiwa yoyote kati ya hapo juu inakosekana, jukwaa linaweza kuwa hatarini kwa mashambulizi ya kurudi nyuma.
Firmware yenye Uhatari ya Kufanya Mazoezi
Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware yenye uhatari kama hatua ya kuanzia.
- OWASP IoTGoat
- https://github.com/OWASP/IoTGoat
- Mradi wa Firmware ya Router yenye Uhatari
- https://github.com/praetorian-code/DVRF
- Router ya ARM yenye Uhatari (DVAR)
- https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html
- ARM-X
- https://github.com/therealsaumil/armx#downloads
- Azeria Labs VM 2.0
- https://azeria-labs.com/lab-vm-2-0/
- Kifaa cha IoT chenye Uhatari (DVID)
- https://github.com/Vulcainreo/DVID
Marejeleo
- https://scriptingxss.gitbook.io/firmware-security-testing-methodology/
- Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things
- Exploiting zero days in abandoned hardware β Trail of Bits blog
Mafunzo na Cheti
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.