Kodu ruuteri tagasitehnika kasutades binwalki. Kas usaldate oma ruuteri tarkvara?

Kodu ruuteri tagasitehnika kasutades binwalki. Kas usaldate oma ruuteri tarkvara?

MÔni pÀev tagasi otsustasin teha oma ruuteri tarkvara tagasikaupa, kasutades binwalki.

Ostsin endale TP-Link Archer C7 kodu ruuteri. Ei ole parim ruuter, aga minu vajaduste jaoks tÀiesti piisav.

Iga kord, kui ostan uue ruuteri, installeerin ma OpenWRT. 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 viimase tarkvarakujundi oma uuele Archer C7-le ametlikult saidilt ja otsustasin seda analĂŒĂŒsida. Lihtsalt lĂ”bu pĂ€rast ja rÀÀkida binwalkist.

Mis on binwalk?

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Ă€rbitud

Meeskond 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 Vikipeediad 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 alla laadida lĂ€htekoodi ja jĂ€rgida installimismenetluse vĂ”i lĂŒhiĂ”petust, 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 pordil

Piltide skaneerimine

Alustame failide allkirjade otsimisest pildi sees (pilt saidilt TP-Link).

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

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

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

Kuna pilt on tihendatud LZMA abil, peame selle lahti pakkima:

$ unlzma u-boot.bin.lzma

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

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

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

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

VÔ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: 0xBB9D4F94

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

Pilt on kokkusurutud, seega laseme selle lahti:

$ unlzma Image.lzma

NĂŒĂŒd on meil Linuxi tuuma pilt:

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

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

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

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

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

Kogu 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 veaotsimiseks ja haavatavuste leidmiseks.

EL-i abil qemu ja chroot 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, zcat

Lahe! 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.

Kodu ruuteri tagasitehnika kasutades binwalki. Kas usaldate oma ruuteri tarkvara?

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.

Kohandatud allkirjad 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 ametlikust dokumentatsioonist.

binwalki laiendus

Olemas API liides 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 Python pluginaid binwalki kohandamiseks ja laiendamiseks.

Samuti on olemas IDA plugin ja pilveteenus Binwalk Pro.

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

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster