SAMSUNG_022024A Advertisement SAMSUNG_022024A Advertisement SAMSUNG_022024A Advertisement

Python a kybernetická bezpečnosť – 7. časť

0

Počnúc touto časťou seriálu začneme programovať aplikáciu, ktorá nám pomôže lepšie pochopiť niektoré procesy prebiehajúce v sieťovom prostredí. Zopakujeme si pritom viaceré poznatky získané z predošlých častí seriálu. Pripravíme základný kód, ktorý budeme v nasledujúcich častiach rozširovať a dopĺňať o novú funkcionalitu. Vychádzame zo stavu, keď máme naše zariadenie pripojené k počítačovej sieti (teda máme pridelenú IP adresu). Budeme vykonávať činnosť, ktorú by s veľkou pravdepodobnosťou robil aj potenciálny útočník.

Základné skenovanie počítačovej siete

Počítačoví nadšenci určite poznajú jednoduchý príkaz ping, pomocou ktorého môžeme zistiť, či v počítačovej sieti existuje zariadenie so zadanou IP adresou. Príkaz ping má svoje obmedzenia a jeho výstup nemusí vždy zodpovedať realite. Každopádne jeho obrovská nevýhoda je „hlučnosť“. Byť „hlučný“ je veľmi nebezpečné, pretože len čo začneme v sieti robiť priveľký „hluk“, skôr či neskôr si nás niekto, resp. „niečo“ všimne, čo určite nechceme. Ak teda chceme preskenovať našu broadcast doménu a nenarobiť pritom veľa „hluku“, musíme využiť iné formy sliedenia.

Jedna z nich je využiť funkcionalitu definovanú protokolom ARP (RFC 826), ktorý sme už viackrát spomínali. V jednoduchosti: v prípade, ak chce jedno sieťové zariadenie komunikovať s iným, ktorého MAC adresu ešte nepozná, v rámci vlastnej broadcast domény zašle tzv. Broadcast ARP Request. Požiadavky ARP prijmú konkrétne (directed), resp. postupne všetky sieťové zariadenia a v rámci odpovede uvedie (uvedú) svoju MAC adresu. MAC adresy priradené ku konkrétnym IP adresám sa ukladajú do tzv. ARP cache na budúce využitie. Dôležitá v tomto procese je skutočnosť, že tým, že dané zariadenie uviedlo svoju MAC adresu, oznámilo svoju existenciu.

Aplikácia Sieťový skener v.1

Naša aplikácia (príklad) je vo všeobecnosti zložená z dvoch základných vrstiev:

1. aplikačná vrstva – v prvej verzii ide o funkcie MAC_IP_scan() a PORT_scan(),

2. prezenčná vrstva – zabezpečená frameworkom Dash.

Aplikácia je síce triviálna, ale tvorí základ pre budúce rozširovanie. Po jej spustení dôjde k inicializácii frameworku Dash (app = dash.Dash()) a spusteniu webového servera (app.run_server()) na URL adrese http://127.0.0.1:8051, resp. http://localhost:8051.

Webová stránka obsahuje dve tlačidlá a dve tabuľky. Po stlačení prvého tlačidla (id=‘skenuj’) sa vyvolá callback funkcia update_table1(), v rámci ktorej dôjde k:

1. spusteniu funkcie MAC_IP_scan(),

2. vymazaniu Pandas DataFramu selected_data (slúži na vymazanie obsahu tabuľky 2),

3. odovzdaniu naplneného DataFramu answers_data na zobrazenie v rámci tabuľky 1.


Obr. 1 Grafický výstup aplikácie Sieťový skener v.1

Funkcia MAC_IP_scan()

