Anti DDoS for Dummies

anti ddos for dummies

Come Configurare un Solido Sistema Anti-DDoS per Proteggere la Tua Infrastruttura

Nel mondo digitale di oggi, la protezione contro gli attacchi DDoS (Distributed Denial of Service) è fondamentale per garantire la stabilità e la sicurezza della tua infrastruttura online. Questo articolo vuole essere una piccola guida (da evolvere ovviamente)per guidarvi attraverso il processo di configurazione di un solido sistema anti-DDoS, compreso l’analisi e il calcolo del traffico, la configurazione di iptables, ufw e mod_evasive, e fornirà suggerimenti su come migliorare le difese perimetrali.

Un attacco DDoS viene lanciato da numerosi dispositivi compromessi, quindi le device “tanto a me nonvengono ad attaccare” sono il punto cruciale, come anche i subdomain “dimenticati” e spesso distribuiti a livello globale in quella che viene definita una botnet. Si distingue dagli altri attacchi Denial of Service (DoS) che utilizza un singolo dispositivo connesso a Internet (una connessione di rete) per inondare un bersaglio con traffico dannoso. Questa sfumatura è la ragione principale dell’esistenza di queste due definizioni un po’ diverse.

Non parliamo di buffer overflow che sotto diversi aspetti puo considerarsi un DoS ma a livello di codice.

Il termine “DDoS” (Distributed Denial of Service) può suonare intimidatorio, ma in realtà è un problema comune che può colpire chiunque abbia una presenza online, da siti web a server di gioco o persino aziende. In questo articolo, ti spiegheremo in modo chiaro e colloquiale cosa è un attacco DDoS, come funziona e come proteggerti da esso.

Cos’è un Attacco DDoS?
Un attacco DDoS è un tentativo malintenzionato di sovraccaricare un server o una rete con una quantità eccessiva di traffico, rendendo così inaccessibili i servizi offerti da quella piattaforma. Per farlo, gli attaccanti sfruttano una rete di dispositivi compromessi (spesso chiamati botnet) per inviare una grande quantità di richieste al server bersaglio in modo simultaneo.

In generale, gli attacchi DoS e DDoS possono essere suddivisi in tre tipologie:

Attacchi basati sul volume
Include flood UDP, ICMP e altre flood di pacchetti contraffatti. L’obiettivo dell’attacco è saturare la larghezza di banda del sito attaccato e l’entità viene misurata in bit al secondo (Bps). Una volta si forgiavano i pacchetti sfruttando anche gli algoritmi di backpoff e via dicendo.

Attacchi al protocollo
Include SYN Flood, attacchi di pacchetti frammentati, Ping of Death, Smurf DDoS e altro ancora. Questo tipo di attacco consuma le risorse effettive del server o quelle delle apparecchiature di comunicazione intermedie, come firewall e bilanciatori del carico, e viene misurato in pacchetti al secondo (Pps).

Attacchi a livello di applicazione
Include attacchi leggeri e lenti, inondazioni GET/POST, attacchi che prendono di mira le vulnerabilità di Apache, Windows o OpenBSD e altro ancora. Composti da richieste apparentemente legittime e innocenti, questi attacchi mirano a mandare in crash il server web e la portata viene misurata in richieste al secondo (Rps). Non dimentichiamoci di slowloris che lentamente rende il tutto non disponibile.

riassumendo:

Volumetric (Gbps)
Protocol (pps)
Application layer (rps) attacks.

Volumetric
Un attacco DDoS volumetrico è ciò che la maggior parte delle persone associa al termine “DDoS” perché è il più comune. Il primo attacco DDoS volumetrico ha fatto notizia alla fine degli anni ’90 e da allora ha generato un esercito di imitatori.

Gli attacchi volumetrici possono anche essere chiamati “flood” perché un attacco inonda il server di un bersaglio con richieste, come ping indesiderati. Gli attacchi vengono misurati in bit al secondo (bps) o Gigabit al secondo (Gbps).

