Questo post è a scopo informativo, serve ad informare sui possibili attacchi ai vari livelli.
Tool e Software
Un'introduzione ai tool menzionati in questo post, il sistema che si prenderà in considerazione sarà Linux, idealmente un server fisico o una VPS, tuttavia nozioni e spiegazioni si possono essere applicate ad ogni sistema operativo.
Si prenderà in considerazione il tool iptables per eseguire azioni di filtering.
Più livelli un pacchetto supera, più tempo di calcolo il sistema spende per elaborarlo. Se un attacco DoS viene filtrato a un livello basso, questo avrà un impatto relativamente basso sul sistema.
Iniziamo a scoprire gli attacchi e le possibili difese presenti ad ogni livello dello stack.
Quando un pacchetto arriva a destinazione, il destinatario riceve una sequenza di bit, la scheda di rete li interpreta e li trasforma in informazioni, nel primo stadio l'informazione è detta Frame.
Attacchi a questo livello sono considerati interferenze a livello fisico sul cavo, è impossibile eseguire attacchi layer 1 a meno di sabotaggio.
Per difendersi da questo tipo di attacchi bisogna mettere in sicurezza l'ambiente in cui si trova il server, i data center sono molto attrezzati per prevenire questi attacchi, anche di forza maggiore, ma non sempre è detto che vanno bene...
Una volta ottenuto il Frame, la scheda di rete deve capire se il destinatario dell'informazione è corretto, confronta l'indirizzo MAC di destinazione con l'indirizzo MAC mappato dentro la scheda.
Attacchi layer 2 provengono all'interno della rete del data center, rallentando non solo l'intera rete, ma facendo anche attivare dei servizi di sicurezza per prevenire attacchi dall'interno. Sono pensati per attaccare Router e Switch. L'attacco più comune è detto ARP spoofing.
è possibile difendersi da questo tipo di attacchi, ma sono rarissimi da incappare, tuttavia è al quanto semplice filtrarli:
In caso si vuole proteggere un Router o Switch aziendale:
Nel pacchetto viene controllato l'IP destinazione e viene usato per raggiungere il network e il router(o server) di destinazione. In questo livello sono presenti vari servizi inerenti al raggiungimento della destinazione o al controllo di dispositivi: Protocollo IP, ICMP (Ping), Ipsec, ecc...
Gli Attacchi di questo livello sono i primi disponibili ed accessibili da Internet, si concentrano sul Flood di richieste, il metodo più comune è il flood di richieste ICMP.
Anche qui per difendersi si può usare iptables, per bloccare un flood ICMP si può avere due approcci:
Si hanno pro e contro per ognuna delle scelte, la scelta più efficace è comunque bloccare tutte le richieste ICMP.
A questo livello il segmento contiene le informazioni per mantenere la trasmissione tra due host remoti, in particolare contiene le porte sorgente e destinazione, meccanismi di gestione dei messaggi e alcuni flag importanti. In questo livello si ha i protocolli TCP e UDP.
Di attacchi a questo livello ne esistono molteplici, il più famoso è il SYN Flood (TCP), la maggior parte degli attacchi di questo livello sono con il protocollo TCP, al contrario l'unico attacco che è possibile effettuare in UDP è un semplice flood.
Per difendersi ancora una volta si può usare iptables:
Non vi sono attacchi lato server, ma molti attacchi lato client che non verranno trattati.
L'unico attacco che sono riuscito a trovare è tramite il protocollo SSL, che lavora a questo livello. Questo attacco mira a occupare tempo di calcolo (risorse) del server usando pacchetti SSL malformati, obbligando il server a leggerli.
Purtroppo non ci sono difese per questo attacco, per via di come lavora il protocollo SSL. Tuttavia esiste un'alternativa ai certificati di sicurezza SSL, il TLS. Si consiglia di usare i certificati TLS rispetto a quelli SSL, poichè i certificati SSL sono considerati insicuri. (RFC7568)
Ultimo livello dello stack ISO/OSI, ma anche il livello più terribile per gli attacchi. In questo livello si hanno i dati veri e propri che l'applicazione invia.
Gli attacchi più pericolosi a questo livello mirano a saturare la rete del server, in questa categoria ne ricadono molti altri come gli SQL injection, Cross-Site-Script (o in gergo XSS), brute force (forza bruta) e tutti gli attacchi che mirano all'accesso di un determinato servizio o informazione o che sfruttano vulnerabilità di software o applicativi.
Come potete aver visto, dal livello 5 iptables non può più far nulla, o almeno non direttamente.
Difendersi a questo livello non è una passeggiata, tra gli attacchi elencati posso indicarvi varie soluzioni:
Fine dello stack ISO/OSI, per ogni informazione aggiuntiva potete chiedere nelle risposte.
Tool e Software
Un'introduzione ai tool menzionati in questo post, il sistema che si prenderà in considerazione sarà Linux, idealmente un server fisico o una VPS, tuttavia nozioni e spiegazioni si possono essere applicate ad ogni sistema operativo.
Si prenderà in considerazione il tool iptables per eseguire azioni di filtering.
Livelli ISO/OSI
La composizione di un pacchetto può essere rappresentata proprio come lo stack ISO/OSI, ogni sezione dello stack ha una corrispondenza nei pacchetti inviati e ricevuti. Un'applicazione per poter leggere i dati di un pacchetto, deve riceve l'informazione spacchettando ad ogni livello le informazioni che non servono più.Più livelli un pacchetto supera, più tempo di calcolo il sistema spende per elaborarlo. Se un attacco DoS viene filtrato a un livello basso, questo avrà un impatto relativamente basso sul sistema.
Iniziamo a scoprire gli attacchi e le possibili difese presenti ad ogni livello dello stack.
Livello 1 - Fisico
Quando un pacchetto arriva a destinazione, il destinatario riceve una sequenza di bit, la scheda di rete li interpreta e li trasforma in informazioni, nel primo stadio l'informazione è detta Frame.
Attacchi a questo livello sono considerati interferenze a livello fisico sul cavo, è impossibile eseguire attacchi layer 1 a meno di sabotaggio.
Per difendersi da questo tipo di attacchi bisogna mettere in sicurezza l'ambiente in cui si trova il server, i data center sono molto attrezzati per prevenire questi attacchi, anche di forza maggiore, ma non sempre è detto che vanno bene...
Livello 2 - Collegamento
Una volta ottenuto il Frame, la scheda di rete deve capire se il destinatario dell'informazione è corretto, confronta l'indirizzo MAC di destinazione con l'indirizzo MAC mappato dentro la scheda.
Attacchi layer 2 provengono all'interno della rete del data center, rallentando non solo l'intera rete, ma facendo anche attivare dei servizi di sicurezza per prevenire attacchi dall'interno. Sono pensati per attaccare Router e Switch. L'attacco più comune è detto ARP spoofing.
è possibile difendersi da questo tipo di attacchi, ma sono rarissimi da incappare, tuttavia è al quanto semplice filtrarli:
iptables -A INPUT -m mac --mac-source XX:xx:XX:xx:XX:xx -j DROP
In caso si vuole proteggere un Router o Switch aziendale:
Livello 3 - Rete
Nel pacchetto viene controllato l'IP destinazione e viene usato per raggiungere il network e il router(o server) di destinazione. In questo livello sono presenti vari servizi inerenti al raggiungimento della destinazione o al controllo di dispositivi: Protocollo IP, ICMP (Ping), Ipsec, ecc...
Gli Attacchi di questo livello sono i primi disponibili ed accessibili da Internet, si concentrano sul Flood di richieste, il metodo più comune è il flood di richieste ICMP.
Anche qui per difendersi si può usare iptables, per bloccare un flood ICMP si può avere due approcci:
- Bloccare SOLO le richieste considerate flood (rate limit)
iptables -A INPUT -p icmp -m hashlimit --hashlimit-name PING --hashlimit 15/sec --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT
- Bloccare tutto il protocollo ICMP
iptables -A INPUT -p icmp -j DROP
Si hanno pro e contro per ognuna delle scelte, la scelta più efficace è comunque bloccare tutte le richieste ICMP.
Livello 4 - Trasporto
A questo livello il segmento contiene le informazioni per mantenere la trasmissione tra due host remoti, in particolare contiene le porte sorgente e destinazione, meccanismi di gestione dei messaggi e alcuni flag importanti. In questo livello si ha i protocolli TCP e UDP.
Di attacchi a questo livello ne esistono molteplici, il più famoso è il SYN Flood (TCP), la maggior parte degli attacchi di questo livello sono con il protocollo TCP, al contrario l'unico attacco che è possibile effettuare in UDP è un semplice flood.
Per difendersi ancora una volta si può usare iptables:
- SYN Flood
Purtroppo non esistono regole che bloccato effettivamente questo genere di attacchi, tuttavia è possibile mitigare in parte i loro effetti, attraverso un rate limit
iptables -A INPUT -p tcp --syn -m hashlimit --hashlimit §/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name synattack -j ACCEPT
Attenzione : Il simbolo § deve essere cambiato nel numero di richieste al secondo.
N.B. : Questo codice viene applicato ad ogni IP, utile per un attacco proveniente dalle stesse sorgenti, se viene da molteplici sorgenti,
si può usare
-m limit --limit §/s --limit-burst 30 -j ACCEPT
- TCP malformato + Combinazioni dei TPC flag
Bash:
# pacchetti già segnati come invalidi
iptables -A INPUT -m state --state INVALID -j DROP
# pacchetti SYN con parametri invalidi
iptables -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
- Flood UDP
Se possibile è sempre meglio rifiutare ogni pacchetto UDP, si può usare la seguente regola
iptables -A INPUT -p udp -j DROP
Se vi sono servizi che usano UDP allora si usa il rate limit
iptables -A INPUT -p udp -m hashlimit --hashlimit §/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name udp -j ACCEPT
Attenzione : Il simbolo § deve essere cambiato nel numero di richieste al secondo.
N.B. : Questo codice viene applicato ad ogni IP, utile per un attacco proveniente dalle stesse sorgenti, se viene da molteplici sorgenti,
si può usare
-m limit --limit §/s --limit-burst 30 -j ACCEPT
Livello 5 - Sessione
In questo livello sono presenti i dati per l'applicazione che servono ad avviare la connessione e sincronizzazione con l'utente.Non vi sono attacchi lato server, ma molti attacchi lato client che non verranno trattati.
Livello 6 - Presentazione
In questo livello sono presenti i dati per l'applicazione che servono per instaurare connessioni sicure.L'unico attacco che sono riuscito a trovare è tramite il protocollo SSL, che lavora a questo livello. Questo attacco mira a occupare tempo di calcolo (risorse) del server usando pacchetti SSL malformati, obbligando il server a leggerli.
Purtroppo non ci sono difese per questo attacco, per via di come lavora il protocollo SSL. Tuttavia esiste un'alternativa ai certificati di sicurezza SSL, il TLS. Si consiglia di usare i certificati TLS rispetto a quelli SSL, poichè i certificati SSL sono considerati insicuri. (RFC7568)
Livello 7 - Applicazione
Ultimo livello dello stack ISO/OSI, ma anche il livello più terribile per gli attacchi. In questo livello si hanno i dati veri e propri che l'applicazione invia.
Gli attacchi più pericolosi a questo livello mirano a saturare la rete del server, in questa categoria ne ricadono molti altri come gli SQL injection, Cross-Site-Script (o in gergo XSS), brute force (forza bruta) e tutti gli attacchi che mirano all'accesso di un determinato servizio o informazione o che sfruttano vulnerabilità di software o applicativi.
Come potete aver visto, dal livello 5 iptables non può più far nulla, o almeno non direttamente.
Difendersi a questo livello non è una passeggiata, tra gli attacchi elencati posso indicarvi varie soluzioni:
- HTTP Flood
Questo tipo di attacco prende di mira il file più pesante presente nel server, e con molteplici connessioni cerca di scaricarlo, occupando la rete totale disponibile,
un approccio è il solito rate limit, ma è giusto consigliare di rimuovere o alleggerire il file.
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m hashlimit --hashlimit §/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name httpflood -j ACCEPT
Attenzione : Il simbolo § deve essere cambiato nel numero di richieste al secondo.
N.B. : Questo codice viene applicato ad ogni IP, utile per un attacco proveniente dalle stesse sorgenti, se viene da molteplici sorgenti,
si può usare
-m limit --limit §/s --limit-burst 30 -j ACCEPT
- SQL Injection
Usare la funzione Prepare di SQL
- Cross-Site-Script
Controllare SEMPRE l'input del utente
- Brute force
Captcha e doppia autenticazione
- Exploits
Informarsi sugli update dei software e mantenerli aggiornati
Fine dello stack ISO/OSI, per ogni informazione aggiuntiva potete chiedere nelle risposte.