Salta al contenuto
Note per Studenti VPN

VPN

In questa pagina 8

Che cos'è una VPN

Definizione (VPN). Una rete privata virtuale (Virtual Private Network) è una rete privata costruita sopra una rete pubblica (per esempio Internet). I nodi di una VPN comunicano nella rete pubblica in modo sicuro, come se fossero in una rete privata.

Esempio d'uso. Con una VPN i dipendenti possono accedere in sicurezza all'intranet dell'azienda mentre viaggiano, e le aziende possono estendere la loro rete privata nel mondo.

Quali garanzie dà una rete privata? Essere in una rete privata protegge in tre modi:

Obiettivo della VPN: ottenere queste proprietà anche senza essere fisicamente dentro la rete privata: creare un posto dove le macchine non sono fisicamente private ma sono virtualmente private.

Architettura

Un host designato, il server VPN, è autorizzato dal firewall a mandare e ricevere traffico.

  • È esposto alla rete esterna, mentre tutti gli altri host restano protetti dal firewall.
  • I nodi esterni devono passare dal server VPN ed essere autenticati prima di raggiungere gli host interni.

Se un client vuole collegarsi a un nodo interno VV, ogni connessione diretta a VV viene bloccata dal firewall: perché la comunicazione riesca, tutti i pacchetti devono passare dal server VPN (la "guardia di sicurezza").

Come si realizza: l'incapsulamento

Problema. Come si manda un pacchetto IP da AA a BB in modo sicuro (autenticato, cifrato, con integrità preservata) se AA e BB appartengono alla stessa VPN ma non alla stessa rete privata fisica? Per maggiore sicurezza si vorrebbe cifrare anche l'intestazione IP, ma i router non possono leggere un'intestazione IP cifrata e devono anche cambiare TTL e checksum (Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →).

Soluzione: l'incapsulamento. Si mette il pacchetto IP cifrato dentro un altro pacchetto IP, come carico, per portarlo da AA a BB. Arrivata a destinazione, questa intestazione esterna viene scartata, il carico cifrato viene decifrato e trattato come un normale pacchetto IP; a quel punto può raggiungere la destinazione finale nella rete privata.

Definizione (tunnel IP). Il pacchetto reale tra i due estremi del tunnel porta come carico un altro pacchetto IP: quello da proteggere (per esempio i pacchetti da e verso una rete privata). Il tunnel attraversa una rete pubblica come Internet; il traffico dentro il tunnel è protetto.

Esempio. Il tunnel collega due reti private; UU (rete 10.0.7.0/24) manda un pacchetto a VV (rete 10.0.8.0/24). Sulla rete pubblica viaggia un pacchetto con indirizzi dei due estremi del tunnel, per esempio 198.51.100.7 →\to 203.0.113.1, il cui carico (cifrato) contiene il pacchetto originale 10.0.7.5 →\to 10.0.8.9. Chi osserva Internet vede solo il traffico tra i due estremi. Perché UU affida il pacchetto al client VPN: con la maschera /24 l'indirizzo di VV, 10.0.8.9 AND 255.255.255.0 == 10.0.8.0, è diverso dalla rete di UU (10.0.7.0), quindi UU lo manda al gateway di default, che è il client VPN (Subnetting e supernettingIl subnetting divide un blocco di indirizzi in sottoblocchi più piccoli allungando la maschera ($n_{\text{sub}}=n_{\text{rete}}+s$, con $2^s$ sottoreti); il supernetting (aggregazione CIDR) fa l'opposto, accorciando il prefisso per unire blocchi contigui in uno più grande. Regole di progetto: ogni sottorete ha un numero di indirizzi potenza di 2 ($M=2^k\ge$ host richiesti $+2$), prefisso $n=32-k$, indirizzo iniziale multiplo di $M$; si assegnano prima le sottoreti più grandi. Per aggregare $2^j$ blocchi di prefisso $n$ servono blocchi contigui il cui primo indirizzo sia multiplo della dimensione dell'aggregato, e il nuovo prefisso è $n-j$.Subnetting e supernetting →, 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 →).

Esempio numerico (dimensioni). Con la sola intestazione IPv4 esterna di 20 byte, un pacchetto interno da 1500 byte diventa di 1500+20=15201500+20=1520 byte, più della MTU di 1500: viene frammentato in due frammenti, con 14801480 e 2020 byte di carico (Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →). Per questo i pacchetti interni di un tunnel vanno tenuti più piccoli della MTU meno l'overhead di incapsulamento (a cui si aggiunge l'overhead della cifratura).

