DoS (Denial of Service)
Introduzione
Gli attacchi di tipo DoS (Denial of Service) sono differenti rispetto ai precedenti (IP spoofing, ...) in quanto l'obiettivo non è più quello di ottenere l'accesso ad una rete, ma bensì di rendere un servizio (www, ftp, mail, ...) offerto da una macchina indisponibile agli utenti, utilizzando diverse tecniche.
Le principali consistono nell'esaurire le risorse della macchina, in particolare memoria e spazio su disco fino a causarne addirittura il blocco, oppure nel consumare la bandwidth a disposizione in modo che la "vittima" non sia più in grado di operare correttamente, di stabilire o accettare nuove connessioni, di inviare pacchetti nella rete.
Questi attacchi possono quindi sfruttare i difetti e limiti delle implementazioni dello stack TCP/IP, oppure il meccanismo di inizio connessione (3-way handshake), o ancora macchine configurate male. In molti casi per risolvere il problema di alcuni di questi attacchi è stato necessario correggere lo stack TCP/IP, e ricercare vulnerabilità simili.
Per realizzare attacchi DoS viene spesso coinvolto anche l'IP spoofing, quindi come primo passo per prevenire i DoS è senz'altro raccomandato bloccare questo attacco.
In alcuni casi è possibile effettuare un attacco DoS perfino utilizzando un vecchio Pc dotato di un modem lento contrapponendolo ad una macchina o rete veloce. Questo tipo di attacco è noto come attacco asimmetrico.
Tra i DoS più noti ci sono: TCP SYN flooding, smurfing, UDP port.
Molto recenti sono inoltre gli attacchi cosiddetti DDoS (Distributed Denial of Service). Questo tipo di attacco ha le stesse funzioni del classico DoS solamente che l'attacco viene effettuato sfruttando più macchine. In questo modo il traffico che si può generare è talmente notevole da poter mettere in difficoltà anche grandi nomi come Yahoo, Amazon, ... che dispongono di notevoli risorse.
Per effettuare un DDoS è necessario comunque impossessarsi di diverse macchine della rete, in genere non è difficile trovare macchine/server configurate male da "conquistare". Successivamente l'attacker provvederà ad installare dei programmi, spesso troiani, che permetteranno di nasconderne la presenza, e quindi il programmma che controllato da remoto permetterà di sferrare l'attacco. Questa è sicuramente la fase più complicata.
Questi attacchi sono notevoli e difficilmente contrastabili, tra le poche soluzioni c'è sicuramente quella di migliorare la sicurezza delle macchine presenti in internet, in modo che non possano essere conquistate e utilizzate per questi attacchi.
TCP SYN Flooding
Questo attacco riguarda in particolare i protocolli IP+TCP e ancora una volta è la fase di inizio connessione ad essere presa di mira. In particolare lo scopo non è quello di accedere ad una macchina ma piuttosto quello di esaurire e consumare la banda a disposizione della macchina "vittima" in modo che non riesca più a soddisfare le richieste di connessione ai servizi (www, ftp, ...) effettuate dagli utenti e ad operare correttamente.
Come già descritto quando un utente vuole stabilire una connessione con una macchina deve inviare un pacchetto con flag SYN impostato.
Il server riceve la richiesta e inoltra un pacchetto SYN-ACK in risposta allocando inoltre spazio in memoria dove poter memorizzare le informazioni sulla connessione. A questo punto attende il pacchetto ACK di conferma.
L'attacker però non invia questo pacchetto lasciando volontariamente la connessione pendente (half-open connection), e anzi continua a inviare a raffica una moltitudine di pacchetti di inizio connessione (SYN). Il server li riceverà e allocherà per ciascuno di essi altra memoria. In molti casi questa situazione porterà il server ad esaurire la memoria, a non poter soddisfare altre richieste di connessione, e addirittura al crash.
E' necessario specificare che in genere un server o una qualsiasi macchina che offre dei servizi accetta solo un determinato numero di richieste connessione, di solito 5 per porta, inoltre se un pacchetto di ACK non arriva entro un certo limite di tempo allora le connessioni pendenti sono annullate e lo spazio di memoria allocato recuperato. Ciò però potrebbe non essere sufficiente se i pacchetti dovessero arrivare a raffica in un brevissimo lasso di tempo.
Questo attacco è diffuso e in genere è utilizzato anche l'IP spoofing per nascondere l'origine dell'attacco. Linux è in grado di contrastarlo però è necessario compilare il kernel con la voce "IP: TCP syncookie support" (Networking options) selezionata e impostare il parametro tcp_syncookies da script o linea di comando:
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] then echo 1 > /proc/sys/net/ipv4/tcp_syncookies fi
Smurfing
Lo smurfing è un altro attacco DoS basato sempre sull'IP spoofing e sui pacchetti ICMP ping, utilizzati in genere per verificare se una macchina è presente e attiva nella rete.
Questo attacco consiste nell'inviare un pacchetto ICMP echo request (ping) con indirizzo sorgente fasullo e con indirizzo destinazione l'indirizzo broadcast di una rete. L'indirizzo broadcast è utilizzato per inviare un pacchetto contemporaneamente a tutte le macchine di una rete, ad esempio per una rete 192.168.0.0/24 l'indirizzo di broadcast corrisponde a 192.168.0.255, per una rete 192.168.0.0/16 a 192.168.255.255. Graficamente si può rappresentare in questo modo:
+---+ +---+ |PC1|-<<. | | [ATTACKER] +---+ ^ +---+ +---+ ^ 213.76.5.2 |PC2|-<<. +---+ | +---+ |<<<<<| | <---- o -----. +---+ v +---+ \_______________________ pacchetto ping "broadcast" |PC3|-<<. [ROUTER] +---+ +---+ v | | [VITTIMA] +---+ v +---+ |PC4|-<<. 213.72.10.1 +---+ [LAN]
Il pacchetto ICMP echo request (ping), con indirizzo destinazione l'indirizzo broadcast, è ricevuto dal router che provvede quindi a inoltrarlo a tutte le macchine della rete che in genere risponderanno inviando un pacchetto echo reply (pong) alla macchina mittente.
In questo caso i pong arriveranno alla macchina "vittima", con indirizzo IP pari a quello indicato dall'attacker nel pacchetto. Se la banda a disposizione della vittima dovesse essere limitata questo flusso di pacchetti potrebbe consumarla rapidamente, impedendo quindi alla macchina di stabilire connessioni e di operare correttamente.
+---+>>>>>. +---+ |PC1|---+ v | | [ATTACKER] +---+ | v +---+ +---+>>>>>. 213.76.5.2 |PC2|---+ v +---+ +---+ |_v_>>>>>| |>>>>>>>>>>>>>>. +---+>>>>>. +---+ v |PC3|---+ ^ [ROUTER] +---+ +---+ | ^ | | [VITTIMA] +---+>>>>>. +---+ |PC4|---+ 213.72.10.1 +---+ [LAN]
In questo caso la soluzione per proteggere la propria rete da questo attacco richiede di impostare il ROUTER affinché ignori, scarti i pacchetti IP broadcast, ossia aventi come indirizzo destinazione l'indirizzo broadcast della propria rete. Per quanto riguarda le macchine della rete locale è consigliato impostarle in modo che non rispondano a pacchetti ICMP echo request (ping) aventi come indirizzo destinazione l'indirizzo broascast.
Quest'ultimo caso è importante perché se un attacker riesce ad accedere ad una delle macchine della rete locale è in grado di aggirare il router e di utilizzare un attacco smurf dall'interno.
Con Linux è disponibile il parametro 'icmp_ignore_echo_broadcast' che può essere impostato per ignorare gli icmp echo request (ping) broadcast.
Per quanto riguarda il firewall, se si usa il connection tracking ('-m state -state ESTABLISHED,RELATED') questo tipo di attacco proveniente dall'esterno è respinto.
In caso contrario è meglio scartare specificatamente questi pacchetti:
## Caso di pacchetti icmp echo-request (ping) # iptables -A FORWARD -i eth0 -p icmp -icmp-type ping -d 255.255.255.255 -j DROP
UDP Port DoS
Esistono attacchi DoS che utilizzano anche il protocollo UDP (User Datagram Protocol).
In questo caso quando due macchine trasmettono dati utilizzando due servizi UDP che generano entrambe dell'output (es. chargen ed echo) possono generare un traffico così notevole da causare una situazione di DoS.
In genere sono proprio i servizi chargen ed echo ad essere utilizzati per questo attacco, quindi se possibile è raccomandabile disabilitarli modificando il file /etc/inetd.conf nelle macchine della propria rete locale e impostare il firewall in modo che questi servizi siano filtrati.
E' inoltre raccomandato disabilitare, filtrare allo stesso modo tutti i servizi UDP che non sono necessari o utilizzati.
LOG
In genere può essere utile registrare le informazioni riguardanti quei pacchetti che si ritengono anomali.
Netfilter e iptables permettono di registrare queste informazioni utilizzando l'obiettivo LOG (-j LOG). I pacchetti che soddisferanno la regola saranno registrati per poter essere poi analizzati. Il problema che può però sorgere è che qualcuno potrebbe intenzionalmente inviare una raffica di pacchetti affinchè siano registrati. Siccome le registrazioni richiedono spazio su disco, infatti in genere sono memorizzati nel file /var/log/messages, potrebbero essere usate per un attacco DoS, mirato a esaurire lo spazio disponibile.
In questo caso è raccomandato utilizzare assieme a LOG anche il modulo limit, che consente di specificare quante registrazioni effettuare in un dato arco di tempo (es. 10 registrazioni ogni ora).
# -------------------------------------------------------------------------------- # connessioni telnet accettate # -------------------------------------------------------------------------------- iptables -A INPUT -p tcp -dport telnet -j ACCEPT # -------------------------------------------------------------------------------- # tutto gli altri pacchetti sono registrati (10 pacchetti ogni ora) e ... # -------------------------------------------------------------------------------- iptables -A INPUT -m limit -limit 10/h -j LOG -log-level info -log-prefix "Firewall: " # -------------------------------------------------------------------------------- # ... scartati # -------------------------------------------------------------------------------- iptables -A INPUT -j DROP
NOTE:
La protezione DDoS non farà aumentare i costi o i prezzi e sarà disponibile per tutti i clienti.
Il nostro sistema rileverà gli attacchi DDoS in ogni momento e la sua capacità di riconoscerli migliorerà continuamente.
Una volta riconosciuto un attacco, gli strumenti dinamici di protezione DDoS entreranno immediatamente in azione e filtreranno l'attacco.
Il tuo traffico di solito non sarà influenzato dal sistema di protezione DDoS grazie al suo metodo dinamico di mitigazione degli attacchi.