Mitigare il CAM Table overflow con il Cisco Port Security

Continuiamo con la nostra serie di articoli che, attraverso esempi pratici e semplificati, dimostrano l’applicazioni di strumenti fondamentali nei rispettivi ambiti. È il turno di trattare come Mitigare il CAM Table overflow con il Port Security. I moderni switch eseguono il bridging a livello 2 in maniera molto efficiente fra un numero elevato di porte. Apprendono i MAC address esaminando il MAC address sorgente sui frame in ingresso e memorizzano le mappature fra indirizzi e porte nella loro MAC address table, altrimenti detta CAM (Content Addressable Memory) table. Questa tabella può ospitare un numero limitato di mappature e, se lo spazio viene esaurito, lo switch non può apprendere nuovi indirizzi. In tale evenienza i frame destinati verso MAC address sconosciuti vengono inviati attraverso flooding su tutte le porte attive della relativa VLAN.
Un aggressore potrebbe generare una quantità di frame con spoofed MAC address unico sufficiente ad esaurire lo spazio riservato alla CAM table, costringendo dunque lo switch a lavorare costantemente in flooding e permettendo all’aggressore di intercettare i frame e carpire informazioni sensibili. Senza contare che l’attacco porterebbe a un Denial of Service (DoS) che impatterebbe pesantemente le prestazioni della rete. Consideriamo la seguente topologia di rete e vediamo come mitigare questa tipologia di attacchi:

Osserviamo il contenuto attuale della MAC address table sullo switch lab-sw:

lab-sw>sh mac address-table
Mac Address Table
——————————————————————–
Vlan Mac Address Type Ports
—— —————- —— ——
11 0000.0a0a.0b0a DYNAMIC Gi0/2
11 0000.0a0a.0b0b DYNAMIC Gi0/1
10 0000.0a0a.0a0a DYNAMIC Gi0/3
2 fa16.3ea3.da91 DYNAMIC Gi1/0
3 fa16.3ea0.7581 DYNAMIC Gi1/0
Total Mac Addresses for this criterion: 5

Quindi dalla Kali Linux utilizziamo il noto macof tool per produrre un MAC address flooding di spoofed MAC address unici. L’injection è molto veloce, circa 1 secondo:

root@kali-pc:~#macof -n 1000
ab:34:67:16:f1:3c 6f:7a:7a:15:42:8a 0.0.0.0.23428 > 0.0.0.0.11445: S
625908144:625908144(0) win 512
f3:84:5a:1b:3e:ca 47:6b:8:5c:21:35 0.0.0.0.31474 > 0.0.0.0.38156: S
2035621010:2035621010(0) win 512
f2:df:e0:c:c5:b5 b:4:d7:1f:6a:a 0.0.0.0.46132 > 0.0.0.0.33408: S
432434073:432434073(0) win 512
58:56:9d:3f:72:d0 e8:88:34:4f:df:25 0.0.0.0.39205 > 0.0.0.0.13881: S
1822077350:1822077350(0) win 512
<…Output Removed…>

Osserviamo nuovamente il contenuto attuale della MAC address table sul lab-sw, prestando attenzione ai molteplici MAC address associati alla switchport Gi0/2 nella VLAN 11.

lab-sw>show mac address-table
Mac Address Table
——————————————————————–
Vlan Mac Address Type Ports
—— —————- —— ——
All 0100.0ccc.cccc STATIC CPU
All 0100.0ccc.cccd STATIC CPU
All 0180.c200.0000 STATIC CPU
<…16 internal MAC addresses omitted…>
All 0180.c200.0010 STATIC CPU
All ffff.ffff.ffff STATIC CPU
11 0000.0a0a.0b0b DYNAMIC Gi0/1
11 0291.b05d.3d00 DYNAMIC Gi0/2
11 048e.9e10.80db DYNAMIC Gi0/2
11 0494.3d20.4379 DYNAMIC Gi0/2
11 06cd.2029.37f2 DYNAMIC Gi0/2
11 084e.b956.90e4 DYNAMIC Gi0/2
11 08a4.091f.2109 DYNAMIC Gi0/2
11 0a85.7f31.9e2a DYNAMIC Gi0/2
<…Output Omitted…>

La portata dell’attacco può essere meglio evidenziata mostrando il conteggio dei MAC address relativo alla VLAN 11:

lab-sw>show mac address-table count vlan 11
Mac Entries for Vlan 11:
—————————
Dynamic Address Count : 1002
Static Address Count : 0
Total Mac Addresses : 1002
Total Mac Address Space Available: 53864880

La CAM table offre ancora molto spazio per ospitare nuove mappature ma un tool come il macof può rapidamente esaurire questo spazio.
Le mappature sono soggette ad obsolescenza e vengono rimosse dopo 360 secondi di inattività, quindi l’attacco dovrebbe essere perpetrato nel tempo per sortire l’effetto desiderato. Possiamo comunque rapidamente ripulire le mappature associate alla switchport Gi0/2:

lab-sw>enable
password: Cisco123!
lab-sw#clear mac address-table dynamic int g0/2

