Girovagando con un portatile con connessione wifi è sorprendente notare quante reti wireless non protette o debolmente protette (protocollo WEP) ci sono ancora, e sembra che gli ignari proprietari di queste reti non si rendano conto che una rete non protetta porta non solo ad un furto di banda ma anche ad altre pericolose implicazioni come lo sniffing dei dati in transito tra il proprio pc e l’access point.
Programmi come ettercap (disponibile anche per windows) permettono anche ai non esperti e con pochi clic di rubare, ad esempio, le password e i nomi utente che proteggono ad esempio la nostra casella di posta elettronica da occhi indiscreti (a meno che l’autenticazione non sia criptata con protocollo ssl).
Un occhiata dietro le quinte
In una rete switched i pacchetti non vengono inoltrati su tutte le porte del dispositivo, come nelle reti con hub, ma vengono inoltrati soltanto alla porta a cui è collegato il dispositivo corretto che deve essere, quindi, prima identificato. Lo standard ethernet non effettua l’identificazione dei computer connessi alla rete attraverso l’indirizzo ip, ma attraverso il MAC address, per cui è necessario associare il MAC address al relativo indirizzo ip. Per fare ciò il dispositivo, quando riceve un pacchetto da inoltrare, invia un ARP request a tutti i computer della rete chiedendo a quale MAC address corrisponde l’ip di destinazione del pacchetto, la macchina interessata risponde inoltrando un ARP replay soltanto al dispositivo richiedente fornendo il proprio MAC address. Per evitare di intasare la rete con continue ARP request e ARP relay ogni macchina conserva per un certo intervallo di tempo le informazioni in una memoria dedicata chiamata ARP cache.

Esempio di ARP request e ARP replay
L’ARP poisoning (letteralmente avvelenamento dell’ARP) è una tecnica di attacco man-in-the-middle che permette ad un terzo host intrufolatosi nella rete di inviare regolarmente falsi pacchetti ARP replay agli altri due host in modo che entrambi associno l’indirizzo ip dell’altro host con cui vogliono comunicare al MAC address dell’attacante, che in questo modo potrà intercettare e modificare i pacchetti in transito tra i due host.
Un esempio chiarirà le idee, immaginiamo di avere un’ipotetica rete composta da un computer ed un router:
- Computer di Mario Rossi
- ip 192.168.0.2
- MAC address 00:11:22:33:44:55
- Router
- ip 192.168.0.1
- MAC address aa:bb:cc:dd:ee:ff
Durante il normale funzionamento della rete la connessione tra i due host avviene in maniera diretta e corretta e la ARP cache del computer di Mario Rossi conterrà la corretta associazione ip/MAC address del router:
- Router <–> ip 192.168.0.1 <–> MAC aa:bb:cc:dd:ee:ff
Mentre la ARP cache del router conterrà la corretta associazione ip/MAC address del computer di Mario Rossi:
- Mario Rossi <–> ip 192.168.0.2 <–> MAC 00:11:22:33:44:55

Se nella rete si intrufola un terzo computer con:
- Computer attaccante:
- ip 192.168.0.3
- MAC address 01:21:31:41:51
che effettua un attacco l’arp-poisoning le associazioni memorizzate nelle ARP cache del computer di Mario Rossi e del router diventeranno rispettivamente:
- ip 192.168.0.1 <–> 01:21:31:41:51
- ip 192.168.0.2 <–> 01:21:31:41:51
Cioè entrambi assoceranno l’ip del destinatario al MAC address dell’attaccante!
Il computer attaccante farà credere al router di essere Mario Rossi ed a Mario Rossi di essere il router, interrompendo la connessione diretta , ovviamente tutto è invisibile ad entrambi gli host perché il computer attaccante si preoccupa di inoltrare i pacchetti, dopo averli letti e eventualmente modificati 
Il contenuto dell’ARP cache può essere letto con il comando
$: arp -a
Nel caso del computer di Mario Rossi il contenuto dell’ARP cache prima dell’attacco è:

dopo l’attacco diventa:

In pratica
Installiamo ettercap-gtk dai repository (Debian o Ubuntu) digitando in un terminale:
$: sudo apt-get install ettercap-gtk
Avviamo ettercap con il supporto delle gtk:
$: sudo ettercap -G
Selezioniamo la voce Unified sniffing dal menù Sniff, selezioniamo l’interfaccia (solitamente eth0 se si tratta di reti cablate o wlan0 se si tratta di reti wireless) e clicchiamo su ok.
Premiamo Ctrl+S per effettuare la scansione degli host e H per aprire la lista degli host.
Selezioniamo i due host bersaglio assegnandoli rispettivamente al target1 e al target2 utilizzando il tasto Add to Target x.
Selezioniamo Arp poisoning dal menù Mitm, eventualmente spuntiamo la casella Sniff remote connections se vogliamo sniffare anche le connessioni remote e clicchiamo su ok.
Dal menù View selezioniamo le schede che ci interessano (come Connections, Statistics e Profiles) in modo da poter visualizzare maggiori informazioni sugli host.
Premiamo Ctrl+W per iniziare l’attacco ed aspettiamo pazientemente che l’ignaro utente legga la posta elettronica, si colleghi ad Msn oppure visiti un sito protetto da password. Nella scheda connections facendo doppio clic sulla connessione che ci interessa è possibile visualizzare il contentuto del pacchetto sniffato (ad es. il testo di una mail o di un sito), ad esempio cliccando sulla connessione stabilita sulla porta 1863 è possibile leggere, ed eventualmente modificare, il contenuto delle conversazioni Msn. Inoltre quando ettercap sniffa una password ci informa dei dati catturati nella parte bassa della finestra principale, riepilogando user-name, password e sito in cui è stata usata.

Link utili e fonti:
http://it.wikipedia.org/wiki/ARP_poisoning
http://blacklight.gotdns.org/wiki/index.php/ARP
http://blacklight.gotdns.org/wiki/index.php/Man_in_the_middle