Python: Sliedič v.2 / 19. časť

0

Táto časť seriálu bude priamym pokračovaním predošlej, v ktorej sme opísali funkcionalitu vzorovej aplikácie Sliedič v.1. Nadväznosť textového obsahu úzko súvisí s nadväznosťou programového kódu aplikácie. V podstate ide o rozšírenie jej prvej verzie o aktívnu časť. Tá bude realizovať tzv. poškodenie záznamov ARP. Ide o jeden zo základných spôsobov aktívneho sliedenia v počítačových sieťach.

ARP poisoning

Sieťové zariadenia komunikujú v rámci počítačovej siete prostredníctvom zasielania sieťových paketov. Na tretej (sieťovej) vrstve modelu OSI je každé zariadenie reprezentované svojou IP adresou. Pri následnom zapuzdrení údajov do rámca druhej (linkovej) vrstvy sú IP adresy dopĺňané o MAC adresy komunikujúcich zariadení. Tie sa získavajú pomocou tzv. ARP broadcastu. V prípade, ak chce jedno zariadenie komunikovať s iným, ktorého MAC adresu ešte nepozná, do celej siete (broadcast) zašle ARP Request paket. Tento paket prijmú všetky sieťové zariadenia, ale odpovie naň (ARP Reply) iba to zariadenie, ktorého IP adresa je totožná s IP adresou uvedenou v ARP Request pakete.

Získaná MAC adresa sa využije na doplnenie rámca a umožní tak jeho odoslanie cieľovému zariadeniu. MAC adresa sa zároveň uloží do tzv. ARP cache na budúce využitie. To znamená, že ak bude chcieť zdrojové zariadenie v budúcnosti znovu komunikovať s cieľovým zariadením, ktorého MAC adresu už má uvedenú v ARP cache, nebude znovu zasielať ARP broadcast paket.

Záškodní hackeri dokážu túto funkcionalitu zneužiť vo svoj prospech, a síce tak, že modifikujú (poškodia) ARP cache komunikujúcich zariadení. Modifikujú ich tak, že zariadenia síce budú mať existujúce záznamy o IP a MAC adresách, ale MAC adresy budú falošné. Ak bude chcieť jedno zariadenie zaslať paket inému, z poškodenej ARP cache načíta falošnú MAC adresu, ktorá je zväčša MAC adresou záškodníka, nazývaného aj MITM (Man In The Middle).

Poškodenie ARP prakticky

Poďme sa na poškodenie ARP pozrieť v praxi. Implementovali sme ho do našej vzorovej aplikácie verzie 2. Na obr. 1 možno vidieť realizované kroky:

1. v prvom kroku sú v rámci funkcie ARPpoison() zaslané 2 pakety ARP:

send(ARP(op = 2,

psrc = gwIP,

pdst = viIP,

hwdst = viMAC))

zaslanie ARP „is-at“ paketu na IP, MAC obete,

zdrojová IP je adresa Gateway (brána = Router, L3 switch, AP...),

zdrojová MAC je naša adresa, teda MAC adresa záškodníka

send(ARP(op = 2,

psrc = viIP,

pdst = gwIP,

hwdst = gwMAC))

zaslanie ARP „is-at“ paketu na IP, MAC brány,

zdrojová IP je adresa obete,

zdrojová MAC je naša adresa, teda MAC adresa záškodníka

 

2. následne dôjde k poškodeniu ARP cache u obete aj brány,

3. výsledkom je stav, pri ktorom pri zaslaní sieťového paketu obeťou smerom na bránu sa paket zašle záškodníkovi, rovnako ak zašle brána sieťový paket smerom na obeť, ten sa zašle záškodníkovi, obeť a brána si omylom myslia, že komunikujú vzájomne a všetko je v poriadku.

Obr. 1 ARP poisoning

