Kodu ruuteri tagasitehnika kasutades binwalk'i. Kas usaldad oma ruuteri tarkvara?

Kodu ruuteri tagasitehnika kasutades binwalk'i. Kas usaldad oma ruuteri tarkvara?

MĂ”ni pĂ€ev tagasi otsustasin oma ruuteri pĂŒsivara tagasikĂ€imist teostada, kasutades binwalk'i.

Ostsin endale TP-Link Archer C7 koduruuteri. Ei ole kÔige parem ruuter, kuid minu vajaduste jaoks on see tÀiesti piisav.

Iga kord, kui ma ostan uue ruuteri, installin ma OpenWRT. 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 viimase pĂŒsivara pildi 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?

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, stripitud

Meeskond 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 Vikipeediale 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 alla laadida lĂ€htekoodi ja jĂ€rgida paigaldamise juhiseid vĂ”i lĂŒhiĂŒlevaatust, 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 pordil

Piltide skannimine

Alustame failide allkirjade otsinguga pildis (pilt saidilt TP-Link).

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:41

NĂŒĂŒd on meil palju teavet selle pildi kohta.

Pilt kasutab U-Boot 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/s

Kuna pilt on LZMA abil kokku pakitud, peame selle vÀlja pakkima:

$ unlzma u-boot.bin.lzma

NĂŒĂŒd on meil U-Boot pilt:

$ ls -l u-boot.bin
-rw-rw-r-- 1 sprado sprado 97476 Veeb  5 08:48 u-boot.bin

Kuidas 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=128M

U-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/s

Me 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: 0xBB9D4F94

Faili 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/s

Pilt on kokkusurutud, seega avame selle:

$ unlzma Image.lzma

NĂŒĂŒd on meil Linuxi tuumpilt:

$ ls -la Image
-rw-rw-r-- 1 sprado sprado 3164228 Veeb  5 10:51 Image

Mida 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 2019

Kuigi 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 epiloog

Kuidas on lood juurfailisĂŒsteemiga? Selle asemel, et pilti kĂ€sitsi vĂ€lja tĂ”mmata, kasutame valikut binwalk --extract:

$ binwalk --extract --quiet archer-c7.bin

TĂ€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 vigu ja haavatavusi.

KÀesoleva abil qemu ja chroot 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, zcat

Tere! 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?

Kodu ruuteri tagasitehnika kasutades binwalk'i. Kas usaldad oma ruuteri tarkvara?

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.

Kohandatud signatuure 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 ametlikus dokumentatsioonis.

Binwalki laiendus

On olemas API liides 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 Python pluginaid binwalk'i kohandamiseks ja laiendamiseks.

Samuti on olemas IDA plugin ja pilveversioon Binwalk Pro..

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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster