Il protocollo di sicurezza IP, noto anche con il nome di IPsec, fornisce sicurezza a livello di rete. IPsec mette in sicurezza i datagrammi IP a livello di rete, tra due qualsiasi entità. Molte organizzazioni utilizzano IPsec per creare delle VPN (Virtual Private Network).
Prima di entrare nello specifico di IPsec, facciamo un passo indietro e cerchiamo di capire cosa vuol dire fornire confidenzialità a livello di rete. Con confidenzialità a livello di rete tra un paio di entità (router e router, host e host, router e host), l'entità che invia cifra i payload di tutti i datagrammi che invia all'entità ricevente. Il payload cifrato potrebbe essere un segmento TCP o UPD o un messaggio ICMP, e così via. Tutti i dati inviati da un'entità all'altra verranno nascosti a terzi che potrebbero sniffare il traffico di rete.
Oltre alla confidenzialità, un protocollo di sicurezza a livello di rete potrebbe, potenzialmente fornire altri servizi di sicurezza.
Potrebbe fornire autenticazione, ma anche integrità dei dati, in modo che chi riceve i dati possa controllare eventuali manomissioni del pacchetto durante il tragitto verso la destinazione. Potrebbe fornire anche prevenzione per gli attacchi di tipo replay, ovvero un generico ricevente può rilevare eventuali datagrammi duplicati che un attaccante potrebbe inviare.
IPsec fornisce meccanismi per tutti questi servizi:
Un'organizzazione che si estende su molte regioni spesso desidera avere la propria rete IP, in modo che i suoi host e server possano inviarsi dati in modo sicuro. Per ottenere questo risultato, l'organizzazione potrebbe sviluppare una propria rete fisica a sé stante (quindi router, collegamenti, server DNS, ecc) generando quindi una vera e propria rete privata (private network); è chiaro che sviluppare una rete del genere (passando per diverse regioni) ha un costo elevato.
Invece di sviluppare e mantenere una rete private, molte organizzazioni oggi creano delle reti private virtuali, ovvero delle VPN, all'interno di Internet stessa. Un semplice esempio di VPN è mostrato nella figura seguente:
Questa istituzione consiste di headquarters (sede centrale), una filiale (branch office) e di alcuni impiegati (salespersons) che lavorano da un hotel. In figura è mostrato solo un impiegato.
In questa VPN, quando due host all'interno della stessa rete (per esempio all'interno della sede centrale o all'interno della filiale) vogliono comunicare, utilizzeranno la versione standard di IP (vanilla, un modo per dire classica). Quando invece due host che si trovano in luoghi geograficamente diversi, per esempio un host di un impiegato in hotel e un host della sede centrale, vogliono comunicare viene utilizzato IPsec.
Diciamo che un host nella sede centrale invia un normale pacchetto IP ad un impiegato in un certo hotel nel mondo, il router gateway della sede centrale converte il pacchetto IP vanilla in un pacchetto IPsec e lo inoltra in Internet. Il pacchetto IPsec inoltrato ha un'intestazione IP normalissima, tutti gli altri elementi della rete lo vedranno come un normale pacchetto IP. Come si vede in figura, un pacchetto IPsec include un header IP normale e un header IPsec (e il payload cifrato). Quando il pacchetto giunge all'impiegato, il sistema operativo nel laptop di questo decifra il payload (e fornisce i servizi di sicurezza che abbiamo descritto: integrità dei dati, ecc) e passa il payload decifrato al livello superiore (TCP, UDP).
IPsec è molto complesso, è descritto in una dozzina di documenti RFC molto articolati e complessi.
Nella suite di protocolli IPsec ci sono due principali protocolli:
I datagrammi IPsec sono inviati tra due entità di rete, come due host, due router, un host e un router. Prima di inviare un datagramma IPsec dalla sorgente alla destinazione, entrambi gli estremi della comunicazione creano una semplice connessione logica che è unidirezionale dalla sorgente alla destinazione. Se entrambe le entità vogliono scambiarsi datagrammi IPsec devono essere create due connessioni unidirezionali da un'estremità all'altra e viceversa. Queste connessioni sono chiamate associazioni di sicurezza (security association, SA)
Consideriamo ancora la figura di prima e diciamo che ci sono:
Per rispondere a questa domanda dobbiamo notare che ci sono due SA tra il router della sede centrale e quello della filiale; per ogni computer di un impiegato, ci sono due associazioni di sicurezza tra il router della sede centrale. In totale ci sono:
Per esempio, un host nella sede centrale potrebbe voler accedere ad un server web in internet (non si tratterebbe di una comunicazione con una entità interna all'azienda) l'host potrebbe emettere pacchetti in formato IP vanilla. Un router può emettere entrambi i tipi di pacchetti: IP o IPsec.
Consideriamo la figura sopra.
R1 mantiene delle informazioni di stato sulla SA che includono:
Avendo fatto una panoramica sulle SA, possiamo adesso descrivere il datagramma IPsec.
IPsec ha due formati di pacchetto, uno chiamato tunnel mode e l'altro chiamato transport mode. La modalità tunnel è più appropriata della modalità trasporto per la creazione di VPN.
Partiamo dal descrivere il formato dei pacchetti di IPsec, potrebbe risultare un tantino noioso, ma vedremo tra poco che i datagrammi IPsec assomigliano ad una nota specialità messicana: l'enchilada.
Di seguito il formato di un pacchetto IPsec.
Supponiamo che il router R1 riceve un normale datagramma IPv4 dall'host 172.16.1.17 (all'interno della sede centrale) che è destinato all'host 172.16.2.48 (all'interno della filiale). R1 usa i seguenti passi per convertire il datagramma IPv4 vanilla in un datagramma IPsec:
Questi sono settati con gli indirizzi delle interfacce di sorgente e destinazione alle due estremità del tunnel, vale a dire 200.168.1.100 e 193.68.2.23. Inoltre il protocollo di questa nuova intestazione IPv4 non è settato con TCP, UDP, o altro, ma con il codice 50 che indica che si tratta di un datagramma IPsec che usa il protocollo IPsec.
Quando viene inviato il datagramma, vengono attraversati diversi router della internet pubblica prima di giungere a R2. Ciascun router processerà il datagramma come se si trattasse di un normale pacchetto IPv4.
Il trailer ESP contiene tre campi:
Davanti al payload cifrato vi è un header ESP che contiene due campi:
Come abbiamo visto l'entità che invia il datagramma aggiunge un MAC di autenticazione. Come abbiamo detto prima, l'entità mittente calcola un MAC su tutta l'enchilada (formata dall'ESP header, il datagramma IP originale e il trailer ESP, in cui il datagramma e il trailer sono stati cifrati).
Ricorda che per calcolare un MAC, il mittente aggiunge una chiave MAC segreta all'enchilada e poi calcola una hash di lunghezza fissa del risultato. Quando R2 riceve il datagramma IPsec, vede che il pacchetto è diretto proprio a sé stesso. R2 allora processa il datagramma. Poiché il campo protocollo (nell'header IP a sinistra) è 50, R2 vede che si tratta di un datagramma IPsec con ESP per processare il datagramma. Prima di vedere come interagisce con l'enchilada, R2 usa SPI per determinare a quale SA il datagramma appartiene. In secondo luogo, calcola il MAC dell'enchilada e verifica ce il MAC sia consistente con il valore nel campo ESP MAC. Se è così, R2 sa per certo che il datagramma arriva da R1 e non è stato manomesso. Fatto ciò, R2 controlla che il numero di sequenza per verificare che il datagramma sia fresco e non duplicato. Dopo di ché R2 decifra il datagramma originale (cifrato con ESP) utilizzando le informazioni salvate nella SA corrispondente. Rimuove il padding in eccesso ed estrae il datagramma originale IP vanilla. Infine, inoltra il datagramma all'ufficio della filiale.
Quando R1 riceve il datagramma (non sicuro) dall'host mittente della sede centrale. Tale datagramma è destinato a qualche IP di destinazione fuori dalla sede centrale, come fa R1 a sapere se dovrebbe essere inviato con IPsec o no? E in caso in cui debba essere usato IPsec, come fa a sapere quale SA usare (tra tutte quelle possibilmente attive) per tale compito?
Il problema si risolve come segue. Insieme al SAD (database di SA), l'entità IPsec ha anche un'altra struttura dati che mantiene altri dati. Questa struttura è chiamata Security Policy Database, SPD. L'SPD indica quali datagrammi devono essere convertiti in datagrammi IPsec e per questi, quale SA deve essere usata. Queste informazioni sono mantenute in modo molto simile a le regole dei firewall.
Questa modalità è utilizzata per mettere in sicurezza la comunicazione tra due host fissati. Un tunnel ESP in transport mode connette due host.
In transport mode, ESP è usato per mettere in sicurezza i protocolli del livello superiore a IP, questo vuol dire TCP oppure UDP, ma anche altri come ICMP e altri protocolli validi.
Si noti che l'header ESP è inserito dopo l'header IP, ma prima del segmento del livello superiore.
Come vediamo in figura, il payload, fatto dall'header TCP e dei dati, e l'ESP trailer sono cifrati. L'header ESP non è cifrato, altrimenti, il destinatario non sarebbe in grado di trovare la l'SPI e non avrebbe modo di sapere come decifrare il pacchetto, ma è comunque autenticato. Questo vuol dire che un attaccante, per esempio, non può sostituire l'SPI corrente con un altro, o un altro numero di sequenza.
Un datagramma IP è soggetto a manipolazioni arbitrarie da un attaccante. L'header ha il classico checksum, ma questo fornisce solo protezione contro la corruzione. Lo stesso principio è applicato al payload trasportato da un datagrammi, ovvero segmenti a livello di trasporto come TCP e UDP, anche essi sono protetti da checksum, ma anche qui i dati possono essere facilmente manipolati da un attaccante. Alcune situazioni richiedono la verifica che un datagramma IP proviene da chi effettivamente l'ha inviato e i loro payload non sono stati manipolati lungo il transito. Come abbiamo visto tra i servizi offerti da ESP risulta esserci anche l'autenticazione, servizi applicati sfruttando la crittografia. In alcuni casi può essere utile fornire autenticità senza il pesante processo della cifratura. Il protocollo AH fornisce autenticazione agli estremi a integrità dei dati senza l'uso della cifratura.
AH fornisce questo servizio attraverso il calcolo di MAC, chiamato intergrity check value (ICV), su alcune parti dell'intestazione IP e per il payload completo. Il risultato di ICV è piazzato in un header AH e questo è aggiunto al datagramma IP. Il punto esatto in cui viene piazzato l'header AH dipende dalla modalità utilizza: transport mode o tunnel mode.
Di seguito i campi di un header IP, nell'immagine sono stati evidenziati (oscurati) i campi che non sono coperti da autenticazione poiché essi cambiano da un hop all'altro. Essi vengono posti a zero prima del calcolo di ICV.
AH è un protocollo con codice numerico 51.
La figura sotto mostra il formato di un header AH, come abbiamo specificato la sua precisa locazione varia in base alla modalità con cui viene utilizzato.
Facciamo notare quanto può essere difficile verificare i numeri di sequenza per AH che è un protocollo basato su un livello inaffidabile (IP) che offre un servizio di tipo best-effort, in cui non vi è la garanzia che un datagramma, e di conseguenza un pacchetto AH, non venga smarrito, consegnato fuori ordine, o duplicato.
Per cui, per AH, non basta ricordare il numero del prossimo pacchetto che attende e controllare che il pacchetto in arrivo abbia proprio quel numero. Quando un datagramma arriva, il suo numero di sequenza può essere:
Quando un SA per AH viene stabilita, di solito attraverso negoziazioni IKE, l'algoritmo di autenticazione e le chiavi vengono registrate, il contatore per i numeri di sequenza è posto a 0. Quando IPsec determina che ad un pacchetto in uscita dovrebbe essere applicato AH, allora localizza la SA di appartenenza ed esegue il seguente processo:
I pacchetti autenticati con AH potrebbero essere frammentati, ovviamente, prima che AH possa agire su di essi, il datagramma deve essere interamente ricomposto. Dopo di che AH esegue le seguenti operazioni:
Questa modalità è usata per mettere in sicurezza la comunicazione tra due host fissati. Gli estremi sono specifici host invece che due router o un host e un router.
Nella modalità trasporto, l'header AH è inserito nel datagramma IP subito dopo l'header IP.
Facciamo notare che vi è una riga che mostra che l'autenticazione va da metà header IP fino al payload (data), questo rappresenta il fatto che non tutti i campi dell'header IP vengono autenticati (quelli mutabili vengono esclusi).
La modalità tunnel è usata per connettere due router attraverso un insieme di security gateway (router) oppure un host e un security gateway.
In figura per esempio, poiché i security gateway devono proteggere i datagrammi tra un paio qualsiasi di host nelle due reti, l'incapsulamento è diverso.
Ed è simili a quello che abbiamo trattato per ESP.
Ovvero, invece di inserire un header AH tra l'header IP e il protocollo di livello superiore, l'intero datagramma viene incapsulato piazzandogli davanti un header IP e un header AH.
Anche qui, l'header IP esterno è autenticato solo per i campi non mutabili, ma notiamo anche che l'header IP interno è completamente autenticato. Quando i pacchetti passeranno nei router intermedi, vedranno un semplice pacchetto IP (con numero di protocollo che indica AH).
Quando una VPN ha un numero piccolo di end point (due router per esempio), l'amministratore di rete può manualmente configurare le informazioni delle SA nelle SAD dei due estremi della comunicazione. Questa configurazione manuale non è praticabile quando ci sono tante entità da configurare.
IPsec utilizza Internet Key Exchange (IKE) protocol.
Ogni entità ha un certificato, che include la sua chiave pubblica.
Negoziazione delle chiavi: IKE gestisce la negoziazione delle chiavi per stabilire una sessione di sicurezza condivisa tra i dispositivi che comunicano. Queste chiavi vengono utilizzate per crittografare e decrittografare i dati trasmessi durante la comunicazione.
Autenticazione: IKE verifica l'identità delle parti coinvolte nel processo di negoziazione delle chiavi. Può utilizzare metodi di autenticazione come certificati digitali.
Negoziazione dei parametri di sicurezza: IKE stabilisce i parametri di sicurezza da utilizzare durante la comunicazione IPsec. Questi parametri includono algoritmi di crittografia, metodi di autenticazione, durata delle chiavi e altri dettagli specifici per la SA che devono condividere.
Questo procedimento avviene in due fasi.
I due estremi della comunicazione utilizzano Diffie-Hellman per creare una connessione IKE SA (che è diversa dall'SA discussa nel contesto di IPsec) tra i router. IKE SA fornisce un canale di autenticazione e cifrato tra i due router. Durante questa fase vengono stabilite le chiavi per la cifratura e l'autenticazione per l'IKE SA. Ciò che viene stabilito è un segreto su cui si basano le chiavi della SA di IPsec. Durante questa fase non sono usate chiavi pubbliche e private RSA.
Nella seconda fase, entrami gli estremi rivelano la propria identità all'altro firmando i loro messaggi. In ogni caso, le identità non sono rivelate ad un passive sniffer, dal momento che sono inviate in un canale IKE SA sicuro. Inoltre durante questa fase, i due estremi negoziano la cifratura IPsec e gli algoritmi di autenticazione che devono essere usati dalle SA di IPsec.
Alla fine delle fase due, gli estremi della comunicazione possono cominciare ad usare IPsec.