IPsec

La IETF (Internet Engineering Task Force) ha definito un insieme di protocolli che consentono una comunicazione sicura su Internet noti come IPsec (IP security). Essi offrono servizi di autenticazione e di cifratura allo strato IP e possono essere utilizzati con IPv4 o IPv6. 

PGPnet permette connessioni IPsec dinamiche, per cui due macchine con PGPnet possono comunicare tramite IPsec senza che sia preconfigurata staticamente una connessione tra di esse.

La struttura di IPsec è piuttosto complessa in quanto IPsec non è un singolo protocollo di sicurezza: esso mette a disposizione un insieme di algoritmi di sicurezza più una struttura generale che consente ad una coppia di entità comunicanti di usare qualsiasi algoritmo fornisca una sicurezza appropriata per la comunicazione.

I protocolli principali che costituiscono IPsec sono tre: AH (Authentication Header) che fornisce servizi di autenticazione e integrità; ESP (Encapsulating Security Payload) che fornisce servizi di riservatezza, autenticazione e integrità, e IKE (Internet Key Exchange) che gestisce lo scambio delle chiavi.

Il protocollo AH (Authentication Header) di IPsec è utilizzato per trasportare informazioni di autenticazione come lo schema di sicurezza da utilizzare e i relativi parametri. Invece di cambiare l'intestazione base di un datagram IP, questo protocollo utilizza un header separato detto appunto intestazione di autenticazione (o AH). IPsec inserisce l'intestazione di autenticazione immediatamente dopo l'intestazione originale IP, ma prima di quella di trasporto.

 

Per consentire la cifratura di un datagram, oltre all'autenticazione, IPsec utilizza il protocollo ESP (Encapsulating Security Payload) che aggiunge tre ulteriori aree al datagram:

- ESP HEADER segue immediatamente l'intestazione IP e precede la sezione cifrata. E' costituito da un campo il cui valore è utilizzato dal ricevitore del pacchetto per identificare la SA a cui tale pacchetto è associato, e da un campo contenente il numero di sequenza del pacchetto.

- ESP TRAILER è cifrato insieme al datagram e consiste essenzialmente di bit posti a  0 (padding). Tali bit di riempimento sono necessari per tre motivi. Prima di tutto, alcuni algoritmi di cifratura richiedono che degli zero seguano il messaggio cifrato. Secondariamente, sono importanti per assicurare l'allineamento tra i vari campi del datagram. Infine, alcuni siti possono decidere di aggiungere a ciascun datagram un riempimento di lunghezza casuale, in modo che possibili intercettatori posti in punti intermedi lungo il percorso non possano usare la dimensione del datagram per dedurne lo scopo. 

- ESP AUTH di dimensione variabile, segue la sezione cifrata. E' un valore per il controllo dell'integrità del datagram ed è calcolato considerando l'ESP Header, il datagram originale e l'ESP Trailer.

 

I protocolli AH ed ESP non si preoccupano dello scambio delle chiavi e presumono che i due interlocutori si siano già accordati creando tra loro una security association. Il compito di negoziare e gestire le security association è affidato al protocollo IKE. IKE agisce nella fase iniziale della comunicazione IPsec ed opera in due fasi.

Nella prima fase, definita come "main mode" (sei messaggi scambiati) oppure "aggressive mode" (tre messaggi scambiati), le due entità comunicanti creano una security association per IKE stesso (detta ISAKMP SA - Internet Security Association and Key Management Protocol), in modo da proteggere lo scambio dei messaggi previsto nella seconda fase.

Nella seconda fase, definita come "quick mode" (tre messaggi scambiati) avviene la negoziazione della SA che dovrà essere attivata. I parametri negoziati sono:

Dopodiché avviene lo scambio dei valori per il protocollo Diffie-Hellman tramite i quali le due macchine comunicanti genereranno la chiave che sarà poi utilizzata per la cifratura e l'autenticazione. In questo modo non avviene mai un effettivo scambio di chiavi.  

In realtà una singola negoziazione ha come risultato due security association: una dall'entità locale a quella remota e una in senso inverso. Inoltre, c'è da notare che i messaggi trasmessi nella prima fase viaggiano in chiaro, mentre nella seconda fase tutti i messaggi sono cifrati perché sono protetti dalla ISAKMP SA.

Seguendo il percorso PGPnet -> View -> Option e selezionando il pannello VPN Advanced è possibile configurare tutte le opzioni disponibili per il servizio PGPnet

 

