CBAC – Context Based Access Control

There is a mobile optimized version of this page, view AMP Version.

Firewall IP Inspect su Cisco ISR Router

clip_image001Le access-list CBAC sono delle regole firewall che, lavorando su layer 5(session), ispezionano il traffico in uscita da una rete protetta e ne permettono solo quello di ritorno proveniente da una rete meno protetta.

Questo è il classico approccio degli stateful firewall come PIX e ASA che, nell’header del pacchetto, analizzano il campo SYN (syncronize), RST (reset), ACK (acknowledgment) e FIN (finish);in questo modo il security device crea dinamicamente delle regole per concedere l’accesso ad un pacchetto proveniente dall’esterno confrontando le informazioni ricevute con quelle registrate per quella connessione.

Per tenere traccia dell’attuale processo di comunicazione si avvale di una “state table”. Quando una connessione TCP o UDP è stabilita viene salvato l’indirizzo sorgente e di destinazione, il numero di porta, la sequenza TCP ed altri attributi. Quindi ogni connessione in ingresso viene confrontata con i dati nella tabella e in caso di corrispondenza il sistema genera una ACL dinamica per permettere il traffico di ritorno.

clip_image002

Le Access-list dinamiche non verranno mai salvate nella memoria persistente del router e saranno rimosse al termine della connessione, questo meccanismo già di per se aiuta a proteggerci da attacchi di tipo DoS e Spoof.

Le inspect grazie a dei temporizzatori e ispezionando le sessioni sono in grado di rilevare e bloccare anche gli attacchi di tipo SYN, ricordiamo che questa tipologia di attacco prevede l’invio di numerosi pacchetti SYN senza completare il processo di three-way,in questo modo il server aprirà molte sessioni TCP attendendo invano l’ACK finale e consumando le proprie risorse.

Temporizzatori per attacchi DoS e SYN

Come prima cosa permettiamo al firewall di di gestire le connessioni half-open per mitigare gli attacchi DoS e SYN.

Chiude le connessioni “half-open quando superano un valore di soglia 400:

c800(config)#ip inspect max-incomplete high 400

Interrompe il processo di chiusura delle connessione half-open quando scendono sotto la soglia di 300:

c800(config)#ip inspect max-incomplete low 300

Chiude le half-open quando vengono aperte più di 500 di connessioni al minuto:

c800(config)#ip inspect one-minute high 500

Smette di chiudere le connessioni half-open quando ne rimangono 300 fra quelle aperte nell’ultimo minuto:

c800(config)#ip inspect one-minute low 300

Attende 20 secondi prima di chiudere le connessioni “half-open”

c800(config)#ip inspect tcp synwait-time 20

Limitare a 1000 il numero massimo di messaggi “ICMP destination unreachable” generati:

c800(config)#ip icmp rate-limit unreachable 1000

Per specificare la soglia e per quanto tempo un Host sospetto verrà bloccato:

c800(config)#ip inspect tcp max-incomplete host 300 block-time 60

Per Specificare la dimensione della hash table:

c800(config)#ip inspect hashtable 2048

Questi sono dei valori medi,potrebbe essere necessario aggiustare i settaggi per adattarli alla vostra situazione.

Creare le ACL inspect

Ora andiamo a definire le regole di inspect, la sintassi generale è:

c800(config)# ip inspect name inspection_name protocol [alert {on | off}] [audit-trail {on | off}] [timeout seconds]

Su “inspection_name” indichiamo un nome esplicativo, mentre tra i protocolli possiamo selezionare:

Cuseeme, fragment, ftp, h323, http, icmp, netshow, rcmd, realaudio, rpc, rtsp, sip, skinny, smtp, sqlnet, streamworks, tcp, tftp, udp, e vdolive.

Per ogni protocollo che definiamo, possiamo abilitare o disabilitare gli alert e audit, possiamo anche specificare dei timeout che scavalcheranno quelli generali.

Questo è un esempio di configurazione:

c800(config)#ip inspect name fw http
c800(config)#ip inspect name fw ftp
c800(config)#ip inspect name fw icmp
c800(config)#ip inspect name fw smtp
c800(config)#ip inspect name fw tcp
c800(config)#ip inspect name fw udp

Come potete vedere nelle regole inserite oltre ai generali TCP e UDP,ispezioniamo anche dei protocolli specifici come SMTP,in questo caso CBAC analizzerà anche i comandi inviati e ricevuti nella sessione,se non sono conformi allo standard TF RFC 821 verranno scartati,offrendoci un ulteriore livello di protezione. Un altro esempio utile di ispezione specifica è per il protocollo ICMP,che ci consente di testare i ping verso l’esterno senza esporci al rischio di attacchi “ping flood”.

Applicare le Inspect

Ora dobbiamo scegliere a quale interfaccia applicare le inspect,normalmente verrà applicata all’interfaccia esterna con direzione “IN”:

c800(config)#interface Fa0

c800(config-if)# ip inspect fw in

Audit e Alerts

Le inspect CBAC supportano due tipi di logging: Audit e Alerts.

Gli alerts ci forniscono utili messaggi come “insufficient router resources”,DOS ATTACKS ed altre minacce rilevate in base a delle signature prestabilite, sono attivi di default e vengono mostrati in console.

clip_image003

Possiamo disabilitarli globalmente con:

c800(config)# ip inspect alert-off

I messaggi audit tengono traccia di tutte le connessioni ispezionate,sia quelle valide che quelle invalide, di default sono disabilitati e vengono mostrati in console. Possiamo abilitarli globalmente con:

c800(config)# ip inspect audit trail

Ovviamente possiamo dirigere i messaggi di audit e alerts verso un server SysLog.

Debug

Per visualizzare le regole di una acl inspect:

c800# show ip inspect name fw

Per visualizzare il contenuto della state table:

c800# show ip inspect sessions

clip_image004

Per visualizzare le Acl dinamiche create da CBAC:

c800# show ip access-lists

Share

7 pensieri su “CBAC – Context Based Access Control

  1. il tuo articolo mi è servito a chiarire il meccanismo delle ACL dinamiche.
    Complimenti per la chiarezza con cui hai trattato un argomento che per me è abbastanza difficile.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *