Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Tecniche: gli attacchi DoS

Cosa sono, come si eseguono, quali danni comportano e come difendersi dagli attacchi di Denial of Service (DoS). Esempi di attacco e difesa
Cosa sono, come si eseguono, quali danni comportano e come difendersi dagli attacchi di Denial of Service (DoS). Esempi di attacco e difesa
Link copiato negli appunti

Un attacco di tipo DoS (acronimo di Denial of Service) è una qualsiasi azione intrapresa fisicamente da un utente, oppure da un software, che blocca l'hardware o il software del vostro PC. Questo tipo di attacco rende il sistema, o parte di esso, irraggiungibile, negando quindi, il servizio agli utenti autorizzati. Un attacco di questo tipo non avviene mai casualmente, l'obiettivo del suo autore è quello di eliminare le vostre risorse dalla rete, creando un disservizio totale o parziale.

Ci sono tanti buoni motivi per conoscere e preoccuparci degli attacchi di tipo DoS. Per prima cosa, gli attacchi DoS sono molto in voga tra i cracker in cerca di "trofei" e gli smanettoni nullafacenti, quindi, come amministratori di sistema, aspettatevi almeno 30-40 attacchi al giorno per ogni macchina. Altro motivo è la velocità e la brutalità di questo tipo di attacco: gli attacchi DoS danno effetti immediati ed evidenti. In ultimo, la maggior parte di questi attacchi evidenziano errori e limitazioni nei protocolli più comuni, come ad es. il TCP/IP, bersagliati con successo. Altro aspetto preoccupante degli attacchi DoS è che questi possono essere eseguiti sul sistema locale oppure in modo remoto da una rete. Gli attacchi di tipo DoS possono provocare:

  • Degradazione dei processi
  • Negazione del servizio dalla rete
  • Esaurimento dello spazio su disco

La lista è ancora incompleta, ma queste sono in genere le manomissioni preferite da chi attacca i vostri computer. Nel seguito dell'articolo prenderemo brevemente in esame questi tipi di attacchi.

I rischi generati dagli attacchi DoS

Le conseguenze di un attacco DoS sono sicuramente poco gradevoli. Quando si verificano nuovi attacchi, correggere il software, riconfigurare l'hardware, ripristinare i servizi, oppure filtrare il traffico sulle porte interessate è un'occupazione davvero poco piacevole. Attualmente i server sono la base vitale su cui regge la comunicazione aziendale, in quest'ambiente attacchi ripetuti di tipo DoS, possono dimezzare l'efficienza aziendale e far diminuire sensibilmente i profitti. Un solo attacco, se sottovalutato, può portare allo stallo di tutta l'infrastruttura di rete per molte ore.

Da DoS a dDOS

