Salta al contenuto
Note per Studenti Firewall

Firewall

In questa pagina 6

Che cos'è un firewall

Definizione (firewall). Parte di un sistema informatico o di una rete progettata per fermare il traffico non autorizzato che passa da una rete a un'altra. Può essere realizzato in hardware o in software (o in una combinazione). Filtra i dati, reindirizza il traffico, protegge dagli attacchi.

Un firewall ben progettato deve soddisfare tre requisiti:

  1. tutto il traffico tra due zone di fiducia deve passare dal firewall;
  2. deve passare solo il traffico autorizzato;
  3. il firewall stesso deve essere immune alle intrusioni.

I pacchetti possono arrivare da entrambi i lati: in ingresso (incoming, da Internet verso la rete locale) e in uscita (outgoing, dalla rete locale verso Internet). Come sa il firewall che cosa fare dei pacchetti? Lo configura un amministratore, che stabilisce un insieme di politiche.

Le politiche

Una politica (policy) del firewall definisce le regole che il firewall deve applicare. Di solito le regole servono a dare:

  • controllo dell'utente: l'accesso ai dati dipende dal ruolo dell'utente dentro il perimetro del firewall;
  • controllo del servizio: l'accesso è controllato dal tipo di servizio offerto dall'host, di solito in base all'indirizzo del socket (indirizzo e porta);
  • controllo della direzione: l'accesso dipende dal verso del flusso (inbound se dalla rete verso il firewall, outbound altrimenti).

Definizione (esiti possibili). Un pacchetto che attraversa un firewall può avere tre esiti: accettato (accepted, può entrare nella rete o nell'host attraverso il firewall); negato (denied, non gli è permesso entrare dall'altra parte); rifiutato (rejected: come negato, più il tentativo di avvisare la sorgente che è stato negato, con un messaggio ICMP, Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP →).