V rámci tejto funkcie dôjde k vytvoreniu a zaslaniu eternetového rámca (frame) na druhej vrstve modelu OSI prostredníctvom funkcie srp() knižnice Scapy. Táto funkcia vytvorí 256 požiadaviek ARP (pri použití sufixu /24 – pozri ďalej), ktoré postupne zašle na všetky zariadenia pripojené do našej broadcast domény. Nejde pritom o rovnakú funkcionalitu, akú ponúka príkaz ping, ktorý pracuje na tretej vrstve v rámci protokolu ICMP. Požiadavka na uvedenie MAC adresy je úplne bežná. Ak ju však zašleme do celej domény a často po sebe, je samozrejmé, že budeme príliš „hlučný“. Každopádne ARP sken je omnoho rýchlejší ako klasický ping (resp. ping sweep). Na lepšie krytie môže byť nahradený pasívnym skenovaním rámcov ARP zasielaných v rámci siete inými zariadeniami. V takom prípade však môže istý čas trvať, pokiaľ získame obraz o celej sieti. Túto funkcionalitu implementujeme v nasledujúcej verzii aplikácie.

Výstupom funkcie srp() sú dva objekty typu List. Prvý priradíme premennej ans (SndRcvList), druhý premennej unans (PacketList). Ide o pozitívne, resp. negatívne reakcie na naše požiadavky. Premenná ans je objekt, ktorý takisto obsahuje dva objekty typu List. Prvý reprezentuje odoslané (sent) a druhý prijaté (received) rámce. Prijatý rámec vo svojom tele obsahuje MAC adresu zariadenia, ktorého IP adresa je totožná s adresou v odoslanej požiadavke ARP. MAC a IP adresy kladne prijatých reakcií ukladáme do premennej answers_data a odovzdávame v rámci callback funkcie update_table1() na zobrazenie v tabuľke 1.

Funkcia PORT_scan()

Po prijatí kladných reakcií na požiadavky ARP a ich zobrazení v tabuľke 1 môžeme kliknúť na ľubovoľnú bunku tabuľky a následne na druhé tlačidlo (id='detaily'). Spustíme tým funkciu PORT_scan(), ktorá slúži na skenovanie otvorených portov IP adresy, ktorá je uvedená na vybranom riadku tabuľky. V jej tele dôjde k spusteniu funkcie sr() knižnice Scapy. Tá slúži na odoslanie a príjem paketov na tretej vrstve modelu OSI. Pred odoslaním vyplníme IP a TCP hlavičku (header) paketu takto:

IP hlavička

dst = IP adresa cieľa, teda zariadenia, ktorého porty chceme skenovať

TCP hlavička

sport = ľubovoľné bežne nepoužívané číslo portu, napr. 11111

dport = číslo/čísla portov, ktoré chceme skenovať

flags = SYN, resp. S

Výstupom funkcie sr() sú reakcie, pri ktorých kontrolujeme zhodu portov odoslaného a prijatého paketu a prítomnosť flagov SYN-ACK (SA). V prípade zhody uložíme číslo portu a jemu zodpovedajúcu textovú reprezentáciu služby do premennej selected_data. Jej obsah následne odovzdáme v rámci callback funkcie update_table2() na zobrazenie v tabuľke 2.


Obr. 2 Naše rámce ARP zachytené analyzátorom Wireshark

Pre názornosť skenujeme celú broadcast doménu, teda ako IP adresu používame adresu nášho zariadenia doplnenú o sufix /24. Čo sa týka portov, skenujeme najznámejšie porty, ako napr. 20, 21 – FTP; 22 – SSH; 53 – DNS; 80, 8080 – HTTP; 443, 8443 – HTTPS…

Na konci funkcie PORT_scan() vytvárame a odosielame ďalší druh paketu, určený na skenovanie existencie DNS servera (služby). IP hlavička je rovnaká, obsahuje teda adresu cieľového zariadenia. Hlavička UDP obsahuje číslo cieľového portu (53). Nová hlavička DNS (trieda scapy.layers.dns.DNS) má nastavený rd BitField = 1 a DNSQR DNSStrField = softengine.sk. V prípade kladnej reakcie vieme, že na danej IP adrese je funkčný DNS server, ktorý dokáže plniť funkciu DNS Resolver.

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ť