Il concetto di un attacco volumetrico è semplice: inviare quanto più traffico possibile a un sito per sopraffare la larghezza di banda del server. Gli attacchi volumetrici vengono tipicamente prodotti utilizzando tecniche di amplificazione. L’amplificazione DNS è una delle tecniche più comuni utilizzate dagli aggressori per effettuare un attacco volumetrico. Il malintenzionato invia piccole richieste DNS con l’indirizzo IP di origine falsificato della vittima a un server DNS. Quando il server riceve la richiesta, risponde alla vittima con una risposta ampia.

Gli aggressori creano anche attacchi volumetrici utilizzando botnet costituite da dispositivi IoT sfruttati. I dispositivi connessi solitamente non dispongono di difese di sicurezza di base, ma poiché sono connessi a Internet e possono eseguire codice, possono essere facilmente sfruttati.

La proliferazione di dispositivi IoT economici come giocattoli, piccoli elettrodomestici, termostati, telecamere di sicurezza e router Wi-Fi rende facile lanciare un attacco efficace con pochi clic. Un hacker può facilmente sfruttare l’estensibilità di Internet per lanciare un attacco DDoS volumetrico di successo con poche risorse.

La botnet Mirai è un esempio della devastazione dei dispositivi IoT sfruttati e non protetti. Mirai ha preso di mira i dispositivi IoT, utilizzando ciascun dispositivo infetto per partecipare a un attacco DDoS volumetrico. Il risultato è stato un attacco riuscito contro alcune delle più grandi organizzazioni del mondo.

PPS
Un protocollo Internet è un insieme distinto di regole per lo scambio di informazioni su Internet. TCP/IP è una delle regole più conosciute per lo scambio di richieste e dati. Un malintenzionato può interrompere gravemente un servizio online sfruttando queste regole.

Gli attacchi al protocollo spesso funzionano ai livelli 3 e 4 del modello OSI su dispositivi di rete come i router. Poiché si trovano a livello di rete, vengono misurati in pacchetti al secondo (pps).

Di seguito è riportato un esempio di diversi tipi di attacchi DDoS a livello di rete:

Inondazioni dell’UDP
SYN inonda
Amplificazione NTP
Amplificazione DNS
Amplificazione SSDP
Frammentazione dell’IP
SYN-ACK si allaga
Esempi di attacchi DDoS basati sul protocollo di rete
Il ping of death (POD) è un attacco di frammentazione IP che sfrutta la limitazione intrinseca delle dimensioni di un pacchetto. Manipolando parti o frammenti del pacchetto, l’exploit può sovraccaricare i buffer di memoria allocati a quel pacchetto e quindi negare il servizio ai pacchetti legittimi.
Un TCP SYN Flood è un altro attacco di protocollo comune. In questo caso, un’ondata di richieste TCP SYN dirette verso un target travolge quest’ultimo e lo rende insensibile.

RPS
Mentre gli attacchi volumetrici e, in misura minore, gli attacchi di protocollo compromettono un servizio con l’enorme numero di richieste, gli attacchi a livello di applicazione o gli attacchi di livello 7 prendono di mira un server edge che esegue un’applicazione web.

Queste minacce sono più difficili da rilevare perché gli aggressori solitamente effettuano richieste come utenti legittimi. Di conseguenza, questi attacchi spesso si manifestano come picchi di traffico minori e non richiedono l’assistenza di una botnet.

Gli attacchi a livello di applicazione vengono misurati in richieste al secondo (RPS), ovvero il numero di richieste effettuate da un’applicazione. Un attacco a livello di applicazione è considerato un attacco basato sulle risorse; pertanto, sono necessarie meno richieste per arrestare un’applicazione perché l’attacco è focalizzato sul sovraccarico della CPU e della memoria.

Un attacco a livello di applicazione include in genere il colpire il server Web, l’esecuzione di script PHP e il contatto con il database per caricare pagine Web. Una singola richiesta HTTP, che è semplice da eseguire sul lato client, può far sì che un server esegua molte richieste interne e carichi numerosi file per soddisfare la richiesta, rallentando il sistema.

Un attacco a livello di applicazione può anche essere un attacco multi-vettore che utilizza una combinazione di attacchi volumetrici e di protocollo per aumentare la probabilità di mettere offline un servizio. A causa della loro complessità ed efficacia, gli attacchi multi-vettore sono sempre più popolari tra i gruppi di criminali informatici.

