Domanda

Questo potrebbe essere qualcosa di più adatto a Serverfault, ma molti sviluppatori web che vengono solo qui trarranno probabilmente beneficio da possibili risposte a questa domanda.

La domanda è: come proteggersi efficacemente dagli attacchi Denial Of Service contro il proprio server web?

Mi sono chiesto questo dopo aver letto questo articolo

Per coloro che non hanno familiarità, ecco cosa ricordo a riguardo: un attacco DoS tenterà di occupare tutte le tue connessioni inviando ripetutamente intestazioni fasulle ai tuoi server.

In questo modo, il tuo server raggiungerà il limite di possibili connessioni simultanee e, di conseguenza, gli utenti normali non potranno più accedere al tuo sito.

Wikipedia fornisce ulteriori informazioni: http://en.wikipedia.org/wiki/Denial_of_service

È stato utile?

Soluzione

Non c'è panacea, ma puoi rendere più difficili gli attacchi DoS effettuando una delle seguenti operazioni:

  • Non (o limitare la tua volontà di) eseguire operazioni costose per conto di clienti non autenticati
  • Tentativi di autenticazione dell'acceleratore
  • Le operazioni a farfalla eseguite per conto di ciascun client autenticato e mettono il loro account in un blocco temporaneo se fanno troppe cose in un tempo troppo breve
  • Utilizza un'accelerazione globale simile per tutti i client non autenticati e preparati a ridurre questa impostazione se rilevi un attacco in corso
  • Utilizza un flag che puoi utilizzare durante un attacco per disabilitare tutti gli accessi non autenticati
  • Non archiviare oggetti per conto di client non autenticati e utilizzare una quota per limitare l'archiviazione per ciascun client autenticato
  • In generale, rifiuta tutte le richieste malformate, irragionevolmente complicate o irragionevolmente enormi il più rapidamente possibile (e registrale per facilitare il rilevamento di un attacco)
  • Non utilizzare una cache LRU pura se le richieste di client non autenticati possono comportare lo sfratto di oggetti da quella cache, perché sarai soggetto ad attacchi di avvelenamento della cache (in cui un client maligno richiede molte diverse cose usate di rado, causandoti per eliminare tutte le cose utili dalla tua cache e devi fare molto più lavoro per servire i tuoi clienti legittimi)

Ricorda, è importante rifiutare totalmente le richieste limitate (ad esempio, con un HTTP 503: servizio non disponibile o una risposta simile appropriata a qualsiasi protocollo si stia utilizzando) anziché mettere in coda le richieste limitate. Se li metti in coda, la coda consumerà tutta la tua memoria e l'attacco DoS sarà almeno altrettanto efficace di quello che sarebbe stato senza la limitazione.

Alcuni consigli più specifici per i server HTTP:

  • Assicurati che il tuo server web sia configurato per rifiutare i messaggi POST senza l'intestazione Content-Length e per rifiutare le richieste (e limitare il client offensivo) che eccedono il dichiarato Content-Length e di rifiutare le richieste con un Content-Length che è irragionevolmente lungo per il servizio che il POST (o PUT ) è rivolto a

Altri suggerimenti

Per questo attacco specifico (purché la richiesta sia GET) baserebbe un bilanciamento del carico o un WAF che baserebbe solo le richieste complete al server web.

I problemi iniziano quando invece di GET POST viene utilizzato (il che è facile) perché non si può sapere se si tratta di un POST dannoso o di un caricamento molto lento da parte di un utente.

Da DoS in sé non puoi davvero proteggere la tua webapp per un semplice fatto. Le tue risorse sono limitate mentre l'attaccante ha potenzialmente tempo e risorse illimitate per eseguire il DoS. E la maggior parte delle volte è poco costoso per l'attaccante eseguire i passaggi richiesti. per esempio. questo attacco menzionato sopra alcune 100 connessioni a rallentamento - > nessun problema

I server asincroni, per esempio, sono più o meno immuni da questa particolare forma di attacco. Ad esempio, servo le mie app di Django usando un proxy inverso Nginx e l'attacco non sembra aver influito in alcun modo sul suo funzionamento. Un altro server asincrono popolare è lighttpd.

Intendiamoci, questo attacco è pericoloso perché può essere eseguito anche da una singola macchina con una connessione lenta. Tuttavia, attacchi DDoS comuni mettono il tuo server contro un esercito di macchine, e c'è poco che puoi fare per proteggerti da loro.

Risposta breve:

Non puoi proteggerti da un DoS.

E non sono d'accordo che appartiene a serverfault poiché DoS è classificato come un problema di sicurezza ed è sicuramente correlato alla programmazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top