Gli attacchi DoS si sono evoluti nel corso del tempo, da semplici attacchi, condotti da singoli PC, ad attacchi organizzati in modo distribuito (da qui l'acronimo DDoS), portati da migliaia di computer disseminati per tutta la rete. Con un solo script di shell è possibile mettere letteralmente in ginocchio le risorse di un'intera organizzazione. Una particolare categoria di attacco DDoS è il Distributed Reflection Denial of Service (o DRDoS). In questa tipologia di attacco, il computer attaccante, produce delle richieste di connessione verso server con connessioni di rete molto veloci usando come indirizzo di provenienza non il proprio, ma quello del bersaglio. In questo modo i server risponderanno affermativamente alla richiesta di connessione non all'attaccante, ma al bersaglio dell'attacco.

Quest'ultimo tipo di attacco è particolarmente subdolo perché, a causa della natura delle risposte, è difficilmente riconoscibile dall'utente: infatti se si filtrassero le risposte dei server verrebbe compromessa la funzionalità stessa della connessione di rete impedendo, di fatto, la ricezione anche delle informazioni desiderate. Le risposte dei server, sollecitate dall'attaccante, sono infatti non distinguibili da quelle nate da una richiesta valida della vittima. Verrebbe da chiedersi: non c'è alcuna difesa? Non si può far nulla contro questi attacchi micidiali? Niente paura, in questo piccolo approfondimento esamineremo e implementeremo alcuni attacchi DoS valutandone insieme le soluzioni possibili. Prima, però, analizziamo i tipi di attacchi più comuni nominati in precedenza. Il nostro sitema operativo di riferimento sarà Linux.

Degradazione dei processi

Questo tipo di attacco DoS si verifica quando l'aggressore riduce le prestazioni del sistema scelto come bersaglio, generando un numero elevatissimo di processi, che, sovraccaricando la memoria RAM e la CPU divorano le risorse del sistema colpito. Alla luce di quanto detto appare fondamentale il monitoraggio continuo delle risorse delle nostre macchine. Per tenere sotto controllo il nostro sistema Linux abbiamo a disposizione tutti i comandi necessari per farlo, basta solo avviare la console.

Figura 1: Il comando top
Il comando Top

Il comando top mostra informazioni preziose, come il carico della CPU e la memoria usata dai singoli processi in esecuzione

In entrambi i casi descritti, chi attacca mira a ridurre le prestazioni del processo con effetti diversi, che possono essere minimi, come il rallentamento del PC, oppure estremi, come il crash del sistema.

Figura 2: Il comando free
Il comando free

Altro comando essenziale è free, mostra la quantità di memoria utilizzata e quella ancora disponibile

Negazione del servizio dalla rete

Sono i tipi di attacchi DoS più comuni e per questo motivo sono anche più facili da prevenire. Di solito colpiscono un solo servizio specifico, ma nel peggiore dei casi possono compromettere tutti i servizi attivi sulla macchina. Uno di essi avviene con l'uso della cosiddetta bomba JavaScript.

Il supporto per questo linguaggio di scripting è attivo su gran parte dei browser web ed è possibile accorgersene quando si visita un sito web con finestre a comparsa (i famigerati pop-up). JavaScript viene usato anche per scopi nocivi, fra cui quello di lanciare un attacco DoS verso un client, cioè un PC che accede alle risorse disponibili sui server nel web. Usando la stessa tecnica per la creazione dei pop-up, l'aggressore, crea una pagina web in grado di generare un ciclo infinito di apertura delle finestre, così facendo il sistema colpito occupa tutte le risorse per aprirle e non riuscendoci, si blocca.

Altro caso molto comune è l'attacco di rete basato sul servizio. I bersagli tipici sono i servizi come gli application server (web server Apache, Tomcat, ecc.) oppure gli MTA (i server di posta come Postfix, Sendmail, ecc.), in pratica tutti i servizi principali che gli utenti richiedono di consueto.

Figura 3: Il comando ps
Il comando ps

Il nostro piccolo server funziona? Vediamo se i servizi essenziali sono in esecuzione, inseriamo il comando ps con le opzioni -ef e osserviamo l'output

Esaurimento dello spazio su disco

L'attacco mira a saturare la capacità del disco fisso, lo spazio difatti è una risorsa finita. L'attacco di esaurimento dello spazio su disco impedisce la creazione di nuovi file e la modifica di quelli esistenti; inoltre alcuni sistemi Unix subiscono un crash quando la partizione principale raggiunge il limite di capacità.

Per prevenire questo problema basta stabilire delle quote massime di memorizzazione per ogni utente. Il lancio di un simile attacco è davvero banale: un qualsiasi utente può eseguire questo comando: cat /dev/zero > ~/filekiller. Questo comando concatena (con l'istruzione cat) i dati provenienti dal file di periferica /dev/zero (che genera semplicemente una serie di 0), nel file chiamato filekiller. Il tutto continua finché l'utente ferma il processo oppure fin quando la capacità della partizione viene raggiunta. Se eseguite questo comando nella vostra Linux box potrete osservare un rapido decadimento delle prestazioni.

Attacchi DoS di rete diretti al sistema

Un attacco DoS diretto ad un sistema attraverso la rete ha gli stessi scopi di un attacco locale: degradare le risorse del sistema per renderlo completamente inutilizzabile. L'attacco più conosciuto, e storicamente il primo, si chiama SYN Flood (o SYN Flooding), letteralmente "inondazione di pacchetti di tipo Syn".

Senza dilungarci in spiegazioni troppo articolate e tediose possiamo dire in breve che tutte le volte che un utente fa click su di un link di una pagina web richiede l'apertura di una connessione (di tipo TCP) verso quel sito; questo avviene seguendo una serie di passi, il primo dei quali consiste nell'invio di un pacchetto TCP che richiede l'apertura di una connessione. Questo tipo di attacco consiste nell'inviare un gran numero di richieste di connessione TCP più velocemente di quanto il sistema di destinazione le possa elaborare. È possibile rilevare un SYN flood proveniente dall'esterno mediante vari strumenti, quali il comando netstat (solitamente presente in tutti i sistemi operativi), oppure con particolari software di tipo Intrusion Detection Systems come Snort e similari.

Figura 4: Il comando Netstat
Il comando Netstat

L'utilizzo di netstat per rilevare le connessioni SYN in ingresso

Nella prima parte di questo articolo abbiamo introdotto il concetto di Denial of Service (DoS). In questa seconda verifichiamo assieme alcuni degli attacchi più noti definendo le tecniche di aggressione e di difesa.

Il ping della morte

Caratteristica dell'attacco: Invio pacchetti di ping sovradimensionati
Versioni interessate: Vecchi kernel, ma non trascurate di testare la vostra macchina.
Risultato attacco: Crash del sistema
Soluzione al problema: Upgrade

Ping è un'utility diagnostica usata da tutti gli amministratori di rete e di sistema. Usando ping si può determinare se un PC è collegato alla rete sollecitando una risposta.

Figura 5: Il Ping della morte
Il Ping della morte

La sintassi è ping nomehost oppure ping indirizzo IP. Ecco il comando in esecuzione

Alcune versioni datate di Linux sono vulnerabili a pacchetti di ping sovradimensionati e in alcuni casi, utilizzando client Windows, chi attacca può addirittura mandare in crash Linux da remoto, inviando al computer bersaglio pacchetti di ping modificati. Per fare un test della vostra macchina, provate ad inserire questo comando da una macchina Windows:

ping -l 65510 nome_del_vostro_host

Se il vostro sistema è immune al problema riceverete il seguente messaggio:

ping: bad preload value, should be 1...65536.

Il SYN flooding

Caratteristica dell'attacco: Inondazione di pacchetti SYN
Risultato attacco: Crash del sistema
Soluzione al problema: Utilizzare un IDS capace di rilevare un attacco SYN flood e spedire, in tal caso, pacchetti RST che chiudono la connessione al sistema attaccato.

Questo metodo d'attacco s'incentra su una debolezza strutturale del protocollo TCP/IP, infatti, quando si avvia una connessione TCP tra un client ed un server c'è un handshake (letteralmente stretta di mano, accordo), costituito da tre fasi distinte:

  1. L'invio di SYN da parte del client, da una porta specificata, verso il server
  2. La spedizione di SYN_ACK da parte del server al client (il pacchetto entra in stato SYN_RECV)
  3. Invio di un pacchetto ACK da parte del client; a questo punto la connessione si dice ESTABLISHED (stabilita)

Il problema evidente che si presenta con questo metodo di connessione è che il server limita le risorse nel momento in cui la connessione è in SYN_RECV e questo meccanismo comporta, in caso di moltissime connessioni in stato SYN_RECV, un esaurimento di risorse. Il cracker attacca il server inviando un indirizzo IP inesistente mentre crea la connessione, in questo modo il server non raggiungerà mai il client e farà rimanere la connessione sempre in stato SYN_RECV.

Smurf e Fraggle

Caratteristica dell'attacco: ICMP flood
Risultato attacco: Crash del sistema
Soluzione al problema: Disattivare sul proprio router esterno la funzione di risposta delle richieste ICMP mandate all'indirizzo di broadcast della rete dall'attaccante.

L'attacco Smurf si realizza su una tecnica di amplificazione dovuta alla natura del protocollo IP che può essere facilmente risolta configurando in maniera corretta i dispositivi di rete. L'amplificazione si ottiene inviando un pacchetto ICMP ECHO ad un indirizzo di broadcast di una rete, usando il comando ping. Colui che attacca, per prima cosa, si preoccuperà di "spoofare" (lo spoofing avviene quando chi attacca autentica la propria macchina usando i pacchetti provenienti da un host considerato "sicuro") il proprio indirizzo IP inserendo, nel campo sorgente dei pacchetti IP, l'indirizzo IP della vittima.

Il passo successivo sarà quello di scegliere una rete che faccia da amplificatore per l'attacco e cominciare ad indirizzare quanti più pacchetti possibili verso l'indirizzo di broadcast della rete prescelta. Il router della rete selezionata, all'arrivo dei pacchetti inviati, li inoltrerà verso tutti gli indirizzi IP facenti parte della sua sottorete. Così facendo ogni computer che riceve il pacchetto ICMP replica con un altro pacchetto ICMP diretto verso l'IP del mittente che, come abbiamo detto poco prima, l'attaccante ha modificato con l'indirizzo IP della vittima.

Questo vale per tutti i computer presenti nella sottorete che a loro volta invieranno un pacchetto ICMP alla vittima occupandone la relativa banda. Il danno recato dai pacchetti ICMP è tanto elevato quanto maggiore è il numero dei computer presenti nella rete colpita. Esiste anche una variante di questo attacco che invece di usare un ECHO ICMP utilizza un ECHO sulla porta 7 UDP; questo attacco si chiama Fraggle.

Per difenderci dall'attacco DoS Fraggle possiamo limitare la banda da destinarsi al servizio di ICMP ed attivare il firewall a livello di kernel utilizzando iptables.

Il MIME flood

Caratteristica dell'attacco: Inondazione di intestazioni MIME
Versioni interessate: Web Server Apache 1.2.5
Risultato attacco: Crash del server
Soluzione al problema: Upgrade di Apache

Apache è il server web di default installato su tutte le moderne distribuzioni Linux. È un ottimo server in grado di gestire molti tipi di MIME diversi, ma la sua corretta configurazione ed il costante aggiornamento sono aspetti fondamentali per garantire la sicurezza della vostra rete. Nella versione indicata, ed anche in qualche versione successiva, Apache non è in grado di limitare il numero di richieste MIME che un client può inoltrare. Lo script creato in linguaggio Perl, che potete scaricare dal Web, inonda il server Apache scelto come bersaglio con intestazioni MIME; col tempo, l'aumento delle intestazioni inviate, riduce le risorse della CPU e della memoria, mandando in crash il server colpito.

Nmap e Inetd

Caratteristica dell'attacco: Scansione stealth
Risultato attacco: Malfunzionamenti
Soluzione al problema: Usare server Proxy (oppure un firewall) per impedire il contatto diretto tra chi attacca ed i propri servizi.

Nmap è senza dubbio il miglior scanner di rete realizzato dalla comunità open source. Questo scanner implementa lo scanning TCP SYN, più semplicemente chiamato scansione half-open. Lo scanning half-open invia un pacchetto SYN sostanzialmente malformato, alla macchina host, e si aspetta di ricevere come risposta due pacchetti SYN/ACK, che indicano "la porta è aperta", in caso contrario, se non riceve nulla, la porta potrebbe essere chiusa oppure nascosta (in inglese stealthed) dal firewall. Chi attacca invia dei pacchetti SYN per iniziare una connessione verso determinate porte, dopo aver ricevuto la risposta iniziale e prima di stabilire realmente la connessione, l'attaccante invia un pacchetto realizzato ad hoc contenente il flag RST (RST sta per reset) resettando la connessione.

Come risultato, i due PC non stabiliscono mai una connessione TCP veramente completa e quindi lo scambio genera poche o nessuna prova nei log di sistema. Normalmente questo tipo di scansione non provoca nessun interruzione del servizio, ma poiché Nmap esegue queste scansioni a velocità e volumi molto alti, arrivando ad inondare le porte bersagliate, potrebbe essere usato per causare disservizio. Alcune volte questo tipo di scansione è in grado di mandare in stallo inetd (meglio noto come super-server), di conseguenza possono cessare molti servizi essenziali, inclusi l'FTP, l'SSH, il Telnet, ecc. Negli ultimi anni, a causa delle limitazioni di sicurezza nel progetto originale di inetd, le distribuzioni GNU/Linux hanno scelto di adottare xinetd come "smistatore" di servizi. Non è raro trovare un /etc/inetd.conf nelle moderne distribuzioni Linux, con quasi tutti i servizi commentati. Ad ogni modo, per verificare se il vostro sistema è esposto a questo rischio lanciategli contro Nmap e osservate quello che succede.

Non esiste in realtà un sistema ben definito per difenderci dagli attacchi DoS. Tuttavia, possiamo aumentare la robustezza della nostra rete seguendo questi preziosi consigli:

  1. Filtrare il traffico in transito sulla rete
  2. Disabilitare i servizi non utilizzati
  3. Tenersi aggiornati sulle patch dei vari software installati e sugli aggiornamenti del kernel rilasciati
  4. Usare un software per il rilevamento delle intrusioni (o IDS): individuare la scansione di una porta sulla nostra macchina e negare l'accesso alla rete che l'ha originata è il metodo migliore per evitare molti attacchi
  5. Filtrare tutti i pacchetti in arrivo rifiutando quelli di provenienza sospetta. Da quanto detto in precedenza, ad esempio, la vostra rete non dovrebbe mai accettare pacchetti provenienti da internet che sembrano arrivare dalla vostra stessa rete
  6. Per i server non muniti di firewall considerate la ridefinizione del periodo di timeout prima che una connessione aperta, ma non risolta, venga fatta cadere (questo periodo di tempo è circa di un minuto). Quest'accorgimento riduce di molto il rischio di attacchi alle code di connessione, nei quali chi attacca inonda la coda dei vostri server con richieste di connessioni aperte
  7. Configurate con la massima attenzione l'hardware ed il software presente nel vostro sistema
  8. Contattate il vostro ISP e chiedete se utilizza filtri per bloccare eventuali DoS. Se non c'è una buona collaborazione, la vostra difesa potrebbe rivelarsi inutile, dato che, l'ISP potrebbe cedere all'attacco
  9. Incrementate la coda delle connessioni, evitando che essa si riempia e che il servizio non sia più disponibile; purtroppo tale soluzione non è ottimale perché comporta l'uso di risorse addizionali al sistema
  10. Se siete già sotto attacco e non riuscite ad uscirne indenni, contattate il vostro provider facendogli bloccare i pacchetti provenienti dagli indirizzi di attacco, questo in alcuni casi potrebbe liberare un po' di banda

Conclusioni

Un attacco DoS risulta difficile da distinguere dalla normale attività della rete, esistono comunque alcuni sintomi che ne potrebbero indicare la presenza, quindi monitorate costantemente le vostre macchine. Prevenire è la parola d'ordine che domina nel campo della sicurezza informatica. Imparate ad usare bene i comandi del vostro sistema operativo, restate sempre aggiornati e testate scrupolosamente il software, o l'hardware, prima di utilizzarlo.

Ti consigliamo anche