Firmware Analysis
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 ni hatua ya awali muhimu katika kuelewa muundo wa kifaa na teknolojia zinazotumiwa. 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 michakato ya ukaguzi wa mikono na otomatiki. Zana kama Coverity Scan na Semmle’s LGTM hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua masuala yanayoweza kutokea.
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
Sniffing kwa maombi ya sasisho ndani ya mawasiliano ya kifaa
Kutambua na kutumia nukta za sasisho zilizowekwa
Dumping kutoka kwa bootloader au mtandao
Kuondoa na kusoma chip ya uhifadhi, wakati kila kitu kingine kimeshindwa, kwa kutumia zana sahihi za vifaa
Sasa kwamba una firmware, unahitaji kutoa taarifa kuhusu hiyo ili kujua jinsi ya kuitendea. Zana tofauti unazoweza kutumia kwa hiyo:
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 imefungwa (au imepandwa kwa njia fulani).
Zaidi ya hayo, unaweza kutumia zana hizi kutoa faili zilizojumuishwa ndani ya firmware:
File/Data Carving & Recovery ToolsAu binvis.io (code) kuchunguza faili hiyo.
Kwa zana zilizotajwa hapo awali kama binwalk -ev <bin>
unapaswa kuwa umeweza kutoa mfumo wa faili.
Binwalk kawaida hutoa ndani ya kabrasha lililo na jina la aina ya mfumo wa faili, ambayo kawaida ni moja ya yafuatayo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Wakati mwingine, binwalk haitakuwa na byte ya kichawi ya mfumo wa faili katika saini zake. Katika kesi hizi, tumia binwalk ili 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.
Kimbia amri hii dd ikichonga mfumo wa faili wa Squashfs.
Mbinu mbadala, 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 CPIO archive
$ 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>
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.
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:
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 ufinyazi.
Kwa ajili ya kutoa faili zilizojumuishwa, zana na rasilimali kama vile nyaraka za file-data-carving-recovery-tools na binvis.io kwa ajili ya ukaguzi wa faili zinapendekezwa.
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 uchawi, kutoa kwa mikono kunahitajika. Hii inahusisha kutumia binwalk
kutafuta offset ya mfumo wa faili, ikifuatiwa na amri ya dd
ili kuchonga mfumo wa faili:
Baadaye, kulingana na aina ya mfumo wa faili (kwa mfano, squashfs, cpio, jffs2, ubifs), amri tofauti hutumiwa kutoa maudhui kwa mikono.
Mara mfumo wa faili unapokuwa umetolewa, utafutaji wa kasoro za usalama huanza. Kipaumbele kinatolewa kwa daemons za mtandao zisizo salama, akidi za ndani, mwisho wa API, kazi za seva za sasisho, msimbo usioandikwa, 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 ajili ya akidi za watumiaji
Vyeti vya SSL na funguo katika etc/ssl
Faili za usanidi na skripti kwa ajili ya 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 ajili ya utafutaji wa taarifa nyeti
The Firmware Analysis and Comparison Tool (FACT) kwa ajili ya uchambuzi wa kina wa firmware
FwAnalyzer, ByteSweep, ByteSweep-go, na EMBA kwa ajili ya uchambuzi wa statiki na wa dinamik
Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili lazima zichunguzwe kwa udhaifu. Zana kama checksec.sh kwa binaries za Unix na PESecurity kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumika.
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 vile Raspberry Pi, au kwa mashine halisi iliyojengwa mapema, kunaweza kuwezesha majaribio zaidi.
Kwa ajili ya kuchunguza programu moja, kubaini endianness ya programu na usanifu wa CPU ni muhimu.
Ili kuiga binary ya usanifu wa MIPS, mtu anaweza kutumia amri:
Na ili kufunga zana za emulering zinazohitajika:
For MIPS (big-endian), qemu-mips
inatumika, na kwa binaries za little-endian, qemu-mipsel
itakuwa chaguo.
Kwa binaries za ARM, mchakato ni sawa, na emulator qemu-arm
inatumika kwa emulation.
Zana kama Firmadyne, Firmware Analysis Toolkit, na zingine, zinawezesha emulation kamili ya firmware, zikifanya mchakato kuwa wa kiotomatiki na kusaidia katika uchambuzi wa dynamic.
Katika hatua hii, mazingira halisi au yaliyotengenezwa yanatumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na filesystem. Emulation inaweza isifanane kikamilifu na mwingiliano wa vifaa, ikihitaji kuanzishwa tena kwa emulation mara kwa mara. Uchambuzi unapaswa kutembelea filesystem, kutumia kurasa za wavuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Mijadala ya uadilifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo.
Uchambuzi wa wakati wa kukimbia 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.
Kuendeleza PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa binary runtime katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu.
Mifumo ya uendeshaji kama AttifyOS na EmbedOS hutoa mazingira yaliyoandaliwa tayari kwa ajili ya mtihani wa usalama wa firmware, yakiwa na zana muhimu.
AttifyOS: AttifyOS ni distro iliyokusudiwa kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa tayari na zana zote muhimu zilizopakuliwa.
EmbedOS: Mfumo wa uendeshaji wa mtihani wa usalama wa embedded unaotegemea Ubuntu 18.04 uliojaa zana za mtihani wa usalama wa firmware.
Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware yenye udhaifu kama hatua ya kuanzia.
OWASP IoTGoat
Mradi wa Damn Vulnerable Router Firmware
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)