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
Upozornenie
Predtým, ako prídete na cvičenie, tak:
je potrebné mať lokálne nainštalovaný Docker
je potrebné zvládať základy práce s technológiou Docker
stiahnite si nasledujúce Docker obrazy:
bletvaska/iottoolbox
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
naučiť sa ovládať základné nástroje na hackovanie
získať praktické znalosti z etického hackingu IoT zariadení
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.
Poznámka
Pre úplnosť je dobré dodať, že sa jedná o upravený obraz projektu OpenWrt. Tento firmvér slúži ako alternatívny firmvér pre domáce WiFi smerovače.
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=net0Samotné 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/iottoolboxPoznámka
Sieťový režim host zabezpečí, že IP adresa kontajnera
bude rovnaká, ako je IP adresa vášho hostiteľského počítača. To je veľmi
dôležité, nakoľko budeme potrebovať pristupovať k zariadeniam
nachádzajúcim sa v lokálnej sieti. To, že spustený kontajner má naozaj
IP adresu vášho hostiteľského počítača, si môžete overiť príkazom:
$ ip addr showIdentifiká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 onPrácu s nástrojom bettercap
následne ukončíte príkazom quit.
Poznámka
Zistiť IP adresu zariadenia v sieti je samozrejme možné aj inými nástrojmi, ako napr.:
pomocou príkazu
nmapv tvare$ nmap -sn 192.168.1.0/24pomocou príkazu
arpv tvare$ arp -a
Výstup bude však v oboch prípadoch omnoho surovejší, ako v prípade nástroja bettercap a vyžaduje si ďalšie kroky.
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_ADDRESSSkenovanie 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 secondsTask
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
Upozornenie
Ako bolo uvedené vyššie - jedná sa o časovo veľmi náročnú úlohu.
Skenovanie totiž môže trvať aj desiatky minút, čo je aj tento prípad. Ak
skenovanie 1000 portov trvalo necelých 40
sekúnd, bude skenovanie 65k portov trvať 2600
sekúnd, čo je takmer 45 minút. Preto skenovanie urýchlime a
zobrazíme si priamo výsledok skenovania.
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 secondsTask
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?
Poznámka
Na identifikovanie služieb na jednotlivých portoch môžete v
linuxových systémoch použiť súbor /etc/services. Každý
riadok tohto súboru reprezentuje jednu službu, pričom tento riadok má
formát:
názov-služby port/protokol [aliasy ...] [# komentár]
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 secondsPokú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íkladhttpalebocurl.Otvorený je aj port
22, čo je štandardný port pre protokol SSH. Pokúste sa teda pripojiť cez klienta z príkazového riadkussh.Pokiaľ neviete, aký protokol je používaný na komunikáciu na konkrétnom porte, môžete použiť univerzálneho klienta
ncat(skrátene lennc) 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/passwdTento 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ý znakx, ktorý odkazuje na samostatný a bezpečnejší súbor/etc/shadow./etc/shadowSúbor
/etc/shadowobsahuje 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ľrootalebo 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/ashAko 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-crypt79bz0K8z- saltIi6Q/if83F1QodGmkb4Ah.- samotný hash
Poznámka
Použitie zastaraného algoritmu MD5‑crypt na ukladanie hesiel
predstavuje závažné bezpečnostné riziko, keďže tento algoritmus má nízku
odolnosť voči útokom hrubou silou a slovníkovým útokom. V prípade
získania súboru /etc/shadow môže útočník relatívne rýchlo
prelomiť hashované heslá a získať neoprávnený prístup k zariadeniu. Táto
zraniteľnosť priamo súvisí s prvou hrozbou projektu OWASP
IoT Top 10 – Weak, Guessable, or Hardcoded Passwords, resp.
Insufficient Security Configuration, a môže viesť ku
kompromitácii celého zariadenia.
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 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.
Poznámka
John the Ripper samozrejme nie je jediný nástroj, ktorý je možné použiť na prelomenie hashovaného hesla. Na podobný účel je možné použiť aj ďalšie nástroje, ako je napr. Hydra alebo Medusa.
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 shadowPrelomené 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 leftPoznámka
Len pre zaujímavosť - ak by sme chceli vytvoriť hash hesla vo formáte
MD5-crypt, môžeme na tento účel použiť nástroj
openssl nasledovným spôsobom:
$ SALT="79bz0K8z"
$ PASSWORD="7ujMko0vizxv"
$ openssl passwd -stdin -1 -salt "${SALT}" <<< "${PASSWORD}"
$1$79bz0K8z$Ii6Q/if83F1QodGmkb4Ah.Podobne funguje aj nástroj John the Ripper – zo slov v slovníku vytvára spolu so saltom hashované heslá a porovnáva ich s cieľovým hashom. Ak sa hashe zhodujú, heslo bolo úspešne nájdené.
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).
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ý akoRX) druhého zariadenia, - prijímací pin (označený ako
RX) jedného zariadenia musí byť pripojený na vysielací pin (označený akoTX) 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:
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.
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/iottoolboxTerminálový emulátor picocom následne v kontajneri
spustíte príkazom:
$ picocom /dev/ttyUSB0Po 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/ttyUSB0Poznámka
Otvorené spojenie ukončíte príkazom Ctrl + q.
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/iottoolboxTask
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.imgVý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 millisecondsTask
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.
Poznámka
Nástroj binwalk je určený na analýzu a extrahovanie firmvéru a nie na jeho opätovné zloženie. Na to je potrebné použiť iné nástroje.
Ďalšie úlohy
Keďže už máte heslo pre používateľa
iotgoatuser, pokúste sa na zariadenie prihlásiť pomocou SSH protokolu.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
- OWASP IoT Top 10
- IoTGoat - IoTGoat is a deliberately insecure firmware created to educate software developers and security professionals with testing commonly found vulnerabilities in IoT devices.
- CTF101 - Computer security competitions.
- picoCTF - picoCTF gamifies learning hacking with capture-the-flag puzzles created by trusted computer security and privacy experts at Carnegie Mellon University.
- CTF Field Guide
- 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.

