Un attacco denial-of-service è un tipo di attacco che impedisce agli utenti legittimi di utilizzare il servizio. Questi sono disponibili in diverse categorie:
- Esaurimento delle risorse (ad esempio, consumo di tutta la larghezza di banda della rete o del tempo di CPU del server)
- Sfruttamento della limitazione (ad es. bloccare un utente dal proprio account tentando ripetutamente di accedere con credenziali non valide)
- Interruzione del processo (ad esempio arresto anomalo di un processo che serve le richieste degli utenti, tramite un bug nel software)
- Corruzione dei dati (ad esempio, modifica di tutti i tipi di utenti a un tipo non valido, rendendo impossibile il loro accesso)
- Disturbi fisici (ad esempio estraendo il cavo di alimentazione su un server) - grazie a Henning per questo!
Il tipo più comune sulle applicazioni web è l'esaurimento delle risorse, che è quello a cui la maggior parte delle persone tende a fare riferimento come DoS. Questi sono causati da un utente malintenzionato che invia un gran numero di richieste al server, al fine di esaurire una o più risorse:
- La larghezza di banda della rete può essere interamente consumata dall'attacco, impedendo al traffico di utenti legittimi di raggiungere il server.
- Ogni richiesta utilizza un po 'di tempo della CPU, quindi un numero elevato di richieste può far sì che la CPU impieghi tutto il suo tempo a gestire richieste di aggressori, invece di richieste legittime. Gli aggressori possono inviare richieste costose (ad esempio ricerche full-text, connessioni SSL, ecc.) Al server per aumentare l'impatto. Ci sono anche casi in cui le vulnerabilità nel software server consentono all'autore dell'attacco di creare richieste speciali che consumano molto tempo della CPU.
- Viene utilizzata una piccola quantità di RAM per memorizzare lo stato della connessione, che potrebbe consentire l'esaurimento della memoria fisica se è possibile effettuare un numero sufficiente di connessioni. Tuttavia, le query sul database possono richiedere molta memoria, in termini di utilizzo della memoria e larghezza di banda della memoria. Se un attaccante sceglie bene le sue domande, potrebbe essere in grado di esaurire completamente la memoria fisica del sistema.
- I registri, le tabelle del database, ecc. sono memorizzati su disco. L'invio di un numero elevato di query per un periodo di tempo può esaurire lo spazio su disco sul server, provocando l'arresto anomalo.
Si noti che le richieste non devono essere HTTP - potrebbero essere DNS, HTTPS, SSH, FTP, SMTP, POP, IMAP, SMB, ecc. Qualsiasi situazione in cui un servizio è in ascolto per i pacchetti in entrata è un modo potenziale per ottenere un DoS.
Esistono due modi principali per ottenere attacchi DoS di rete indipendenti dall'applicazione: TCP SYN inondazioni e IDP flood .
Il protocollo TCP include un handshake a tre vie . Innanzitutto, un client invia una richiesta SYN (sincronizzazione) a cui il server risponde con un SYN-ACK (sincronizzato riconosciuto), al quale il client risponde infine con un ACK (conferma). Tuttavia, se un client invia un SYN e non risponde a SYN-ACK, il server viene lasciato con una connessione semiaperta. Questo consuma una piccola quantità di memoria all'interno del sistema operativo e consuma alcuni cicli della CPU. Alla fine la connessione viene interrotta, ma un flusso di pacchetti SYN può essere sufficiente a causare seri problemi di prestazioni sulla destinazione. Esistono diversi modi per mitigare questa minaccia e il più notevole è i cookie SYN , che consentono al server di tornare indietro una risposta senza memorizzare lo stato SYN.
Il protocollo UDP non implica alcuna forma di handshake. I pacchetti vengono semplicemente inviati tra host, senza stato o connessione. Ciò significa che un utente malintenzionato può inviare un gran numero di pacchetti UDP al server, consumando la loro larghezza di banda. Ciò richiede che la larghezza di banda totale del client superi quella del server. Poiché il client non ha bisogno di alcuna risposta, può falsificare l'indirizzo IP di origine, rendendo più difficile la mitigazione. Questi tipi di attacco possono essere più difficili da bloccare e spesso richiedono l'intervento del fornitore di servizi.
Il problema per gli aggressori è che i server sono progettati per far fronte a un gran numero di utenti simultanei e a piccoli attacchi denial of service. È improbabile che l'invio di un numero enorme di pacchetti dalla rete domestica o da un server noleggiato causi una significativa riduzione della disponibilità o della velocità di risposta del loro obiettivo. Per rendere l'attacco più efficace, usano un attacco denial of service (DDoS) distribuito . Ciò comporta l'utilizzo di un numero di computer su reti diverse per inondare il sito di richieste. Spesso l'aggressore infetta altri computer con malware, per formare una botnet, che viene poi utilizzata per eseguire attacchi DoS. La differenza è che un DDoS consente al traffico di fluire da IP sorgente legittimi (ma compromessi), aumentando l'efficacia dell'attacco e rendendo più difficile il blocco.