SAMSUNG_022024B Advertisement SAMSUNG_022024B Advertisement SAMSUNG_022024B Advertisement

Python a kybernetická bezpečnosť / 8. časť

0

Najdôležitejším cieľom druhej verzie našej aplikácie je byť čo najmenej „hlučný“. V predošlej časti seriálu sme spomínali, že „hlučnosť“ je veľmi nebezpečná a môže nás a našu činnosť veľmi rýchlo prezradiť. Presne takto rozmýšľajú aj potenciálni útočníci a snažia sa využívať čo najtichšie spôsoby sliedenia. Namiesto aktívneho zasielania rámcov či celých paketov budeme iba ticho načúvať, resp. monitorovať sieťovú prevádzku. Nevýhodou takéhoto postupu je to, že nami požadované informácie nezískame okamžite, ale musíme čakať a priebežne vyhodnocovať množstvo prijatých údajov. Faktom je, že útočníci sledujú sieťovú prevádzku veľmi dlhý čas, dokonca aj niekoľko rokov. Zhromažďujú informácie, a až keď ich majú dostatok, vykonajú komplexný útok.

SAMSUNG 042024 Advertisement

Aplikácia Sieťový skener v2.0

Z hľadiska použitia Pythonu a frameworku Dash sme oproti predošlej verzii vykonali niekoľko výrazných zmien:

1. Prezentačnú vrstvu sme rozdelili na dve samostatné stránky (pages/page1.py, pages/page2.py), ktoré zjednocuje súbor index.py a dopĺňa súbor components/navbar.py.

2. Aplikačnú logiku sme umiestnili do dvoch samostatných tried SnifferClass() a DHCPSnifferClass(), ktorých metódy run() spúšťajú funkcie knižnice Scapy – sniff() v samostatných vláknach.

3. Z dôvodu, že v rámci jednej premennej Python možno spustiť samostatné vlákno iba raz, po prvom spustení sliedenia ho nemožno opakovane naštartovať, zatiaľ sa tejto drobnej anomálii nebudeme venovať.

4. Z dôvodu správneho zobrazovania textu tlačidiel počas prepínania medzi stránkami sme do oboch stránok vložili skryté komponenty dcc.Input() a prislúchajúce funkcie callback.

5. Na vizuálne zobrazenie priebehu skenov sme použili komponenty dbc.Progress() – aktualizuje sa automaticky v intervale 1 s.

6. Funkcionality DataFrame a DataTable zostali zachované – tabuľky sa aktualizujú automaticky v intervale 5 s.

Page1 – Zdrojové a cieľové IP:PORT a MAC adresy

Namiesto aktívneho zasielania rámcov používame funkciu sniff(), ktorá sleduje sieťovú prevádzku a pri každom prijatom pakete volá funkciu pkt_rcv(). V jej tele získavame:

Hlavička (header)

Údaj

Poznámka

Ethernet

MAC adresa

Komunikácia na 2. vrstve modelu OSI

IP

IP adresa

Komunikácia na 3. vrstve modelu OSI

TCP

PORT

Hlavička TCP nemusí byť vždy vyplnená

 

Programová logika je úplne triviálna. Oveľa prínosnejší je výstup funkcie sniff(). Môžeme si napríklad všimnúť, že naše zariadenie dosť výrazne komunikuje na rôznych portoch s rôznymi cieľovými zariadeniami. Netreba v tom hľadať nič zvláštne ani záhadné. Mnoho moderných aplikácií, ktoré máme bežne nainštalované v našich zariadeniach, má totiž sieťové časti – komponenty, ktoré z času na čas komunikujú so svojimi náprotivkami nainštalovanými na rôznych serveroch. Navyše určite evidujete aplikácie, ktoré sa bez sieťového pripojenia ani len nespustia (týka sa najmä Androidu). V prípade klasických počítačov môžeme spomenúť napr. API PyCharm, pomocou ktorého vytvárame naše aplikácie a ktoré výrazne sieťovo komunikuje. Ďalej komunikujú rôzne, často neviditeľné komponenty, ktoré sú súčasťou webových stránok. Nie je vôbec výnimočné, že jedna webová stránka obsahuje časti, ktoré sa odvolávajú na iné webové stránky. Takisto sieťovo komunikuje naša e-mailová aplikácia, rôzne nástroje na vykonávanie aktualizácií, rovnako aj rôzne systémové komponenty a démoni.