Le opzioni riguardano in particolare l'algoritmo di cifratura, l'algoritmo di hash, la lunghezza della chiave Diffie-Hellman, la compressione, i parametri per il protocollo IKE e il protocollo IPsec. Il pulsante Default Setting permette di ripristinare i valori predefiniti.

Come si è visto, nell'architettura di IPsec è centrale il concetto di security association. Queste sono necessarie poiché l'utilizzo di un'intestazione per i parametri di sicurezza risulta insufficiente in quanto uno schema di sicurezza può avere numerose varianti. Ad esempio, deve specificare un algoritmo di cifratura, un algoritmo di autenticazione, la chiave (o più chiavi) che l'algoritmo usa, il tempo di vita per cui la chiave rimarrà valida, il tempo di vita per cui la destinazione è d'accordo ad usare l'algoritmo ed un elenco di indirizzi sorgenti che sono autorizzati ad usare lo schema. Tutte queste informazioni non possono essere contenute nell'intestazione, per cui, allo scopo di risparmiare spazio nell'intestazione, IPsec dispone che ogni destinatario raccolga tutti i dettagli relativi allo schema di sicurezza da adottare in una security association (SA). Una SA è dunque una connessione tra due parti che comunicano tramite IPsec, e specifica quali meccanismi di sicurezza vengono utilizzati, cioè quali algoritmi e quali chiavi, per proteggere il traffico che vi fluisce.

Supponiamo ora che il protocollo IKE abbia già attivato una SA tra due macchine e vediamo in breve quali sono i passi effettuati prima della trasmissione di un datagram.

Il datagram IP originale è inserito nel campo Payload Data (compreso tra l'ESP Header e l'ESP Trailer) di un pacchetto ESP. Vengono aggiunti i bit a 0 (padding) se necessari ed il valore risultante viene cifrato utilizzando l'algoritmo di cifratura, la chiave e tutti gli altri parametri specificati dalla SA attraverso la quale il datagram viaggerà. Infine viene applicato l'algoritmo di autenticazione (specificato sempre dalla SA) per determinare il valore del campo ESP AUTH.

Come possiamo notare, la cifratura è eseguita prima dell'autenticazione e non comprende il campo ESP AUTH. Questo modo di procedere facilita l'individuazione ed il rifiuto, da parte del ricevente, dei pacchetti duplicati o falsificati, prima che avvenga la decifratura del pacchetto stesso. Ciò riduce potenzialmente l'impatto degli attacchi denial of service.

 Quando arriva un datagram, il ricevente procede come indicato di seguito.

Viene ricalcolato il valore del campo ESP AUTH, utilizzando l'algoritmo di autenticazione specificato dalla SA attraverso cui il datagram è arrivato. Il valore calcolato è confrontato con quello del datagram ricevuto.  Se il confronto fallisce, il datagram non è valido e viene scartato. Se invece i due valori sono uguali, allora il datagram è valido, ed è accettato. Dopodiché, il ricevente decifra il contenuto del campo Payload Data (compreso il padding), utilizzando l'algoritmo di cifratura indicato dalla SA. Infine, viene ricostruito il datagram IP originale prelevando dal pacchetto ESP solo il contenuto del campo Payload Data (senza il padding).   

Per visualizzare in dettaglio le caratteristiche di una SA selezionata, basta cliccare dallo Status Panel il tasto Properties. Apparirà la seguente finestra.

 

Come possiamo notare, oltre agli altri dati, è riportato l'algoritmo di cifratura e quello di autenticazione utilizzati dal protocollo ESP. Nella parte finale è indicata la data e l'ora dopo le quali la SA non sarà più valida. Se in quel momento la connessione è ancora attiva, PGPnet creerà automaticamente una nuova SA identica a quella precedente, con una nuova data e ora di scadenza.  

Cliccando sul tasto Auto-Configure, PGPnet importa la chiave di autenticazione dell'entità con cui si sta comunicando tramite la SA in questione, nel proprio keyring e visualizza la seguente figura informando l'utente che l'operazione è stata eseguita con successo.

   

Ovviamente se la SA in questione non ha associata una chiave di autenticazione, non è possibile effettuare tale operazione. Quindi, per richiedere una chiave di autenticazione all'host con cui è stata stabilita la SA, si accede al pannello VPN di PGPnet, si seleziona l'host desiderato e si clicca sul tasto Properties.