Protezione dagli attacchi DOS

8

Il nostro sito attuale è facilmente DOS. Posso eseguire un test AB contro di esso da Apache e scompare per circa 5-10 minuti. Abbiamo avuto problemi con gli altri DOSing del sito - al punto in cui abbiamo dovuto spegnerlo per 8 ore (consigliato dall'host del server).

Il server è ospitato da Rackspace. Hanno raccomandato di interromperlo per 8 ore, e quando l'abbiamo riavviato, l'attacco riprende.

Abbiamo impostato il chiarore del cloud per il DNS, tuttavia dopo un test AB con 58.000 richieste il sito è stato di nuovo offline (non tanto quanto originariamente).

Rackspace non offre più suggerimenti e ho bisogno di capire qualcosa da fare per il momento, cambiare host di server non è un'opzione a questo punto e ora (lo sviluppatore principale lascerà in 1 settimana una nuova posizione).

Questo specifico attacco ha creato molte connessioni nel database mysql con il comando sleep .

Qualcuno ha suggerimenti o raccomandazioni su come proteggere di nuovo gli attacchi DOS?

Aumenterebbe la RAM sull'host virtuale?

    
posta Jeff 17.02.2012 - 18:17
fonte

4 risposte

6

Se l'attacco sta creando molte connessioni al database con un comando sleep , sembra che il DoS non sia il tuo problema diretto, ma piuttosto una conseguenza del problema. Qual è, cioè, che il tuo database è sleep ing molto.

Direi che ci sono due possibilità qui:

  • La prima possibilità è che questa è una funzione incorporata, in cui determinate circostanze, l'applicazione sta causando esplicitamente la sospensione del database (come menzionato @Rory). Se questo è il caso, questo è uno schema molto cattivo e dovrebbe essere rimosso. Ci sono altre soluzioni, e dovresti assolutamente evitarlo.
  • Più probabile, e ancora peggio, che hai una vulnerabilità SQL Injection nel tuo sito web. La buona novità è che finora, sembra che gli aggressori siano solo che lo usano per fare il tuo sito. Quella brutta notizia è che probabilmente è molto peggio di così.
    Ma, più buone notizie, è un bug specifico nel tuo codice che dovrebbe essere facilmente trovato e risolto da qualsiasi programmatore competente, e non un "DoS" amorfo e anonimo (che potrebbe essere davvero un numero qualsiasi di cose).

Bonifica?
Prima di tutto, capire quale di questi è il caso. Dovrebbe essere abbastanza facile, inizia chiedendo al programmatore se mai invia un comando sleep al db di proposito. Dovrebbe essere anche abbastanza facile da cercare nella codebase le relative stringhe sleep .
Se si tratta del primo scenario, è sufficiente rifattorizzare il codice per rimuovere il comando incriminato.
Altrimenti - e probabilmente dovresti farlo comunque - leggi un po 'su SQL Injection e chiedi a tutti i programmatori di fare altrettanto. Trova e correggi i difetti, quindi esegui un test di penetrazione mirato. (È possibile ottenere un esperto di sicurezza per aiutare qui). Quindi considera la causa principale di tali bug di sicurezza critici e inizia a migliorare il livello generale di sicurezza, tramite formazione, revisioni di codici, SDL, pentests, ecc. (Un professionista della sicurezza può aiutarti anche in questo).

    
risposta data 28.02.2012 - 15:32
fonte
16

Ci sono un paio di cose che puoi fare per prevenire DOS / DDOS.
Per prima cosa consiglierei di usare un firewall autoban. Sto usando Fail2Ban da qualche tempo. La maggior parte dei miei problemi con attacchi DDOS / DOS a SSH, FTP, BIND ed ecc. Sono stati risolti. Quello che fail2ban fa è che sta eseguendo la scansione di un file di registro e quando un modello regolare corrisponde a X volte vieta la persona. Con un po 'più di lavoro puoi farlo leggere quasi tutti i tipi di file di registro.

In secondo luogo c'erano un paio di mod per Apache che prevengono gli attacchi DDOS / DOS. Uno di questi era mod_evasive . L'ho usato per un po ', ma fail2ban ha funzionato al meglio per me (per ora), quindi non sono riuscito a entrare in mod_evasive.

Un'altra possibilità è usare Nginx come front-end che dovrebbe inoltrare le richieste di connessione al tuo server Apache. Quindi imposta Nginx's HttpLimitZoneModule ( info ) su un numero desiderato. Ciò ridurrà la massima connessione in entrata da un singolo IP ma non impedirà il DDOS.

Finalmente - chiudi tutte le tue porte inutilizzate. Lascia solo le porte che devono essere pubbliche come porta 21,53,80,443 ecc. Ciò limiterà le possibilità in cui l'attaccante può scegliere come target.

Modifica:
Assicurati di non ottenere ping flood impostando alcune regole iptables che limitano icmp. Ecco un link che spiega come funziona il ping flood. Prova prima a guardare le immagini, poi il testo avrà più senso per te.
Se stai usando iptables questo comando può aiutarti a prevenire ping / icmp flood:

iptables -A INPUT -p icmp -m limit --limit 6/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

Il primo limiterà le richieste icmp fino a 6 richieste al secondo. Afterwords la persona non riceverà più risposte. Questo eliminerà i bot che stanno facendo un ciclo:

for(i=0; i<1000000; i++){ 
   some evil code that will bring your server down 
   either by pinging or just connecting to random ports. 
};
    
risposta data 17.02.2012 - 23:59
fonte
6

Questo articolo è un buon inizio per i profani . Alla fine ti suggerisce di assumere un esperto di sicurezza.

Se questa non è un'opzione (se ci si aspetta che sia l'esperto), allora ho letto che un'efficace strategia di mitigazione del DOS implica:

  • Avere strumenti IDS all'avanguardia (di terze parti o anche homegrown) per rilevare l'inizio di un attacco DOS (un picco improvviso nel traffico, ecc.); e
  • Dedicare qualcuno a tempo pieno (almeno per un po ') al monitoraggio del traffico di rete e al blocco degli indirizzi IP collegati al server in modo ridondante (più di una volta) - > vedi questo articolo per maggiori informazioni

Senza sapere chi sei / lavoro, è difficile indovinare se sei costantemente re-attaccato dalle stesse parti. Se sei una grande azienda, probabilmente i suoi gruppi multipli (disparati) cercano di chiuderti. Se sei più piccolo, probabilmente è la stessa entità / gruppo che ti sta attaccando. Se questo è il caso, quindi se ti impegni a bloccare in modo aggressivo violando gli IP in questo modo per diverse settimane, è probabile che riuscirai a distruggere gli aggressori nel corso del tempo ea sventarli.

La cosa importante della sicurezza è far aumentare il costo dell'acquisizione rispetto al valore della risorsa stessa.

E, se sei una grande azienda, puoi permetterti di assumere un vero esperto / consulente che conosce campionati più di me; -)

    
risposta data 17.02.2012 - 20:23
fonte
4

Leggi la domanda per ulteriori informazioni su come gli attacchi DoS lavoro.

In questo caso specifico, l'attacco utilizza una funzione che stai permettendo ( sleep ) per forzare i cicli di attesa fino a quando il tuo database non può più rispondere.

Una soluzione per te potrebbe essere quella di disabilitare completamente il comando sleep , a meno che tu non ne abbia bisogno. Una soluzione migliore consiste nell'impedire qualsiasi connessione al database tranne attraverso stored procedure, in modo tale che solo i comandi necessari per eseguire l'applicazione siano consentiti. Ciò renderà molto più difficile per un attaccante trovare e sfruttare un buco.

    
risposta data 17.02.2012 - 20:36
fonte

Leggi altre domande sui tag