SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement

Python – 16. časť Skener dátovej siete

0

V tejto časti seriálu budeme pokračovať v skenovaní počítačovej siete, pričom sa zameriame na skenovanie pripojených zariadení. Budeme vychádzať z informácií, ktoré už poznáme. Doplníme ich o podrobnosti týkajúce sa zasielania sieťových paketov a prijímania odpovedí. Prezentačná vrstva bude rovnaká – Dash, ibaže detailnejšie rozpracovaná a doplnená o nové prvky. V úvode musíme zdôrazniť, že sa ideme venovať získavaniu podrobných informácií o našej počítačovej sieti. Táto aktivita je obyčajne prípustná v našom domácom prostredí, resp. po predošlom povolení od správcu siete. Bez tohto povolenia skenovanie nikdy nespúšťajme!

Scapy Send-Receive

Tak ako naposledy aj tentoraz použijeme na prácu so sieťou funkcie nástroja Scapy. Konkrétne funkciu sr() a takisto jej varianty sr1() a srp(). Táto nenápadná funkcia je určená na zasielanie paketov, resp. skupiny paketov (packet set), ktoré patria 3. vrstve modelu OSI (sieťová vrstva = IP packets/datagrams, ICMP, IPSec, RIP, Router, L3 Switch…), a príjem odpovedí (answers).

Funkcia sr1() je úplne totožná s funkciou sr(), rozdiel je len v tom, že ako odpoveď vracia jediný paket. V prípade, že na zaslaný paket nepríde v stanovenom časovom intervale (timeout) žiadna odpoveď, funkcia vráti None. Na doplnenie uvedieme, že Scapy dokáže pracovať aj na 2. vrstve modelu OSI (linková vrstva = Ethernet frames, MAC, PPP, WLAN, L2 Switch...), pričom v tomto prípade ponúka funkcie s príponou p: srp(), sendp() atď.

Pakety, ktoré chceme posielať pomocou funkcie sr(), tvoríme v súlade s pravidlami stanovenými nástrojom Scapy. Pakety dokážeme skladať/rozkladať, čítať/zapisovať do externých súborov a, samozrejme, zobrazovať priamo v shelli, resp. generovať výstup PostScript/PDF.

 

Pri práci s paketmi (pkt) si môžeme pomôcť niekoľkými „informačnými“ funkciami, ako napr.:

ls(pkt)

zoznam položiek paketu s ich hodnotami

pkt.summary()

súhrnný prehľad o obsahu paketu

pkt.show()

aktuálny obsah paketu

pkt.sprintf()

výpis formátovaného zoznamu položiek paketu s ich hodnotami

pkt.pdfdump()

generuje PDF s opisom rozkladu paketu

 

Scapy používa na spájanie informácií, ktoré prenášame v jednotlivých vrstvách modelu OSI, operátor /. Na zopakovanie uvádzame označenie informácií, ktoré sú prenášané v jednotlivých vrstvách modelu OSI (obr. 1). Operátor / teda používame v prípadoch, ak chceme spojiť ARP a Ethernet rámec, TCP segment a IP paket atď.

 

Obr. 1 Informácie prenášané v jednotlivých vrstvách modelu OSI

 

Výstupom funkcie sr() je objekt, ktorý obsahuje dvojicu Python záznamov, teda 2× typ List:

Index

Typ

Obsah

0

List

Zaslaný paket, odpoveď

1

List

Pakety, na ktoré neprišla odpoveď (unanswered)

 

Na manažment paketov, na ktoré neprišla žiadna odpoveď, používame parameter retry. V prípade, že do parametra retry vložíme záporné číslo, Scapy bude opakovať posielanie paketov bez odpovede požadovaný počet krát. Ak medzitým príde odpoveď, Scapy opakovanie zastaví.

Skenovanie IP/MAC adries

