Perché conta
Nel capitolo precedente la minaccia con rischio più alto dopo la rete ospiti era la T2: un dispositivo già dentro la LAN che si mette in mezzo al traffico. Qui la rendiamo concreta.
Lo strato 2 è quello che quasi nessuno guarda. Un firewall perimetrale non vede cosa succede dentro la LAN, e i protocolli di livello 2 — ARP, DHCP — sono nati negli anni ‘80 senza nessuna autenticazione. Chi riesce a collegarsi a una porta dello switch può, con pochi pacchetti, diventare l’uomo nel mezzo tra due macchine che si credono sole.
Tutti gli esempi girano nel lab containerlab descritto nella
roadmap: tre nodi (attacker, victim,
gateway) attaccati a uno switch Open vSwitch. Non provate nulla di questo su una rete che non è
vostra.
ARP spoofing: avvelenare la cache
Come funziona
Quando victim (10.0.0.10) vuole parlare con gateway (10.0.0.1), non conosce il suo indirizzo
MAC. Manda in broadcast una richiesta ARP: “chi ha 10.0.0.1?”. Il gateway risponde con il suo MAC,
e la vittima lo mette in cache. Il problema: ARP accetta anche risposte che nessuno ha chiesto, e
non verifica chi le manda.
L’attaccante sfrutta proprio questo. Invia alla vittima una risposta ARP falsa — “10.0.0.1 sono io” — e al gateway un’altra — “10.0.0.10 sono io”. Da quel momento tutto il traffico tra i due passa dall’attaccante.
sequenceDiagram
participant V as victim 10.0.0.10
participant A as attacker 10.0.0.66
participant G as gateway 10.0.0.1
Note over A: invia ARP reply falsi, ripetuti
A->>V: 10.0.0.1 is-at MAC_attacker
A->>G: 10.0.0.10 is-at MAC_attacker
V->>A: traffico per il gateway (crede sia G)
A->>G: lo inoltra (resta in mezzo)
G->>A: risposte per la vittima
A->>V: le inoltra
Note over A: legge e può modificare tutto
L’attacco
Con scapy bastano poche righe. Lo script manda una coppia di reply falsi ogni due secondi, perché le cache ARP scadono e vanno “rinfrescate”:
|
|
Perché l’attaccante possa restare in mezzo e non interrompere la connessione, deve inoltrare i pacchetti che riceve:
|
|
Da victim, prima e dopo l’attacco, la cache ARP mostra il cambio:
|
|
MAC flooding: trasformare lo switch in un hub
Uno switch impara quale MAC sta dietro quale porta e salva la coppia nella CAM table. Quando la tabella è piena, molti switch entrano in fail-open: inoltrano i frame sconosciuti a tutte le porte, come un vecchio hub. L’attaccante può allora sniffare traffico che non gli è destinato.
|
|
Nota sul lab: il vero fail-open della CAM table è un comportamento degli switch hardware. Né i bridge Linux né Open vSwitch lo riproducono fedelmente (gestiscono l’esaurimento in altro modo). Per vederlo sul serio serve uno switch Cisco in GNS3 — lo usiamo nel capitolo 03 per DTP.
DHCP starvation e rogue DHCP
L’attacco ha due tempi. Prima starvation: l’attaccante chiede al server DHCP legittimo tutti gli indirizzi disponibili, con tanti MAC diversi, finché il pool è esaurito. Poi rogue DHCP: accende un proprio server DHCP, che ora è l’unico a rispondere. Assegna alle vittime un gateway e un DNS che controlla lui.
|
|
Il risultato è lo stesso dell’ARP spoofing — l’attaccante diventa il gateway — ma qui le vittime glielo chiedono spontaneamente.
La difesa
Tutte e tre le difese stanno sullo switch, non sugli host. Su uno switch gestito si attivano con tre funzioni che lavorano insieme.
|
|
Le tre righe evidenziate sono il cuore: port-security tappa il MAC flooding, DHCP snooping decide da quali porte può arrivare un’offerta DHCP, e Dynamic ARP Inspection (DAI) usa proprio la tabella costruita da DHCP snooping per scartare le reply ARP che non combaciano.
Con Open vSwitch, che non ha DAI, l’equivalente si ottiene con regole OpenFlow che fissano la
coppia IP–MAC per porta, oppure limitando a una porta sola il traffico DHCP server (udp src port 67).
Lab
Nel lab lab-l2.clab.yml:
- Avviate una cattura su
victim(tcpdump -i eth1 -n). - Dal nodo
attacker, lanciate lo script scapy di ARP spoofing e attivateip_forward. - Da
victim, fateping 10.0.0.1e osservate suattacker(contcpdump) che i pacchetti passano da lì. - Guardate come cambia
ip neighsuvictim.
Domanda: perché la vittima non si accorge di nulla, anche se il ping continua a funzionare?
Perché l'attaccante inoltra i pacchetti (ip_forward=1): la connessione resta viva, la
latenza aumenta di pochissimo, e a livello 3 (IP) tutto sembra normale. L'unico segno è a livello 2:
il MAC associato al gateway è cambiato. È per questo che la difesa sta sullo switch e guarda i MAC,
non sugli host che guardano gli IP. Uno strumento come arpwatch sull'host può segnalare
il cambio di MAC, ma è un allarme, non una difesa: non impedisce l'attacco.
Conclusione
I tre attacchi condividono la stessa radice: a livello 2 nessuno verifica l’identità. La difesa non sta nel rendere “più sicuri” gli host, ma nel dare allo switch il compito di controllare chi dice cosa — port security, DHCP snooping, Dynamic ARP Inspection. Sono funzioni che quasi ogni switch gestito ha e che quasi nessuno attiva.
C’è però un pezzo che manca: fin qui abbiamo dato per scontato che le porte siano già assegnate alla VLAN giusta. Nel prossimo capitolo vediamo come un attaccante può saltare da una VLAN all’altra, e perché la VLAN nativa è il punto debole.
Prossimo nella serie: 03 · VLAN hopping e hardening degli switch · Torna alla roadmap