Na obr. 2 možno vidieť konkrétny graficko-textový výstup aplikácie a takisto obsah ARP cache obete. IP a MAC adresa záškodníka je uvedená vľavo hore. Vpravo je informácia o prebiehajúcom poškodzovaní ARP cache. IP adresy obete a brány (GW) možno vpísať do textových polí. Aplikácia samostatne pomocou funkcie getMAC() získava MAC adresy obete aj brány. Po stlačení tlačidla POŠKODENIE ARP vykonáva poškodzovanie ARP záznamov na strane obete aj brány. Konkrétny efekt možno vidieť v ľavej dolnej časti obrázka. Štandardný obsah ARP cache obete obsahuje záznamy:

192.168.155.94   c2-6a-bb-94-b3-6f         IP a MAC adresa Gateway

192.168.155.222  84-fd-d1-73-18-01         IP a MAC adresa záškodníka

 

Nižšie je poškodená ARP cache obete, ktorá obsahuje záznamy:

192.168.155.94   84-fd-d1-73-18-01         IP adresa Gateway / MAC adresa záškodníka

192.168.155.222  84-fd-d1-73-18-01         IP a MAC adresa záškodníka

 

Z výpisu vidno, že došlo k poškodeniu prvého záznamu. Obeť si v tomto prípade myslí, že brána má MAC adresu 84-fd-d1-73-18-01, čo nie je pravda, pretože táto MAC adresa patrí záškodníkovi.

Obr. 2 Fungovanie aplikácie Sliedič v.2

 

Obnovenie ARP cache

Vrátenie poškodených záznamov ARP do pôvodného stavu je riešené v rámci funkcie restore_ARPcache(). V podstate ide o zaslanie štandardných ARP broadcast paketov:

send(ARP(op = 2,

psrc = gwIP,

hwsrc = gwMAC,

pdst = viIP,

hwdst = "ff:ff:ff:ff:ff:ff"),

count = 5)

zaslanie ARP broadcast paketu,

zdrojová IP, MAC je adresa brány,

cieľová IP je adresa obete

send(ARP(op = 2,

psrc = viIP,

hwsrc = viMAC,

pdst = gwIP,

hwdst = "ff:ff:ff:ff:ff:ff"),

count = 5)

zaslanie ARP broadcast paketu,

zdrojová IP, MAC je adresa obete,

cieľová IP je adresa brány

 

Scapy – send ARP paket

Zopakujme si, že funkcia send(), ktorá slúži na posielanie paketov, je definovaná v module scapy.sendrecv. Funkcia zasiela pakety patriace 3. vrstve modelu OSI. Jej parametre sú nasledujúce:

x – pakety

inter – časový interval medzi zaslaním dvoch paketov

loop – nekonečné zasielanie paketov

count – počet paketov, ktoré sa majú zaslať

verbose – výpis informácií o priebehu zasielania paketov

realtime – kontrola zaslania paketu pred odoslaním ďalšieho paketu

return_packets – vrátenie zaslaných paketov

socket – názov soketu

iface – názov rozhrania

monitor – zaslanie m móde monitor

 

Trieda definujúca samotný ARP paket je opísaná v module scapy.layers.l2, ktorý obsahuje triedy a funkcie pre protokoly 2. vrstvy modelu OSI. Z rozsiahleho opisu protokolu ARP, ktorý komentuje RFC-826, sa zameriame na tzv. operačné kódy (opcodes). Tie sú pekne zosumarizované na stránke Internet Assigned Numbers Authority (https://www.iana.org). Z tabuľky vyberáme:

Číslo kódu

Opcode

Význam v triede ARP()

0

Rezervované

-

1

Request

who-has

2

Reply

is-at

3

Request Reverse

RARP-req

4

Reply Reverse

RARP-rep

 

V našom prípade používame číslo kódu 2 „is-at“, čo znamená, že zariadeniam zasielame ARP Reply pakety. Zariadenia na ne reagujú úpravou príslušných záznamov vo svojich ARP cache. Netušia pritom, že samy predtým nezaslali ARP Request pakety, čo vo výsledku vedie k ich úspešnej kompromitácii. V prípade, ak sa nám podarí vykonať ARP poisoning na strane obete aj brány, následne môžeme v procese sliedenia (sniff) sledovať, aké pakety zasiela obeť bráne, resp. brána obeti.

 

Marek Sopko

Zobrazit Galériu

Marek Sopko

Všetky autorove články

Pridať komentár