Guida Reti Simulazione pratica attacco ARP spoofing (man in the middle)

TheWorm91

Helper
31 Marzo 2022
424
49
203
317
Ultima modifica:
arp-spoofing-hero-1-1.png

In questo thread vedremo il funzionamento pratico di un attacco ARP spoofing all'interno di una rete LAN usando Ettercap


1    Introduzione

Il protocollo ARP (address resolution protocol) ha la funzione di identificare univocamente un host su un rete LAN abbinando l'indirizzo IP al relativo indirizzo MAC, cioè l'indirizzo fisico della scheda di rete del dispositivo.
Come funzionamento è analogo al protocollo DNS solo che in questo caso si vanno a identificare solo gli host appartenenti ad una rete locale (associando ip e mac address) e non ad internet (dove invece si associa ip e domain name).
Questo protocollo lavora a livello Data-Link dello stack ISO/OSI corrispondente al network access layer del modello TCP/IP mentre IP fino al livello superiore cioè il livello rete.
Quindi per poter identificare un host all'interno di una rete LAN è necessario conoscere il MAC address dal momento che gli switch non riescono a "vedere" gli indirizzi IP poichè operano fino al livello inferiore Data-Link.
Vediamo brevemente come funziona ARP e successivamente come verrà effettuato l'attacco all'interno di una rete LAN.​

2    Come funziona ARP

Siamo in una rete LAN e l'host A vuole inviare un pacchetto all'host B, l'host A sa che l'host B ha come indirizzo IP 192.168.0.154 e ha bisogno conoscere l'indirizzo MAC di B per poterlo raggiungere all'interno della LAN.
L'host A invierà in broadcast sulla rete LAN un messaggio ARP Request contenente il proprio indirizzo MAC e l'indirizzo IP di B per trovare la giusta corrispondenza tra il MAC address e l'IP (in questo caso dell'host B 192.168.0.154).

Come appena scritto, i messaggi ARP Request sono inviati in modalità broadcast quindi tutti gli host della sottorete ricevono la richiesta: in ciascuno di essi il protocollo ARP verifica, confrontando l'IP proprio con quello inviato, se viene richiesto il proprio MAC Address.
L'host di destinazione che riconoscerà il proprio indirizzo IP nel pacchetto di ARP-Request (host B dell'esempio), provvederà ad inviare una risposta (ARP Reply) in modalità unicast contenente il proprio MAC direttamente all'host mittente (in questo caso A).
Questo scambio di messaggi broadcast va a generare parecchio traffico sulla rete, soprattutto per reti lan con molti terminali.

Per evitare di utilizzare continuamente ARP prima di inviare ciascun pacchetto con conseguente aumento del traffico che porterebbe a un congestionamento e a ritardi sulla rete, ogni host di una sottorete LAN ha una tabella che contiene le varie corrispondenze tra indirizzi IP e relativi indirizzi MAC detta ARP CACHE o ARP TABLE.

Esempio di ARP table:​
HOST
Indirizzo IP
Indirizzo MAC
Host A​
192.168.0.44​
49-BD-D2-C7-56-2A​
Host B​
192.168.0.154​
55-3A-BB-1D-55-6D​
Host C​
192.168.0.222​
1F-2A-3B-2D-C4-C7​

Infatti quando A riceve la risposta da B aggiornerà la propria arp cache e inserirà l'indirizzo MAC di B.
Se nella ARP cache è già presente la corrispondenza cercata tra IP e MAC address non verrà inviato sulla rete il messaggio ARP Request ma il valore sarà ricavato direttamente dalla cache locale del dispositivo, evitando traffico sulla rete.
Le informazioni contenute nella cache ARP vengono cancellate dopo un certo periodo dall'ultima occorrenza in base al Time-To-Live impostato (TTL).​
Per incrementare ulteriormente le prestazioni esistono anche altri stratagemmi di caching, se infatti un host riceve una ARP reply (anche non sollecitata) esso la memorizzerà in cache.

