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:
- tutto il traffico tra due zone di fiducia deve passare dal firewall;
- deve passare solo il traffico autorizzato;
- 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 , da a (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 " per i client. Nelle slide la regola "" 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:
- SYN: il client manda il primo segmento con solo il flag SYN, per sincronizzare i numeri di sequenza;
- SYN+ACK: il server manda un segmento con due flag;
- 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 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): senza piggyback; con piggyback (il client può cominciare a trasmettere appena riceve il SYN+ACK).
Come si ottengono: ogni segmento impiega per andare da un estremo all'altro. Il SYN parte al tempo e arriva al server a ; il SYN+ACK parte da lì e arriva al client a (è un ); l'ACK parte dal client a e arriva al server a . 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 .
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_pEsempio. Con ms (cioè ms): ms, oppure 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 protegge la PDU di livello 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 ).
| 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 | consenti | |||
| C | uscita | interno | esterno | TCP | 25 | consenti | ||
| D | entrata | esterno | interno | TCP | 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 () del client. Il pacchetto è bloccato: le regole in entrata (A e D) ammettono solo porte 25 o , 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 ): i pacchetti non sono bloccati. La regola D permette traffico TCP da esterno a interno verso porte e ; la regola B (uscita) permette le risposte verso porte . 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 | 25 | consenti | ||
| B | uscita | interno | esterno | TCP | 25 | consenti | ||
| C | uscita | interno | esterno | TCP | 25 | consenti | ||
| D | entrata | esterno | interno | TCP | 25 | consenti | ||
| E | entrambe | qualunque | qualunque | qualunque | qualunque | qualunque | nega |
Ora il traffico in uscita verso porte è ammesso solo se la porta sorgente è 25 (B): il traffico di client o server X interni (porta ) è 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 | 25 | qualunque | consenti | |
| B | uscita | interno | esterno | TCP | 25 | sì | consenti | |
| C | uscita | interno | esterno | TCP | 25 | qualunque | consenti | |
| D | entrata | esterno | interno | TCP | 25 | 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 : 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 regole più il "nega tutto" finale):
| regola | direzione | sorg. | dest. | protocollo | porta sorg. | porta dest. | ACK | azione |
|---|---|---|---|---|---|---|---|---|
| A1 | entrata | esterno | server web | TCP | 80 | qualunque | consenti | |
| A2 | uscita | server web | esterno | TCP | 80 | sì | consenti | |
| B1 | uscita | interno | esterno | TCP | 80 | qualunque | consenti | |
| B2 | entrata | esterno | interno | TCP | 80 | sì | consenti | |
| C1 | uscita | interno | esterno | UDP | 53 | - | consenti | |
| C2 | entrata | esterno | interno | UDP | 53 | - | consenti | |
| D | entrambe | qualunque | qualunque | qualunque | qualunque | qualunque | qualunque | nega |
Con lo stato bastano le regole sui nuovi pacchetti (una per flusso, ) e una regola sul traffico già stabilito (la stessa per tutti i flussi e per entrambi i versi), in tutto più il "nega tutto":
| regola | direzione | sorg. | dest. | protocollo | porta sorg. | porta dest. | stato | azione |
|---|---|---|---|---|---|---|---|---|
| A | entrata | esterno | server web | TCP | 80 | NEW | consenti | |
| B | uscita | interno | esterno | TCP | 80 | NEW | consenti | |
| C | uscita | interno | esterno | UDP | 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 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à →).
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à aperteLa 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
- Dire che il firewall cifra o protegge dagli attacchi interni: limita chi può parlare con chi e su quale servizio.
- Dimenticare di consentire il traffico di ritorno con un filtro stateless (o l'
ESTABLISHEDcon un filtro stateful). - Ordinare male le regole: vale la prima che corrisponde; la regola "nega tutto" va in fondo.
- Credere che la regola "porta destinazione " sia innocua: ammette anche servizi come X11 (porta 6000).
- Pensare che il flag ACK basti a provare una connessione vera: un pacchetto costruito con ACK=1 passa un filtro senza stato.
- Dire che il NAT è un firewall: nasconde gli indirizzi interni ma non ha politica né filtra le connessioni uscenti (NAT e indirizzi privatiUna rete privata (intranet) usa il protocollo TCP/IP con indirizzi privati ($10.0.0.0/8$, $172.16.0.0/12$, $192.168.0.0/16$), riutilizzabili da intranet diverse ma da non instradare in Internet: i router di bordo scartano i pacchetti con indirizzi privati. Per accedere a Internet servono un proxy applicativo (uno per applicazione) o il NAT (Network Address Translation): un router che traduce indirizzi privati in indirizzi pubblici di un pool, con una tabella NAT e un'associazione dinamica per sessione. Il NAT tradizionale è outbound: Basic NAT traduce solo l'IP (uno a uno, quindi servono tanti indirizzi pubblici quante le sessioni contemporanee), NAPT traduce anche la porta ([IP privato, porta] $\to$ [IP pubblico, porta del NAT]) e permette a molte sessioni di condividere un solo IP pubblico. Il Twice NAT permette sessioni anche dall'esterno, con un DNS interno e associazioni statiche.NAT e indirizzi privati →).
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.
- Tutto il traffico tra due zone di fiducia deve passare dal firewall.
- Deve passare solo il traffico autorizzato.
- 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.
- Accettato (accepted): entra.
- Negato (denied): scartato in silenzio.
- Rifiutato (rejected): negato, più un messaggio ICMP alla sorgente (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 può aiutare un attaccante, perché gli rivela il firewall.
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 - (server), registrate -, effimere - (client). Una regola "porta sorgente " copre i client.
Apertura TCP e firewall.
- Handshake a tre vie: SYN dal client, SYN+ACK dal server, ACK dal client. Con il piggyback i dati partono già nell'ACK.
- Tempo di apertura: senza piggyback, con piggyback. Esempio: con ms: ms, oppure ms.
- Chiusura a tre vie oppure a quattro vie con chiusura a metà (half closing).
- La cifratura (IPsec, 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 →) può nascondere campi al firewall. Un protocollo di livello protegge le PDU di livello e superiori, non quelle sotto.
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 , B uscita con porta destinazione (ricezione); C e D per l'invio; E nega tutto. Blocca lo spoofing (sorgente interna falsa cade in E).
- Telnet (porta ) viene bloccato. X11 (porta ) passa per errore, perché è .
- Correzione 1: imporre la porta sorgente nelle regole in uscita di risposta (B) e in ingresso di risposta (D). Non basta: un attaccante può usare la porta per il proprio client.
- Correzione 2: imporre ACK sì in B e D. Il SYN ha ACK , quindi non si può aprire una nuova connessione in uscita verso porte .
- Esempio: SYN da
203.0.113.9:40000al server di posta porta , ACK : regola A, consentito. SYN+ACK di risposta: regola B, consentito. Un SYN esterno con porta sorgente verso la porta interna, ACK : cade in E, negato.
- Esempio: SYN da
- Limite: un pacchetto costruito con ACK 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 ), HTTP e DNS (UDP ) 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 ; C: interno verso esterno su UDP ), una regola ESTABLISHED e il "nega tutto".
- Esempio numerico:
192.168.1.10:51034manda una richiesta DNS a8.8.8.8:53: regola NEW, consentita e registrata. La risposta8.8.8.8:53verso192.168.1.10:51034è ESTABLISHED: consentita. Un UDP da8.8.8.8:53verso un'altra porta senza voce è NEW e cade.
Firewall applicativo (proxy).
- Controlla il traffico del livello applicazione di una specifica applicazione. Fa da intermediario impersonando il destinatario; con la destinazione apre una connessione separata.
- Protegge dall'interazione diretta, può legare l'accesso all'autenticazione dell'utente, ma è lento (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 →).
Firewall di Linux: netfilter e iptables.
- Netfilter chiama, a ogni hook dello stack IPv4, le funzioni registrate dai moduli. Ogni modulo restituisce un verdetto.
- Cinque hook:
PRE_ROUTING(tutti i pacchetti in arrivo),LOCAL_IN(destinati all'host),FORWARD(da inoltrare, Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →),LOCAL_OUT(generati dall'host),POST_ROUTING(in uscita). - Cinque verdetti:
NF_ACCEPT(prosegue),NF_DROP(scarta),NF_QUEUE(accoda nello spazio utente),NF_STOLEN(il modulo se ne prende carico, per esempio per riassemblare i frammenti),NF_REPEAT(ripete il modulo). - iptables configura Xtables: le tabelle dicono lo scopo delle regole, le catene (
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING) corrispondono agli hook. Dettagli in 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). Tabellafilter: catene INPUT (pacchetti per la macchina), OUTPUT (generati da lei), FORWARD (che attraversano il router). Tabellanat: 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à →.
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:
- dire che il firewall cifra o protegge dagli attacchi interni: limita chi parla con chi e su quale servizio;
- dimenticare il traffico di ritorno (con filtro senza stato, o senza la regola ESTABLISHED);
- ordinare male le regole: vale la prima che corrisponde;
- credere che "porta destinazione " sia innocua: ammette X11 (porta );
- pensare che ACK provi una connessione vera;
- dire che il NAT è un firewall: non ha politica né filtra le connessioni uscenti (NAT e indirizzi privatiUna rete privata (intranet) usa il protocollo TCP/IP con indirizzi privati ($10.0.0.0/8$, $172.16.0.0/12$, $192.168.0.0/16$), riutilizzabili da intranet diverse ma da non instradare in Internet: i router di bordo scartano i pacchetti con indirizzi privati. Per accedere a Internet servono un proxy applicativo (uno per applicazione) o il NAT (Network Address Translation): un router che traduce indirizzi privati in indirizzi pubblici di un pool, con una tabella NAT e un'associazione dinamica per sessione. Il NAT tradizionale è outbound: Basic NAT traduce solo l'IP (uno a uno, quindi servono tanti indirizzi pubblici quante le sessioni contemporanee), NAPT traduce anche la porta ([IP privato, porta] $\to$ [IP pubblico, porta del NAT]) e permette a molte sessioni di condividere un solo IP pubblico. Il Twice NAT permette sessioni anche dall'esterno, con un DNS interno e associazioni statiche.NAT e indirizzi privati →).