Il port security permette di gestire i MAC address a livello di porta, ad esempio assegnando staticamente i MAC address alle switchport, sebbene questa pratica sia poco scalabile e vada bene solo per piccoli ambienti molto statici. Diversamente i MAC address possono essere appresi dinamicamente utilizzando l’opzione sticky. In entrambi i casi i MAC address, statici o sticky-learned, sono mantenuti in memoria anche quando non sono connessi e la porta risulta down.
L’utilizzo più semplice che si può fare del port security è comunque quello di imporre un tetto al numero di MAC address unici visibili su una switchport, impedendo quindi l’overflow della CAM table. In corrispondenza di una violazione il port security può reagire in tre modi: protect, restrict, shutdown. La modalità più restrittiva, che è anche quella di default, è quella di shutdown che pone la porta in stato di error-disabled in corrispondenza di una violazione, oltre ad incrementare il contatore delle violazioni e generare syslog ed opzionalmente SNMP trap. Di default la porta permane in tale stato fino ad un riavvio amministrativo della stessa.
Configuriamo il port security sulla switchport Gi0/3 dello switch lab-sw in modo da permettere fino a 4 MAC address unici e garantire l’enforce della policy con lo shutdown in stato di error-disable

lab-sw#conf t
Enter configuration commands, one per line. End with CNTL/Z.
lab-sw(config)#int range g0/1 – 3
lab-sw(config-if-range)#switchport port-security
lab-sw(config-if-range)#switchport port-security maximum 4
lab-sw(config-if-range)#switchport port-security violation shutdown

CORSI CORRELATI:

Consulta il nostro Catalogo Corsi per Tecnologia oppure fai una Ricerca per Vendor o ancora trova uno specifico corso attraverso il motore di ricerca interno: Ricerca Corsi. Contattaci ora al Numero Verde 800-177596, il nostro team saprà supportarti nella scelta del percorso formativo più adatto alla tue esigenze.

A questo punto riproviamo l’attacco dalla Kali Linux con il macof tool:

root@kali-pc:~#macof -n 1000
b3:9b:26:4f:92:54 19:54:69:65:f0:a7 0.0.0.0.45855 > 0.0.0.0.56063: S
185646499:185646499(0) win 512
ba:66:5b:50:64:b3 8:89:a8:4a:a:16 0.0.0.0.40978 > 0.0.0.0.23166: S
521391550:521391550(0) win 512
58:b5:2b:63:7c:ff fa:cb:5b:77:ee:58 0.0.0.0.17789 > 0.0.0.0.42338: S
674922388:674922388(0) win 512
<…Output Omitted…>

Sulla console dello switch lab-sw possiamo osservare una serie di syslog prodotti durante l’attacco:

lab-sw(config-if-range)#
Mar 30 22:16:33.206: %PM-4-ERR_DISABLE: psecure-violation error detected on Gi0/2,
putting Gi0/2 in err-disable state
Mar 30 22:16:33.223: %PORT_SECURITY-2-PSECURE_VIOLATION: Security violation
occurred, caused by MAC address 4ed5.1d17.817f on port GigabitEthernet0/2.
Mar 30 22:16:34.221: %LINEPROTO-5-UPDOWN: Line protocol on Interface
GigabitEthernet0/2, changed state to down
Mar 30 22:16:35.228: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state
to down

Possiamo anche osservare lo stato delle interfacce dello switch lab-sw con la switchport gi0/2 in stato di error-disabled:

lab-sw(config-if-range)#do show int status
Port Name Status Vlan Duplex Speed Type
Gi0/0 disabled 1 auto auto unknown
Gi0/1 win-pc connected 11 auto auto unknown
Gi0/2 kali-pc err-disabled 11 auto auto unknown
Gi0/3 kali-srv connected 10 auto auto unknown
Gi1/0 uplink connected trunk auto auto unknown
Gi1/1 connected 1 auto auto unknown
Gi1/2 connected 2 auto auto unknown
Gi1/3 connected 3 auto auto unknown

Poiché di default non sono attive opzioni di auto-recovery della porta dallo stato di error-disabled, dobbiamo intervenire amministrativamente mettendo in shutdown la porta e poi riabilitandola:

lab-sw(config-if-range)#int g0/2
lab-sw(config-if)#shutdown
*Jul 8 12:05:40.412: %LINK-5-CHANGED: Interface GigabitEthernet0/2, changed state
to administratively down
lab-sw(config-if)#no shutdown
*Jul 8 12:05:57.420: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state
to up
*Jul 8 12:05:58.421: %LINEPROTO-5-UPDOWN: Line protocol on Interface
GigabitEthernet0/2, changed state to up

Verifichiamo dunque che la switchport Gi0/2 sia tornata alla normalità:

lab-sw(config-if)#do show int status
Port Name Status Vlan Duplex Speed Type
Gi0/0 disabled 1 auto auto unknown
Gi0/1 win-pc connected 11 auto auto unknown
Gi0/2 kali-pc connected 11 auto auto unknown
Gi0/3 kali-srv connected 10 auto auto unknown
Gi1/0 uplink connected trunk auto auto unknown
Gi1/1 connected 1 auto auto unknown
Gi1/2 connected 2 auto auto unknown
Gi1/3 connected 3 auto auto unknown

Consulta il nostro Catalogo Corsi per Tecnologia oppure fai una Ricerca per Vendor o ancora trova uno specifico corso attraverso il motore di ricerca interno: Ricerca Corsi. Contattaci ora al Numero Verde 800-177596, il nostro team saprà supportarti nella scelta del percorso formativo più adatto alla tue esigenze.

RICHIEDI ORA IL SUPPORTO DI UN NOSTRO SPECIALISTA

Il nostro team, da anni impegnato nella progettazione di piani formativi strutturati nell’ambito dell’ IT, ti supporterà ad orientarti verso la scelta di un percorso formativo certificato rispondente alle tue esigenze.