Attacco DDoS DNS (Domain Name System)
Cos’è un Attacco DDoS DNS:
Un attacco DDoS basato su DNS è mirato a sovraccaricare il sistema DNS di una rete o di un sito web. Il DNS è responsabile della traduzione dei nomi di dominio in indirizzi IP, consentendo agli utenti di accedere ai siti web tramite nomi leggibili anziché indirizzi numerici.

Come Funziona:
Durante un attacco DDoS DNS, gli aggressori utilizzano una rete di dispositivi compromessi per inviare una grande quantità di richieste DNS falsificate al server DNS bersaglio. Questo sovraccarica il server, rendendo difficile o impossibile la traduzione dei nomi di dominio in indirizzi IP. Di conseguenza, il sito web diventa inaccessibile agli utenti legittimi.

Obiettivo:
Gli attacchi DDoS DNS possono essere utilizzati per rendere inaccessibili i siti web o per nascondere altri attacchi mirati.

Attacco DDoS ICMP (Internet Control Message Protocol)
Cos’è un Attacco DDoS ICMP:
Gli attacchi DDoS basati su ICMP sfruttano il protocollo ICMP per sovraccaricare la larghezza di banda di un server o di una rete. ICMP è un protocollo di rete utilizzato per la gestione e il controllo della comunicazione tra i dispositivi.

Come Funziona:
Gli attaccanti inviano una grande quantità di pacchetti ICMP (spesso noti come “ping”) al server bersaglio. Questi pacchetti richiedono una risposta, e se inviati in modo massiccio, possono sovraccaricare la rete o il server, riducendo la capacità di rispondere alle richieste legittime.

Obiettivo:
Gli attacchi DDoS ICMP possono congestire la larghezza di banda e causare ritardi nella comunicazione di rete, rendendo l’accesso a servizi online più lento o impossibile.

Attacco DDoS NTP (Network Time Protocol)
Cos’è un Attacco DDoS NTP:
Un attacco DDoS basato su NTP sfrutta il Network Time Protocol, utilizzato per sincronizzare l’orologio di un dispositivo con un server di tempo di riferimento.

Come Funziona:
Gli attaccanti inviano una grande quantità di richieste NTP a server NTP non protetti. Queste richieste falsificate possono far sì che i server rispondano con dati in eccesso, consumando risorse e saturando la larghezza di banda.

Obiettivo:
Gli attacchi DDoS NTP possono sovraccaricare i server NTP, causando un impatto sulla sincronizzazione dell’orologio per i dispositivi che ne dipendono e riducendo la disponibilità di servizi online.

Come Funziona un Attacco DDoS genealmente?
Immagina il tuo sito web o il server di gioco come un ristorante con un solo cameriere. Normalmente, il cameriere riesce a gestire gli ordini dei clienti senza problemi. Tuttavia, durante un attacco DDoS, centinaia o migliaia di persone entrano nel ristorante contemporaneamente, ordinando cibo a caso e cercando di bloccare il cameriere. Il cameriere diventa così oberato di richieste che non può più servire gli altri clienti, rendendo il ristorante inaccessibile.

  1. Analisi del Traffico
    La prima cosa da fare è analizzare il traffico della tua infrastruttura per identificare pattern e anomalie. Puoi utilizzare strumenti di monitoraggio del traffico come Wireshark o soluzioni più avanzate come Snort. Analizza i dati per individuare comportamenti sospetti o fluttuazioni significative nel traffico.
    Inoltre è importante capire l’utilizzo di banda tipico della vostra infrastruttura, NON esiste una difesa anti ddos

Questi alcuni metodi usati per mitigare gli attacchi

Usare un dns sicuro!
La cosa migliore sarebbe avere un sinkhole o un bind9 configurato correttamente in modo da eliminare attacchi di amplification. Anche un pihole va benissimo (ma la macchina dove è installato deve essere hardenizzata!). Evitare dns di google è cosa buona e giusta, se non capite perché andate a leggervi topolino…

Installazione di alcuni tools:

apt-get install ipset iptables-persistent fail2ban

Configurate fail2ban con nginx con le seguenti istruzioni:

nano /etc/nginx/nginx.conf
limit_req_zone $binary_remote_addr zone=myzone:20m rate=5r/s;

/etc/nginx/sites-enabled/example.com.conf

location / {
limit_req zone=myzone burst=5 nodelay;
}

