Torna al blog

Come verificare rapidamente se il tuo sito web è protetto contro gli attacchi DoS?

2022-02-195 min di lettura

L'obiettivo di questa rapida guida è spiegare come eseguire uno stress test sul tuo sito e vedere come si comporta sotto carico estremo. Lo strumento Open Source che utilizziamo per questo test è lo strumento di benchmarking HTTP wrk.

Cos'è un attacco (DoS) Denial-Of-Service:

Un Denial Of Service (DoS) è un tipo di attacco in cui l'aggressore impedisce agli utenti autorizzati di accedere a un servizio. Il metodo più comune di DoS prevede il sovraccarico del servizio con così tanto traffico o richieste di dati, che il servizio non sarebbe in grado di rispondere agli utenti legittimi fino a quando il flusso malevolo non è terminato. Utilizzeremo lo strumento di benchmarking HTTP, wrk, per emulare questo tipo di attacco.

In informatica, cos'è un benchmark:

Secondo wikipedia, benchmark è:

In informatica, un benchmark è l'atto di eseguire un programma per computer, un set di programmi o altre operazioni, al fine di valutare le prestazioni relative di un oggetto, normalmente eseguendo una serie di test e prove standard su di esso. Il termine benchmark è anche comunemente utilizzato per i programmi di benchmarking elaborati stessi.

Due caratteristiche chiave di un benchmark sono:

  1. Deve essere ripetibile.
  2. Deve essere quantificabile.

Cos'è wrk:

Per eseguire il test di carico sul nostro sito web stiamo utilizzando wrk, secondo la loro documentazione ufficiale:

wrk è uno strumento moderno di benchmarking HTTP in grado di generare un carico significativo quando eseguito su una singola CPU multi-core. Combina un design multithread con sistemi scalabili di notifica degli eventi come epoll e kqueue.

wrk è open source, ma prima di utilizzarlo, dai un'occhiata all'avviso sulla crittografia su https://github.com/wg/wrk#cryptography-notice

Come installare wrk

Ok, finalmente inizieremo i test. Assicurati di essere a tuo agio nell'eseguire comandi nel terminale, poiché al momento non esiste un'interfaccia grafica per eseguire wrk.

  • Come installare wrk su Mac

    • Installa homebrew, esegui il seguente comando in un terminale:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    • Per installare wrk, esegui il seguente comando in un terminale:
brew install wrk

  • Come installare wrk sulla distribuzione Linux Ubuntu

sudo apt-get update
sudo apt-get install wrk

  • come installare wrk su windows

Gli utenti Windows dovranno prima installare Ubuntu tramite questo link ed eseguire successivamente i due comandi sopra.

Come stressare il tuo sito

L'uso base di wrk si presenta così:

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html

Le opzioni della riga di comando valide sono:

-c, --connections: numero totale di connessioni HTTP da mantenere aperte con
                   ogni thread che gestisce N = connections/threads

-d, --duration:    durata del test, ad es. 2s, 2m, 2h

-t, --threads:     numero totale di thread da utilizzare

-s, --script:      script LuaJIT, vedi SCRIPTING

-H, --header:      intestazione HTTP da aggiungere alla richiesta, ad es. "User-Agent: wrk"

    --latency:     stampa statistiche dettagliate sulla latenza

    --timeout:     registra un timeout se una risposta non viene ricevuta entro
                   questo lasso di tempo.

Eseguirò un benchmark per 90 secondi, utilizzando 10 thread e mantenendo aperte 100000 connessioni HTTP.

wrk -t10 -c100000 -d90s https://davidloor.com --timeout 3s --latency -H 'Client: wrk terminal'

Breve spiegazione di ciò che sto facendo con le opzioni passate:

-t10: Usa dieci thread separati
-c100000: Apri 100000 connessioni
-d90s: Esegui il test per novanta secondi
https://davidloor.com Il sito web di destinazione
--timeout 3s: Definisci un timeout di tre secondi
--latency: stampa statistiche dettagliate sulla latenza
-H 'Client: wrk terminal': Passa un'intestazione Client

Quindi, possiamo dire che lo stress test sta cercando di emulare 100000 utenti che aprono la homepage del sito web più volte per 90 secondi.

Importante: Durante l'esecuzione dello stress test, apri il sito web e prova anche ad accedere (se il sito ha questa funzionalità), se il sito si carica velocemente come al solito, puoi presumere che sia protetto da semplici attacchi DoS e che il server sia in grado di gestire un carico significativo. Se il sito impiega del tempo per caricarsi, o visualizza un errore, hai un problema con il sito web e dovresti contattare il tuo provider di hosting. In alcuni casi il sito non sarà in grado di recuperare da solo e potrebbe essere necessario riavviare alcuni servizi.

Analizza l'Output

Dopo aver eseguito il comando ottengo questo:

Running 2m test @ https://davidloor.com
  10 threads and 100000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   528.12ms  527.33ms   2.99s    87.92%
    Req/Sec    20.30     16.93   116.00     74.75%
  Latency Distribution
     50%  356.27ms
     75%  638.27ms
     90%    1.20s 
     99%    2.62s 
  11662 requests in 1.50m, 735.63MB read
  Socket errors: connect 97681, read 117, write 0, timeout 1581
Requests/sec:    129.43
Transfer/sec:      8.16MB

Fornisce un rapido riepilogo su quanto tempo è durato il test e il sito web (https://davidloor.com) che è stato testato. Mostra anche i parametri di distribuzione normale per latenza e Req/Sec. Indica che in 1,5 minuti, wrk ha effettuato 11662 richieste e trasferito 735,63 MB di dati.

I valori medi di Latenza e Req/Sec sono buoni? Dipende da ogni singola situazione. Dovremmo sempre cercare di mantenere la Latenza bassa e i Req/Sec alti, e dovresti tenere presente che maggiore è il numero di connessioni, minori saranno questi 2 valori.

Conclusioni

  1. Puoi stressare rapidamente il tuo sito con wrk. https://github.com/wg/wrk
  2. Il comando per eseguire uno stress test, dopo aver installato wrk, è: `wrk -t10 -c100000 -d90s https://davidloor.com –timeout 3s –latency -H ‘Client: wrk terminal’`
  3. Esegui il comando wrk e, contemporaneamente, prova a caricare il sito nel tuo browser e vedi se riscontri rallentamenti.
  4. Esistono risorse gratuite per migliorare le prestazioni del tuo sito web senza aggiungere più risorse al server, come l'utilizzo di una CDN gratuita, ad esempio cloudflare.
  5. Se hai una CDN, assicurati di sfruttarne appieno i vantaggi.

Disclaimer: Le informazioni disponibili in questo post del blog sono solo a scopo educativo. Non sono responsabile di come utilizzi le informazioni qui presenti.