Esempio numerico (ESP in modo tunnel). Con ESP, cifrario a blocchi da 16 byte e un codice di integrità da 12 byte, l'overhead è: nuova intestazione IP 2020 byte; intestazione ESP 88 byte (SPI 44 + numero di sequenza 44); vettore di inizializzazione 1616 byte; coda ESP (lunghezza del riempimento e protocollo successivo) 22 byte; codice di integrità 1212 byte; più un riempimento (padding) che porta la lunghezza del pacchetto interno più la coda a un multiplo di 1616. L'overhead fisso è 20+8+16+2+12=5820+8+16+2+12=58 byte. Un pacchetto interno di 14001400 byte: 1400+2=14021400+2=1402, riempimento di 66 byte per arrivare a 1408=88⋅161408=88\cdot16, pacchetto esterno 20+8+16+1400+6+2+12=146420+8+16+1400+6+2+12=1464 byte, che sta nella MTU di 15001500. Il pacchetto interno più grande che non si frammenta si trova imponendo 20+8+16+(L+p+2)+12≤150020+8+16+(L+p+2)+12\le1500, cioè L+p+2≤1444L+p+2\le1444, quindi (multiplo di 1616) L+p+2≤1440L+p+2\le1440: Lmax=1438L_{max}=1438 byte (riempimento 00). Con L=1439L=1439 il pacchetto esterno sarebbe di 15121512 byte e va frammentato.

L'efficienza (quota di byte utili) è η=LL+58+p\eta=\frac{L}{L+58+p}: per L=1400L=1400 è 1400/1464=95,6%1400/1464=95{,}6\%; per un pacchetto piccolo di fonia di 6060 byte è 60/120=50%60/120=50\% (con p=2p=2), perché l'overhead pesa quanto i dati.

Grafico interattivo: Efficienza di un tunnel ESP in funzione della lunghezza L del pacchetto interno: η = L/(L + 58), senza contare il riempimento (fino a 15 byte in più). I pacchetti piccoli sprecano metà della banda

IPsec

IPsec (Internet Protocol Security) offre sicurezza al livello rete: riservatezza, integrità, autenticazione dell'origine dei dati e protezione dagli attacchi di replay. La suite comprende due protocolli principali:

  • AH (Authentication Header, protocollo IP 51): autenticazione della sorgente e integrità dei dati;
  • ESP (Encapsulating Security Payload, protocollo IP 50): fornisce anche la riservatezza (cifratura).

Ha due forme di pacchetto: modo tunnel e modo trasporto.

Definizione (modo tunnel). L'intero pacchetto IP originale è incapsulato e diventa il carico di un nuovo pacchetto IP: sopra il pacchetto originale si aggiunge una nuova intestazione IP. Protegge l'intero pacchetto IP. È utile per proteggere il traffico tra reti diverse: il pacchetto viaggia con una nuova intestazione IP e i router intermedi non vedono nulla del pacchetto originale. Semplifica la procedura di scambio delle chiavi.

Definizione (modo trasporto). Mantiene l'intestazione IP originale. Svantaggio: l'intestazione IP non è protetta, quindi permette l'analisi del traffico. Si usa per la comunicazione end-to-end tra due host che hanno già stabilito un tunnel IPsec sicuro. Non crea una nuova intestazione IP: il procedimento è meno complesso dell'incapsulamento.

Esempio. La sede A (10.1.0.0/16) e la sede B (10.2.0.0/16) hanno un tunnel ESP in modo tunnel tra i router di bordo (203.0.113.1 e 203.0.113.2). Un pacchetto 10.1.0.5 →\to 10.2.0.9 (con la maschera /16, 255.255.0.0, 10.2.0.9 AND maschera == 10.2.0.0: non è nella rete 10.1.0.0/16 di partenza, quindi va al gateway di default, il router di bordo) esce dalla sede A con una nuova intestazione 203.0.113.1 →\to 203.0.113.2 e protocollo 50: all'esterno si vede solo il traffico tra i due gateway, non gli indirizzi interni.

Security Association (SA). Prima di mandare datagrammi IPsec, sorgente e destinazione devono creare una connessione logica detta Security Association.

  • È una connessione a senso unico: se il traffico IPsec deve andare nei due versi servono due SA (ognuna ha il suo SPI, le sue chiavi e il suo contatore di sequenza: il numero di sequenza, che cresce a ogni pacchetto, è ciò che permette di scartare i pacchetti ripetuti da un attaccante, cioè il replay).
  • Lo stato di una SA comprende: un SPI (Security Parameter Index) che identifica la SA; l'origine e la destinazione della SA (gli indirizzi IP); l'identificatore del protocollo di sicurezza (se è una SA di AH o di ESP); il tipo di cifratura da usare; il tipo di controllo di integrità.

L'IPsec è realizzato direttamente nel livello IP del kernel. In una VPN si usa il modo tunnel di IPsec, che incapsula il pacchetto IP originale cifrato in un nuovo pacchetto IP con una nuova intestazione.

Tunnel SSL/TLS

Il tunnel 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 →) è realizzato fuori dal kernel, in un'applicazione: ogni pacchetto IP destinato alla VPN viene passato a un'applicazione dedicata, che usa TCP o UDP.

  • Il pacchetto TCP/UDP è mandato all'altra estremità del tunnel, dove il pacchetto IP cifrato viene estratto e consegnato all'host giusto nella rete privata.
  • È noto come tunnel a livello di trasporto (Transport Layer tunneling). È più popolare dell'IPsec, perché è indipendente dal kernel (è un'applicazione).

