# ARP poisoning

Nell'ambito della sicurezza informatica, l'ARP poisoning (lett. "avvelenamento dell'ARP" o "falsificazione dell'ARP") è una tecnica di hacking che consente ad un attacker, in una switched lan, di concretizzare un attacco di tipo man in the middle verso tutte le macchine che si trovano nello stesso segmento di rete quando queste operano a livello 3 cioè di internetworking con altre sottoreti scambiandosi traffico IP grazie al ricorso ad opportune manipolazioni tramite i protocolli di livello 2. L'ARP poisoning è oggi la principale tecnica di attacco alle lan commutate. Consiste nell'inviare intenzionalmente e in modo forzato risposte ARP contenenti dati inesatti o, meglio, non corrispondenti a quelli reali. In questo modo la tabella ARP (ARP entry cache) di un host conterrà dati alterati (da qui i termini poisoning, letteralmente avvelenamento e spoofing, raggiro). Molto spesso lo scopo di questo tipo di attacco è quello di ridirezionare, in una rete commutata, i pacchetti destinati ad un host verso un altro al fine di leggere il contenuto di questi per catturare le password che in alcuni protocolli viaggiano in chiaro.

## Introduzione

L'esigenza di praticare questo attacco è dovuta al fatto che ormai nelle recenti reti ethernet gli hub sono stati sostituiti dagli switch, i quali a differenza dei primi, grazie alla CAM table, permettono di inoltrare il traffico soltanto all'host di destinazione rendendo così inefficace qualsiasi tentativo di sniffing (nelle vecchie reti con hub, infatti, tutti i pacchetti arrivano a tutti gli host, e non c'è quindi necessità di modificare il proprio MAC address per ricevere i pacchetti destinati ad un altro host).

## Funzionamento

Questo attacco si basa su una debolezza intrinseca nel protocollo ARP: la mancanza di un meccanismo di autenticazione.
Ethernet, il più diffuso standard per le reti locali, identifica gli host in base ad un indirizzo a 48 bit chiamato MAC, a differenza di Internet, dove ciascun host viene mappato grazie ai 32 bit del protocollo IP.
Il protocollo ARP si occupa di gestire l'associazione tra indirizzi IP e indirizzi MAC. Quest'associazione, in Ethernet, viene fatta prima di ogni tipo di comunicazione. Sono previsti due tipi di messaggi dal protocollo ARP: ARP request (effettuata in broadcast) e ARP reply (effettuata in unicast). Un ipotetico host 192.168.1.1 che vuole comunicare con l'host 192.168.1.2 manderà una ARP request in broadcast con il proprio MAC, il proprio indirizzo IP e l'indirizzo IP di destinazione; quando 192.168.1.2 riceverà l'ARP request risponderà con un'ARP reply destinato al MAC sorgente e contenente il proprio MAC. Per ottimizzare le prestazioni e limitare il traffico queste informazioni (associazione indirizzo IP/indirizzo MAC) vengono memorizzate nella tabella ARP (ARP cache) di ciascun host così che non sia necessario effettuare continue richieste per successivi eventuali indirizzamenti verso terminali host già noti. Per migliorare ancora di più le prestazioni quando si ricevono delle ARP reply (alcuni anche con le ARP request), anche se non sollecitate, gli host aggiornano le informazioni della propria ARP cache.
Solaris implementa una gestione personalizzata delle ARP request/reply, infatti aggiorna i record della propria tabella ARP solo se sono già presenti. Questo è un problema in più, per l'attacker, anche se è di facile risoluzione: basta infatti inviare un pacchetto ICMP echo request all'host Solaris per costringerlo a rispondere ed inevitabilmente usare l'ARP aggiungendo così un record alla propria tabella ARP.
Ora si analizzi il seguente scenario:
* Attacker: IP = 192.168.1.2, MAC = 00:00:00:ZZ:ZZ:ZZ
* John: IP = 192.168.1.13, MAC = 00:00:00:JJ:JJ:JJ
* Linus: IP = 192.168.1.88, MAC = 00:00:00:LL:LL:LL
Le ARP cache di ciascun host prima dell'attacco saranno:
* Per l'attacker:
** 192.168.1.2, MAC = 00:00:00:ZZ:ZZ:ZZ
** 192.168.1.13, MAC = 00:00:00:JJ:JJ:JJ
** 192.168.1.88, MAC = 00:00:00:LL:LL:LL
* Per John:
** 192.168.1.2, MAC = 00:00:00:ZZ:ZZ:ZZ
** 192.168.1.13, MAC = 00:00:00:JJ:JJ:JJ
** 192.168.1.88, MAC = 00:00:00:LL:LL:LL
* Per Linus:
** 192.168.1.2, MAC = 00:00:00:ZZ:ZZ:ZZ
** 192.168.1.13, MAC = 00:00:00:JJ:JJ:JJ
** 192.168.1.88, MAC = 00:00:00:LL:LL:LL
Per realizzare l'ARP poisoning l'attacker invierà delle ARP reply opportunamente costruite/modificate: a John invierà una reply che ha come IP quello di Linus (192.168.1.88) ma come MAC il proprio (00:00:00:ZZ:ZZ:ZZ), a Linus invierà una reply con IP quello di John (192.168.1.13) e con MAC, anche questa volta, il proprio (00:00:00:ZZ:ZZ:ZZ). Per protrarre l'attacco è necessario inviare delle ARP reply ogni 10 secondi poiché spesso i sistemi operativi cancellano sistematicamente le voci dell'ARP cache dopo un certo periodo di tempo.
Quindi dopo l'attacco le ARP cache di ciascun host saranno appunto avvelenate ovvero falsificate o corrotte:
* Per l'attacker:
** 192.168.1.2, MAC = 00:00:00:ZZ:ZZ:ZZ
** 192.168.1.13, MAC = 00:00:00:JJ:JJ:JJ
** 192.168.1.88, MAC = 00:00:00:LL:LL:LL
* Per John:
** 192.168.1.2, MAC = 00:00:00:ZZ:ZZ:ZZ
** 192.168.1.13, MAC = 00:00:00:JJ:JJ:JJ
** 192.168.1.88, MAC = 00:00:00:ZZ:ZZ:ZZ
* Per Linus:
** 192.168.1.2, MAC = 00:00:00:ZZ:ZZ:ZZ
** 192.168.1.13, MAC = 00:00:00:ZZ:ZZ:ZZ
** 192.168.1.88, MAC = 00:00:00:LL:LL:LL
Quando le due vittime, John e Linus, instaureranno una comunicazione tra loro, crederanno di comunicare reciprocamente, ma in realtà comunicheranno con l'attacker il quale, per mostrare trasparenza e regolarità nella comunicazione tra i due host e continuare quindi a sniffare il relativo traffico, inoltrerà il traffico proveniente da John verso Linus e viceversa il traffico proveniente da Linus verso John, realizzando così un MITM.
Dopo aver concretizzato il MITM, l'attacker sarà quindi in grado di sniffare ovvero leggere tutto il traffico in chiaro come password telnet, ftp, pop3, irc, ecc. ed eventualmente anche modificare e creare nuovi pacchetti.

### Implementazione

Esistono svariati tool per attacchi di questo tipo, ma probabilmente il più completo è Ettercap, disponibile per diversi sistemi operativi come Linux, *BSD, Windows e macOS. Questo evoluto e potente strumento offre molte possibilità di configurazione. È possibile usarlo sia via gui che via riga di comando. Esiste inoltre la possibilità di creare dei filtri personalizzati, per lo sniffing, usando un linguaggio derivato dal Berkeley Packet Filter. Con Ettercap per realizzare un ARP poisoning e il conseguente MITM, basta dare il seguente comando:
Per effettuare l'arp poisoning sull'intero segmento di rete, basterà questo comando:

### Tracce lasciate

Le tracce lasciate dall'attaccante sono costituite dal proprio MAC address contenuto nella ARP cache delle vittime e questo fatto è effettivamente sfruttato in alcune tecniche di protezione da questo tipo di attacco tramite semplice rilevazione delle anomalie.

## Contromisure

L'utilizzo di IPv6, IPsec o di tabelle ARP statiche sono metodi che possono rivelarsi una difesa efficace contro attacchi di tipo ARP spoofing. Ovviamente è impensabile mantenere aggiornate le tabelle ARP di ogni host in una rete di grande dimensioni per tener traccia di eventuali discordanze tra indirizzo Ip e indirizzo MAC nell'attacco. Altre soluzioni potrebbero essere:
* Una soluzione open source è ArpON "ARP handler inspection". ArpON è un demone portabile che rende il protocollo ARP sicuro contro attacchi Man in The Middle (MITM) attraverso tecniche ARP Spoofing, ARP Cache Poisoning, ARP Poison Routing (APR).
* usare un software come arpwatch che esamina le attività di rete e ne evidenzia le discordanze o come OpenAAPD, un demone anti ARP poisoning per OpenBSD o ancora un intrusion detection system (IDS) come Snort.
* usare il port security sugli switch ovvero fare in modo che per ciascuna porta del dispositivo possa esserci solo un MAC address.
* SARP ovvero Secure ARP, un'estensione del protocollo ARP che si basa sulla crittografia asimmetrica, così da poter autenticare il mittente.

## Utilizzo legittimo dell'ARP spoofing

L'ARP spoofing può essere utilizzato anche per fini legittimi. Un esempio può essere quello di tool di autenticazione di rete che effettuino la redirezione di host non registrati ad una pagina di login prima di permetterne il completo accesso alla rete, come nel caso della tecnica Captive portal.

## Tecniche alternative

Esistono tecniche alternative all'ARP poisoning per effettuare lo sniffing su switched lan. Il MAC flooding infatti, permette di sfruttare una debolezza nel funzionamento degli switch, basata sul fatto che la CAM table, la memoria con cui questi dispositivi tengono traccia dei MAC address e della relativa porta associata, ha risorse finite. Quando questa viene inondata da MAC address, che ne esauriscono le risorse, lo switch entra in uno stato detto fail open e invia il traffico a tutte le porte, proprio come un qualsiasi hub, rendendo possibile lo sniffing. Talvolta alcuni switch non entrano in fail open ma in fail close bloccando così tutte le porte e quindi tutto il traffico dell'intero segmento di rete. Questo tipo di attacco, coinvolgendo solo gli indirizzi MAC e non gli indirizzi IP, può essere considerato dunque di livello 2. Sempre di livello 2 è anche l'attacco di Port stealing.