Firmware Analysis
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Firmware is noodsaaklike sagteware wat toestelle in staat stel om korrek te werk deur kommunikasie tussen die hardewarekomponente en die sagteware waarmee gebruikers interaksie het, te bestuur en te fasiliteer. Dit word in permanente geheue gestoor, wat verseker dat die toestel vitale instruksies kan verkry vanaf die oomblik dat dit aangeskakel word, wat lei tot die opstart van die bedryfstelsel. Om firmware te ondersoek en moontlik te wysig, is 'n kritieke stap in die identifisering van sekuriteitskwesbaarhede.
Inligting versameling is 'n kritieke aanvanklike stap in die begrip van 'n toestel se samestelling en die tegnologieë wat dit gebruik. Hierdie proses behels die versameling van data oor:
Die CPU-argitektuur en bedryfstelsel wat dit gebruik
Bootloader spesifikasies
Hardeware uitleg en datasheets
Kodebasis metrieke en bronliggings
Eksterne biblioteke en lisensietipes
Opdatering geskiedenisse en regulerende sertifikate
Argitektoniese en vloediagramme
Sekuriteitsassessering en geïdentifiseerde kwesbaarhede
Vir hierdie doel is oopbron intelligensie (OSINT) gereedskap van onskatbare waarde, sowel as die analise van enige beskikbare oopbron sagtewarekomponente deur handmatige en geoutomatiseerde hersieningsprosesse. Gereedskap soos Coverity Scan en Semmle’s LGTM bied gratis statiese analise wat benut kan word om potensiële probleme te vind.
Om firmware te verkry kan op verskeie maniere benader word, elk met sy eie vlak van kompleksiteit:
Direk van die bron (ontwikkelaars, vervaardigers)
Bou dit volgens verskafde instruksies
Aflaai van amptelike ondersteuningswebwerwe
Gebruik Google dork navrae om gehoste firmware lêers te vind
Toegang tot cloud storage direk, met gereedskap soos S3Scanner
Intersepteer opdaterings via man-in-the-middle tegnieke
Ekstrak van die toestel deur verbindings soos UART, JTAG, of PICit
Sniff vir opdateringsversoeke binne toestelkommunikasie
Identifiseer en gebruik hardcoded opdatering eindpunte
Dump van die bootloader of netwerk
Verwyder en lees die stoorchip, wanneer alles anders misluk, met toepaslike hardeware gereedskap
Nou dat jy die firmware het, moet jy inligting daaroor onttrek om te weet hoe om dit te behandel. Verskillende gereedskap wat jy daarvoor kan gebruik:
As jy nie veel met daardie gereedskap vind nie, kyk na die entropie van die beeld met binwalk -E <bin>
, as die entropie laag is, is dit waarskynlik nie versleuteld nie. As die entropie hoog is, is dit waarskynlik versleuteld (of op een of ander manier gecomprimeer).
Boonop kan jy hierdie gereedskap gebruik om lêers wat in die firmware ingebed is te onttrek:
Of binvis.io (code) om die lêer te inspekteer.
Met die vorige genoemde gereedskap soos binwalk -ev <bin>
behoort jy in staat te wees om die lêerstelsel te onttrek.
Binwalk onttrek dit gewoonlik binne 'n map wat die lêerstelseltipe genoem word, wat gewoonlik een van die volgende is: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Soms sal binwalk nie die magiese byte van die lêerstelsel in sy handtekeninge hê nie. In hierdie gevalle, gebruik binwalk om die offset van die lêerstelsel te vind en die gecomprimeerde lêerstelsel uit die binêre te sny en die lêerstelsel handmatig te onttrek volgens sy tipe met behulp van die onderstaande stappe.
Voer die volgende dd-opdrag uit om die Squashfs-lêerstelsel te sny.
Alternatiewelik kan die volgende opdrag ook uitgevoer word.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Vir squashfs (gebruik in die voorbeeld hierbo)
$ unsquashfs dir.squashfs
Lêers sal in die "squashfs-root
" gids daarna wees.
CPIO argief lêers
$ cpio -ivd --no-absolute-filenames -F <bin>
Vir jffs2 lêerstelsels
$ jefferson rootfsfile.jffs2
Vir ubifs lêerstelsels met NAND flash
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Sodra die firmware verkry is, is dit noodsaaklik om dit te ontleed om die struktuur en potensiële kwesbaarhede te verstaan. Hierdie proses behels die gebruik van verskeie gereedskap om waardevolle data uit die firmware beeld te analiseer en te onttrek.
'n Stel opdragte word verskaf vir die aanvanklike inspeksie van die binêre lêer (verwys na <bin>
). Hierdie opdragte help om lêertipes te identifiseer, stringe te onttrek, binêre data te analiseer, en die partisie en lêerstelsel besonderhede te verstaan:
Om die versleutelingstatus van die beeld te evalueer, word die entropy nagegaan met binwalk -E <bin>
. Lae entropy dui op 'n gebrek aan versleuteling aan, terwyl hoë entropy moontlike versleuteling of kompressie aandui.
Vir die onttrekking van embedded files, word gereedskap en hulpbronne soos die file-data-carving-recovery-tools dokumentasie en binvis.io vir lêerinspeksie aanbeveel.
Met binwalk -ev <bin>
kan 'n mens gewoonlik die filesystem onttrek, dikwels in 'n gids wat na die filesystem tipe genoem is (bv. squashfs, ubifs). As binwalk egter nie die filesystem tipe kan herken nie weens ontbrekende magic bytes, is handmatige onttrekking nodig. Dit behels die gebruik van binwalk
om die filesystem se offset te lokaliseer, gevolg deur die dd
opdrag om die filesystem uit te sny:
En om die nodige emulasie-instrumente te installeer:
For MIPS (big-endian), qemu-mips
word gebruik, en vir little-endian binaries, qemu-mipsel
sou die keuse wees.
Vir ARM binaries is die proses soortgelyk, met die qemu-arm
emulator wat gebruik word vir emulasie.
Gereedskap soos Firmadyne, Firmware Analysis Toolkit, en ander, fasiliteer volle firmware emulasie, wat die proses outomatiseer en help met dinamiese analise.
In hierdie stadium word 'n werklike of geëmuleerde toestelomgewing vir analise gebruik. Dit is noodsaaklik om shell-toegang tot die OS en lêerstelsel te handhaaf. Emulasie mag nie perfek hardeware-interaksies naboots nie, wat af en toe emulasie-herstart vereis. Analise moet die lêerstelsel herbesoek, blootgestelde webbladsye en netwerkdienste benut, en opstartlader kwesbaarhede verken. Firmware integriteitstoetse is krities om potensiële agterdeur kwesbaarhede te identifiseer.
Tydren analise behels interaksie met 'n proses of binary in sy bedryfsomgewing, met behulp van gereedskap soos gdb-multiarch, Frida, en Ghidra om breekpunte in te stel en kwesbaarhede deur fuzzing en ander tegnieke te identifiseer.
Om 'n PoC vir geïdentifiseerde kwesbaarhede te ontwikkel, vereis 'n diep begrip van die teikenargitektuur en programmering in laer vlak tale. Binary tydren beskermings in ingebedde stelsels is skaars, maar wanneer dit teenwoordig is, mag tegnieke soos Return Oriented Programming (ROP) nodig wees.
Bedryfstelsels soos AttifyOS en EmbedOS bied vooraf-gekonfigureerde omgewings vir firmware sekuriteitstoetsing, toegerus met nodige gereedskap.
AttifyOS: AttifyOS is 'n distro wat bedoel is om jou te help om sekuriteitsassessering en penetrasietoetsing van Internet of Things (IoT) toestelle uit te voer. Dit spaar jou baie tyd deur 'n vooraf-gekonfigureerde omgewing met al die nodige gereedskap te bied.
EmbedOS: Ingebedde sekuriteitstoetsing bedryfstelsel gebaseer op Ubuntu 18.04 wat vooraf gelaai is met firmware sekuriteitstoetsing gereedskap.
Om te oefen om kwesbaarhede in firmware te ontdek, gebruik die volgende kwesbare firmware projekte as 'n beginpunt.
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)