DDOS è una famiglia di attacchi che travolgono i sistemi chiave nel datacenter, tra cui:
- La connessione di rete del centro di hosting a Internet
- La rete interna e i router del centro di hosting
- Il tuo firewall e bilanciatori del carico
- I tuoi server web, server di applicazioni e database.
Prima di iniziare a costruire la tua difesa DDOS, considera qual è il valore a rischio nel caso peggiore. Per un servizio non critico e gratuito per una piccola comunità, il valore totale a rischio potrebbe essere noccioline. Per un sistema mission-critical a pagamento, rivolto al pubblico e per un'attività consolidata da molti miliardi di dollari, il valore potrebbe essere il valore dell'azienda. In quest'ultimo caso, non dovresti usare StackExchange :) Comunque, per difenderti da DDOS, hai bisogno di un approccio di difesa in profondità:
- Collabora con il tuo centro di hosting per comprendere i servizi che offre, incluso il filtro IP e delle porte sulle connessioni di rete a Internet e i servizi firewall che offrono. Questo è fondamentale: molti siti vengono estratti da Internet dalla società di hosting poiché la società di hosting si occupa dell'interruzione a livello di data center causata dal DDOS a un cliente. Inoltre, durante un attacco DDOS, lavorerai a stretto contatto con lo staff del centro di hosting, quindi conosci i loro numeri di emergenza e sii in buoni rapporti con loro :) Dovrebbero essere in grado di bloccare intere regioni internazionali, bloccare completamente servizi o reti specifici protocolli e altre misure difensive ad ampio spettro o, in alternativa, consentire solo IP autorizzati (a seconda del modello di business)
- Mentre sei nel centro di hosting, utilizza una rete di distribuzione dei contenuti per distribuire servizi (principalmente statici) vicino ai tuoi utenti finali e nascondere i tuoi server reali agli architetti DDOS. L'intera CDN è troppo grande perché un DDOS elimini tutti i nodi in tutti i paesi; se il DDOS è focalizzato su un paese, almeno gli altri utenti sono ancora OK.
Mantieni aggiornati tutti i tuoi sistemi e pacchetti software con le ultime patch di sicurezza - e intendo tutti:
- Switch gestiti: sì, a volte devono essere aggiornati
- Router
- Firewall
- Bilanciatori del carico
- Sistemi operativi
- Server web
- Lingue e loro biblioteche
Assicurati di disporre di un buon firewall o di un dispositivo di sicurezza configurato e regolarmente verificato da un esperto di sicurezza qualificato . Regole rigide sul firewall sono una buona difesa contro molti attacchi semplici. È anche utile poter gestire la larghezza di banda disponibile per ogni servizio aperto.
Avere buoni strumenti di monitoraggio della rete in atto: questo può aiutarti a capire:
- Che sei sotto attacco piuttosto che essere semplicemente sotto carico pesante
- Da dove proviene l'attacco (che può includere paesi con cui normalmente non si fa affari) e
- Qual è effettivamente l'attacco (porte, servizi, protocolli, IP e contenuto dei pacchetti)
L'attacco potrebbe semplicemente consistere in un uso intensivo di servizi di siti Web legittimi (ad esempio, colpire URI "legali" che eseguono query o inserire / aggiornare / eliminare dati): migliaia o milioni di richieste provenienti da decine a milioni di indirizzi IP diversi porteranno un sito al suo ginocchia. In alternativa, alcuni servizi potrebbero essere così costosi da eseguire che solo poche richieste causano un DOS - pensa un rapporto davvero costoso. Quindi è necessario un buon monitoraggio a livello di applicazione di ciò che sta accadendo:
- Quali servizi sono stati richiamati e quali argomenti / dati vengono inviati (ad es. Accesso all'applicazione)
- Quali utenti stanno effettuando l'invocazione e da quali IP (ovvero accedendo alla tua applicazione)
- Ciò che interroga e inserisce / aggiorna / elimina il DB sta eseguendo
- Carica media, utilizzo CPU, i / o disco, traffico di rete su tutti i computer (e VM) nel sistema
- Assicurarsi che tutte queste informazioni siano facilmente recuperabili e che sia possibile correlare i registri di diversi computer e servizi (ovvero assicurarsi che tutti i computer siano sincronizzati con l'ora utilizzando ntp).
Vincoli e limiti ragionevoli nella vostra applicazione . Ad esempio, potresti:
- Utilizzare una funzionalità QoS nel bilanciamento del carico per inviare tutte le sessioni anonime a server delle applicazioni separati nel cluster, mentre gli utenti connessi utilizzano un altro set. Ciò impedisce a un DDOS anonimo a livello di applicazione di eliminare clienti importanti
- Utilizzo di un CAPCHA forte per proteggere i servizi anonimi
- Timeout della sessione
- Avere un limite di sessione o un limite di frequenza su determinati tipi di richieste come i rapporti. Assicurati di poter disattivare l'accesso anonimo, se necessario
- Assicurati che un utente abbia un limite al numero di sessioni simultanee (per evitare che un account violato acceda un milione di volte)
- Avere diversi utenti dell'applicazione di database per diversi servizi (ad es. Uso transazionale vs. utilizzo di report) e utilizzare la gestione delle risorse del database per evitare che un tipo di richiesta web travolga tutti gli altri
- Se possibile, rendi questi vincoli dinamici o almeno configurabili. In questo modo, mentre sei sotto attacco, puoi impostare limiti temporanei aggressivi ("throttling" dell'attacco), come una sola sessione per utente e nessun accesso anonimo. Questo non è certamente eccezionale per i tuoi clienti, ma molto meglio che non avere alcun servizio.
Ultimo, ma non meno importante, scrivi un documento del Piano di risposta DOS e fallo revisionare internamente da tutte le parti interessate: Business, Management, il team di sviluppo SW, il team IT e un esperto di sicurezza. Il processo di scrittura del documento indurrà te e il tuo team a riflettere sui problemi e ti aiuterà a essere preparato se il peggio dovesse accadere alle 3 del mattino del tuo giorno libero. Il documento dovrebbe coprire (tra le altre cose):
- Cosa è a rischio e il costo per l'azienda
- Misure adottate per proteggere i beni
- Come viene rilevato un attacco
- La risposta pianificata e la procedura di escalation
- Processi per mantenere il sistema e questo documento aggiornati
Quindi, preambolo a parte, ecco alcune risposte specifiche:
I DDOS sono generalmente bloccati a livello di server, giusto?
Non proprio: la maggior parte dei peggiori attacchi DDOS sono di basso livello (a livello di pacchetto IP) e sono gestiti da regole di routing, firewall e dispositivi di sicurezza sviluppati per gestire gli attacchi DDOS.
C'è un modo per bloccarlo a livello PHP, o almeno ridurlo?
Alcuni attacchi DDOS sono diretti all'applicazione stessa, inviando URI e richieste HTTP validi. Quando il tasso di richieste aumenta, i tuoi server iniziano a lottare e si verificherà un'interruzione del contratto di servizio. In questo caso, ci sono cose che puoi fare a livello PHP:
Monitoraggio a livello di applicazione: assicurati che ogni servizio / pagina registri le richieste in modo da poter vedere cosa sta succedendo (in modo da poter intraprendere azioni per mitigare l'attacco). Qualche idea:
Avere un formato di registro che puoi facilmente caricare in uno strumento di registro (o Excel o simile) e analizzarlo con gli strumenti della riga di comando (grep, sed, awk). Ricorda che un DDOS genererà milioni di righe di registro. Probabilmente dovrai suddividere i tuoi log (in particolare rispetto a URI, ora, IP e utente) per capire cosa sta succedendo e dovrai generare dati come:
- A quali URI si accede
- Quali URI stanno fallendo ad alta velocità (un probabile indicatore degli URI specifici che gli aggressori stanno attaccando)
- Quali utenti accedono al servizio
- Da quanti IP ogni utente accede al servizio
- Quali URI stanno accedendo utenti anonimi
- Quali argomenti vengono utilizzati per un determinato servizio
- Controlla le azioni di un utente specifico
Registra l'indirizzo IP di ogni richiesta. NON invertire il DNS: ironicamente, il costo per farlo rende un DDOS più facile per gli aggressori
- Registra l'intero URI e il metodo HTTP, ad esempio "GET http://example.com/path/to/service?arg1=ddos "
- Registra l'ID utente, se presente
- Registra importanti argomenti HTTP
Limiti di velocità ragionevoli: è possibile implementare limiti sul numero di richieste che un determinato IP o utente può effettuare in un determinato periodo di tempo. Un cliente legittimo può effettuare più di 10 richieste al secondo? Gli utenti anonimi possono accedere a rapporti costosi?
CAPTCHA per accesso anonimo: implementa un CAPTCHA per tutte le richieste anonime per verificare che l'utente sia una persona, non un bot DDOS.
Qual è il modo più veloce e comune per fermare gli attacchi DDOS?
Il più veloce è probabilmente quello di cedere al ricatto, anche se questo potrebbe non essere desiderabile.
Altrimenti, la prima cosa che devi fare è contattare il tuo provider di hosting e / o CDN e lavorare con loro (se non ti hanno già contattato chiedendoti cosa diavolo sta succedendo ...). Quando si verifica un DDOS, probabilmente influenzerà in modo collaterale altri clienti del provider di hosting e il provider potrebbe essere sottoposto a notevoli pressioni per chiudere il tuo sito semplicemente per proteggere le proprie risorse. Preparati a condividere i tuoi registri (qualsiasi informazione) con il provider; questi log, combinati con i loro monitor di rete, possono fornire insieme informazioni sufficienti per bloccare / mitigare l'attacco.
Se ti aspetti un DDOS, è un'ottima idea qualificare il tuo provider di hosting sul livello di protezione che può fornire. Dovrebbero avere esperienza DDOS e strumenti per mitigarlo - comprendere i loro strumenti, processi e procedure di escalation. Chiedete anche quale supporto ha il provider di hosting dai loro fornitori a monte. Questi servizi potrebbero comportare un costo più iniziale o mensile, ma trattalo come una polizza assicurativa.
Mentre sei sotto attacco, dovrai afferrare i tuoi tronchi e estrarli - prova a elaborare lo schema dell'attacco. È opportuno considerare la disattivazione dell'accesso anonimo e la limitazione dei servizi sotto attacco (ovvero ridurre il limite di velocità dell'applicazione per il servizio).
Se sei fortunato e hai una base di clienti piccola e fissa, potresti essere in grado di determinare gli indirizzi IP dei tuoi clienti validi. Se questo è il caso, potresti passare a un approccio da lista bianca per un breve periodo. Assicurati che tutti i tuoi clienti sappiano che sta succedendo in modo che possano chiamare se hanno bisogno di accedere da un nuovo IP :)
Doug McClean ha degli ottimi consigli su: https://stackoverflow.com/a/1029613/1395668