
MÔni pÀev tagasi otsustasin teha oma ruuteri tarkvara tagasikaupa, kasutades binwalki.
Ostsin endale . Ei ole parim ruuter, aga minu vajaduste jaoks tÀiesti piisav.
Iga kord, kui ostan uue ruuteri, installeerin ma . Miks? Tavaline on, et tootjad ei hooli oma ruuterite toetamisest ning aja jooksul tarkvara aegub, tulevad esile haavatavused jne, te mÔistate. SeetÔttu eelistan ma hÀsti toetatud open-source tarkvara OpenWRT.
PĂ€rast OpenWRT alla laadimist laadisin samuti oma uuele Archer C7-le ametlikult saidilt ja otsustasin seda analĂŒĂŒsida. Lihtsalt lĂ”bu pĂ€rast ja rÀÀkida binwalkist.
Mis on binwalk?
on avatud lĂ€htekoodiga tööriist tarkvara analĂŒĂŒsimiseks, tagasikaupseks ja tarkvara kujundite vĂ€ljavĂ”tmiseks.
2010. aastal Craig Heffneri loodud binwalk suudab skaneerida tarkvara kujundeid ja leida faile, tuvastada ja ekstraktida failisĂŒsteemi kujundeid, teostatavat koodi, kompresseeritud arhiive, alglaadijaid ja tuuma, failiformaatide hulka kuuluvad JPEG ja PDF ning palju muud.
Sa saad kasutada binwalki tarkvara tagasikaupa, et mÔista, kuidas see töötab. Otsida binaarfailides haavatavusi, ekstraktida faile ja otsida tagauste vÔi digitaalseid sertifikaate. Samuti on vÔimalik leida opcodes erinevate CPU-de jaoks.
Sa saad lahti pakkida failisĂŒsteemi kujundeid, et otsida kindlaid paroolifaile (passwd, shadow jne) ja proovida murda paroolihashe. Sa saad teostada binaaranalĂŒĂŒsi kahe vĂ”i enama faili vahel. Sa saad teha andmete entropiaanalyysi, et otsida kompressitud andmeid vĂ”i kodeeritud krĂŒptimisvĂ”tmeid. KĂ”ike seda ilma juurdepÀÀsuta lĂ€htekoodile.
ĂhesĂ”naga, kĂ”ik vajalik on olemas đ
Kuidas binwalk töötab?
Binwalki peamine omadus on selle allkirja skaneerimine. Binwalk suudab skaneerida tarkvara kujundeid, et otsida erinevaid sisse ehitatud failitĂŒĂŒpe ja failisĂŒsteeme.
Sa tead kÀsurea utiliiti file?
file /bin/bash
/bin/bash: ELF 64-bit LSB jagatud objekt, x86-64, versioon 1 (SYSV), dĂŒnaamiliselt linkitud, tĂ”lgendaja /lib64/l, GNU/Linux 3.2.0, BuildID[sha1]=12f73d7a8e226c663034529c8dd20efec22dde54, kĂ€rbitudMeeskond filevaatab faili pĂ€ist ja otsib allkirja (magiline number), et mÀÀrata faili tĂŒĂŒp. NĂ€iteks, kui fail algab baitide jĂ€rjestusega 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A, ta teab, et see on PNG fail. On olemas nimekiri levinud failiallkirjadest.
Binwalk töötab sarnaselt. Kuid selle asemel, et otsida allkirju ainult faili alguses, skaneerib binwalk kogu faili. Lisaks vÔib binwalk vÀlja vÔtta failid, mis leiti pildifailist.
Tööriistad file ja binwalk kasutab raamatukogu libmagic failiallkirjade tuvastamiseks. Kuid binwalk toetab ka kohandatud maagilisi allkirjade nimekirju kokku pakitud / arhiivitud failide, firmware'i pealkirjade, Linuxi pĂ”hijĂ”udude, buutijate, failisĂŒsteemide jne otsimiseks.
Kas me lÔbutseme?
Binwalki installimine
Binwalk on toetatud mitmetel platvormidel, sealhulgas Linux, OSX, FreeBSD ja Windows.
Et installida uusimat versiooni binwalkist, saate ja jÀrgida vÔi , mis on saadaval projekti veebisaidil.
Binwalkil on palju erinevaid valikuid:
$ binwalk
Binwalk v2.2.0
Craig Heffner, ReFirmLabs
https://github.com/ReFirmLabs/binwalk
Kasutamine: binwalk [VALIKUD] [FAIL1] [FAIL2] [FAIL3] ...
Allkirja skannimise valikud:
-B, --signature Skanni sihtfail(i) tavaliste failialkiri jaoks
-R, --raw= Skanni sihtfail(i) mÀÀratud baitide jÀrjestuse jÀrgi
-A, --opcodes Skanni sihtfail(i) tavaliste kÀivitussoode allkirjade jÀrgi
-m, --magic= MÀÀra kohandatud maagiafail, mida kasutada
-b, --dumb Keela nutikad allkirja vÔtmed
-I, --invalid NÀita tulemusi, mis on mÀrgitud kui kehtetud
-x, --exclude= JÀta vÀlja tulemused, mis vastavad le
-y, --include= NĂ€ita vaid tulemusi, mis vastavad le
Ekstraktsiooni valikud:
-e, --extract Automatiseeritud teadaolevate failitĂŒĂŒpide ekstraheerimine
-D, --dd= Ekstrahhi allkirju, anna failidele laiend ja tÀida
-M, --matryoshka Rekursiivne skannimine ekstraheeritud faile
-d, --depth= Piira matryoshka rekursiooni sĂŒgavust (vaikimisi: 8 taset sĂŒgavale)
-C, --directory= Ekstrahi failid/kaustad kohandatud kausta (vaikimisi: praegune töökaust)
-j, --size= Piira iga ekstraheeritud faili suurust
-n, --count= Piira ekstraheeritud failide arvu
-r, --rm Kustuta nikerdatud failid pÀrast ekstraheerimist
-z, --carve Nikerdada andmeid failidest, kuid mitte tÀita ekstraheerimistooted
-V, --subdirs Ekstrahi alamkaustadesse, mis on nimetatud offset'i jÀrgi
Entropia valikud:
-E, --entropy Arvuta faili entropia
-F, --fast Kasuta kiiremat, kuid vĂ€hem detailset entropia analĂŒĂŒsi
-J, --save Salvesta graafik PNG-na
-Q, --nlegend JÀta graafikult vÀlja legend
-N, --nplot Ăra genereeri entropia graafikut
-H, --high= Sea tĂ”usva serva entropia aktiveerimise kĂŒnnise lĂ€vivÀÀrtus (vaikimisi: 0.95)
-L, --low= Sea langeva serva entropia aktiveerimise kĂŒnnise lĂ€vivÀÀrtus (vaikimisi: 0.85)
Binaarsete erinevuste valikud:
-W, --hexdump Teosta heksdump / erinevus faili vÔi failide vahel
-G, --green NÀita vaid ridu, mis sisaldavad kÔiki faile sama baitide
-i, --red NÀita vaid ridu, mis sisaldavad baiti, mis erinevad kÔigist failidest
-U, --blue NÀita vaid ridu, mis sisaldavad baiti, mis erinevad mÔningatest failidest
-u, --similar NÀita vaid ridu, mis on kÔikides failides samad
-w, --terse Erinevuse kÔiki faile, kuid nÀita vaid esimese faili heksdumpi
Toores tihenduse valikud:
-X, --deflate Skanni toore deflate tihenduse vooge
-Z, --lzma Skanni toore LZMA tihenduse vooge
-P, --partial Teosta pealiskaudne, kuid kiirem skann
-S, --stop Peatu pÀrast esimest tulemust
Ăldised valikud:
-l, --length= Baitide arv, mida skannida
-o, --offset= Alusta skannimist selle faili offset'iga
-O, --base= Lisa kĂ”igile trĂŒkitud offset'idele baasi aadress
-K, --block= MÀÀra faili ploki suurus
-g, --swap= Pöörda iga n bait enne skannimist
-f, --log= Logi tulemused faili
-c, --csv Logi tulemused faili CSV formaadis
-t, --term Vorminda vÀljund sobivaks terminaliakna jaoks
-q, --quiet TSuppress stdout vÀljund
-v, --verbose Luba ĂŒksikasjalik vĂ€ljund
-h, --help NÀita abi vÀljundit
-a, --finclude= Skanni vaid faile, mille nimed vastavad sellele regex'ile
-p, --fexclude= Ăra skanni faile, mille nimed vastavad sellele regex'ile
-s, --status= Luba staatuse server mÀÀratud pordilPiltide skaneerimine
Alustame failide allkirjade otsimisest pildi sees (pilt saidilt ).
Binwalk kĂ€ivitamine parameetriga âsignature:
$ binwalk --signature --term archer-c7.bin
KĂMNEKORDNE HEKSADITSIMALINE KIRJELDUS
------------------------------------------------------------------------------------------
21876 0x5574 U-Booti versioon, "U-Boot 1.1.4-g4480d5f9-dirty (Mai
20 2019 - 18:45:16)"
21940 0x55B4 CRC32 polĂŒnoomi tabel, suurendi lĂ”pp
23232 0x5AC0 uImage pÀis, pÀise suurus: 64 baiti, pÀise CRC:
0x386C2BD5, loodud: 2019-05-20 10:45:17, pildi suurus:
41162 baiti, andmeadress: 0x80010000, sissejuhatus:
0x80010000, andmete CRC: 0xC9CD1E38, OS: Linux, CPU: MIPS,
pildi tĂŒĂŒp: Firmware Image, tihendustĂŒĂŒp: lzma, pildi
nimi: "u-boot image"
23296 0x5B00 LZMA tihendatud andmed, omadused: 0x5D, sÔnaraam
suurus: 8388608 baiti, tihendamata suurus: 97476 baiti
64968 0xFDC8 XML dokument, versioon: "1.0"
78448 0x13270 uImage pÀis, pÀise suurus: 64 baiti, pÀise CRC:
0x78A267FF, loodud: 2019-07-26 07:46:14, pildi suurus:
1088500 baiti, andmeadress: 0x80060000, sissejuhatus:
0x80060000, andmete CRC: 0xBB9D4F94, OS: Linux, CPU: MIPS,
pildi tĂŒĂŒp: Multi-File Image, tihendustĂŒĂŒp: lzma,
pildi nimi: "MIPS OpenWrt Linux-3.3.8"
78520 0x132B8 LZMA tihendatud andmed, omadused: 0x6D, sÔnaraam
suurus: 8388608 baiti, tihendamata suurus: 3164228 baiti
1167013 0x11CEA5 Squashfs failisĂŒsteem, vĂ€ike lĂ”pp, versioon 4.0,
tihendamine:xz, suurus: 14388306 baiti, 2541 inodes,
ploki suurus: 65536 baiti, loodud: 2019-07-26 07:51:38
15555328 0xED5B00 gzip tihendatud andmed, Unixist, viimati muudetud: 2019-07-26
07:51:41NĂŒĂŒd on meil palju teavet selle pildi kohta.
Pilt kasutab kĂ€ivitajana (pildi pĂ€is aadressil 0x5AC0 ja tihendatud kĂ€ivitaja pilt aadressil 0x5B00). LĂ€htudes uImage pealkirjast aadressil 0x13270, teame, et protsessori arhitektuur on MIPS ja Linuxi tuuma versioon on 3.3.8. Ja pĂ”hinedes pildil, mis asub aadressil 0x11CEA5, nĂ€eme, et rootfs on failisĂŒsteem squashfs.
NĂŒĂŒd laseme kĂ€ivitajal (U-Boot) lahti, kasutades kĂ€sku dd:
$ dd if=archer-c7.bin of=u-boot.bin.lzma bs=1 skip=23296 count=41162
41162+0 rekordit sees
41162+0 rekordit vÀlja
41162 baiti (41 kB, 40 KiB) kopeeritud, 0,0939608 s, 438 kB/sKuna pilt on tihendatud LZMA abil, peame selle lahti pakkima:
$ unlzma u-boot.bin.lzmaNĂŒĂŒd on meil U-Booti pilt:
$ ls -l u-boot.bin
-rw-rw-r-- 1 sprado sprado 97476 Veebr 5 08:48 u-boot.binKuidas oleks vaikeseade otsimisega bootargs?
$ strings u-boot.bin | grep bootargs
bootargs
bootargs=console=ttyS0,115200 board=AP152 rootfstype=squashfs init=\etc\preinit mtdparts=spi0.0:128k(factory-uboot),192k(u-boot),64k(ART),1536k(uImage),14464k@0x1e0000(rootfs) mem=128MU-Booti keskkonnamuutuja bootargs kasutatakse Linuxi tuuma parameetrite edastamiseks. Ja eeltoodud valguses mÔistame paremini seadme mÀlupesa.
Kuidas on lood Linuxi tuuma pildi vÀljavÔtmisega?
$ dd if=archer-c7.bin of=uImage bs=1 skip=78448 count=1088572
1088572+0 records in
1088572+0 records out
1088572 baiti (1,1 MB, 1,0 MiB) kopeeritud, 1,68628 s, 646 kB/sVÔime kontrollida, et pilt on edukalt vÀlja tÔmmatud jÀrgmise kÀsuga file:
$ file uImage
uImage: u-boot legacy uImage, MIPS OpenWrt Linux-3.3.8, Linux/MIPS, Multi-File Image (lzma), 1088500 baiti, Reede Juuli 26 07:46:14 2019, Laadimisadresse: 0x80060000, SissepÀÀsu punkt: 0x80060000, Pealkirja CRC: 0x78A267FF, Andmete CRC: 0xBB9D4F94Faili uImage formaat on pÔhimÔtteliselt Linuxi tuuma pilt koos lisapealkirjaga. Eemaldame selle pealkirja, et saada lÔplik Linuxi tuuma pilt:
$ dd if=uImage of=Image.lzma bs=1 skip=72
1088500+0 records in
1088500+0 records out
1088500 baiti (1,1 MB, 1,0 MiB) kopeeritud, 1,65603 s, 657 kB/sPilt on kokkusurutud, seega laseme selle lahti:
$ unlzma Image.lzmaNĂŒĂŒd on meil Linuxi tuuma pilt:
$ ls -la Image
-rw-rw-r-- 1 sprado sprado 3164228 Veebr 5 10:51 ImageMida saame pildiga teha? VÔime nÀiteks otsida piltide seest ridasid ja leida Linuxi tuuma versiooni ning teada saada keskkonna, millega tuum on koostatud:
$ strings Image | grep "Linux version"
Linux version 3.3.8 (leo@leo-MS-7529) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #1 Mon Mai 20 18:53:02 CST 2019Kuigi pĂŒsivara ilmus eelmisel aastal (2019), kasutab see, kui ma seda artiklit kirjutan, vanemat Linuxi tuuma versiooni (3.3.8), mis ilmus 2012. aastal ja tĂ”statati vĂ€ga vana GCC versiooniga (4.6) ka 2012. aastast!
(mÀrk. tÔlk. kas ikka usaldad oma ruutereid kontoris ja kodus?)
Valikuga --opcodes vÔime kasutada ka binwalk'i, et otsida masinakeele kÀske ja mÀÀrata kujutise protsessori arhitektuuri:
$ binwalk --opcodes Image
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
2400 0x960 MIPS kÀsklused, funktsiooni epiloog
2572 0xA0C MIPS kÀsklused, funktsiooni epiloog
2828 0xB0C MIPS kĂ€sklused, funktsiooni epiloogKuidas on juurfailisĂŒsteemiga? Selle asemel, et pilti kĂ€sitsi vĂ€lja vĂ”tta, kasutame valikut binwalk --extract:
$ binwalk --extract --quiet archer-c7.binKogu juurfailisĂŒsteem tĂ”mmatakse vĂ€lja alamkausta:
$ cd _archer-c7.bin.extracted/squashfs-root/
$ ls
bin dev etc lib mnt overlay proc rom root sbin sys tmp usr var www
$ cat etc/banner
MM NM MMMMMMM M M
$MMMMM MMMMM MMMMMMMMMMM MMM MMM
MMMMMMMM MM MMMMM. MMMMM:MMMMMM: MMMM MMMMM
MMMM= MMMMMM MMM MMMM MMMMM MMMM MMMMMM MMMM MMMMM'
MMMM= MMMMM MMMM MM MMMMM MMMM MMMM MMMMNMMMMM
MMMM= MMMM MMMMM MMMMM MMMM MMMM MMMMMMMM
MMMM= MMMM MMMMMM MMMMM MMMM MMMM MMMMMMMMM
MMMM= MMMM MMMMM, NMMMMMMMM MMMM MMMM MMMMMMMMMMM
MMMM= MMMM MMMMMM MMMMMMMM MMMM MMMM MMMM MMMMMM
MMMM= MMMM MM MMMM MMMM MMMM MMMM MMMM MMMM
MMMM$ ,MMMMM MMMMM MMMM MMM MMMM MMMMM MMMM MMMM
MMMMMMM: MMMMMMM M MMMMMMMMMMMM MMMMMMM MMMMMMM
MMMMMM MMMMN M MMMMMMMMM MMMM MMMM
MMMM M MMMMMMM M M
M
---------------------------------------------------------------
For those about to rock... (%C, %R)
---------------------------------------------------------------NĂŒĂŒd saame teha palju erinevat.
Saame otsida konfiguratsioonifaile, paroolide rĂ€sepide, krĂŒptovĂ”tmeid ja digitaalseid sertifikaate. Saame analĂŒĂŒsida binaarfailide kohta ja haavatavuste leidmiseks.
EL-i abil ja saame isegi kÀivitada (simuleerida) kÀivitatavat failist pilti:
$ ls
bin dev etc lib mnt overlay proc rom root sbin sys tmp usr var www
$ cp /usr/bin/qemu-mips-static .
$ sudo chroot . ./qemu-mips-static bin/busybox
BusyBox v1.19.4 (2019-05-20 18:13:49 CST) multi-call binary.
Copyright (C) 1998-2011 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.
Usage: busybox [function] [arguments]...
or: busybox --list[-full]
or: function [arguments]...
BusyBox on mitme ĂŒlesande tĂ€itmise binaar, mis ĂŒhendab mitu tavalist Unix
utiliiti ĂŒhte tĂ€idetavasse faili. Enamik inimesi loob
busyboxile lingi iga funktsiooni jaoks, mida nad soovivad kasutada, ja BusyBox
toimib nagu see, milleks teda kutsuti.
Currently defined functions:
[, [[, addgroup, adduser, arping, ash, awk, basename, cat, chgrp, chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd, delgroup, deluser, dirname, dmesg, echo, egrep, env, expr, false,
fgrep, find, free, fsync, grep, gunzip, gzip, halt, head, hexdump, hostid, id, ifconfig, init, insmod, kill, killall, klogd, ln, lock, logger, ls, lsmod, mac_addr, md5sum, mkdir, mkfifo, mknod, mktemp,
mount, mv, nice, passwd, pgrep, pidof, ping, ping6, pivot_root, poweroff, printf, ps, pwd, readlink, reboot, reset, rm, rmdir, rmmod, route, sed, seq, sh, sleep, sort, start-stop-daemon, strings,
switch_root, sync, sysctl, tail, tar, tee, telnet, test, tftp, time, top, touch, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget, which, xargs, yes, zcatLahe! Kuid pange tÀhele, et BusyBoxi versioon on 1.19.4. See on vÀga vana versioon BusyBoxist, mis anti vÀlja aprillis 2012.
Seega, TP-Link vabastab 2019. aastal tööpildi, kasutades tarkvara (GCC tööriistakomplekt, kernel, BusyBox jne) 2012. aastast!
NĂŒĂŒd sa saad aru, miks ma alati installin OpenWRT oma ruuteritesse?
See ei ole veel kÔik
Binwalk suudab samuti teostada entroopia analĂŒĂŒsi, printida toored entroopiaandmed ja genereerida entroopia graafikuid. Tavaliselt tĂ€heldatakse suurt entroopiat, kui pildis olevad baitid on juhuslikud. See vĂ”ib tĂ€hendada, et pilt sisaldab krĂŒpteeritud, kokkusurutud vĂ”i obfutseeritud faili. Kas sellel on salajane krĂŒpteerimisvĂ”ti? Miks ka mitte.

Saame kasutada ka parameetrit --raw loodud kasutaja mÀÀratletud toore baitide sekvenstsiks pildis vÔi parameetrit --hexdump kaks vÔi enam sisendfaili vÔrreldes kuus DHEX dumpi.
saavad lisada binwalk'i kas lÀbi failiga kohandatud allkirjad, mida mÀÀratakse kÀsureal parameetriga --magic, vÔi lisades neid kausta $ HOME / .config / binwalk / magic.
Lisainfot binwalki kohta leiate .
binwalki laiendus
Olemas binwalk, mis on vÀlja töötatud Python moodulina, mida saavad kasutada kÔik Python skriptid binwalki skaneerimise programmeerimiseks, ja binwalk kÀskude utiliit saab peaaegu tÀielikult dubleerida vaid kahe rea Python koodiga!
import binwalk
binwalk.scan()Python API abil saate luua ka binwalki kohandamiseks ja laiendamiseks.
Samuti on olemas ja pilveteenus .
Nii et miks mitte alla laadida pildi pĂŒsivara internetist ja proovida binwalk'i? Luban, et see on vĂ€ga lĂ”bus đ
Allikas: habr.com
