SAMSUNG_092022 Advertisement SAMSUNG_092022 Advertisement SAMSUNG_092022 Advertisement

Python – 15. časť Scapy

0

V tejto časti seriálu využijeme nadobudnuté vedomosti týkajúce sa frameworku Dash na vytvorenie grafického rozhrania aplikácie, ktorej úlohou bude skenovať dostupné bezdrôtové siete. Využijeme pritom vizuálne komponenty knižnice Plotly (tabuľka, stĺpcový graf). Programovú logiku postavíme na funkciách paketového analyzátora Scapy (https://scapy.net). Skenovať budeme bezdrôtové siete, čím neporušíme žiadne legislatívne pravidlá. Technickým prostriedkom bude obyčajný PC s bezdrôtovým sieťovým adaptérom.

SAMSUNG_092022 M Advertisement

Skenovanie sietí

Skenovanie počítačových sietí je protizákonný proces, ktorý si obrazne môžeme predstaviť, ako keby niekto obchádzal náš dom a bez povolenia by zisťoval informácie o dverách či oknách, cez ktoré by sa mohol dostať dnu. Tento proces je neprípustný rovnako ako sliedenie v rámci počítačových sietí. Samozrejme, existujú výnimky, a síce v prípadoch, keď sa vlastník siete vyslovene, najlepšie písomne, dohodne o vykonávaní takýchto aktivít. Istú výnimku tvorí skenovanie dostupnosti bezdrôtových sietí. Každý bezdrôtový vysielač totiž pri svojej činnosti musí vysielať príslušné informácie potrebné na nadviazanie spojenia. Tie sú voľne prístupné a môže, resp. musí ich získavať každé zariadenie, ktoré chce s vysielačom spojenie nadviazať.

Rôzne zariadenia v našom okolí vysielajú signál, ktorého obsahom sú údaje formátované podľa niektorého zo známych sieťových protokolov. Uvedené informácie môžeme získať veľmi jednoducho, a to prepnutím nášho rádiového (Wi-Fi) adaptéra do tzv. monitorovacieho módu. V Linuxe tak dokážeme urobiť pomocou skupinky jednoduchých konfiguračných príkazov. Adaptér v monitorovacom móde prijíma akékoľvek rádiové signály. V nich sa nachádzajú sieťové rámce (frames), ktoré by v prípade, že preň nie sú určené, boli adaptérom zahodené. V monitorovacom móde však adaptér prijíma všetky rámce. Ich obsahom sú pakety (packets), ktoré budeme analyzovať nástrojom Scapy.


Obr. 1 Nastavenie monitorovacieho módu adaptéra Wi-Fi

 

Scapy

Scapy je aplikácia napísaná v jazyku Python, ktorá je určená na manipuláciu so sieťovými paketmi rôznych sieťových protokolov. Pakety dokáže zachytávať (sniff), rozkladať/analyzovať (dissect), zostavovať (forge) a posielať (send). Pomocou nástrojov Scapy dokážeme vytvárať rôzne sondy či skenery a okrem iného útočiť na sieťovú infraštruktúru. Podstatou činnosti paketového manipulátora Scapy je:

1. zasielanie paketov,

2. prijímanie odpovedí.

Základný princíp jeho fungovania je dekódovanie obsahu paketov (poskytovanie „surových“ údajov), a nie jeho konečná interpretácia. To znamená, že Scapy sa nesnaží vysvetliť význam prijatých paketov. Túto úlohu prenecháva používateľom. Tých neobmedzuje ani v prípade vytvárania paketov. Používateľ má možnosť vkladať ľubovoľné údaje do ľubovoľných polí. Scapy sa pri svojej práci riadi heslom „snímaj raz, interpretuj viackrát“, ktorého význam tkvie v zachytávaní „surových“ (raw) údajov a ich následnej hĺbkovej analýze bez toho, aby bola časť údajov automaticky zahodená.

Wi-Fi skener

Prvých osemnásť riadkov vzorovej aplikácie je určených na import potrebných modulov (systémové moduly určené na prácu s časom a vláknami/threads, moduly Dash frameworku, moduly Pandas, NumPy a Plotly). Samozrejme, nechýba import všetkých funkcií sieťového nástroja Scapy. Nasleduje príprava Pandas DataFrame, ktorý je určený na ukladanie informácií o skenovaných sieťach, a následne inicializácia aplikácie Dash.

Na ďalších riadkoch sa nachádza definícia štyroch funkcií, ktoré spolu tvoria hlavnú časť tela algoritmu:

1. my_hopper()

Funkcia je vykonávaná v samostatnom programovom vlákne, v ktorom sa periodicky spúšťa systémový príkaz iwconfig interface channel num. Číslo kanála num sa inkrementuje v rozsahu 1 až 13. Po dosiahnutí kanála č. 13 dochádza k porovnaniu SSID sietí, ktoré boli skenované v rámci poslednej iterácie (act_ssid) s riadkami DataFrame. Ak sa v DataFrame nachádza také SSID, ktoré nebolo pri poslednej iterácii skenované, daný riadok sa z DataFrame vymaže.

2. get_manf()

Táto jednoduchá funkcia slúži na získanie názvu výrobcu sieťového hardvéru na základe prvých 24 bitov MAC adresy sieťového adaptéra.

3. packet_handler()

Ide o funkciu, ktorá sa aplikuje na každý prijatý paket v tele funkcie sniff(). Jej algoritmus je nasledujúci:

ak bol prijatý Dot11Beacon paket:

         bssid = MAC adresa vysielača

         manf = výrobca vysielača

         ssid = netid = SSID siete

         pokús sa získať vysielací výkon:

                   dbm_signal = vysielací výkon

         ak nastane výnimka:

                   dbm_signal = 'n/a'

         pokús sa získať informáciu o vysielacom kanáli a použitom šifrovaní:

                   channel = vysielací kanál

                  cr = použité šifrovanie

                   crypto = konvertuj(cr)

         ak nastane výnimka:

                  channel = 'n/a'

                   crypto = 'n/a'

         pridaj, resp. aktualizuj riadok v DataFrame:

                  net_data.loc[netid] = (bssid,manf,ssid,dbm_signal,channel,crypto)

         ak SSID nie je v zozname aktuálne nájdených sietí, doplň ju:

                  act_ssid.append(ssid)

 

4. my_sniffer()

Táto funkcia je rovnako ako funkcia my_hopper() vykonávaná v samostatnom programovom vlákne. V rámci nej je pomocou Scapy funkcie sniff() spustený zachytávač (sniffer), ktorý skenuje zvolené sieťové rozhranie (wifi interface) a po prijatí paketu vykoná uvedenú analytickú funkciu packet_handler().


Obr. 2 Dash + Scapy aplikácia Wi-Fi skener

 

Ďalšie časti tela aplikácie slúžia na grafickú reprezentáciu získaných údajov. Použili sme Dash layout veľmi podobný tomu, ktorý sme nastavili v predošlých častiach seriálu. Obrazovku sme rozdelili na dve časti. V ľavej je tabuľka Plotly obsahujúca jednotlivé stĺpce a riadky Pandas DataFramu. V pravej časti jer stĺpcový graf Plotly, ktorý zobrazuje úroveň vysielacieho výkonu naskenovaných vysielačov. S výhodou sme pritom využili preddefinovanú farebnostnú škálu plotly.express.colors.diverging.RdYlGn, ktorá definuje farbu stĺpcov v závislosti od hodnoty vysielacieho výkonu, ktorú príslušný stĺpec zobrazuje. Čo je dôležité, náš Dash layout obsahuje tzv. Interval komponent (r. 116), ktorý automaticky aktualizuje premennú n_intervals. Tá je vstupným (input) argumentom funkcií Callback, pomocou ktorých dochádza k automatickej aktualizácii obsahu tabuľky a grafu Plotly.

 

 

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ť