Obr. 1 Sken IP:PORT a MAC adries

 

Page 2 – DHCP sken

V našich seriáloch sme už viackrát spomínali tzv. Dynamic Host Configuration Protocol (DHCP), pri ktorom zariadenia bez nastavenej IP adresy žiadajú o jej automatické pridelenie práve prostredníctvom funkcionality definovanej protokolom DHCP. DHCP server pritom nemusí byť fyzický počítač, ale aj softvérová služba dostupná na nejakom fyzickom, ale aj virtuálnom zariadení. Úplne bežné je poskytovanie tejto služby Wi-Fi routermi. Prídete do reštaurácie, kaviarne, hotela, nákupného centra, dokonca aj do vlaku, autobusu, na horskú chatu alebo na pláž a na dverách nájdete nápis „Free WiFi“. Okrem toho, že sa na danom mieste môžete pripojiť k sieti, je takmer isté, že prístupový bod ponúka aj službu DHCP a vášmu zariadeniu automaticky pridelí IP adresu. Táto funkcionalita je síce vysoko efektívna a výrazne zjednodušuje pripájanie zariadení do počítačových sietí, ale takisto vytvára obrovský priestor na ich monitoring.

Obr. 2 DHCP proces

 

V rámci samostatnej stránky page2.py sme implementovali funkcionalitu DHCP skenu. Využívame pri tom rovnakú funkciu sniff(), ale zameriavame sa na pakety UDP zasielané na porte 67 (server side), resp. 68 (client side). Funkciu sniff() spúšťame rovnako v samostatnom vlákne, pričom zo zachytených paketov očakávame správy typu (DHCP Message Type) 3=DHCPREQUEST a typu 5=DHCPACK. Uvedené typy sú definované v rámci DHCP Options – kód 53 (RFC-2132). Paket (DHCP správa) typu DHCPACK má vo svojom tele, konkrétne jeho časti BOOTP (Bootstrap Protocol), tzv. YIAddr (Your IP Address) pole (field), ktoré reprezentuje adresu, ktorú pre klienta pridelil server (RFC-951). V rámci aplikácie následne zobrazujeme v:

tabuľke č. 1

hostname a MAC adresu žiadateľa, typ paketu – DHCP Request (Msg Type = 3)

tabuľke č. 2

IP a MAC adresu servera, zapožičanú (leased) IP adresu, typ paketu – DHCP Acknowledgement (Msg Type = 5)

Obr. 3 DHCP sken zachytil zariadenie žiadajúce o IP adresu 192.168.1.7

 

Je samozrejmé, že po spustení DHCP skenu nemusíme okamžite získať výsledky. Tabuľky na stránke 2 môžu byť prázdne aj niekoľko hodín, dní či týždňov. Na to, aby sme videli nejaký výstup, musíme počkať dovtedy, pokiaľ nejaké zariadenie požiada o IP adresu. Buď na to počkáme, alebo budeme tento proces simulovať napr. pomocou iného zariadenia. Ak rozmýšľame ako útočníci, môžeme predpokladať, že sieťové zariadenia budú spúšťané napr. ráno po príchode zamestnancov do práce po víkende, keď boli zariadenia vypnuté. V prípade prístupového bodu umiestneného v kaviarni budeme čakať na prichádzajúcich zákazníkov. Zaujímavá môže byť situácia vo veľkom nákupnom centre, kde zákazníci nepretržite prichádzajú a odchádzajú.

Poznámka: Na správne fungovanie aplikácie treba prispôsobiť názov sieťového interface v kóde na začiatku definície tried SnifferClass() a DHCPSnifferClass().

 

Zobrazit Galériu

Marek Sopko

Všetky autorove články

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať