Consulenze presso Eunet srl, via dell'Artigianato 15, 09122 Cagliari 070 753609 Lun - Ven 08:30-13:00 / 14.30-17.00

Firewall Cisco CBAC: Context-Based Access Control

In questo documento descriveremo i meccanismi di CBAC, una soluzione per il firewalling disponibile con Cisco IOS Firewall. I router che eseguono l'IOS Firewall possono svolgere il compito sia di router che di firewall di livello enterprise.

Il termine firewall fa riferimento alle pareti tagliafuoco tipiche delle costruzioni abitative, che impediscono alle fiamme di diffondersi tra ambienti e strutture collegate. Allo stesso modo, in una rete, il firewall tiene distinte le zone protette, tipicamente LAN interne e DMZ, da quelle non sicure, come le WAN, impedendo agli utenti non autorizzati di accedere alle risorse interne.

 

Tipi di firewall

Esiste una classificazione dei diversi tipi di firewall, basata sui metodi di analisi che un firewall è in grado di eseguire. Riportiamo di seguito l’elenco dei tipi principali, in ordine crescente di complessità:

  • Packet filter: si limitano a valutare gli header di ciascun pacchetto, decidendo quali far passare e quali no sulla base delle sole regole configurate (ACL). Questo tipo di firewall è detto anche stateless, ed è presente in tutti i router. Alcuni packet filter, analizzando i flag dell'header TCP, sono in grado di discriminare un pacchetto appartenente ad una "connessione TCP stabilita (established)" rispetto a quelli che iniziano una nuova connessione, ma non sono in grado di riconoscere un pacchetto malevolo che finga di appartenere ad una connessione TCP stabilita. Filtrano le informazioni ai livelli 3 e 4 della pila OSI. I packet filter non sono considerati una soluzione completa di firewalling.
  • Stateful inspection, tengono traccia delle relazioni tra i pacchetti che lo attraversano: utilizzano una tabella dove tracciare informazioni relative allo stato di una connessione. Le tecnologie stateful filtering riescono ad analizzare il traffico sino ai livelli 4 (trasporto) e 5 (sessione). Ad esempio, negli header dei pacchetti di livello 4, vengono analizzate informazioni sui campi SYN (syncronize), RST (reset), ACK (acknowledgment), FIN (finish). Quando il firewall deve concedere l’accesso ad un pacchetto proveniente dall’esterno, confronta le informazioni ricevute con quelle registrate per quella connessione; se c’è corrispondenza, l’accesso sarà consentito.
  • Application Layer Firewall, sono apparati che intercettano le connessioni sino al livello applicativo. Filtrano le informazioni ai livelli 3, 4, 5 e 7 della pila OSI.

 

CBAC: Context-Based Access Control


CBAC fornisce un filtraggio Stateful sino al livello applicativo, arrivando a bloccare applicazioni specifiche, come peer-to-peer (P2P) o Instant messaging. Le sue funzioni principali sono 4: traffic filtering, traffic inspection, intrusion detection, e generazione di allarmi.

La capacità di analisi sino al livello 7 permette la gestione di protocolli che generano molteplici canali di comunicazione, come FTP. La caratteristica stateful permette di mantenere una connection table dove registrare informazioni sulle connessioni in corso; queste informazioni vengono utilizzate per generare ACL dinamiche che permettono il ritorno del traffico sul router. Questo concetto è molto simile a quello delle ACL reflexive.

 

Protezione delle connessioni TCP

Con CBAC si possono rilevare e bloccare specifici attacchi di rete come DoS e SYN-flooding. Ricordiamo che l’apertura di una connessione TCP prevede tre fasi (three-way handshake):

Il client genera un segmento col flag SYN settato a 1 (sincronizzazione) e specificando un numero di sequenza iniziale (ISN, Initial Sequence Number) casuale, che chiameremo X.

 

Lato server  viene generato un segmento contenente i flag SYN e ACK settati a 1, un numero di sequenza casuale che chiameremo Y, ed il campo Acknowledgment number con un valore pari a X + 1;

 

Il client risponde con un segmento contenente (nel campo ACK)  l’ISN-Y + 1, come conferma di ricezione dell’ISN del server.

 

Il syn-flood prevede l’invio massivo di messaggi TCP di tipo SYN (syncronize) per richiedere l’apertura di una sessione TCP, senza l’invio dell’ACK finale che chiude la fase del TCP three-way handshake. Il server rimarrà in attesa del messaggio ACK per un certo periodo di tempo, dal momento che la normale congestione della rete potrebbe essere la causa del messaggio ACK mancante. In quel lasso di tempo le risorse del server risulteranno impegnate, ed il server stesso risulterà esposto ad attacchi di tipo DoS.

CBAC interviene contro questi attacchi analizzando il numero di sequenza nei pacchetti TCP, per verificare se tale numero rientri nel range previsto da quella specifica sessione. Ogni pacchetto sospetto verrà bloccato e le connessioni TCP “sospese” verranno chiuse.

Cisco IOS Firewall fornisce 3 opzioni contro gli attacchi TCP di tipo DoS:

  • Numero massimo di sessioni TCP semiaperte (half-opened)
  • Numero massimo di sessioni TCP semiaperte in un intervallo di tempo
  • Numero massimo di sessioni TCP per host

Se i valori rilevati eccedono quelli configurati dall’amministratore, il firewall ha due opzioni:

  • Invia un messaggio di reset agli host che hanno la sessione sospesa più vecchia;
  • Blocca temporaneamente tutti i pacchetti SYN, per una durata corrispondente al valore soglia configurato: in questa situazione, nessun altro handshake TCP può essere iniziato, evitando in questo modo il consumo di memoria e di risorse.

Per quanto riguarda il rilevamento delle intrusioni, CBAC è in grado di bloccare molti tipi di attacchi che hanno determinate caratteristiche e firme (struttura e sequenza). Al rilevamento di un attacco, le connessioni vengono chiuse e vengono inviati dei log di allarme verso un syslog server.

 

Protezione delle connessioni UDP

Con UDP, il router non può tracciare i sequence numbers e le opzioni sui pacchetti; con UDP non è previsto inoltre il three-way handshake. Non appena il primo pacchetto di un flusso UDP viene permesso dal router, vengono registrate le informazioni relative alla connessione UDP, ossia indirizzi IP degli endpoint ed i numeri di porta, sulla connection table.

 

 

Configurazione di CBAC

Gli step da seguire sono i seguenti:

  1. Configurare le ACL sull’interfaccia.
  2. Definire le “inspection rules”, indicando quale protocollo applicativo deve essere analizzato, e applicarle alla stessa interfaccia.

Devono essere applicate sia le regole di inspection che le ACL, seguendo queste indicazioni:

  • Nell’interfaccia dove il traffico ha inizio, ad esempio l'interfaccia LAN, applicare l’ACL in ingresso che consenta solo il traffico voluto, e applicare la regola di inspection che analizzi quel traffico. Ricordiamo che applicare un'ACL in ingresso vuol dire applicarla per il traffico entrante sul router.
  • Nelle altre interfacce, ad esempio l'interfaccia WAN, applicare le ACL in ingresso bloccando tutto il traffico in ingresso sul router, ad eccezione di quello necessario per la pubblicazione di servizi verso l’esterno, come HTTP per server WEB, oppure pacchetti ICMP echo-reply di ritorno.

 

Esempio pratico

Dalla LAN interna (192.168.100.0/24) si vogliono abilitare la navigazione (http, https, dns), i ping (icmp), la ricezione e l'invio della posta (pop3 e smtp).

Step 1. Si creano  le ACL:

ip access-list extended LAN-IN
!
permit icmp 192.168.100.0 0.0.0.255 any echo
deny icmp 192.168.100.0 0.0.0.255 any log
permit tcp 192.168.100.0 0.0.0.255 any eq 80
permit tcp 192.168.100.0 0.0.0.255 any eq 443
permit udp 192.168.100.0 0.0.0.255 any eq 53
permit udp 192.168.100.0 0.0.0.255 any eq 110
permit udp 192.168.100.0 0.0.0.255 any eq 25
deny ip any any
!
int fa 0/1
ip access-group LAN_IN in
!
ip access-list extended WAN_IN
!
permit icmp any any echo-reply
permit icmp any any unreachable
permit icmp any any source-quench       
permit icmp any any parameter-problem
permit icmp any any packet-too-big       
deny ip any any
!
int s0/0
ip access-group WAN_IN in

 

Step 2. Si definisce la regola di inspection e la si applica all’interfaccia fa0/1.

La sintassi è la seguente: ip inspect name inspection_name protocol [alert {on|off}] [audit-trail {on|off}] [timeout seconds]

ip inspect name FWRULE dns
ip inspect name FWRULE http
ip inspect name FWRULE tcp
ip inspect name FWRULE udp
!

interface fa 0/1
ip inspect FWRULE in

 

(0 Votes)