Zisťovanie informácií o zariadeniach, ktoré sú pripojené do počítačovej siete, je doslova „alchýmia“. Základný fakt, ktorý musíme spomenúť hneď v úvode, je ten, že nič nie je také jednoduché, ako sa na prvý pohľad zdá. Informácie o pripojených zariadeniach môžeme získať mnohými spôsobmi, pričom niekedy stačí úplne obyčajný PING a inokedy musíme doslova poskladať paket bit po bite, aby sme obišli všetky bezpečnostné prvky nachádzajúce sa medzi nami a cieľovým zariadením. Navyše sú aj prípady, keď môžeme prítomnosť cieľového zariadenia iba odhadnúť, teda nedokážeme stopercentne dokázať, či zariadenie je alebo nie je pripojené do siete. V neposlednom rade rozmanitosť zariadení pripojených do počítačovej siete vrátane ich softvéru je taká široká, že niektoré nové „finty“ sú odhaľované práve v týchto dňoch, resp. ešte vôbec neboli odhalené. V tomto seriáli si preto uvedieme iba malý zlomok z toho, čo všetko sa dá použiť.

 

Obr. 2 ARP Request – Reply

 

Na získanie IP a MAC adresy zariadenia pripojeného do počítačovej siete použijeme dve veľmi jednoduché metódy:

1. ARP Ping

2. ICMP Ping

 

ARP Ping

Táto metóda vychádza z jednoduchého princípu (obr. 2), ktorý využíva protokol ARP (Address Resolution Protocol). Každé zariadenie pripojené do počítačovej siete má pridelenú IP adresu. To však nestačí. Aktívne sieťové prvky totiž pri svojom rozhodovaní o preposielaní paketov potrebujú okrem IP adries poznať aj MAC adresy komunikujúcich zariadení. Zariadenie, ktoré žiada o komunikáciu, teda pošle do celej siete tzv. ARP Request. Zariadenie, ktoré broadcast paket prijme, porovná vlastnú IP adresu s IP adresou uvedenou v požiadavke. V prípade, že sa tieto IP adresy rovnajú, zašle späť tzv. ARP Reply paket. Aby sa tak nemuselo diať pri každej komunikácii, zariadenia si, samozrejme, vytvárajú tzv. ARP tabuľky. Tým sa však nebudeme venovať.

 

ICMP Ping

Scapy dokáže bez problémov využiť funkcionalitu tzv. ICMP Echo (RFC 792) príkazu. V tomto prípade posiela jednoduchý Echo_Request paket na zadanú IP adresu. Cieľové zariadenie zvyčajne pošle naspäť odpoveď vo forme jednoduchého paketu Echo_Reply. Problémom však je, že drvivá väčšina aktívnych sieťových prvkov má z bezpečnostných dôvodov protokol ICMP zakázaný, čo znamená, že jednoduchý PING je zväčša nepoužiteľný.

 

Skenovanie portov

Len čo máme pripravený zoznam zariadení, ktoré odpovedali na náš ARP alebo ICMP Ping, môžeme pokračovať ďalej a dané zariadenia hlbšie preskúmať. Počítame pri tom s tým, že zariadenia, ktoré máme pripojené do našej počítačovej siete, poskytujú isté druhy služieb (services). Určite sa to týka aktívnych prvkov, serverov, multifunkčných zariadení, ale aj nášho vlastného počítača. Záleží na tom, či na ňom máme nainštalovanú nejakú aplikáciu, ktorá poskytuje sieťové služby.

Je všeobecne známe, že aplikácie poskytujú služby, ktoré pri sieťovej komunikácii využívajú konkrétne sieťové porty. Ak máme byť dôslední, skupina IP:PORT tvorí tzv. SOCKET. Ak chce teda jedna aplikácia poslať údaj druhej aplikácii, resp. ak chce klientska časť aplikácie poslať údaje serverovej časti a naopak, ako zdrojovú a cieľovú „poštovú schránku“ používajú SOCKET.

V našom prípade môžeme na SOCKETy na chvíľu zabudnúť. Zameriame sa na PORTy. Sken portov je rovnako ako sken IP/MAC adries „tŕnistá“ cesta. Existuje nespočetné množstvo riešení, z ktorých v konečnom dôsledku nemusí ani jedno fungovať.

V našom prípade sme implementovali tzv. Socket Scan, TCP Connect Scan a TCP Stealth Scan. Princíp väčšiny týchto skenov je založený na tzv. Three-Way-Handshake (obr. 3).

 

Obr. 3 Three-Way-Handshake

 

Pokračovanie nabudúce…

 

Marek Sopko

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ť