Arp Attack
Una delle principali e più efficaci tecniche di attacco ad una rete Local Area Network (LAN) è l’ARP poisoning (avvelenamento) e spoofing (raggiro), che permette di attuare un Man in The Middle (MITM) ai danni delle macchine che appartengono allo stesso segmento di rete.
Ma procediamo per passi.
Che cos’è l’Address Resolution Protocol (ARP)?
Il protocollo Address Resolution Protocol (ARP) opera al secondo livello del modello ISO/OSI, Data Link (sotto di esso c’è solo il layer fisico). All’interno di una rete, qualsiasi host voglia conoscere l’indirizzo fisico di un altro host (il MAC Address), invia una “richiesta ARP” in broadcast sulla rete (ad ogni device).
In questo modo, tutti i device all’interno della rete riceveranno una richiesta con il MAC della macchina da cui è stata originata e l’indirizzo IP della macchina del destinatario. L’host che riconosce il proprio IP risponderà con un “ARP Reply” contenente il proprio MAC, inviandolo direttamente al mittente.
Sostanzialmente, equivale ad urlare in una stanza affollata: «Chi è il proprietario della macchina targata 192.168.178.80?». Riposta: «La macchina è mia! Mi chiamo 08:00:27:a1:26:6a». Se la richiesta venisse eseguita per tutte le auto nel parcheggio, sapremmo a chi appartiene ogni singola macchina.
Il Media Access Control (MAC).
È chiamato anche indirizzo fisico ed è un codice di 48 bit assegnato in modo univoco ad una device card (una scheda circuitale) nota come Network Interface Card (NIC) o più semplicemente scheda di rete, che ha il compito di trasformare in segnali elettrici le informazioni che trasmettiamo sulla rete. L’indirizzo fisico del NIC è il MAC Address ed ogni qual volta un indirizzo IP viene associato mediante il protocollo TCP/IP, il MAC Address viene collegato all’hardware della scheda di rete.
Struttura del MAC Address:
L’indirizzo MAC è composto da sei ottetti sperati da un trattino, ad esempio: be:a0:f0:7a:48:71
Le prime sei cifre (i primi tre ottetti) del MAC, solitamente in notazione esadecimale, sono detti Organizationally Unique Identifier (OUI) ed identificano il produttore dell’interfaccia di rete; le successive cifre rappresentano il numero di serie della scheda di rete.
Identificare il produttore dall’indirizzo MAC:
Se siamo a conoscenza dell’indirizzo MAC possiamo ricercare i dettagli relativi al produttore (nome dell’azienda, indirizzo e paese). Solitamente all’interno della distro Linux è già presente il database OUI e per individuarlo possiamo utilizzare il comando:
$ locate oui.txt
Come noterete, il file sarà presente all’interno della directory: /var/lib/ieee-data/oui.txt
Se così non fosse, basterà scaricarlo all’indirizzo: http://standards-oui.ieee.org/oui/oui.txt utilizzando il comando wget:
$ wget http://standards-oui.ieee.org/oui/oui.txt
Il database è un file di testo che potremmo interrogare mediante un modulo di Python3 oppure utilizzando direttamente il tool: ouilookup
Per installarlo utilizziamo il comando:
$ pip3 install ouilookup
Lanciamo Python3.
$ python3
Una volta che python si sarà avviato, per prima cosa importiamo il nostro modulo ouilookup.
>>> from OuiLookup import OuiLookup
Eseguiamo il test di lookup sull’indirizzo MAC del nostro Router attingendo dal file oui.txt
>>> OuiLookup().query(’08:00:27:D3:34:59’)
ARP SPOOFING ATTACK:
Ora che abbiamo individuato tutti gli elementi che concorrono nell’attuazione di questo attacco, passiamo all’azione.
INTRO – IL NOSTRO LABORATORIO
- La nostra macchina attaccante sarà una Kali Linux, avente IP : 168.1.3 e MAC Address: 08:00:27:f5:9c:08
- Il nostro target, una macchina Windows 10x64bit aggiornata, con Kaspersky Security Cloud installato (anch’esso aggiornato), avente IP:168.1.10 e MAC Address: 08-00-27-E3-35-3A
- Il nostro Router sarà una macchina virtuale Debian avente IP: 168.1.100 e MAC Address: 08:00:27:d3:34:59
Creiamo il nostro Router Virtuale
Per la creazione del nostro router ho utilizzato una distro Debian, scaricabile al seguente indirizzo: https://www.debian.org/index.it.html selezionando “Download”.
Una volta installata all’interno del nostro ambiente di virtualizzazione, procediamo alla sua configurazione.
Avviamo la nostra nuova macchina virtuale ed apriamo un terminale. Digitando il comando ip a vedremo la nostra interfaccia di rete.
Passiamo adesso alla configurazione della scheda di rete tramite il file “interfaces”, che consente di impostare un’interfaccia ethernet assegnando IP, routing, netmask, gateway etc…
Editiamo il file utilizzando il comando:
$ sudo nano /etc/network/interfaces
Spostiamoci al termine del file e specifichiamo le seguenti opzioni:
auto enp0s3
iface enp0s3 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 |
- auto enp0s3 : start dell’interfaccia all’avvio del sistema
- iface enp0s3 : creazione dell’istanza dell’interfaccia enp0s3
- inet static: definisce come verrà assegnato l’indirizzo IP all’interfaccia (nel nostro caso lo assegneremo manualmente in maniera statica).
- address: l’indirizzo IP che abbiamo deciso di assegnare all’interfaccia, in maniera statica
- netmask: la Network mask
- gateway: l’indirizzo IP del gataway di default
Come possiamo vedere dall’immagine [2_Schema_di_rete.JPG], la nostra vittima e la macchina attaccante sono configurati per utilizzare come router la macchina Debian, appena configurata.
L’ATTACCO
L’attacco di ARP Spoofing, anche conosciuto come ARP poisoning, ci permette di intercettare le comunicazioni fra due dispositivi di rete.
Dalla macchina attaccante invieremo un falso messaggio di ARP reply alla nostra macchina vittima, informandola che il suo indirizzo MAC deve essere associato all’ indirizzo IP del router-Debian.
Gli attacchi di ARP Poisoning agiscono manipolando protocolli di livello 2 (modello ISO/OSI), quindi gli utenti presi di mira da ARP Poisoning raramente si rendono conto del dirottamento del loro traffico. Oltre agli attacchi Man-in-the-Middle, l’ARP Poisoning può essere utilizzato per causare Denial-of-Service (DoS) su una LAN, semplicemente intercettando o rilasciando e non inoltrando i pacchetti del bersaglio.
Passiamo quindi all’azione. Come prima cosa vediamo come si presenta la tabella arp originale all’interno della nostra macchina vittima. Dopo aver aperto il command prompt sulla macchina bersaglio, digitiamo il comando arp –a .
Come possiamo osservare, la tabella arp è popolata da diversi indirizzi IP e dai loro corrispettivi indirizzi MAC, quindi la situazione iniziale della tabella è:
- Default Gateway: 192.168.1.1
- Macchina Router : 192.168.1.100 MAC ADDRESS: 08:00:27:d3:34:59
- Macchina VITTIMA: 192.168.1.10 MAC ADDRESS: 08-00-27-E3-35-3A
- Macchina ATTACCANTE: 192.168.1.3 MAC ADDRESS: 08:00:27:f5:9c:08
Spostiamoci all’interno della macchina attaccante ed apriamo un terminale. Abilitiamo come prima cosa l’IP forwarding, in modo che la nostra macchina agisca come un Router trasferendo i pacchetti IP da una rete ad un’altra.
$ echo 1 > /proc/sys/net/ipv4/ip_forward
Adesso utilizziamo arpspoof per procedere con l’attacco:
$ arpspoof -i eth0 -t 192.168.1.10 -r 192.168.1.100
NOTA: se arpspoof non è presente, ci basterà installarlo utilizzando apt-get
$ apt-get install dsniff |
- arpspoof: comando
- -i: interfaccia network
- eth0 : nome della nostra interfaccia
- -t : target, ovvero IP address della macchina da “Spooffare”
- 168.1.10 : IP della macchina bersaglio
- -r : opzione per specificare l’IP del default Gateway
- 168.1.100 : IP del default Gataway (la nostra macchina router-Debian)
Torniamo adesso sulla nostra macchina vittima e proviamo ad analizzare nuovamente la tabella ARP, con il comando arp –a.
Se l’attacco avrà avuto successo, in corrispondenza dell’IP del nostro router-Debian 192.168.1.100 non troveremo più il MAC Address reale 08:00:27:d3:34:59 , poiché sarà stato falsificato (e quindi sostituito) da quello della nostra macchina attaccante 08:00:27:f5:9c:08: . Tutto il traffico della nostra vittima passerà adesso attraverso la nostra macchina attaccante.
ANALIZZIAMO I PACCHETTI
Utilizziamo ora un packet analyzer, ad esempio Wireshark, per osservare più da vicino cosa sta accadendo.
Per avviarlo in versione GUI utilizziamo il comando:
$ wireshark
Selezioniamo l’interfaccia con cui vogliamo effettuare la cattura dei pacchetti (eth0).
Wireshark inizierà così la cattura del traffico. Sulla barra in alto applichiamo il filtro per restringere il range relativo al protocollo di cattura: arp
Come ci aspettiamo, osservando i pacchetti vedremo l’attacco in atto: la nostra macchina attaccante invia ARP-reply verso la vittima, comunicandole che il proprio MAC va associato all’indirizzo IP del router-Debian.
ARP SPOOFING USANDO ETTERCAP – MAN IN THE MIDDLE
Uno dei tool più completi per effettuare questo tipo di attacchi è Ettercap. Per avviarlo tramite interfaccia grafica, utilizziamo da terminale il comando ettercap –G (dalla macchina Kali).
Dal menu selezioniamo l’interfaccia primaria (eth0 nel nostro caso) ed abilitiamo l’opzione di sniffing. Clicchiamo sulla spunta “Accept” in alto a destra.
Dobbiamo adesso selezionare i nostri target. Sempre in alto a destra, clicchiamo sui tre puntini “Ettercap Menu”. Selezioniamo la voce “Hosts” e infine clicchiamo sull’opzione “Scan for Hosts”.
Una volta che Ettercap avrà terminato la scansione, per visualizzare gli hosts trovati dovremo ancora una volta cliccare sul “Ettercap Menu”, selezionare la voce “Hosts” e cliccare su “Hosts list”.
Adesso selezioniamo la nostra vittima, che sappiamo essere il 192.168.1.10. Quindi scegliamola dal menù degli hosts e clicchiamo su “Add to Target 1” (al centro dell’interfaccia). Rifacciamo la stessa cosa con il nostro router-Debian il 192.168.1.100 , questa volta aggiungendolo come “Add Target 2”.
Non ci resta che lanciare l’attacco. In alto a destra clicchiamo sull’icona “MITM Menu” e selezioniamo la tipologia: “ARP poisoning”.
Ecco che l’attacco ha avuto inizio!
ARP SPOOFING USANDO ETTERCAP – SNIFFING DI CREDENZIALI
Seguendo il nostro schema di rete, ci troviamo adesso nella seguente condizione:
Lasciamo per un attimo la nostra macchina Kali con l’attacco in atto e supponiamo che la nostra macchina router-Debian ospiti una pagina di login di una web app, su cui la nostra vittima si autenticherà.
Come prima cosa creiamo la nostra login page di test. Spostiamoci sulla nostra macchina router-Debian ed installiamo apache, utilizzando il comando:
$ sudo apt install apache2
NOTA: sul nostro router-Debian non abbiamo configurato nessun DNS, quindi la macchina non riesce a tradurre il nome di un dominio nel corrispondente IP e viceversa. Se vogliamo procedere alla loro configurazione ci basterà inserire all’interno del file /etc/resolv.conf :
nameserver [indirizzo_1 ip del dns-server che preferiamo] nameserver [indirizzo_2 ip del dns-server che preferiamo] |
Ad installazione terminata assicuriamoci che il servizio sia in esecuzione:
$ sudo systemctl status apache2
Qualora non lo fosse, digitiamo:
$ service apache2 start
Portiamoci all’interno della cartella /var/www/html utilizzando il comando cd.
Se nessun editor di testo è installato, utilizziamo nano per creare un file chiamato login.html:
$ nano login.html
Incolliamo (ad esempio) il seguente codice
Salviamo il nostro file utilizzando la combinazione ctrl+X e poi Y. A questo punto, la nostra semplice maschera di login è pronta.
Spostiamoci sulla macchina vittima e supponiamo che, come di consueto, il nostro ignaro utente vada sulla maschera di login all’indirizzo del nostro router-Debian, al fine di autenticarsi. Apriamo quindi il browser e digitiamo:
http://192.168.1.100/login.html
La vittima, ignara dell’attacco in atto, digiterà le credenziali di accesso.
Inseriamo nei campi username e password e clicchiamo su Login.
Sfruttando l’ARP poisoning, non appena l’utente avrà inviato le credenziali (in chiaro) tramite la maschera di login, tutto il traffico passerà prima dalla nostra macchina Kali. Infatti tornando sulla macchina attaccante, tramite Ettercap ci sarà possibile vedere le credenziali che “l’utente” ha appena inserito!
user: arp
password: hackerjournal