Attacchi ad ogni livello

Pila iso/osi e tcp/ip

Questo post è a scopo informativo, serve ad informare sui possibili attacchi ai vari livelli basandosi sul modello ISO/OSI.

Tool

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

Rappresentazione livello 1

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

Rappresentazione livello 2

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

Rappresentazione livello 3

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

Rappresentazione livello 4

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
iptables -A INPUT -m state --state INVALID -j DROP

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.[/INDENT]
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

Rappresentazione livello 7

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.

About the author

alessandrobasi

Appassionato di informatica, scrivo su argomenti tecnici poco conosciuti su cui vale la pena soffermarsi.

Be the first to comment

Rispondi