Bezpečnostná analytika IoT zariadení

o identifikácii zraniteľností IoT zariadení, o hrozbách a rizikách podľa projektu OWASP IoT Top 10

Video pre cvičenie

Motivácia

Internet vecí je čoraz viac súčasťou bežného života a priemyslu. Aj napriek tomu však mnoho IoT zariadení trpí slabou bezpečnosťou, ktorá môže viesť k úniku dát, kompromitácii zariadení či zneužitiu siete.

Na tomto cvičení si prakticky vyskúšate postupy bezpečnostnej analýzy zariadení Internetu vecí, vrátane skenovania otvorených portov, identifikácie sieťových služieb, analýzy používateľských účtov a prelamovania hashovaných hesiel.

Ciele

  1. naučiť sa ovládať základné nástroje na hackovanie

  2. získať praktické znalosti z etického hackingu IoT zariadení

  3. naučiť sa komunikovať so zariadením pomocou sériovej linky

Postup

Predtým ako začneme…

…je potrebné zabezpečiť chytré, respektíve IoT zariadenie, ktoré budeme analyzovať z pohľadu bezpečnosti. Na tento účel je však možné využiť zámerne nezabezpečený firmvér s názvom IoTGoat, ktorý vytvorila nadácia OWASP. Tento firmvér slúži ako vzdelávací nástroj pre vývojárov softvéru a odborníkov na kybernetickú bezpečnosť, pričom umožňuje testovanie najčastejšie sa vyskytujúcich zraniteľností v IoT zariadeniach.

Pre potreby cvičenia bude firmvér IoTGoat nainštalovaný na minipočítači Raspberry Pi 2/3. Ten bude predstavovať IoT zariadenie, ktoré sa pokúsime kompromitovať.

Pre vlastné testovanie však môžete využiť niektorý z pripravených obrazov, ktoré sa nachádzajú medzi vydaniami na Github-e projektu. Ak napríklad používate OS Linux a v súbore /etc/qemu/bridge.conf máte povolený virbr0, tak môžete spustíť .vdi obraz nasledovne:

$ qemu-kvm IoTGoat-x86.vdi \
    -netdev bridge,id=net0,br=virbr0 \
    -device virtio-net-pci,netdev=net0

Samotné testovanie bezpečnosti budeme vykonávať pomocou nástrojov v prostredí linuxového operačného systému. Keďže však nie všetky nástroje sú bežne dostupné v každej distribúcii, pre potreby cvičenia je vytvorený samostatný Docker obraz bletvaska/iottoolbox, ktorý je založený na distribúcii Kali. V nej sú nainštalované všetky potrebné nástroje potrebné na penetračné testovanie.

Tento Docker obraz budeme spúšťať v sieti hostiteľa:

$ docker container run --rm -it \
  --network host \
  bletvaska/iottoolbox

Identifikácia zariadenia v sieti

Keďže testovacie prostredie je pripravené, v tomto kroku sa zameriame na identifikáciu IoT zariadenia pripojeného do lokálnej siete. Cieľom je zistiť jeho IP adresu, ktorá bude následne použitá pri ďalšej bezpečnostnej analýze zariadenia.

Task

Pomocou nástroja bettercap získajte IP adresu pripojeného zariadenia do vašej siete.

bettercap je nástroj na analýzu a aktívne testovanie sieťovej bezpečnosti, ktorý umožňuje zachytávať, modifikovať a manipulovať sieťovú komunikáciou v lokálnej sieti (MITM útoky), najmä v prostredí LAN, Wi‑Fi a Bluetooth.

bettercap je súčasťou pripraveného Docker obrazu. Po jeho spustení zadajte nasledujúce príkazy, ktorými spustíte moduly net.probe a ticker:

$ bettercap
> set ticker.commands 'clear; net.show; events.show 10'
> net.probe on
> ticker on

Prácu s nástrojom bettercap následne ukončíte príkazom quit.

Identifikácia služieb

