
MĂ”ni pĂ€ev tagasi otsustasin oma ruuteri pĂŒsivara tagasikĂ€imist teostada, kasutades binwalk'i.
Ostsin endale . Ei ole kÔige parem ruuter, kuid minu vajaduste jaoks on see tÀiesti piisav.
Iga kord, kui ma ostan uue ruuteri, installin ma . Miks? Tootjad ei pööra tavaliselt palju tĂ€helepanu oma ruuterite toetusele ja aja jooksul muutub tarkvara vananenuks, avanevad haavatavused ja nii edasi, siis te juba teate. SeetĂ”ttu eelistan hĂ€sti toetatud avatud lĂ€htekoodiga pĂŒsivara OpenWRT.
Laadides alla OpenWRT, laadisin ka oma uue Archer C7 jaoks ametlikult saidilt ja otsustasin seda analĂŒĂŒsida. Lihtsalt lĂ”bususe pĂ€rast ja et rÀÀkida binwalk'ist.
Mis on binwalk?
on avatud lĂ€htekoodiga tööriist, mis on mĂ”eldud pĂŒsivara analĂŒĂŒsimiseks, tagasikĂ€imiseks ja piltide vĂ€ljatĂ”mbamiseks.
2010. aastal Craigi Heffneri loodud binwalk suudab skaneerida pĂŒsivara pilte ja leida faile, tuvastada ja vĂ€lja vĂ”tta failisĂŒsteemi pilte, tĂ€idiseid, pigistatud arhiive, kĂ€ivitajaid ja tuumasid, faili vorminguid nagu JPEG ja PDF ning palju muud.
Saate kasutada binwalk-i, et analĂŒĂŒsida pĂŒsivara, et mĂ”ista, kuidas see on struktureeritud. Otsige binaarfailidest haavatavusi, ekstrakteerige faile ja otsige tagauksed vĂ”i digitaalsed sertifikaadid. Samuti on vĂ”imalik avastada opcodes mitmete erinevate CPU-de jaoks.
Saate dekompressida failisĂŒsteemi pilte, et otsida teatud paroolifaile (passwd, shadow jne) ja proovida purustada parooliribasid. Samuti saate teha binaaranalĂŒĂŒsi kahe vĂ”i enama faili vahel. Andmete entropia analĂŒĂŒsi abil on vĂ”imalik leida kokkusurutud andmeid vĂ”i kodeeritud krĂŒpteerimisvĂ”tmeid. KĂ”ike seda on vĂ”imalik teha ilma lĂ€htekoodile ligipÀÀsuta.
Ăldiselt on kĂ”ik vajalik olemas đ
Kuidas binwalk töötab?
Binwalki peamine omadus on selle allkirja skaneerimine. Binwalk suudab analĂŒĂŒsida pĂŒsivara pilti, et leida erinevaid sisseehitatud failitĂŒĂŒpe ja failisĂŒsteeme.
Te teadsite kÀsurea utiliiti fail?
file /bin/bash
/bin/bash: ELF 64-bit LSB jagatud objekt, x86-64, versioon 1 (SYSV), dĂŒnaamiliselt seotud, tĂ”lgendaja /lib64/l, GNU/Linux 3.2.0, BuildID[sha1]=12f73d7a8e226c663034529c8dd20efec22dde54, stripitudMeeskond failvaatab faili pealkirja ja otsib allkirja (maagilist numbrit), et mÀÀrata faili tĂŒĂŒp. NĂ€iteks, kui fail algab baidijada 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A, siis teab ta, et see on PNG-fail. On olemas nimekiri levinud failiallkirjadest.
Binwalk töötab sarnaselt. Kuid selle asemel, et otsida allkirju ainult faili alguses, skannib binwalk kogu faili. Lisaks saab binwalk vÀlja tÔmmata faile, mis leiti pildist.
Tööriistad fail ja binwalk kasutab raamatukogu libmagic failiallkirjade tuvastamiseks. Kuid binwalk toetab ka kohandatud maagiliste allkirjade nimekirja, et otsida tihendatud/arhiivitud faile, pĂŒsivara pealkirju, Linuxi tuumasid, kĂ€ivitajaid, failisĂŒsteeme ja palju muud.
LÀhme lÔbutsema?
binwalki installimine
Binwalk toetab mitmeid platvorme, sealhulgas Linux, OSX, FreeBSD ja Windows.
Viimase versiooni installimiseks vÔite ja jÀrgida vÔi , mis on saadaval projekti veebilehel.
Binwalkil on palju erinevaid parameetreid:
$ binwalk
Binwalk v2.2.0
Craig Heffner, ReFirmLabs
https://github.com/ReFirmLabs/binwalk
Kasutus: binwalk [VALIKUD] [FAIL1] [FAIL2] [FAIL3] ...
Allkiri skaneerimise valikud:
-B, --signature Skaneeri sihtfail(e) tavaliste failiallkirjade jaoks
-R, --raw= Skaneeri sihtfail(e) mÀÀratud baitide jÀrjestuse jaoks
-A, --opcodes Skaneeri sihtfail(e) tavaliste tÀidesaatvate opcode allkirjade jaoks
-m, --magic= MÀÀra kasutamiseks kohandatud maagiafail
-b, --dumb Keela nutikad allkirja mÀrksÔnad
-I, --invalid NÀita tulemusi, mis on mÀrgitud kehtetuks
-x, --exclude= JÀta vÀlja tulemused, mis vastavad
-y, --include= NĂ€ita ainult tulemusi, mis vastavad
Ekstraktsiooni valikud:
-e, --extract Automaatne tuttavate failitĂŒĂŒpide ekstraktsioon
-D, --dd= Ekstrahi allkirjad, anna failidele laiend ja teosta
-M, --matryoshka Rekursiivselt skaneeri 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 kaevandatud failid pÀrast ekstraktsiooni
-z, --carve Kaevanda andmeid failidest, kuid Àra kÀivita ekstraktsiooni utiliite
-V, --subdirs Ekstrahi alamkaustadesse, mille nimed on mÀÀratud offset'iga
Entroopia valikud:
-E, --entropy Arvuta faili entroopia
-F, --fast Kasuta kiiremat, kuid vĂ€hem detailselt, entroopia analĂŒĂŒsi
-J, --save Salvesta plot PNG formaadis
-Q, --nlegend JÀta entroopia graafikult legend vÀlja
-N, --nplot Ăra genereeri entroopia graafikut
-H, --high= MÀÀra tÔusva serva entroopia trigeri lÀvi (vaikimisi: 0.95)
-L, --low= MÀÀra langeva serva entroopia trigeri lÀvi (vaikimisi: 0.85)
Binaarsete erinevuste valikud:
-W, --hexdump Teosta heksdump / erinevus faili vÔi failide vahel
-G, --green NÀita ainult ridu, mis sisaldavad byte'e, mis on kÔigis failides samad
-i, --red NÀita ainult ridu, mis sisaldavad byte'e, mis erinevad kÔikides failides
-U, --blue NÀita ainult ridu, mis sisaldavad byte'e, mis erinevad mÔnedes failides
-u, --similar NÀita ainult ridu, mis on kÔigis failides samad
-w, --terse Erinevusi kÔigis failides, kuid nÀita ainult esimese faili heksdumpi
Tooriku jaotamise valikud:
-X, --deflate Skaneeri toore deflate kompressioonivoogude jaoks
-Z, --lzma Skaneeri toore LZMA kompressioonivoogude jaoks
-P, --partial Teosta pinnaline, kuid kiire skaneerimine
-S, --stop Peatu esimese tulemuse jÀrel
Ăldised valikud:
-l, --length= Baitide arv, mida skaneerida
-o, --offset= Alusta skaneerimist selle faili offset'ist
-O, --base= Lisa kĂ”ikidele trĂŒkitud offset'idele baadress
-K, --block= MÀÀra faili ploki suurus
-g, --swap= Pööra iga n baidi enne skaneerimist
-f, --log= Logi tulemusi faili
-c, --csv Logi tulemusi faili CSV formaadis
-t, --term Vorminda vÀljund terminali akna mahutamiseks
-q, --quiet Peida vÀljund stdout's
-v, --verbose Luba detailsed vÀljund
-h, --help NÀita abi vÀljundit
-a, --finclude= Skaneeri ainult faile, mille nimed vastavad sellele regex'ile
-p, --fexclude= Ăra skaneeri faile, mille nimed vastavad sellele regex'ile
-s, --status= Luba staatuse server mÀÀratud pordilPiltide skannimine
Alustame failide allkirjade otsinguga pildis (pilt saidilt ).
Binwalki kĂ€ivitamine parameetriga âsignature:
$ binwalk --signature --term archer-c7.bin
KĂMNE HEKSADAL KIRJELDUS
------------------------------------------------------------------------------------------
21876 0x5574 U-Booti versioon, "U-Boot 1.1.4-g4480d5f9-dirty (20. mai
2019 - 18:45:16)"
21940 0x55B4 CRC32 polĂŒnoomi tabel, suur endian
23232 0x5AC0 uImage pÀis, pÀise suurus: 64 baiti, pÀise CRC:
0x386C2BD5, loodud: 20.05.2019 10:45:17, pildi suurus:
41162 baiti, andmeaadress: 0x80010000, sisenemispunkt:
0x80010000, andme CRC: 0xC9CD1E38, OS: Linux, CPU: MIPS,
pildi tĂŒĂŒp: Firmware Image, kompressioonitĂŒĂŒp: lzma, pildi
nimi: "u-boot image"
23296 0x5B00 LZMA kompressitud andmed, omadused: 0x5D, sÔnaraam
suurus: 8388608 baiti, dekompressitud 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: 26.07.2019 07:46:14, pildi suurus:
1088500 baiti, andmeaadress: 0x80060000, sisenemispunkt:
0x80060000, andme CRC: 0xBB9D4F94, OS: Linux, CPU: MIPS,
pildi tĂŒĂŒp: Multi-File Image, kompressioonitĂŒĂŒp: lzma,
pildi nimi: "MIPS OpenWrt Linux-3.3.8"
78520 0x132B8 LZMA kompressitud andmed, omadused: 0x6D, sÔnaraam
suurus: 8388608 baiti, dekompressitud suurus: 3164228 baiti
1167013 0x11CEA5 Squashfs faili sĂŒsteem, vĂ€ike endian, versioon 4.0,
kompressioon:xz, suurus: 14388306 baiti, 2541 inodes,
ploki suurus: 65536 baiti, loodud: 26.07.2019 07:51:38
15555328 0xED5B00 gzip kompressitud andmed, Unixist, viimati muudetud: 2019-07-26
07:51:41NĂŒĂŒd on meil palju teavet selle pildi kohta.
Pilt kasutab laadijana (pildi pĂ€is aadressil 0x5AC0 ja kokku pakitud laadija aadressil 0x5B00). Tuginedes aadressil 0x13270 asuvale uImage'i pĂ€isele, teame, et protsessori arhitektuur on MIPS ja Linuxi tuum on versioon 3.3.8. Ja pildi pĂ”hjal, mis leiti aadressilt 0x11CEA5, saame nĂ€ha, et rootfs on failisĂŒsteem squashfs.
NĂŒĂŒd laseme laadija (U-Boot) vĂ€lja pakkida kĂ€su abil dd:
$ dd if=archer-c7.bin of=u-boot.bin.lzma bs=1 skip=23296 count=41162
41162+0 records in
41162+0 records out
41162 bytes (41 kB, 40 KiB) copied, 0.0939608 s, 438 kB/sKuna pilt on LZMA abil kokku pakitud, peame selle vÀlja pakkima:
$ unlzma u-boot.bin.lzmaNĂŒĂŒd on meil U-Boot pilt:
$ ls -l u-boot.bin
-rw-rw-r-- 1 sprado sprado 97476 Veeb 5 08:48 u-boot.binKuidas oleks otsida vaikimisi vÀÀrtust 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 parameetride edastamiseks. Ja eelnevast mÔistame paremini seadme vÀlkmÀlu.
Kuidas oleks Linuxi tuuma pildi vÀlja pakkimisega?
$ dd if=archer-c7.bin of=uImage bs=1 skip=78448 count=1088572
1088572+0 records in
1088572+0 records out
1088572 bytes (1,1 MB, 1,0 MiB) kopeeritud, 1,68628 s, 646 kB/sMe saame kontrollida, et pilt on edukalt ekstraheeritud jÀrgmise kÀsu abil fail:
$ file uImage
uImage: u-boot legacy uImage, MIPS OpenWrt Linux-3.3.8, Linux/MIPS, Multi-File Image (lzma), 1088500 bytes, Reede 26 Juuli 07:46:14 2019, Load Address: 0x80060000, Entry Point: 0x80060000, Header CRC: 0x78A267FF, Data CRC: 0xBB9D4F94Faili formaat uImage on enamasti Linuxi tuumpilt koos tÀiendava pÀisega. Eemaldame selle pÀise, et saada lÔplik Linuxi tuumpilt:
$ dd if=uImage of=Image.lzma bs=1 skip=72
1088500+0 records in
1088500+0 records out
1088500 bytes (1,1 MB, 1,0 MiB) kopeeritud, 1,65603 s, 657 kB/sPilt on kokkusurutud, seega avame selle:
$ unlzma Image.lzmaNĂŒĂŒd on meil Linuxi tuumpilt:
$ ls -la Image
-rw-rw-r-- 1 sprado sprado 3164228 Veeb 5 10:51 ImageMida saame Linuxi tuumpildiga teha? Me vÔiksime nÀiteks otsida pildist ja leida Linuxi tuumaversiooni ning teada saada, millist keskkonda tuuma kompileerimiseks kasutati:
$ 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 EsmaspÀev 20 Mai 18:53:02 CST 2019Kuigi tarkvara vabastati eelmisel aastal (2019), kasutab see artikli kirjutamise ajal aegunud Linuxi tuumaversiooni (3.3.8), mis ilmus 2012. aastal ja on kompileeritud vÀga vana GCC versiooniga (4.6), samuti 2012. aastast!
(mÀrk. tÔlk. kas usaldate endiselt oma ruutereid kontoris ja kodus?)
Valikuga --opcodes saame kasutada ka binwalk'i masinainstruktsioonide leidmiseks ja protsessori arhitektuuri mÀÀramiseks pildi puhul:
$ binwalk --opcodes Image
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
2400 0x960 MIPS juhised, funktsiooni epiloog
2572 0xA0C MIPS juhised, funktsiooni epiloog
2828 0xB0C MIPS juhised, funktsiooni epiloogKuidas on lood juurfailisĂŒsteemiga? Selle asemel, et pilti kĂ€sitsi vĂ€lja tĂ”mmata, kasutame valikut binwalk --extract:
$ binwalk --extract --quiet archer-c7.binTĂ€ielik 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Ă€si, krĂŒptovĂ”tmeid ja digitaalseid sertifikaate. Saame analĂŒĂŒsida binaarfailide ja haavatavusi.
KÀesoleva abil ja saame isegi kÀivitada (emuleerida) tÀitmisfaili pildist:
$ 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 is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as.
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, zcatTere! Kuid pidage meeles, et BusyBoxi versioon on 1.19.4. See on vÀga vana BusyBoxi versioon, mis ilmus aprillis 2012.
Seega vabastab TP-Link 2019. aastal kaasaegse tarkvara (GCC tööriista komplekt, kernel, BusyBox jne) pÔhjal vÀlja töötatud pildi!
NĂŒĂŒd mĂ”istate, miks ma alati installin oma ruuteritesse OpenWRT?
See pole veel kÔik
Binwalk suudab samuti teostada entropiaanalyysi, printida tooreid entropiadatoosid ja genereerida entropiagraafikuid. Tavaliselt tĂ€heldatakse suurt entropiat, kui pildis olevad baitid on juhuslikud. See vĂ”ib tĂ€hendada, et pilt sisaldab krĂŒpteeritud, kompresseeritud vĂ”i obfuskeeritud faili. Kangekaelselt kodeeritud krĂŒpteerimisvĂ”ti? Kus seejuures ju?

Saame kasutada ka parameetrit --raw kasutaja mÀÀratud toorete baitide jÀrjestuse otsimiseks pildis vÔi parameetrit --hexdump kaks vÔi enam sisendfaili vÔrreldes teostada heksadecimaldumpi.
saab lisada binwalki lÀbi signatuurifaili, mille mÀÀrate kÀsureas parameetriga --magic, vÔi lisades need katalooge $ HOME /.config/binwalk/magic.
Lisainfot binwalki kohta leiate .
Binwalki laiendus
On olemas binwalk, mis on rakendatav Python moodulina, mida saab kasutada igasuguste Python skriptidega binwalk skaneerimise teostamiseks. Binwalk'i kÀsurea utiliiti saab peaaegu tÀielikult dubleerida vaid kahe Python koodiriviga!
import binwalk
binwalk.scan()Python API abil saate ka luua binwalk'i kohandamiseks ja laiendamiseks.
Samuti on olemas ja pilveversioon .
Nii et miks mitte laadida alla mĂ”ni pĂŒsivara pilt internetist ja proovida binwalk'i? Luban, et teil on vĂ€ga lĂ”bus đ
Allikas: habr.com