Concetto molto importante (più avanti vedremo perchè):
L'arrivo di un ARP-request ad un host aggiorna completamente la tabella ARP presente nella cache a lei dedicata dal protocollo, senza rispetto per le voci preesistenti nella tabella.
Per ulteriori informazioni, ARP è definito nella RFC 826.​

3    Cos'è un attacco Arp spoofing

L'ARP spoofing o ARP cache poisoning è un tipo di attacco man in the middle (MITM), nel quale un attaccante si interpone nella comunicazione tra due terminali.
Questo tipo di attacco sfrutta la mancanza di autenticazione del protocollo ARP e grazie a questo è possibile sostituire il reale MAC address di un host con il MAC address dell'host attaccante ingannando l'ignara vittima.
Per fare questo l'attaccante invierà delle false risposte ARP agli host che vuole attaccare facendo credere di essere il destinatario legittimo e così potrà ricevere tutti i pacchetti destinati al vero destinatario.
L'attacco MITM può essere di tipo Half-Duplex o Full-duplex a seconda della capacità di riuscire a dirottare solo uno o entrambi i versi della connessione.​
Man-in-the-Middle-768x419.jpg


4    Strumenti per realizzare la simulazione

Per realizzare questa simulazione si useranno le seguenti macchine:​
  • Macchina vittima con S.O. w10 (ma può essere anche linux) con indirizzo IP 192.168.0.154​
  • Macchina attacker interna alla LAN con S.O. una distro linux che può essere kali come debian o altro​
  • Terzo pc sul quale ho installato xampp per realizzare un web server (IP 192.168.0.33) che risponde all'indirizzo provalogin.com​
  • Gateway di rete per intercettare anche i pacchetti che escono dalla rete (non sarebbe necessario dal momento che vado a intercettare il traffico tra due host interni ma l'ho inserito per completezza per intercettare anche i pacchetti in uscita dalla LAN)​
Sulla prima macchina vittima non è necessario installare nessun software particolare (basta che ci sia un browser web).
Sulla macchina attacker è installato il programma Ettercap per realizzare l'attacco e Wireshark per monitorare e catturare i pacchetti sull'interfaccia di rete per verificare che l'esito dell'attacco sia andato a buon fine.
Perchè l'attacco funzioni è necessario essere collegati direttamente alla rete LAN di appartenenza degli host che si vogliono attaccare.
NOTE:
  • Installare Xampp per creare un server web "fatto in casa" in teoria non sarebbe necessario, l'ho fatto perchè avevo la necessità di creare un webpage di login HTTP sulla porta 80 che non fosse cifrata in modo da vedere chiaramente le credenziali intercettate per far capire meglio l'esempio.​
  • Il server web della prova è interno alla sottorete per semplicità di configurazione, avrei potuto anche crearlo esterno alla rete o in un'altra sottorete ma mi avrebbe complicato le cose e non avrebbe fatto la differenza in maniera significativa per la comprensione dell'esempio.​

5    L'attacco in pratica

Sfruttando il comportamento di un host in ricezione di una ARP reply è possibile modificare le ARP cache degli host vittima, mandando delle false ARP reply ai due host che vogliamo attaccare.
Nelle risposte diremo al primo host che il MAC address del secondo host è quello della nostra interfaccia di rete (macchina attacker) e viceversa faremo col secondo host.
Da questo momento in poi tutti i pacchetti che dovrebbero viaggiare tra le vittime saranno in realtà spediti a noi.​
Per realizzare questo attacco MITM Full-Duplex si ricorrerà al software Ettercap sulla macchina attacker mentre per leggere i pacchetti intercettati si userà Wireshark.

Passiamo all'azione:
Sappiamo che nella rete locale c'è un pc con indirizzo ip 192.168.0.154 (la nostra vittima) che si collega ad un webserver con indirizzo provalogin.com ed effettua l'accesso tramite username e password.
login.JPG


Vediamo la cache arp della vittima prima di avviare l'attacco, apriamo il prompt dei comandi di windows e digitiamoarp -a:
arp_cache_ok.png

Notare bene l'indirizzo MAC 00:00:5e:00:01:01 relativo al gateway della rete (IP 192.168.0.254)

A questo punto sulla macchina attacker avviamo Ettercap selezionando la giusta interfaccia che deve stare in ascolto (eth0) :
ettercap.jpg

Nel menu hosts lanciamo la funzione "Scan for hosts" per cercare gli host attivi sulla rete.
Dobbiamo trovare la macchina vittima e l'indirizzo del gateway di rete, una volta trovati selezioniamo i relativi ip e gli aggiungiamo a TARGET1 e a TARGET2 con i tasti "Add to Target 1" e "Add to Target 2" (l'ordine non ha importanza)
arp_spoof_1.jpg

