Archivi tag: asa

Firewall Cisco ASA ed attacchi DDoS/DoS

Ultimamente mi è capitato di dover far fronte a tutta una serie di attacchi DDoS, per lo più basati sul protocollo HTTP (connessioni half-open/embryonic, in cui manca il l’ACK finale poichè l’indirizzo IP sorgente del SYN è falso o soggetto a spoofing), mitigati senza troppe difficoltà da un cluster di Firewall Cisco ASA.

ddosLa configurazione che ho utilizzato per mitigare tale tipologia di attacchi è simile alla seguente:

ASA(config)# class-map mpf-policy
ASA(config-cmap)# match access-list outside_access_in
ASA(config-cmap)# exit
ASA(config)# policy-map mpf-policy-map
ASA(config-pmap)# class mpf-policy
ASA(config-pmap-c)# set connection conn-max 11500
ASA(config-pmap-c)# set connection embryonic-conn-max 3000
ASA(config-pmap-c)# set connection per-client-embryonic-max 200
ASA(config-pmap-c)# set connection per-client-max 95
ASA(config-pmap-c)# exit
ASA(config-pmap)# exit
ASA(config)# service-policy mpf-policy-map interface outside
ASA(config)# exit

Tutto è filato liscio per un po’ di tempo, fino a quando l’attaccante non ha deciso di cambiare strategia, passando da un attacco DDoS ad uno DoS (dunque con un solo IP sorgente) e dal protocollo TCP a quello UDP (molto più adatto a questa tipologia di attacco poichè connection-less).

La VPS utilizzata come sorgente di traffico, dotata di ampia banda (si trovava in una farm tedesca) è stata in grado, in un lasso di tempo brevissimo, di far collassare i firewall. Una volta identificato il suo IP ho creato un’ACL del tipo:

ASA(config)#deny ip host <IP attaccante> any

che però si è rivelata essere un’arma a doppio taglio visto che il firewall si è visto costretto a “maneggiare” e “bloccare” una mole di traffico tale per cui la sua CPU ha raggiunto livelli di carico assurdi (la dashboard di ASDM indicava un picco di oltre il 300% a fronte di un rate di pacchetti droppati superiore ai 100k  – vedi immagine sottostante).

dropped_ratedropped_rate

Fondamentalmente ciò è dovuto al fatto che ciascun modello di ASA può gestire solo una determinata mole di traffico (sessioni concorrenti, nuove connessioni/secondo, pacchetti/secondo, ecc – per ulteriori dettagli vedi qui), limite imposto soprattutto dalle caratteristiche hardware di cui è dotato (CPU, RAM, ecc.). Inoltre, per ciascun pacchetto scartato, è necessario un certo overhead, ragion per cui la suddetta ACL ha prodotto effetti collaterali che hanno portato ad un peggioramento della situazione.

Dopo qualche minuto di smarrimento, ho deciso di modificare la mia strategia (sulla falsariga di quella dell’attaccante), consentendo sul firewall tutto il traffico in ingresso dall’IP della VPS incriminata, demandando ai server la sua gestione. Nella fattispecie, ho configurato dei blackhole (aka null route) a livello 3, mediante il seguente comando:

route add -net <IP attaccante> gw 127.0.0.1 lo

Ho scelto questa strategia per 2 motivi:

1) I server sono dotati di maggiori risorse hardware rispetto ai firewall, quindi più “propensi” a gestire una tale mole di traffico in ingresso;

2) Lavorare a livello 3 anzichè a livello 4 implica un minor overhead.

Alla fine tale strategia si è rivelata vincente e l’attaccante ha deposto le armi.

E’ tutto, alla prossima.

Abilitare ASDM su Cisco ASA/PIX

Per i non addetti ai lavori, lavorare da linea di comando per configurare i dispositivi di rete (soprattutto se si tratta di Security Appliance) può risultare a dir poco traumatico.

Ecco allora che ho deciso di scrivere questa semplice guida per l’abilitazione dell’interfaccia grafica (denominata ASDM) sui firewall di casa Cisco (PIX/ASA).

cisco-asa-firewall-frontview.jpg

Per prima cosa occorre verificare che il *.bin di ASDM sia presente nella flash. Per fare ciò possiamo eseguire il comando (dalla modalità enable):

fw1# sh flash | i asdm

il cui output dovrebbe essere simile al seguente:

fw1# sh flash | i asdm
  105  17902288    Apr 30 2012 21:42:34  asdm-64**.bin

Bene, a questo punto possiamo dire al nostro firewall dove trovare il suddetto bin:

fw1# conf t

fw1(config)# asdm image flash:/asdm-64**.bin

Ora dobbiamo abilitare il server http presente sul dispositivo in questione, mediante il comando:

fw1(config)# http server enable

Ciò si rende necessario poichè ASDM utilizza il protocollo https.

Infine, occorre definire su quale interfaccia e da quali IP accettare le richieste di connessione:

http 0.0.0.0 0.0.0.0 outside

in questo modo stiamo imponendo al nostro firewall di accettare le connessioni provenienti da un qualunque indirizzo IP pubblico e dirette all’interfaccia outside (ovvero quella esposta direttamente su Internet).

Il nome dell’interfaccia (outside) è in realtà un alias che può essere definito mediante il comando nameif:

fw1(config-if)# nameif outside

Ovviamente, è opportuno che per accedere al suddetto tool vengano fornite le giuste credenziali. Per definirle basta usare il comando:

fw1(config)# username <nomeutente> password <pass>

A questo punto sarete in grado di amministrare il vostri firewall mediante ASDM.

Alla prossima.