systemctl restart nginx

apt-get install fail2ban

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

nano /etc/fail2ban/jail.local

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
action = iptables-multiport[name=ReqLimit, port=”http,https”, protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 300
maxretry = 3
bantime = 3600

I valori findtime e maxretry sono importanti perché decidono la frequenza con cui gli IP sospetti vengono bannati. Se riduci questi valori, gli IP degli aggressori verranno bannati più spesso. Modifica i valori secondo le tue necessità. (NO! bisogna farseli due calcoli altrimenti nessuna protezione vale qualcosa!)

nano /etc/fail2ban/filter.d/nginx-limit-req.conf

[Definition]
failregex = limiting requests, excess:.* by zone.*client:

ignoreregex =

systemctl restart fail2ban.service
systemctl status fail2ban.service

Stringhe prese da:
https://sysopstechnix.com/protect-web-servers-from-ddos-attacks-using-fail2ban/

Per apache invece possiamo creare una jail di questo tipo:

[apache-get-dos]
enabled = true
port = http,https
filter = apache-get-dos
logpath = /var/www/*/logs/access.log
datepattern = %%d/%%b/%%Y:%%H:%%M:%%S %%z
maxretry = 300
findtime = 5m
bantime = 1h

creiamo la ban action in jail.d/custom.conf

[DEFAULT]
bantime = 300
findtime = 300
banaction = iptables-allports

[INCLUDES]
before = common.conf

[Definition]

#
ignoreregex =

Per verificare potete usare questa stringa:

Option: failregex
Notes.: regex to match GET requests in the logfile resulting in one of the
following status codes: 401, 403, 404, 503.
The host must be matched by a group named “host”. The tag “”
can be used for standard IP/hostname matching and is only an alias for
(?:::f{4,6}:)?(?P[\w-.^_]+)
Values: TEXT

failregex = ^ .“GET (?!\/robots.txt).” (401|403|404|503)\s

Option: ignoreregex
Notes.: regex to ignore. If this regex matches, the line is ignored.
Values: TEXT

netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr | head -n20

Maggiori dettagli in questo articolo da cui ho preso le stringe apache

https://pipo.blog/articles/20210915-fail2ban-apache-dos

  1. Configurazione di iptables
    Iptables è uno strumento potente per la gestione delle regole del firewall su sistemi Linux. Per proteggerti da attacchi DDoS, configura iptables per limitare il traffico indesiderato. Ad esempio, puoi configurare regole per limitare il numero di connessioni da un singolo IP o per bloccare le richieste provenienti da IP sospetti.

Ecco un esempio di configurazione di iptables per limitare le connessioni in arrivo da un singolo IP:

bash

Abilita il tracking delle connessioni

iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

Limita il numero di connessioni da un singolo IP

iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT
Assicurati di personalizzare le regole iptables in base alle tue esigenze specifiche.

1: Drop invalid packets ###

iptables -t mangle -A PREROUTING -m conntrack –ctstate INVALID -j DROP

2: Drop TCP packets that are new and are not SYN ###

iptables -t mangle -A PREROUTING -p tcp ! –syn -m conntrack –ctstate NEW -j DROP

3: Drop SYN packets with suspicious MSS value ###

iptables -t mangle -A PREROUTING -p tcp -m conntrack –ctstate NEW -m tcpmss ! –mss 536:65535 -j DROP

4: Block packets with bogus TCP flags ###

iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ACK,FIN FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL ALL -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

SSH brute-force protection ###

iptables -A INPUT -p tcp –dport ssh -m conntrack –ctstate NEW -m recent –set
iptables -A INPUT -p tcp –dport ssh -m conntrack –ctstate NEW -m recent –update –seconds 60 –hitcount 10 -j DROP

Protection against port scanning ###

iptables -N port-scanning
iptables -A port-scanning -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s –limit-burst 2 -j RETURN
iptables -A port-scanning -j DROP

iptables-save > /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v6

E’ utile anche bloccare il traffico da e per rete tor

ipset create tor-nodes iphash

curl -sSL “https://www.dan.me.uk/torlist/?ip=$(curl icanhazip.com)” | sed -e ‘/^#/d’ -e ‘/:/d’ | while read IP; do
ipset -q -A tor-nodes $IP
done

Per mitigare loslowloris:

iptables -I INPUT -p tcp –dport 80 \
-m connlimit –connlimit-above 20 –connlimit-mask 40 -j DROP

  1. UFW (Uncomplicated Firewall)
    UFW è un’interfaccia semplificata per iptables su Ubuntu. Puoi utilizzare UFW per semplificare la configurazione del firewall e la gestione delle regole.

Per abilitare UFW e configurarlo per proteggere la tua infrastruttura, segui questi passaggi:

Installa UFW (se non è già installato):

sudo apt-get install ufw
Abilita UFW:
sudo ufw enable
Configura le regole di UFW in base alle tue esigenze. Ad esempio, per consentire solo il traffico HTTP e HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

nano /etc/ufw/before.rules

subito dopo filter inseriamo:

:ufw-http – [0:0]
:ufw-http-logdrop – [0:0]

:ufw-before-input – [0:0]
:ufw-before-output – [0:0]
:ufw-before-forward – [0:0]
:ufw-not-local – [0:0]

e inseriamo le seguenti appena prima di COMMIT

start

Enter rule

-A ufw-before-input -p tcp –dport 80 -j ufw-http
-A ufw-before-input -p tcp –dport 443 -j ufw-http

Limit connections per Class C

-A ufw-http -p tcp –syn -m connlimit –connlimit-above 50 –connlimit-mask 24 -j ufw-http-logdrop

Limit connections per IP

-A ufw-http -m state –state NEW -m recent –name conn_per_ip –set
-A ufw-http -m state –state NEW -m recent –name conn_per_ip –update –seconds 10 –hitcount 20 -j ufw-http-logdrop

Limit packets per IP

-A ufw-http -m recent –name pack_per_ip –set
-A ufw-http -m recent –name pack_per_ip –update –seconds 1 –hitcount 20 -j ufw-http-logdrop

Finally accept

-A ufw-http -j ACCEPT

Log

-A ufw-http-logdrop -m limit –limit 3/min –limit-burst 10 -j LOG –log-prefix “[UFW HTTP DROP] “
-A ufw-http-logdrop -j DROP

end

infine
ufw reload

  1. Mod_evasive
    Mod_evasive è un modulo per il server web Apache che aiuta a mitigare gli attacchi DDoS limitando il numero di richieste da un singolo IP in un determinato intervallo di tempo. Ecco come configurarlo:

Assicurati che il modulo mod_evasive sia installato. Puoi farlo con il seguente comando:
bash

sudo apt-get install libapache2-mod-evasive

Configura mod_evasive modificando il file di configurazione Apache. Di solito, puoi farlo in evasive.conf o evasive20.conf:

sudo nano /etc/apache2/mods-available/evasive.conf

Configura il modulo inserendo le seguenti linee o personalizzandole in base alle tue esigenze:

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10

Riavvia il server Apache per applicare le modifiche:

sudo service apache2 restart

  1. Difese Perimetrali
    Per migliorare ulteriormente la tua protezione DDoS, considera di implementare difese perimetrali come CDN (Content Delivery Network) e servizi di mitigazione DDoS. Un CDN distribuirà il traffico tra più server in tutto il mondo e filtrerà il traffico malevolo prima che raggiunga il tuo server.

Inoltre, investi in servizi di mitigazione DDoS che possono rilevare e bloccare gli attacchi DDoS prima che colpiscano la tua infrastruttura. Questi servizi solitamente offrono protezione basata su cloud ed è possibile configurarli per ridirigere il traffico malevolo lontano dal tuo server.

Ricordate che ogni prodotto commerciale VA CONFIGURATO! anche se abilitate il modulo antiddos su fortigate per esempio non vi servirà a nulla se non inserite i valori giusti!

In sintesi, la protezione contro gli attacchi DDoS è un aspetto cruciale per mantenere la tua infrastruttura online sicura e stabile. La combinazione di analisi del traffico, regole di iptables, UFW, mod_evasive e difese perimetrali ti aiuterà a mitigare gli attacchi DDoS e a mantenere la tua infrastruttura al sicuro. Ricorda di mantenere sempre le tue difese aggiornate e monitorare costantemente il traffico per adattarti alle nuove minacce.