Il servizio VPN passo per passo

Una organizzazione possiede due reti private in due aree geografiche diverse. La VPN usa l'infrastruttura pubblica (Internet) per costruire una connessione virtuale e sicura con il tunnel. Se ne occupano due dispositivi di rete: il client VPN (nella sede satellite) e il server VPN (nella sede principale).

Proprietà (compiti della coppia client-server VPN).

  1. stabilire un tunnel sicuro tra i due;
  2. inoltrare nel tunnel i pacchetti IP che devono andare dall'altra parte della VPN;
  3. dopo aver ricevuto un pacchetto IP dall'altra estremità del tunnel, rilasciarlo nella rete privata.

1. Stabilire un tunnel SSL/TLS. Il tunnel TLS è costruito sopra le applicazioni che girano sul client e sul server VPN, usando TCP o UDP come trasporto. Serve l'autenticazione reciproca della coppia VPN:

  • il client autentica il server con un certificato a chiave pubblica (il server non può permettersi di rivelare una chiave segreta);
  • il server autentica il client con una chiave condivisa (per esempio la password dell'utente).

I dati che attraversano il canale sono cifrati e si usano i codici di autenticazione dei messaggi (MAC) per impedire falsificazioni.

2. Interfacce di rete virtuali. Linux e quasi tutti i sistemi operativi supportano due tipi di interfaccia di rete: fisica (NIC) e virtuale (TUN/TAP). Un'interfaccia virtuale è la rappresentazione virtualizzata di un'interfaccia di rete, che può corrispondere o no a una NIC fisica. TUN/TAP è interamente virtuale: collega un computer a un programma nello spazio utente e si può vedere come un semplice collegamento punto-punto tra due computer (salvo che uno è solo un programma che finge di essere un computer).

interfaccia livello uso
TUN livello IP (rete) inviare pacchetti all'interfaccia TUN significa consegnarli al programma in spazio utente compresa l'intestazione IP; si usa per costruire VPN di livello 3
TAP livello collegamento (livello 2); si comporta come una scheda di rete può trasportare pacchetti di qualunque protocollo di livello 3; si usa per creare VPN di livello 2

3. Inoltro nel tunnel. Al client, l'applicazione del tunnel è resa un host virtuale collegato al client tramite una scheda di rete virtuale (TUN/TAP). Così il pacchetto IP viene inoltrato all'applicazione del tunnel, che lo cifra e lo incapsula in un pacchetto TCP/UDP, con una nuova intestazione IP che ha il client VPN come indirizzo sorgente e il server VPN come destinazione (porta 443).

4. Rilascio dei pacchetti. Alla ricezione, il server VPN toglie l'intestazione ausiliaria e consegna il carico all'applicazione del tunnel, di nuovo tramite l'interfaccia TUN/TAP. L'applicazione decifra il pacchetto IP contenuto nel carico e ne verifica l'integrità, poi lo restituisce al kernel del server VPN. Il pacchetto IP originale è ora disponibile nella rete principale.

Esempio. Reti: principale 10.0.8.0/24 con l'host VV, satellite 10.0.7.0/24 con l'host UU. UU manda un pacchetto a VV:

  1. UU lo manda al suo gateway, cioè al client VPN, il cui kernel lo instrada sull'interfaccia TUN;
  2. l'applicazione del tunnel lo cifra e lo incapsula in TCP verso il server VPN (porta 443), con indirizzi pubblici dei due estremi;
  3. il server VPN estrae il carico, lo decifra, verifica l'integrità e lo passa al suo kernel;
  4. il kernel del server lo instrada nella rete 10.0.8.0/24 fino a VV.

Aggirare le restrizioni geografiche

La restrizione geografica (geo-restriction) è un altro tipo di firewall, che filtra in base alla posizione geografica dell'indirizzo IP. I fornitori di servizi multimediali (YouTube, Netflix, ...) la usano di solito perché hanno diritti d'autore diversi per aree geografiche diverse. Con una VPN l'indirizzo IP visto dalla rete è quello del server VPN, non quello dell'host locale: ci si collega a un server VPN in un'altra regione geografica e si può usare il servizio come se si fosse fisicamente lì. Più in generale la VPN serve a nascondere l'indirizzo IP reale del mittente (entro certi limiti).

Errori comuni

  • Credere che una VPN renda anonimo il traffico: nasconde l'IP reale ai siti, ma il gestore della VPN lo vede.
  • Dimenticare che nel modo trasporto l'intestazione IP resta in chiaro (analisi del traffico possibile), mentre nel modo tunnel è cifrata.
  • Contare una sola SA IPsec per una comunicazione bidirezionale: ne servono due, perché una SA è a senso unico.
  • Confondere AH (solo integrità e autenticazione) con ESP (anche cifratura).
  • Scordare l'overhead dell'incapsulamento e il rischio di frammentazione.
  • Confondere TUN (livello 3, pacchetti IP) con TAP (livello 2, frame).

Versione ripasso

Lezioni in cui compare

Teoria collegata