Cieľom v tomto kroku je preskúmať sieťovú komunikáciu zariadenia. Začneme identifikáciou otvorených sieťových portov na zariadení. Následne určíme, ktoré sieťové služby sú na týchto portoch spustené a akým spôsobom zabezpečujú komunikáciu zariadenia so sieťovým prostredím.

Task

Skenovaním portov analyzujte sieťové rozhranie zariadenia a identifikujte otvorené sieťové porty dostupné pre prichádzajúce spojenia.

Aby sme zistili, aké porty má zariadenie otvorené, oskenujeme ho. Na tento účel použijeme príkaz nmap. Jeho základné použitie vyzerá nasledovne:

$ nmap IP_ADDRESS

Skenovanie portov môže trvať určitý čas, preto je potrebné chvíľu počkať na dokončenie procesu. Po jeho ukončení bude výstup skenu vyzerať nasledovne:

$ nmap 192.168.0.136
Starting Nmap 7.92 ( https://nmap.org ) at 2025-03-13 22:11 CET
Nmap scan report for 192.168.0.136
Host is up (0.0012s latency).
Not shown: 995 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
443/tcp  open  https
5000/tcp open  upnp

Nmap done: 1 IP address (1 host up) scanned in 38.62 seconds

Task

Vykonajte úplné skenovanie všetkých sieťových portov zariadenia (tzv. “full port scan”) s cieľom identifikovať všetky otvorené a dostupné porty.

Pre oskenovanie všetkých otvorených portov je potrebné spustiť príkaz nmap s týmito parametrami:

$ nmap -nv -p- IP_ADDRESS

Význam jednotlivých parametrov je nasledujúci:

  • -n – Zabráni Nmapu v zisťovaní DNS názvov (hostname), čím urýchli skenovanie.
  • -v – Verbose mód (podrobné informácie o priebehu skenovania).
  • -p- – Skontroluje všetkých 65 535 portov (porty od 1 do 65535).
  • IP_ADDRESS - Cieľová IP adresa

V nasledujúcom výpise sa nachádza úplný zoznam všetkých otvorených portov zariadenia:

$ nmap -nv -p- 192.168.0.136
Completed Connect Scan at 22:32, 2788.47s elapsed (65535 total ports)
Nmap scan report for 192.168.0.136
Host is up (0.021s latency).
Not shown: 65528 closed tcp ports (conn-refused)
PORT      STATE SERVICE
22/tcp    open  ssh
53/tcp    open  domain
80/tcp    open  http
443/tcp   open  https
5000/tcp  open  upnp
5515/tcp  open  unknown
65534/tcp open  unknown
Read data files from: /usr/local/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2788.53 seconds

Task

Identifikujte sieťové služby dostupné na otvorených portoch zariadenia a pokúste sa k nim pripojiť pomocou vhodných klientov.

Pri analyzovaní portov sa pokúste odpovedať na tieto otázky:

  • Aké služby sú na zariadení dostupné?
  • Pomocou akých klientskych nástrojov by sme sa mohli na danú službu pripojiť?
  • Je služba zabezpečená?
  • Je komunikácia šifrovaná?
  • Ako by bolo možné overiť bezpečnosť týchto služieb?

Aby ste sa však zbytočne netrápili, nástroj nmap obsahuje prepínač -sV, ktorý otestuje otvorené porty a pokúsi sa určiť aj informácie o službe, resp. jej verzii:

$ nmap -sV 192.168.122.76
Starting Nmap 7.92 ( https://nmap.org ) at 2025-12-20 02:05 CET
Nmap scan report for 192.168.122.76
Host is up (0.79s latency).
Not shown: 995 closed tcp ports (conn-refused)
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      Dropbear sshd (protocol 2.0)
53/tcp   open  domain   dnsmasq 2.73
80/tcp   open  http     LuCI Lua http config
443/tcp  open  ssl/http LuCI Lua http config
5000/tcp open  upnp     MiniUPnP 2.1 (UPnP 1.1)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 60.78 seconds

Pokúste sa pripojiť na jednotlivé služby pomocou vhodných klientov, ako napríklad:

  • Na základe výsledkov skenovania portov bolo zistené, že zariadenie má otvorený port 80, ktorý je štandardne využívaný protokolom HTTP. Webové rozhranie zariadenia otvorte zadaním jeho IP adresy do webového prehliadača alebo k nemu pristúpte z príkazového riadku pomocou niektorého z HTTP klientov, napríklad http alebo curl.

  • Otvorený je aj port 22, čo je štandardný port pre protokol SSH. Pokúste sa teda pripojiť cez klienta z príkazového riadku ssh.

  • Pokiaľ neviete, aký protokol je používaný na komunikáciu na konkrétnom porte, môžete použiť univerzálneho klienta ncat (skrátene len nc) v tvare:

    $ nc IP_ADDRESS PORT

Task

Analyzujte, ktoré služby porušujú niektoré z rizík podľa projektu OWASP IoT Top 10.

Podľa projektu OWASP IoT Top 10 sa bezpečnosť sieťových služieb týka viacerých hrozieb. Na základe výsledkov skenovania portov a overenia služieb pomocou vhodných klientov sa pokúste identifikovať potenciálne bezpečnostné riziká, ktoré sa na zariadení môžu vyskytovať.

Prelomenie používateľského hesla

Získaním prístupu do zariadenia pomocou zadných vrátok na porte 5515 sme sa dostali priamo do zariadenia bez toho, aby sme potrebovali prelamovať akékoľvek zabezpečenie. Túto príležitosť je dobré využiť na to, aby sme sa mohli rozhliadnuť v systéme a nájsť ďalšie možnosti, ako sa do systému dostať. Jednou z možností, ktorú je vhodné overiť, je identifikácia predvytvorených používateľských účtov v systéme a teda - či systém nie je možné kompromitovať na základe hrozby č. 1 projektu OWASP IoT Top 10.

V linuxových systémoch sú informácie o používateľských účtoch a ich autentifikácii štandardne rozdelené do dvoch samostatných súborov. Toto rozdelenie zvyšuje bezpečnosť systému tým, že obmedzuje prístup k citlivým údajom.

  • /etc/passwd

    Tento súbor obsahuje základné informácie o používateľských účtoch, ako sú používateľské meno, identifikátor používateľa (UID), identifikátor skupiny (GID), domovský priečinok a predvolený prihlasovací shell. Samotné heslá sa v tomto súbore nenachádzajú; namiesto nich je v príslušnom poli uvedený znak x, ktorý odkazuje na samostatný a bezpečnejší súbor /etc/shadow.

  • /etc/shadow

    Súbor /etc/shadow obsahuje hashované podoby používateľských hesiel a ďalšie informácie súvisiace s politikou hesiel (napr. dátum poslednej zmeny hesla alebo jeho expiráciu). Prístup k tomuto súboru je z bezpečnostných dôvodov obmedzený a má ho iba používateľ root alebo procesy s príslušnými oprávneniami.

V tomto kroku sa pokúsime získať zoznam používateľských účtov vytvorených výrobcom, ktoré sú súčasťou firmvéru zariadenia, vrátane ich hashovaných hesiel.

Task

Analyzujte obsah súboru /etc/passwd a identifikujte mená regulárnych používateľských účtov definovaných v systéme.

Obsah súboru vypíšeme príkazom cat:

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/ash
daemon:*:1:1:daemon:/var:/bin/false
ftp:*:55:55:ftp:/home/ftp:/bin/false
network:*:101:101:network:/var:/bin/false
nobody:*:65534:65534:nobody:/var:/bin/false
dnsmasq:x:453:453:dnsmasq:/var/run/dnsmasq:/bin/false
iotgoatuser:x:1000:1000::/root:/bin/ash

Ako je možné vidieť, súbor má istú štruktúru:

  • každý riadok reprezentuje záznam jedného používateľa

  • každý záznam má špecifickú štruktúru, kde jednotlivé položky sú od seba oddelené znakom “:”; ich význam je nasledovný:

    username:password:UID:GID:GECOS:home_directory:login_shell

V súbore sa nachádza viacero záznamov, pričom väčšina z nich reprezentuje systémové používateľské účty, pod ktorými sú spúšťané jednotlivé systémové služby. Tieto účty zvyčajne nemajú vytvorený domovský priečinok ani pridelený prihlasovací shell; namiesto toho je v poli pre shell často uvedený program /bin/nologin, ktorý znemožňuje interaktívne prihlásenie. Regulárni používatelia majú naopak spravidla priradený používateľský identifikátor UID ≥ 1000.

Task

Získajte hashované podoby používateľských hesiel systému, ktoré sú uložené v súbore /etc/shadow.

Obsah súboru vypíšeme príkazom cat:

$ cat /etc/shadow
root:$1$Jl7H1VOG$Wgw2F/C.nLNTC.4pwDa4H1:18145:0:99999:7:::
daemon:*:0:0:99999:7:::
ftp:*:0:0:99999:7:::
network:*:0:0:99999:7:::
nobody:*:0:0:99999:7:::
dnsmasq:x:0:0:99999:7:::
dnsmasq:x:0:0:99999:7:::
iotgoatuser:$1$79bz0K8z$Ii6Q/if83F1QodGmkb4Ah.:18145:0:99999:7:::

Aj tento súbor má konkrétnu štruktúru:

  • každý riadok reprezentuje záznam jedného používateľa

  • každý záznam má špecifickú štruktúru, kde jednotlivé položky sú od seba oddelené znakom “:”; ich význam je nasledovný:

    username:password:lastpasswordchange:minpasswordage:maxpasswordage:warnpasswordage:passwordinactive:accountexpirationdate:reserved

Z uvedeného výpisu je zrejmé, že hashované heslá majú používatelia root a iotgoatuser. Jedná sa o formáte Unix crypt, konkrétne MD5-crypt. Hash má nasledujúci tvar:

$1$salt$hash

To znamená, že pre hash hesla používateľa iotgoatuser platí, že:

  • $1$ - identifikátor algoritmu MD5-crypt
  • 79bz0K8z - salt
  • Ii6Q/if83F1QodGmkb4Ah. - samotný hash

Task

Pokúste sa pomocou internetového vyhľadávača nájsť heslo, ktoré zodpovedá danému hash hodnoteniu.

Predpoklad je pritom veľmi jednoduchý – je možné, že sa niekto pokúšal prelomiť rovnaké heslo už v minulosti a svoje zistenia publikoval na webe. V takom prípade je možné heslo identifikovať veľmi rýchlo.

Task

Pokúste sa prelomiť heslo používateľa iotgoatuser pomocou nástroja John the Ripper.

John the Ripper

John the Ripper je nástroj na prelamovanie hashovaných hesiel, ktorý sa používa na testovanie sily hesiel a odhaľovanie slabých autentifikačných mechanizmov. Podporuje široké spektrum hashovacích algoritmov a umožňuje využívať rôzne techniky útoku, ako sú slovníkové, hrubosilové a hybridné útoky.

Na použitie nástroja John the Ripper na prelamovanie hesiel sú potrebné dva vstupné súbory:

  • slovník hesiel, ktorý bude použitý pri slovníkovom útoku, a
  • súbor /etc/shadow (resp. jeho vybrané riadky), obsahujúci hashované heslá používateľských účtov, ktoré chceme prelomiť.

Súčasťou inštalácie nástroja John the Ripper je aj základný slovník hesiel. Tento slovník je uložený v súbore /usr/share/john/password.lst, ktorý je možné použiť pri slovníkových útokoch.

Ak uložíme cieľový súbor /etc/shadow, obsahujúci hashované heslá určené na prelamovanie, do lokálneho súboru shadow, proces prelamovania hesiel spustíme nasledovne:

$ john --wordlist=/usr/share/john/password.lst shadow

Prelomené heslá budú súčasťou výstupu:

john --wordlist=/usr/share/john/password.lst shadow
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
7ujMko0vizxv     (iotgoatuser)
1g 0:00:00:00 DONE (2025-12-19 22:41) 14.28g/s 50671p/s 94557c/s 94557C/s mobydick..sss
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Výsledné prelomené heslá je možné zobraziť aj jednoduchšie pomocou voľby --show:

$ john --show shadow
iotgoatuser:7ujMko0vizxv:18145:0:99999:7:::

1 password hash cracked, 1 left

Prihlásenie pomocou prelomeného hesla

V predchádzajúcom kroku sa nám podarilo prelomiť heslo používateľa iotgoatuser. V tomto kroku sa pokúsime overiť prístup k zariadeniu použitím získaného prihlasovacieho mena a hesla.

Task

Pomocou prihlasovacieho mena a hesla používateľa iotgoatuser sa pokúste overiť prístup k zariadeniu prostredníctvom niektorého z dostupných spôsobov prihlásenia.

Prihlásiť sa môžete pokúsiť pomcou:

  • webového rozhrania na porte 80, resp. 443,
  • telnetového pripojenia na porte 65534, alebo
  • protokolu SSH na porte 22.

Slabá fyzická ochrana zariadení

Posledná 10. hrozba v projekte OWASP IoT Top 10 hovorí o slabej fyzickej ochrane zariadení. Táto hrozba sa týka situácie, keď má útočník fyzický prístup k IoT zariadeniu a zariadenie nie je dostatočne chránené proti manipulácii. Vďaka tomu môže napr. získať citlivé údaje, prevziať lokálnu kontrolu nad zariadením, alebo si pripraviť pôdu pre neskorší vzdialený útok.

A presne to je aj náš prípad - zariadenie máme k dispozícii v podobe minipočítača Raspberry Pi 2/3.

Spôsobov, ktorymi je možné zariadenie kompromitovať v tomto prípade, je samozrejme viacero. Útočník sa napríklad môže pripojiť ku zariadeniu pomocou portov ako UART, JTAG, alebo SWD, a využiť ich na získanie shell-u alebo dump pamäte. Rovnako môže extrahovať samotný firmvér z flash pamäte, alebo môže obísť bezpečnosť zariadenia manipulovaním s boot režimami, ak také zariadenie má, a nahrať na zariadenie vlastný firmvér.

V prípade minipočítača Raspberry Pi 2/3 využijeme možnosť pripojiť sa ku sériovej linke (UART), ktorej piny sú vyvedené priamo na doske minipočítača (GPIO piny 14 a 15, resp. fyzické piny 8 a 10).

Rozloženie pin-ov na minipočítačoch Raspberry Pi

Task

Pomocou kábla USB–TTL (RS232) prepojte minipočítač Raspberry Pi s vaším počítačom.

Pri zapájaní dbajte na správne prepojenie signálov:

  • vysielací pin (označený ako TX) jedného zariadenia musí byť pripojený na prijímací pin (označený ako RX) druhého zariadenia,
  • prijímací pin (označený ako RX) jedného zariadenia musí byť pripojený na vysielací pin (označený ako TX) druhého zariadenia.

Okrem signálových pinov prepojte aj zem (GND). Napájanie (Vcc) nepripájajte.

Výsledok prepojenia sa nachádza na nasledujúcej blokovej schéme:

Schéma prepojenia dvoch zariadení pomocou sériovej linky (UART)

Task

Pripojte sa ku zariadeniu z vášho počítača pomocou niektorého terminálového emulátora pre sériovú linku.

Termínom terminálový emulátor pre sériovú linku označujeme softvér, pomocou ktorého sa je možné pripojiť z jedného zariadenia na druhé prostredníctvom sériovej linky.

_Terminálových emulátorov) samozrejme existuje mnoho. Ak pracujete s OS Windows, môžete použiť putty. V linuxových operačných systémoch však máte samozrejme výrazne viac možností. Súčasťou Docker obrazu bletvaska/iottoolbox je terminálový emulátor  picocom, ktorý použijeme.

Picocom: a minimal dumb-terminal emulation program.

Pred pripojením je však potrebné poznať USB port, na ktorom je pripojený prevodník, resp. kábel USB-TTL. Za predpokladu, že sa jedná o zariadenie /dev/ttyUSB0 ho namapujeme na rovnaké miesto aj do kontajneru pri jeho spustení nasledujúcim príkazom:

$ docker container run --rm -it \
  --network host \
  --device /dev/ttyUSB0 \
  bletvaska/iottoolbox

Terminálový emulátor picocom následne v kontajneri spustíte príkazom:

$ picocom /dev/ttyUSB0

Po spustení sa nám rovno zobrazia vlastnosti pripojenia, ktoré je možné meniť:

$ picocom /dev/ttyUSB0
picocom v2024-07

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
stopbits are   : 1
txdelay is     : 0 ns
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no
minimal cmds is: no

Type [C-a] [C-h] to see available commands
Terminal ready

Task

Nastavte správnu rýchlosť sériovej komunikácie, aby sa výstup zo zariadenia zobrazoval čitateľne a bez chýb.

Baud rate vyjadruje, ako rýchlo sa po sériovej linke prenášajú údaje medzi zariadeniami. Určuje počet symbolových zmien signálu za sekundu, ktorý sa nemusí vždy rovnať počtu prenesených bitov za sekundu.

Pokiaľ nebude rýchlosť odosielania a prijímania nastavená rovnako, nebudeme môcť so zariadením korektne komunikovať - buď budeme posielať dáta rýchlejšie, ako ich zariadenie bude stíhať dekódovať, alebo ich pri pomalej rýchlosti odosielanie bude kvôli vyššej rýchlosti čítania nepresne dekódovať. A to je presne aj momentálna situácia, kedy kvôli nesprávne nastavenej rýchlosti nevieme správne čítať dáta prichádzajúce po sériovej linke.

Nástroj picocom umožňuje meniť svoje nastavenia interaktívne bez nutnosti reštartovania pri každej zmene nastavení. To je možné stlačením metaklávesu Ctrl + a (v dokumentácii označované ako [C-a]) a následne stlačením príslušnej klávesy na zmenu nastavení. V prípade zmeny prenosovej rýchlosti je možné použiť tieto príkazy (klávesové skratky, pred ktorými bol stlačený meta Ctrl + a):

príkaz opis
Ctrl + b Set baudrate
Ctrl + u Increase baudrate (baud-up)
Ctrl + d Decrease baudrate (baud-down)

Postupným zvyšovaním rýchlosti trafíte tú, pri ktorej už budú prenesené znaky zo zariadenia čitateľné:

BusyBox v1.28.4 () built-in shell (ash)

                                                           .--,\\\__
 ██████╗ ██╗    ██╗ █████╗ ███████╗██████╗                  `-.    a`-.__
██╔═══██╗██║    ██║██╔══██╗██╔════╝██╔══██╗                   |         ')
██║   ██║██║ █╗ ██║███████║███████╗██████╔╝                  / \ _.-'-,`;
██║   ██║██║███╗██║██╔══██║╚════██║██╔═══╝                  /     |   { /
╚██████╔╝╚███╔███╔╝██║  ██║███████║██║                      /     |   { /
 ╚═════╝  ╚══╝╚══╝ ╚═╝  ╚═╝╚══════╝╚═╝            ..-"``~"-'      ;    )
                                           ╦┌─┐╔╦╗╔═╗┌─┐┌─┐┌┬┐   ;'    `
                                           ║│ │ ║ ║ ╦│ │├─┤ │   ;'    `
                                           ╩└─┘ ╩ ╚═╝└─┘┴ ┴ ┴  ;'    `
 ------------------------------------------------------------ ;'
 GitHub: https://github.com/OWASP/IoTGoat
 ------------------------------------------------------------
root@IoTGoat:/#

Keď už budete poznať správnu rýchlosť, nabudúce stači spustiť terminálový emulátor priamo s nastavenou prenosovou rýchlosťou pomocou voľby --baud nasledovne:

$ picocom --baud 115200 /dev/ttyUSB0

Rozbalenie súboru s aktulizáciou

Mnohé lacnejšie zariadenia nemajú automatizovaný mechanizmus aktualizácie, ale vyžadujú manuálny zásah používateľa. Používateľ si aktualizačný súbor (firmvér) najprv stiahne a následne ho prostredníctvom webového rozhrania nahrá do zariadenia. Práve tento spôsob aktualizácie využijeme na demonštráciu bezpečnostného problému, pri ktorom sa útočník nemusí pokúšať priamo kompromitovať bežiace zariadenie, ale postačí mu získať a analyzovať obraz firmvéru určený na aktualizáciu.

Na účel analýzy firmvéru na naučíme používať nástroj binwalk.

Task

Stiahnite si súbor s firmvérom IoTGoat.

Obraz s firmvérom je možné stiahnuť buď pomocou webového prehliadača, alebo prostredníctvom niektorého z klientov príkazového riadku. Ak na sťahovanie využijete pripravený Docker obraz, spustite ho s pripojeným pracovným priečinkom, v ktorom bude súbor uložený:

$ docker container run --rm -it \
  --volume .:/data \
  --network host \
  bletvaska/iottoolbox

Task

Pomocou nástroja binwalk extrahujte súborový systém zo súboru s firmvérom zariadenia.

Extrakciu spustíme voľbou --extract:

$ binwalk3 --extract IoTGoat-raspberry-pi2.img

Výsledok extrakcie sa zapíše predvolene do priečinku extractions/ a po jej skončení sa na obrazovke zobrazí krátky report:

$ binwalk3 --extract IoTGoat-raspberry-pi2.img

                       /data/extractions/IoTGoat-raspberry-pi2.img
----------------------------------------------------------------------------------------
DECIMAL                   HEXADECIMAL               DESCRIPTION
----------------------------------------------------------------------------------------
0                         0x0                       DOS Master Boot Record, partition:
                                                    FAT32, image size: 25165824 bytes
29360128                  0x1C00000                 SquashFS file system, little
                                                    endian, version: 4.0, compression:
                                                    xz, inode count: 1333, block size:
                                                    262144, image size: 3946402 bytes,
                                                    created: 2019-01-30 12:21:02
----------------------------------------------------------------------------------------
[+] Extraction of mbr data at offset 0x0 completed successfully
[+] Extraction of squashfs data at offset 0x1C00000 completed successfully
----------------------------------------------------------------------------------------

Analyzed 1 file for 85 file signatures (187 magic patterns) in 464.0 milliseconds

Task

Analyzujte obsah extrahovaného súborového systému zariadenia.

Výhodou v tomto prípade je fakt, že ak by zariadenie nemalo zadné vrátka, ako je tomu v tomto prípade, dokázali by sme zo súborového systému získať hashované heslá používateľov a minimálne by sme sa rovnako dostali ku heslu používateľa iotgoatuser.

Ďalšie úlohy

  1. Keďže už máte heslo pre používateľa iotgoatuser, pokúste sa na zariadenie prihlásiť pomocou SSH protokolu.

  2. Aktuálne sa nám podarilo kompromitovať zariadenie pomocou zadných vrátok, vďaka čomu sme získali prihlasovacie mená používateľov systému a crackli sme heslo pre používateľa iotgoatuser. Pokúste sa objaviť ďalšie zraniteľnosti zariadenia, pomocou ktorých budete vedieť zariadenie kompromitovať alebo budete vedieť kompromitovať používateľov zariadenia.

Ďalšie zdroje

  1. OWASP IoT Top 10
  2. IoTGoat - IoTGoat is a deliberately insecure firmware created to educate software developers and security professionals with testing commonly found vulnerabilities in IoT devices.
  3. CTF101 - Computer security competitions.
  4. picoCTF - picoCTF gamifies learning hacking with capture-the-flag puzzles created by trusted computer security and privacy experts at Carnegie Mellon University.
  5. CTF Field Guide
  6. IoT Security in Your Home Lab: Lessons from OWASP IoTGoat - Test IoT security with OWASP IoTGoat—practice firmware extraction, API exploitation, and hardware hacking in secure lab environments.