Il rifiuto con ICMP può aiutare un attaccante (gli dice che c'è un firewall e che cosa blocca): per questo spesso si preferisce scartare in silenzio.

Quali informazioni usa

Un firewall decide con le informazioni nelle intestazioni (e talvolta nei dati) dei pacchetti.

livello informazioni
L5-7 applicazione l'applicazione, ...
L4 trasporto porte (applicazioni), tipo di applicazione, flag di controllo
L3 rete estremi della comunicazione (entità), protocollo di trasporto, ...
L2 collegamento prossimo salto fisico, protocollo di rete, ...
  • Livello 2: protocollo di rete (IP, altri protocolli di accesso nel caso di VPN); indirizzo MAC Ethernet.
  • Livello 3: indirizzo sorgente e destinazione; flag (soprattutto sulla frammentazione IP); tipo di protocollo di trasporto (TCP, UDP, ICMP, ...); opzioni, per esempio il source routing (il mittente specifica esplicitamente il percorso del pacchetto): è spesso usato per attacchi, quindi la maggior parte dei firewall scarta questi pacchetti.
  • Livello 4: porta sorgente e porta destinazione, che permettono di capire l'applicazione che invia o riceve; flag di controllo TCP (ACK, SYN, FIN).

Proprietà (intervalli di porte). Il numero di porta ha 16 bit, quindi i valori possibili sono 216=65 5362^{16}=65\,536, da 00 a 65 53565\,535 (Sistemi di numerazione posizionaliNotazione posizionale in base b; conversioni tra base 10, 2, 8 e 16 per interi (divisioni successive) e per parti frazionarie (moltiplicazioni successive); numeri periodici in binario.Sistemi di numerazione posizionali →).

tipo intervallo usate da
porte note (well-known) 0-1023 server (servizi critici)
porte registrate 1024-49151 applicazioni registrate
porte effimere (ephemeral) 49152-65535 client (di breve durata)

Esempio. Un server SMTP ascolta sulla porta 25 (nota); un client che gli scrive usa una porta sorgente effimera, per esempio 51034. Per questo nelle regole si scrive "porta sorgente >1023>1023" per i client. Nelle slide la regola ">1023>1023" include tutte le porte non note (Livello di trasporto - porte e multiplexingIl livello di trasporto (transport layer) offre la comunicazione logica end-to-end tra processi applicativi di host diversi, ed è realizzato solo negli host finali, non nei router. Il livello di rete consegna al computer giusto (indirizzo IP), il trasporto consegna al processo giusto (numero di porta di 16 bit, 0-65535). Una porta più un indirizzo IP formano un socket; la quaterna (IP sorgente, porta sorgente, IP destinazione, porta destinazione) identifica una connessione. I servizi sono: comunicazione processo-processo, indirizzamento, incapsulamento/decapsulamento, multiplexing/demultiplexing e, se il protocollo è affidabile, controllo di errore, di flusso e di congestione. I protocolli sono UDP (senza connessione, inaffidabile), TCP (con connessione, affidabile) e SCTP (combina i due).Livello di trasporto - porte e multiplexing →).

Digressione: apertura e chiusura di una connessione TCP. Un firewall che guarda le flag TCP deve conoscere l'handshake (TCP - connessione, affidabilità e controllo di flussoTCP (Transmission Control Protocol) è il protocollo di trasporto con connessione e affidabile: trasforma il servizio senza connessione e inaffidabile di IP in un flusso di byte ordinato, senza errori né duplicati. La connessione si apre con l'handshake a tre vie (SYN, SYN+ACK, ACK) e si chiude con tre o quattro segmenti (FIN). I byte sono numerati: il numero di sequenza è quello del primo byte del segmento, il numero di ACK (cumulativo) è il prossimo byte atteso. Il mittente può inviare $\min(\text{rwnd},\text{cwnd})$ byte non ancora confermati; rwnd (finestra del ricevitore, in un campo di 16 bit) è il controllo di flusso. L'errore si gestisce con checksum, ACK, timeout di ritrasmissione (RTO) e ritrasmissione rapida dopo tre ACK duplicati. Per usare tutto il canale la finestra deve valere almeno il prodotto banda-ritardo (BDP); il throughput massimo è $\text{MSS}\cdot W_{\max}/\text{RTT}$.TCP - connessione, affidabilità e controllo di flusso →). TCP è orientato alla connessione: stabilisce un percorso logico tra sorgente e destinazione, e tutti i segmenti viaggiano su di esso, il che facilita ACK e ritrasmissioni. L'apertura si chiama three-way handshake:

  1. SYN: il client manda il primo segmento con solo il flag SYN, per sincronizzare i numeri di sequenza;
  2. SYN+ACK: il server manda un segmento con due flag;
  3. ACK: il client manda un segmento di solo ACK, che conferma la ricezione del secondo; con l'ACK il mittente può anche trasportare già dei dati (piggyback), e la comunicazione parte subito (più efficiente).

Tempo di apertura, contando come nelle slide (con τp\tau_p ritardo di propagazione di un segmento, Analisi delle prestazioni di reteLe prestazioni di una rete si misurano con tre famiglie di metriche: traffico (bitrate $R_0$ massimo del collegamento, throughput $S\le R_0$ dati consegnati con successo, goodput al livello applicazione), ritardo (end-to-end $d_{tot}=d_{proc}+d_{queue}+d_{trans}+d_{prop}$ con $d_{trans}=L/R$ e $d_{prop}=d/v$; jitter; RTT) e capacità del tubo (BDP $=R\cdot$ ritardo, bit che riempiono il collegamento), più l'affidabilità (PER, PDR, PLR). Il throughput di un percorso è quello del collegamento collo di bottiglia, $\min$ dei bitrate, ricordando che i collegamenti condivisi dividono la capacità.Analisi delle prestazioni di rete →, e trascurando il tempo di trasmissione e di elaborazione): TCE=3 τpT_{CE}=3\,\tau_p senza piggyback; TCE=2 τpT_{CE}=2\,\tau_p con piggyback (il client può cominciare a trasmettere appena riceve il SYN+ACK).

Come si ottengono: ogni segmento impiega τp\tau_p per andare da un estremo all'altro. Il SYN parte al tempo 00 e arriva al server a τp\tau_p; il SYN+ACK parte da lì e arriva al client a 2τp2\tau_p (è un RTT≈2τpRTT\approx2\tau_p); l'ACK parte dal client a 2τp2\tau_p e arriva al server a 3τp3\tau_p. Senza piggyback i dati iniziano solo dopo questo terzo segmento puro, quindi si contano tre attese di propagazione. Con il piggyback il terzo segmento contiene già i dati: il client non aspetta altro dopo aver ricevuto il SYN+ACK e la trasmissione parte a 2τp2\tau_p.

client                                   server
  |--- SYN ----------------------------->|   t = 0 -> arriva a tau_p
  |<-- SYN+ACK --------------------------|   parte a tau_p -> arriva a 2 tau_p
  |--- ACK (+ dati, piggyback) --------->|   parte a 2 tau_p -> arriva a 3 tau_p

Esempio. Con τp=20\tau_p=20 ms (cioè RTT=2τp=40RTT=2\tau_p=40 ms): TCE=3⋅20=60T_{CE}=3\cdot20=60 ms, oppure 2⋅20=402\cdot20=40 ms con i dati nell'ACK, cioè esattamente un RTT.

La chiusura può essere a tre vie (il client manda FIN, il server risponde FIN+ACK, il client manda ACK e chiude in entrambe le direzioni) o a quattro vie con chiusura a metà (half closing): il client manda FIN, il server risponde ACK e può continuare a mandare dati mentre il client può mandare solo ACK senza dati; finita la trasmissione il server manda FIN e il client risponde ACK.

Effetto della crittografia. Attenzione: la cifratura può impedire al firewall di accedere ad alcune informazioni dei pacchetti (per esempio con IPsec e SSL/TLS, Crittografia asimmetrica, RSA e TLSCrittografia asimmetrica (a chiave pubblica): chiave di cifratura pubblica v_B, chiave di decifratura privata s_B, matematicamente legate; C = E_vB(P), P = D_sB(C); dà riservatezza. I certificati digitali, emessi da una Certificate Authority e firmati con la sua chiave privata, legano un'identità a una chiave pubblica. Firma digitale: hash del messaggio cifrato con la chiave privata; garantisce autenticità, integrità e non ripudio. RSA: si scelgono due primi grandi p e q, N = pq, phi(N) = (p-1)(q-1), e coprimo con phi(N), d = e^(-1) mod phi(N); chiave pubblica (N, e), segreta (N, d); cifratura c = m^e mod N, decifratura m = c^d mod N con m < N (teorema di Eulero); sicura finché la fattorizzazione è difficile (N di almeno 2048 bit); il padding casuale (PKCS#1 v1.5: 00 02 [casuale] 00 [m]) difende da malleabilità e determinismo. La firma RSA è s = m^d mod N, verificata con s^e mod N. TLS (su TCP) autentica gli estremi con il certificato, cifra i dati con una chiave di sessione simmetrica e garantisce l'integrità con i MAC; da TLS 1.0 a 1.3 la chiave si ricava con Diffie-Hellman e l'handshake si accorcia. DTLS è la versione per UDP.Crittografia asimmetrica, RSA e TLS →, VPNUna VPN (Virtual Private Network) è una rete privata costruita sopra una rete pubblica (Internet): i nodi comunicano in sicurezza come se fossero in una rete privata, ottenendo autenticazione, riservatezza e integrità senza trovarsi fisicamente nella rete. Architettura: un host designato, il server VPN, ammesso dal firewall; chi sta fuori deve passare dal server e autenticarsi. Un pacchetto IP protetto (cifrato) viene incapsulato come carico di un altro pacchetto IP (IP tunneling). Due modi: IPsec (livello rete, nel kernel; protocolli AH ed ESP, modo tunnel o trasporto, Security Association unidirezionale identificata da SPI) e tunnel SSL/TLS (fuori dal kernel, in un'applicazione su TCP o UDP, il più popolare). Il client e il server VPN stabiliscono il tunnel, vi inoltrano i pacchetti IP destinati all'altro lato e, in ricezione, li rilasciano nella rete privata, usando un'interfaccia virtuale TUN (livello 3) o TAP (livello 2). Autenticazione reciproca: il client autentica il server con un certificato, il server il client con una chiave condivisa (per esempio la password). Una VPN nasconde anche l'indirizzo IP reale e permette di aggirare le restrizioni geografiche.VPN →). Dipende però dal livello al quale il firewall è realizzato. Poiché i firewall sono usati in genere per la comunicazione di livello rete verso Internet o altre reti TCP/IP esterne, la comunicazione di livello collegamento non passa dal firewall. (Ricordiamo che un protocollo di sicurezza di livello NN protegge la PDU di livello NN e superiori, non quelle sotto, Introduzione alla sicurezza delle retiUna minaccia è un evento o una sequenza di azioni che può violare uno o più obiettivi di sicurezza; la sua realizzazione è un attacco. Obiettivi: riservatezza, integrità, disponibilità, responsabilità (accountability), privacy. Minacce: intercettazione, analisi del traffico, falsificazione, mascheramento, ripudio, profilazione, fingerprinting, disturbo (jamming). Servizi (segretezza, protezione dell'integrità, autenticazione del messaggio e dell'entità, non ripudio, anonimizzazione, gestione delle chiavi, controllo degli accessi) e meccanismi (cifratura, firma digitale, rilevamento delle intrusioni, MAC, randomizzazione, accordo sulla chiave). Un protocollo di sicurezza di livello N protegge la PDU di livello N e superiori, non quelle sotto. Attacchi fisici, software e di rete; sniffing e spoofing alla base di DoS (esempio: Smurf con ICMP) e MITM (avvelenamento della cache ARP o DNS, ICMP redirect). Altri: sinkhole, wormhole, ping of death, DDoS con botnet.Introduzione alla sicurezza delle reti →.)

Tipi di firewall

Filtro di pacchetti (packet filter)

I firewall possono ispezionare il traffico e filtrarlo nelle due direzioni.

  • Lo scopo può essere proteggere la rete interna: si ispeziona (e si ferma, se serve) il traffico in entrata (ingress filtering).
  • Lo scopo può essere impedire agli utenti dentro il perimetro di raggiungere certi indirizzi o di mandare certi tipi di dati all'esterno: si ferma il traffico in uscita (egress filtering).
  • Il filtro di pacchetti è senza stato (stateless): il firewall opera su ogni pacchetto singolarmente.

Il filtraggio di base permette di controllare il trasferimento dei dati in base a: indirizzo IP sorgente, indirizzo IP destinazione, protocollo di trasporto, porta sorgente e destinazione dell'applicazione, flag specifici del protocollo (per esempio ACK e SYN di TCP), interfaccia di rete su cui è stato ricevuto il pacchetto; sono possibili molte combinazioni.

Azioni di un filtro di pacchetti: far passare il pacchetto; scartarlo (drop); eventualmente registrare (log) il pacchetto passato o scartato (tutto o in parte); eventualmente mandare un messaggio di errore al mittente (può aiutare un attaccante!). Le regole si leggono in ordine e vale la prima che corrisponde.

Esempio 1: consentire solo SMTP verso un server di posta. La posta è inoltrata tra due server trasferendola a un servizio SMTP sul server di destinazione (porta del server 25, porta del client >1023>1023).

regola direzione ind. sorg. ind. dest. protocollo porta sorg. porta dest. ACK azione
A entrata esterno interno TCP 25 consenti
B uscita interno esterno TCP >1023>1023 consenti
C uscita interno esterno TCP 25 consenti
D entrata esterno interno TCP >1023>1023 consenti
E entrambe qualunque qualunque qualunque qualunque nega

A e B servono a ricevere posta (richiesta in ingresso verso la porta 25, risposta in uscita verso la porta alta del client); C e D a spedirla. E nega tutto il resto.

Come si legge una tabella di regole. Per ogni pacchetto si scorrono le regole dall'alto: si confrontano direzione, indirizzi, protocollo, porte e flag con le colonne (una cella vuota o "qualunque" accetta ogni valore) e si applica l'azione della prima riga che corrisponde a tutti i campi; le righe successive non si guardano. Per questo la regola E, che corrisponde a tutto, sta in fondo: raccoglie ciò che nessuna delle altre ha consentito (politica di default "nega"). Esempio di scorrimento: un pacchetto TCP in entrata, da un host esterno verso la porta 25 di un host interno, corrisponde a tutti i campi di A: si ferma ad A e passa; un pacchetto in entrata UDP verso la porta 53 non corrisponde ad A (protocollo), né a B e C (direzione), né a D (protocollo), e finisce in E.

  • IP spoofing. Un pacchetto che prova a entrare nella rete ma falsifica l'indirizzo sorgente perché sembri interno viene bloccato: non corrisponde alla regola A o D (che richiedono sorgente esterna) e finisce nella regola E (nega tutto il resto). Lo stesso ragionamento vale per il traffico in uscita (regole B o C).
  • Telnet (TCP porta 23, di solito): il client esterno manda una richiesta alla porta 23 del server, il server risponde dalla porta 23 a una porta alta (>1023>1023) del client. Il pacchetto è bloccato: le regole in entrata (A e D) ammettono solo porte 25 o >1023>1023, e quelle in uscita (B e C) non coprono la porta destinazione 23.
  • X11 (il server X11 sulla rete interna ascolta sulla porta 6000; un client remoto si connette di solito da una porta sorgente >1023>1023): i pacchetti non sono bloccati. La regola D permette traffico TCP da esterno a interno verso porte >1023>1023 e 6000>10236000>1023; la regola B (uscita) permette le risposte verso porte >1023>1023. Il traffico X11 è ammesso per errore, ed è pericoloso.

Esempio 2: correzione con le porte sorgente. Si può correggere il difetto specificando anche le porte sorgente:

regola direzione sorg. dest. protocollo porta sorg. porta dest. ACK azione
A entrata esterno interno TCP >1023>1023 25 consenti
B uscita interno esterno TCP 25 >1023>1023 consenti
C uscita interno esterno TCP >1023>1023 25 consenti
D entrata esterno interno TCP 25 >1023>1023 consenti
E entrambe qualunque qualunque qualunque qualunque qualunque nega

Ora il traffico in uscita verso porte >1023>1023 è ammesso solo se la porta sorgente è 25 (B): il traffico di client o server X interni (porta >1023>1023) è bloccato. Ma non si può assumere che un attaccante non usi la porta 25 per il proprio client X d'attacco.

Esempio 3: correzione con il flag ACK. Si specifica anche il flag ACK di TCP nelle regole B e D:

regola direzione sorg. dest. protocollo porta sorg. porta dest. ACK azione
A entrata esterno interno TCP >1023>1023 25 qualunque consenti
B uscita interno esterno TCP 25 >1023>1023 sì consenti
C uscita interno esterno TCP >1023>1023 25 qualunque consenti
D entrata esterno interno TCP 25 >1023>1023 sì consenti
E entrambe qualunque qualunque qualunque qualunque qualunque qualunque nega

Poiché in B l'ACK deve essere acceso, non si può aprire una nuova connessione TCP in uscita verso porte >1023>1023: la richiesta di connessione (SYN) ha il flag ACK spento.

Esempio numerico. Un pacchetto da 203.0.113.9:40000 (esterno) al server di posta interno, porta 25, SYN, ACK=0: regola A, consentito. La risposta del server (porta sorgente 25, destinazione 40000, SYN+ACK con ACK=1): regola B, consentita. Un attaccante esterno con porta sorgente 25 che prova una connessione al server X interno (porta 6000), SYN con ACK=0: la regola D richiede ACK=1, la A richiede porta destinazione 25: finisce nella E e viene negato.

Il limite del filtro senza stato: un pacchetto costruito ad arte con ACK=1 passa lo stesso, perché il firewall non sa se appartiene a una connessione reale.

Perché il SYN ha ACK=0. Nell'handshake (TCP - connessione, affidabilità e controllo di flussoTCP (Transmission Control Protocol) è il protocollo di trasporto con connessione e affidabile: trasforma il servizio senza connessione e inaffidabile di IP in un flusso di byte ordinato, senza errori né duplicati. La connessione si apre con l'handshake a tre vie (SYN, SYN+ACK, ACK) e si chiude con tre o quattro segmenti (FIN). I byte sono numerati: il numero di sequenza è quello del primo byte del segmento, il numero di ACK (cumulativo) è il prossimo byte atteso. Il mittente può inviare $\min(\text{rwnd},\text{cwnd})$ byte non ancora confermati; rwnd (finestra del ricevitore, in un campo di 16 bit) è il controllo di flusso. L'errore si gestisce con checksum, ACK, timeout di ritrasmissione (RTO) e ritrasmissione rapida dopo tre ACK duplicati. Per usare tutto il canale la finestra deve valere almeno il prodotto banda-ritardo (BDP); il throughput massimo è $\text{MSS}\cdot W_{\max}/\text{RTT}$.TCP - connessione, affidabilità e controllo di flusso →) il primo segmento, che apre la connessione, non conferma nulla, quindi il flag ACK è spento; da quel momento tutti i segmenti hanno ACK acceso (anche SYN+ACK). Richiedere "ACK=sì" nelle regole B e D equivale a dire "solo segmenti di una connessione già aperta", che è ciò che un client interno mai deve ricevere come richiesta nuova.

Firewall con stato (stateful firewall)

Definizione (stateful firewall). Un firewall con stato segue lo stato del traffico, controllando tutte le interazioni di una connessione finché non è chiusa. Trattiene i pacchetti finché ha informazioni sufficienti per decidere, in base al contesto.

È più utile di un filtro di pacchetti: può limitare l'intervallo di porte di una sessione TCP/UDP specifica, lasciando passare solo il gruppo di pacchetti che appartengono a quella sessione. Questo riduce le possibilità di spoofing. Vantaggi rispetto al filtro senza stato:

  • può controllare lo stato del protocollo (SYN, SYN+ACK, ecc.) e ammettere solo connessioni che seguono sequenze valide, proteggendo dai pacchetti falsificati;
  • segue "pseudo-sessioni" anche per UDP/IP. Stati: NEW (il primo pacchetto di una connessione ancora sconosciuta); ESTABLISHED (un pacchetto di una connessione esistente); RELATED (un pacchetto collegato a una connessione esistente, per esempio un messaggio ICMP di errore); INVALID (il pacchetto ha valori non validi nell'intestazione);
  • può osservare schemi strani o abusivi; poiché segue connessioni e richieste, può limitare quante nuove connessioni al secondo prova un host, prevenire attacchi DoS frenando i client abusivi, applicare timeout alle sessioni inattive.

Esempio. Si vuole: permettere il traffico HTTP degli host esterni (porta TCP server 80); permettere agli host interni di iniziare HTTP (TCP 80) o DNS (UDP 53); non permettere altre comunicazioni.

Con regole senza stato servono due regole per ogni flusso, una per ciascun verso (tre flussi, HTTP verso il server, HTTP dall'interno e DNS, quindi 3⋅2=63\cdot2=6 regole più il "nega tutto" finale):

regola direzione sorg. dest. protocollo porta sorg. porta dest. ACK azione
A1 entrata esterno server web TCP >1023>1023 80 qualunque consenti
A2 uscita server web esterno TCP 80 >1023>1023 sì consenti
B1 uscita interno esterno TCP >1023>1023 80 qualunque consenti
B2 entrata esterno interno TCP 80 >1023>1023 sì consenti
C1 uscita interno esterno UDP >1023>1023 53 - consenti
C2 entrata esterno interno UDP 53 >1023>1023 - consenti
D entrambe qualunque qualunque qualunque qualunque qualunque qualunque nega

Con lo stato bastano le regole sui nuovi pacchetti (una per flusso, 33) e una regola sul traffico già stabilito (la stessa per tutti i flussi e per entrambi i versi), in tutto 3+1=43+1=4 più il "nega tutto":

regola direzione sorg. dest. protocollo porta sorg. porta dest. stato azione
A entrata esterno server web TCP >1023>1023 80 NEW consenti
B uscita interno esterno TCP >1023>1023 80 NEW consenti
C uscita interno esterno UDP >1023>1023 53 NEW consenti
D entrambe qualunque qualunque qualunque qualunque qualunque ESTABLISHED consenti
E entrambe qualunque qualunque qualunque qualunque qualunque qualunque nega

Le nuove connessioni sono accettate solo se la direzione della comunicazione è giusta. Poiché i messaggi sono ricordati dal tracciamento delle connessioni, funziona anche per UDP (la risposta DNS è riconosciuta come parte della "sessione" aperta dalla richiesta).

Esempio numerico. L'host interno 192.168.1.10 manda una richiesta DNS UDP da :51034 a 8.8.8.8:53: regola C (NEW), consentita; il firewall registra la voce. La risposta 8.8.8.8:53 →\to 192.168.1.10:51034 è ESTABLISHED: regola D, consentita. Un pacchetto UDP dallo stesso 8.8.8.8:53 verso un'altra porta di 192.168.1.10, senza voce, è NEW e non corrisponde a nessuna regola di ingresso: finisce in E e cade.

Firewall applicativo (application / proxy firewall)

Definizione (firewall applicativo). Controlla input, output e accesso da e verso una specifica applicazione. Gli altri firewall ispezionano il traffico fino al livello di trasporto; questo ispeziona il traffico del livello applicazione.

Un'implementazione tipica è il proxy: fa da intermediario impersonando il destinatario; tra proxy e destinazione si stabilisce una connessione separata. Protegge dall'interazione diretta ma è lento; può essere accoppiato all'autenticazione dell'utente, riducendo le possibilità di spoofing (Livello applicazione - HTTPIl livello applicazione è il più alto della pila: offre servizi all'utente con una connessione logica tra le due applicazioni e riceve servizi solo dal trasporto (DNS, HTTP, e-mail, FTP). Il Web (WWW, nato al CERN nel 1989) è un servizio client-server distribuito di pagine collegate da ipertesti; ogni pagina ha un URL protocollo://host:porta/percorso. HTTP: il client manda una richiesta, il server una risposta, su TCP (server sulla porta 80, client su una porta temporanea); senza stato. Messaggi di testo (riga di richiesta o di stato, intestazioni, riga vuota, corpo), metodi GET, POST, HEAD, PUT, DELETE, codici di stato 2xx-5xx. Una pagina con N oggetti incorporati richiede 2(N+1) RTT con connessioni non persistenti e (N+2) RTT con connessione persistente (trascurando la trasmissione). I cookie danno memoria al protocollo: Set-Cookie nella risposta, Cookie nelle richieste, file nel browser e base di dati nel sito. Un proxy (web cache) tiene le copie delle risposte recenti: meno carico sul server, meno traffico, meno ritardo.Livello applicazione - HTTP → per il proxy web).

Il firewall di Linux

Il kernel Linux offre un'infrastruttura di elaborazione e filtraggio dei pacchetti chiamata netfilter, che usa gli hook (un punto di un programma in cui si può fermare l'esecuzione).

  • Quando un pacchetto arriva a ciascuno di questi hook, lo stack del protocollo IPv4 chiama netfilter con il pacchetto e il numero dell'hook.
  • Si controlla se qualche modulo ha registrato una funzione di callback a quell'hook: ogni modulo registrato viene chiamato ed è libero di analizzare o modificare il pacchetto; alla fine restituisce il suo verdetto.

Cinque hook per IPv4.

Cinque verdetti. Dopo aver analizzato o modificato il pacchetto, la funzione dell'hook restituisce un verdetto a netfilter:

verdetto descrizione
NF_ACCEPT il pacchetto può continuare il suo viaggio
NF_DROP scarta il pacchetto
NF_QUEUE accoda il pacchetto nello spazio utente
NF_STOLEN netfilter deve dimenticarsi del pacchetto, passato a un altro modulo (tipicamente i pacchetti frammentati, per analizzarli insieme)
NF_REPEAT richiede di ripetere il modulo

iptables. Linux ha un firewall incorporato basato su netfilter, chiamato Xtables. Il programma nello spazio utente per configurarlo è iptables: progettato per filtrare i pacchetti ma anche per modificarli. Organizza le regole in una struttura gerarchica: le tabelle specificano lo scopo generale delle regole; le catene (chains) corrispondono agli hook di netfilter (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING). Le slide rimandano al laboratorio 6 per i dettagli (Firewall con iptables in KatharàLaboratorio 6 (LAB6). iptables è lo strumento da riga di comando che configura il filtro di pacchetti del kernel Linux (NetFilter). Quattro tabelle (filter, nat, mangle, raw) contengono catene di regole; un pacchetto segue la prima regola che lo riconosce, altrimenti la politica predefinita (ACCEPT, DROP, REJECT). Tabella filter: catene INPUT (pacchetti per la macchina), OUTPUT (generati da lei), FORWARD (che attraversano il router). Tabella nat: PREROUTING (DNAT) e POSTROUTING (SNAT/MASQUERADE). Lo stato di una conversazione si controlla con --match state --state ESTABLISHED,RELATED. Tre esperienze: firewall sulla macchina da proteggere (esempio 1), firewall sul router di una LAN con web server pubblico (esempio 2), NAT con SNAT e DNAT (esempio 3).Firewall con iptables in Katharà →).

bash
iptables -P FORWARD DROP                                   # politica di default: i pacchetti inoltrati sono scartati
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT              # consente dalla LAN (eth1) verso Internet (eth0)
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT   # e le risposte di connessioni già aperte

La prima riga imposta la politica di default della catena FORWARD (cioè dei pacchetti che il router inoltra): senza altre regole non passa nulla. La seconda aggiunge (-A) in coda una regola che accetta i pacchetti entrati da eth1 e usciti da eth0. La terza accetta i pacchetti che il tracciamento delle connessioni riconosce come risposte (ESTABLISHED) o collegati (RELATED): è il filtro con stato.

Tracciamento delle connessioni. Linux offre un'infrastruttura di connection tracking, nf_conntrack, costruita sopra netfilter. Memorizza le informazioni sulla connessione (sessione): lo stato indica se il pacchetto fa parte di un flusso più grande o no.

protocollo descrizione
connessione TCP TCP è orientato alla connessione, con l'handshake a tre vie; i firewall con stato controllano la connessione dall'inizio alla fine, registrando i pacchetti
connessione UDP UDP non ha connessione; ma quando client e server cominciano a scambiarsi pacchetti, il firewall considera la connessione attiva
connessione ICMP ICMP non stabilisce una connessione, ma molti messaggi ICMP hanno uno schema richiesta-risposta, considerato come una connessione dal firewall
protocolli complessi molti firewall con stato supportano anche protocolli applicativi molto diffusi (per esempio HTTP e FTP)

Errori comuni

Versione ripasso

Definizione. Un firewall è una parte di un sistema o di una rete, in hardware, software o in combinazione, che ferma il traffico non autorizzato tra due reti. Filtra i dati, reindirizza il traffico, protegge dagli attacchi.

Requisiti.

  1. Tutto il traffico tra due zone di fiducia deve passare dal firewall.
  2. Deve passare solo il traffico autorizzato.
  3. Il firewall stesso deve essere immune alle intrusioni.
  • Traffico in ingresso (incoming, da Internet alla rete locale) e in uscita (outgoing).

Politiche. Le regole, definite dall'amministratore, danno:

  • controllo dell'utente: l'accesso dipende dal ruolo dentro il perimetro;
  • controllo del servizio: l'accesso dipende dal socket (indirizzo e porta) del servizio;
  • controllo della direzione: inbound se il flusso va dalla rete verso il firewall, outbound altrimenti.

Esiti di un pacchetto.

Informazioni usate.

  • Livello 2: protocollo di rete, MAC.
  • Livello 3: indirizzi sorgente e destinazione, flag di frammentazione, protocollo di trasporto (TCP, UDP, ICMP). Il source routing viene scartato, perché è usato negli attacchi.
  • Livello 4: porte, flag di controllo TCP (SYN, ACK, FIN).
  • Porte: note 00-10231023 (server), registrate 10241024-4915149151, effimere 4915249152-6553565535 (client). Una regola "porta sorgente >1023>1023" copre i client.

Apertura TCP e firewall.

Packet filter (senza stato).

  • Ogni pacchetto è valutato da solo, in ingresso e in uscita (ingress ed egress filtering), su indirizzi, protocollo, porte, flag, interfaccia.
  • Azioni: passare, scartare (drop), registrare (log), eventualmente rispondere con errore.
  • Le regole si leggono in ordine e vale la prima che corrisponde; la regola "nega tutto" va in fondo.
  • Esempio SMTP: A ed entrata con porta destinazione 2525, B uscita con porta destinazione >1023>1023 (ricezione); C e D per l'invio; E nega tutto. Blocca lo spoofing (sorgente interna falsa cade in E).
  • Telnet (porta 2323) viene bloccato. X11 (porta 60006000) passa per errore, perché è >1023>1023.
  • Correzione 1: imporre la porta sorgente 2525 nelle regole in uscita di risposta (B) e in ingresso di risposta (D). Non basta: un attaccante può usare la porta 2525 per il proprio client.
  • Correzione 2: imporre ACK == sì in B e D. Il SYN ha ACK =0=0, quindi non si può aprire una nuova connessione in uscita verso porte >1023>1023.
    • Esempio: SYN da 203.0.113.9:40000 al server di posta porta 2525, ACK =0=0: regola A, consentito. SYN+ACK di risposta: regola B, consentito. Un SYN esterno con porta sorgente 2525 verso la porta 60006000 interna, ACK =0=0: cade in E, negato.
  • Limite: un pacchetto costruito con ACK =1=1 passa lo stesso, perché il filtro non sa se appartiene a una connessione reale.

Firewall con stato (stateful).

  • Segue lo stato delle connessioni fino alla chiusura e trattiene i pacchetti finché ha abbastanza informazioni per decidere.
  • Stati: NEW (primo pacchetto di una connessione nuova), ESTABLISHED (pacchetto di una connessione esistente), RELATED (collegato a una connessione, per esempio un ICMP di errore), INVALID (intestazione non valida).
  • Vantaggi: controlla le sequenze valide di SYN e SYN+ACK, segue "pseudo-sessioni" anche per UDP e ICMP, limita le nuove connessioni al secondo contro i DoS, applica timeout alle sessioni inattive.
  • Esempio: HTTP dall'esterno al server web (porta 8080), HTTP e DNS (UDP 5353) dall'interno. Senza stato servono sei regole più il "nega tutto" (una per verso). Con lo stato bastano tre regole NEW (A: esterno verso server web; B: interno verso esterno su porta 8080; C: interno verso esterno su UDP 5353), una regola ESTABLISHED e il "nega tutto".
  • Esempio numerico: 192.168.1.10:51034 manda una richiesta DNS a 8.8.8.8:53: regola NEW, consentita e registrata. La risposta 8.8.8.8:53 verso 192.168.1.10:51034 è ESTABLISHED: consentita. Un UDP da 8.8.8.8:53 verso un'altra porta senza voce è NEW e cade.

Firewall applicativo (proxy).

Firewall di Linux: netfilter e iptables.

bash
iptables -P FORWARD DROP                                   # politica di default: nulla viene inoltrato
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT              # dalla LAN (eth1) verso Internet (eth0)
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT   # risposte di connessioni aperte
  • La prima riga è la politica di default; la seconda consente l'uscita; la terza è il filtro con stato.
  • Connection tracking (nf_conntrack): TCP con l'handshake; UDP considerato connesso quando client e server si scambiano pacchetti; ICMP con la coppia richiesta-risposta; protocolli complessi come HTTP e FTP.

Errori tipici:

Lezioni in cui compare

Teoria collegata