Inserisco prima l'host 192.168.0.154 in TARGET1 poi cerco il gateway...
arp_spoof_2.jpg

... e lo inserisco in TARGET2.
Impostati i target da attaccare andiamo sul menu MITM (tasto con il mappamondo) e selezioniamo "ARP spoofing".
L'ARP poisoning avrà inizio e saremo in grado di intercettare i pacchetti inviati e ricevuti dai target selezionati.
Diamo nuovamente un'occhiata alla arp cache del pc vittima tornando sul prompt dei comandi e rilanciando il comando arp -a:
arp_cache_spoofed.png

Vediamo come il MAC address del gateway (192.168.0.254) a cui si connette la vittima sia diverso rispetto a prima dell'attacco, infatti adesso abbiamo un indirizzo MAC 08:00:27:95:bd:54 ovvero quello della macchina attacker.
HOST (Gateway)​
MAC ADDRESS
PRIMA
192.168.0.254​
00:00:5e:00:01:01
DOPO
192.168.0.254​
08:00:27:95:bd:54

A questo punto dalla macchina vittima effettuiamo il login sul portale inviando le credenziali che verranno intercettate dall'attacker prima di essere inviate al server web.
Aprendo Wireshark sulla macchina attaccante possiamo visualizzare i pacchetti in transito della vittima e impostiamo un filtro per vedere solo i pacchetti HTTP.

Risulta subito evidente il pacchetto HTTP inviato dalla vittima (192.168.0.154) al server web (192.168.0.33) per effettuare il login. Leggendo le informazioni sulla colonna info notiamo POST /login.php HTTP/1.1 ovvero metodo di invio POST sulla pagina php di login e uso del protocollo HTTP versione 1.1.
Nelle informazioni possiamo vedere anche l'hostname contattato, l'User Agent utilizzato (Firefox) e il S.O. della vittima.​
tcpdump2.jpg

Esaminando il pacchetto nel dettaglio possiamo vedere le credenziali in chiaro!
password.jpg

Dove il nome utente è prova e la password è password

6    Conclusioni

Questa era solo una semplicissima prova per far capire come funziona in pratica l'attacco ARP spoofing all'interno di una rete locale.
Questo è un tipo di attacco che viene realizzato raramente dal momento che bisogna avere accesso diretto alla rete dall'interno.
In più bisogna riuscire a codificare i pacchetti in transito, che sono quasi tutti crittografati, per poter carpire delle informazioni.
Quindi chi leggendo il thread poi pensa di essere in grado di rubare le password di altre persone su una LAN è completamente fuori strada... :lamer:
Questo esempio vuol far capire anche come sia fondamentale l'uso di protocolli crittografati come HTTPS e di come sia pericoloso inviare credenziali o dati personali tramite protocolli in chiaro tipo HTTP, è quindi molto importante controllare sempre sulla barra degli indirizzi su che sito stiamo navigando per evitare spiacevoli conseguenze.