IPsec: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m robot Aggiunta: fr Modificare: en |
fix |
||
| (201 versioni intermedie di oltre 100 utenti non mostrate) | |||
Riga 1:
== Panoramica dello standard ==
=== Scopo del progetto ===
IPsec è stato progettato per rendere sicure sia comunicazioni ''portal-to-portal'' sia comunicazioni ''end-to-end''. Nella prima configurazione il traffico viene reso "''sicuro''" a diversi computer (in alcuni casi ad un'intera [[LAN]]); nella seconda solo i ''peer'' che stabiliscono la connessione scambiano pacchetti protetti.
Tuttavia l'uso predominante di IPsec è la creazione di [[Rete privata virtuale|reti private virtuali]]; per conseguire tale scopo possono essere utilizzati entrambi i metodi prima esposti.
=== Introduzione ===
IPsec è una collezione di [[protocollo di rete|protocolli]] formata da:
* Protocolli che
* Protocolli che
Esiste un solo protocollo per lo scambio delle chiavi, il protocollo ''[[Internet key exchange|IKE]]''.
IPsec è parte integrante di [[IPv6]], mentre è opzionale in [[IPv4]]. Di conseguenza, ci si aspetta che sarà maggiormente utilizzato quando IPv6 acquisterà popolarità.
Il protocollo è definito negli [[
Dal [[2004]]
Per quanto riguarda il secondo aspetto, esistono due protocolli: [[Authentication Header]] (AH) e [[Encapsulating Security Payload]] (ESP).
'''AH''' fornisce autenticazione e [[integrità dei dati|integrità del messaggio]], ma non offre la riservatezza ed è il protocollo IP 51.<br />
'''ESP''' fornisce invece autenticazione, riservatezza e controllo di [[integrità dei dati|integrità del messaggio]] ed è il protocollo IP 50. Per questi motivi ESP è molto più usato di AH.
=== Dettagli tecnici ===
IPsec supporta due modalità di funzionamento:
*
*#connessione [[host]]-to-host;
*#usato dagli end-point, non dai [[gateway (informatica)|gateway]];
*#in caso di cifratura, viene cifrato solo il [[Carico utile (informatica)|payload]] dei datagrammi IP, non l'[[header]];
*#computazionalmente leggero;
*#ogni host che vuole comunicare deve avere tutto il software necessario ad implementare IPsec;
*#si aggiunge solo l'header IPsec; gli indirizzi mittente e destinatario degli end-point sono rilevabili.
* ''Tunnel mode''
*#connessione gateway-to-gateway;
*#in caso di cifratura, viene cifrato tutto il pacchetto IP originale;
*#utilizzato per realizzare le VPN;
*#computazionalmente oneroso;
*#solo i gateway devono avere il software IPsec;
*#si hanno punti di centralizzazione, quindi single point of failure;
*#utilizza un doppio [[imbustamento|incapsulamento]], ponendo come payload della comunicazione tra indirizzi gateway quanto si ottiene cifrando l'unione di indirizzi mittente e destinatario degli end-point col payload effettivo; adottando il protocollo Encapsulating Security Payload, gli indirizzi mittente e destinatario degli end-point non sono quindi più rilevabili (restano invece rilevabili adottando AH).
Le due modalità sono supportate sia da AH che da ESP.
IPsec può essere utilizzato anche per connessioni tra gateway e host.
==== Security Association e Security Policy ====
Il concetto di '''Security Association''' (in breve '''SA''') è alla base del funzionamento di IPsec. Una SA è un "contratto" fra le due entità coinvolte nella comunicazione; in essa vengono stabiliti i meccanismi di protezione e le chiavi da utilizzare durante il successivo trasferimento dei dati. Nell'ambito di IPsec, stabilire le security association è compito del protocollo [[Internet key exchange|IKE]], sebbene sia possibile anche impostarle manualmente; la procedura manuale è sconsigliata in quanto può introdurre errori che indeboliscono il tunnel.
Una peculiarità delle SA è che individuano una comunicazione unidirezionale; quindi durante la creazione della connessione le entità coinvolte creano e gestiscono una SA per ognuno dei versi della comunicazione, quindi 2 SA individuano un canale [[full-duplex]]. Al fine di semplificare la gestione delle SA, viene utilizzato un apposito [[database]] detto '''SAD''' ('''S'''ecurity '''A'''ssociation '''D'''atabase), dove viene tenuta traccia delle SA attive.
* Gli [[indirizzo IP|indirizzi IP]] dei ''peer'' coinvolti nella comunicazione;
* Il protocollo che verrà utilizzato per il tunnel (AH o ESP);
* le tecniche di cifratura utilizzate e le relative chiavi;
* Un intero a 32 bit chiamato '''SPI''', acronimo per '''S'''ecurity '''P'''arameter '''I'''ndex.
Dall'esame dei parametri di una SA
La security policy contiene:
* Indirizzo sorgente e indirizzo destinazione del pacchetto. Tale informazione è già contenuta nella SA e quindi può sembrare ridondante. In realtà questa informazione ha senso quando viene utilizzato il Tunnel mode.
* Il protocollo e la relativa porta da instradare nel tunnel. Questa opzione dipende dall'implementazione del protocollo e non è sempre contemplata; nel caso non sia disponibile, tutto il traffico prodotto viene veicolato nel tunnel.
* Un identificativo della SA da utilizzare per processare i dati.
Una volta stabilita la ''security association'' e la ''security policy'', può cominciare la comunicazione che sfrutterà il protocollo AH o il protocollo ESP cui verrà passato il parametro SPI, che permetterà di risalire alle tecniche crittografiche da utilizzare per la trasmissione.
== Protocolli di IPsec ==
=== IKE ===
{{vedi anche|Internet key exchange}}
==== Descrizione ====
IKE è un [[acronimo]] per '''I'''nternet '''k'''ey '''e'''xchange ed è il protocollo usato per stabilire una '''security association''' nella suite di protocolli '''IPsec'''. Questo protocollo è definito in RFC 4306. È un protocollo di [[livello applicazioni|livello applicazione]] e utilizza il protocollo [[User Datagram Protocol|UDP]] come [[Livello di trasporto|protocollo di trasporto]]; la [[Porta (reti)|porta]] su cui viene stabilita la [[connessione (informatica)|connessione]] è 500.
L'obiettivo di IKE è stabilire uno ''shared session secret'', ossia una chiave condivisa corrispondente alla sessione da instaurare e a tal fine utilizza l'algoritmo di [[Scambio di chiavi Diffie-Hellman|Diffie-Hellman]]; dallo ''shared secret'' vengono successivamente derivate le chiavi crittografiche che verranno utilizzate per la successiva comunicazione.
Al fine di autenticare le entità coinvolte nella comunicazione possono essere utilizzate tecniche a chiave simmetrica o, alternativamente, a chiave asimmetrica; in quest'ultimo caso si fa ricorso a [[infrastrutture a chiave pubblica]] (PKI) e all'uso di [[Certificato digitale|certificati digitali]].
=== Authentication Header (AH) ===
==== Descrizione ====
'''Authentication Header''' (abbreviato '''AH'''), è un protocollo che fa parte della suite IPsec. Il suo compito è quello di fornire un controllo di integrità pacchetto per pacchetto, verifica dell'autenticità del mittente e protezione contro i [[replay attack]]. AH non garantisce in alcun modo la confidenzialità del messaggio.
L'autenticità è garantita tramite funzioni di hash a chiave simmetrica, ossia tramite il meccanismo delle pre-shared keys. Per poter comunicare, due entità devono condividere la medesima chiave; tale chiave viene combinata con il messaggio originale e quindi viene calcolato il [[checksum]] tramite una funzione di hash crittografico(MD5 o SHA). Il messaggio e il checksum vengono, infine, inviati al ''peer'' remoto.
Il ''peer'' remoto riceve il messaggio; dato che questo è in chiaro, lo può leggere, combinare con la chiave di cui è a conoscenza e calcolare il checksum. Se il checksum corrisponde a quello inviato, il messaggio è autentico e viene accettato altrimenti viene scartato in quanto è stato modificato in un modo non consentito dallo standard.
Il protocollo AH è progettato per proteggere l'intero pacchetto IP inviato; tuttavia bisogna considerare che alcuni campi dell'header IP, come il '''TTL''', variano durante la trasmissione;
queste modifiche devono essere necessariamente consentite, per cui prima di calcolare
==== Formato del pacchetto ====
Di seguito viene illustrata la struttura del pacchetto AH (ogni casella rappresenta 1 [[byte]]).
{| border="1" cellspacing="0" cellpadding="2px"
| style="text-align:center
| style="text-align:center
| style="text-align:center
| style="text-align:center
|--
<!-- | 0 1 2 3 4 5 6 7 -->
Riga 68 ⟶ 93:
<!-- | 0 1 2 3 4 5 6 7 -->
<!-- |-- -->
| style="text-align:center;" | Header
| style="text-align:center;" | Dimensione Payload
| colspan="2" style="text-align:center;" | RISERVATO
|--
| colspan="4" style="text-align:center;" |
|--
| colspan="4" style="text-align:center;" |
|--
| colspan="4" style="text-align:center;" |
Dati per l'autenticazione (lunghezza variable)
|}
; Header
; Dimensione Payload (8 bit): La lunghezza dell'AH in word (1 word = 32 bit) meno 2. Per esempio, 96 sono i bit di default del campo Authentication Data, più altri 96 bit per i campi di lunghezza fissa di AH fanno 6 word (96+96 = 192 bit, diviso per 32 = 6). Sottraendo 2 risulta quindi 4 il valore contenuto della dimensione del payload standard.
; RISERVATO: Spazio lasciato per sviluppi
; Security Parameter Index: Questo campo identifica i parametri di sicurezza in
;
; Dati per l'autenticazione: Contiene l'Integrity Check Value (ICV) e rappresenta l'[[HMAC]] calcolato dal mittente del messaggio. L'HMAC viene calcolato utilizzando i campi dell'header IP (con il [[Time to live|TTL]] originario), i campi dell'header AH tranne i dati dell'autenticazione (viene considerato a 0) e infine tutti i dati degli header di livello superiore, compresi quelli applicativi, che non vengono modificati durante il trasporto.
==== Transport mode e Tunnel mode ====
AH supporta nativamente sia il ''transport mode'' che il ''tunnel mode''. In transport mode vengono protetti solo i protocolli di livello superiore a quello di rete ([[Transmission Control Protocol|TCP]], [[User Datagram Protocol|UDP]], etc); in tunnel mode il pacchetto IP originale viene incapsulato in un nuovo pacchetto IP, dopo essere stato elaborato da AH. Ne spieghiamo il funzionamento con l'ausilio di alcuni disegni.
Il metro di confronto è senza dubbio il pacchetto IP originale; in presenza di un collegamento basato su IPsec il pacchetto viene, ovviamente, alterato.
Riga 97 ⟶ 122:
<small>Pacchetto IP originale</small>
A seconda della modalità di funzionamento di
{| border="2" width="60%" cellspacing=0
|style="width:17%"| Header IP
Riga 122 ⟶ 147:
La linea azzurra indica le zone del pacchetto che sono autenticate. Dal punto di vista della protezione, in entrambi i casi, i pacchetti vengono protetti completamente. Notiamo che nell'header IP, alcuni campi variano durante il transito nella rete, ad esempio il [[Time to live|TTL]].
Questi campi vengono posti a '''0''' prima di calcolare la [[funzione di
=== Encapsulating Security Payload (ESP) ===
==== Descrizione ====
'''Encapsulating Security Payload''', denotato con l'[[acronimo]] '''ESP''', è un protocollo che fa parte della suite IPsec. Il suo obiettivo è fornire autenticità, confidenzialità e controllo di integrità alla comunicazione. Contrariamente a quanto fa [[Authentication Header|AH]], l'header IP non viene coperto dai controlli. Al pari di AH, però, supporta sia il tunnel mode che il transport mode.
====
Di seguito viene riportato il formato del pacchetto '''ESP''' (ogni casella rappresenta 1 [[byte]]).
{| border="1" cellspacing="0" cellpadding="2px" width="50%"
| style="text-align:center;"
| style="text-align:center;"
| style="text-align:center;"
| style="text-align:center;"
|--
<!-- | 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7
Riga 149 ⟶ 173:
Payload * (variable)
|--
| style="border-top:none;"
| colspan="3" style="text-align:center;border-bottom:none;" | Padding (0-255
|--
| style="border-right:none;" |
| style="border-left:none;border-top:none;" |
| style="text-align:center;"
| style="text-align:center;"
|--
| colspan="4" style="text-align:center;" |
Authentication Data (variable)
|}
; Security Parameters Index (SPI)
; Sequence Number
; Payload
; Padding
; Pad Length
; Next Header
; Authentication Data
Come si può vedere dalla struttura del pacchetto (ma sarà illustrato meglio in seguito), ESP "''avvolge''" i dati dei protocolli di livello superiore, contrariamente a quanto fa AH che antepone un header.
==== Tunnel mode e Transport mode ====
Essendo un protocollo per il trasferimento dati della
{| border="1" width="50%" cellspacing=0
|style="width:
|style="width:25%;background-color:gainsboro"| Header TCP
|style="width:
|}<small>Pacchetto IP originale</small>
{| border="1" width="85%" cellspacing="0"
|style="width:13%;border:1;background-color:gainsboro" | Header IP
|style="width:13%;background-color:orange;font-weight:bold" | Header ESP
|style="width:13%;background-color:
|style="width:35%;background-color:
|style="width:13%;background-color:orange;font-weight:bold" | Trailer ESP
|style="width:13%;background-color:orange;font-weight:bold" | ESP auth
|}
{| width="85%"
|style="width:26%;"|
|style="background-color:lime;text-align:center"| Dati crittografati
|style="width:13%;"|
|}
{| width="85%"
Riga 188 ⟶ 217:
|style="background-color:cyan;text-align:center"| Dati autenticati
|style="width:13%;"|
|}<small>ESP in
{|width="
|style="width:
|style="width:11%;background-color:orange;font-weight:bold" | Header ESP
|style="width:
|style="width:
|style="width:
|style="width:11%;background-color:orange;font-weight:bold" | Trailer ESP
|style="width:11%;background-color:orange;font-weight:bold" | ESP auth
|}
{|width="
|style="width:23%"|
| style="background-color:lime;text-align:center;"| Dati crittografati
|style="width:11%"|
|}
{|width="95%"
|style="width:12%"|
| style="background-color:cyan;text-align:center;"| Dati autenticati
|style="width:11%"|
|} <small>ESP in Tunnel mode</small>
Le linee verdi sottendono la parte di pacchetto che viene sottoposta a crittografia, mentre le linee azzurre sottendono la parte di pacchetto che viene sottoposta a controllo di autenticità e integrità
Il controllo di integrità e autenticità viene eseguito tramite [[HMAC]] (funzioni di
l'hash viene calcolato tramite una funzione di hash ([[MD5]] o [[SHA1]]), utilizzando una chiave condivisa; l'hash ottenuto viene allegato al messaggio e inviato. In ricezione viene controllata l'integrità del messaggio.
=== NAT
==== Descrizione ====
[[Attraversamento NAT|NAT traversal]] (o più in breve NAT-T) è il nome di un protocollo facente parte della suite IPsec e standardizzato in diversi [[Request for Comments|RFC]], di cui quello ufficiale è RFC 3947. L'obiettivo di questo protocollo è fornire la possibilità di stabilire un tunnel IPsec anche quando uno dei due ''peer'' coinvolti subisce un'operazione di
==== Scenario ====
Il [[Network address translation|NAT]] è una tecnica molto utilizzata per il riuso degli [[indirizzi IP]]. Tuttavia gli host dietro un [[router]] (o un [[firewall]]) che effettua operazioni di NAT non godono di [[connettività end-to-end]]. Sebbene esistano diversi tipi di NAT, l'obiettivo generale è l'alterazione degli header del pacchetto. Questo comportamento è in netto contrasto con IPsec che ha tra i suoi obiettivi il controllo dell''''integrità''' del pacchetto.
In particolare il NAT è incompatibile con AH sia in tunnel mode che in transport mode, in quanto AH verifica l'integrità di tutto il pacchetto IP. ESP, invece, non copre l'header IP con controlli di sorta
Il NAT crea problemi anche con IKE e soprattutto con IKE in '''main mode'''. Il main mode usato congiuntamente al metodo delle ''preshared-keys'' richiede l'autenticazione degli host coinvolti nella comunicazione e tale autenticazione prevede un controllo sugli indirizzi IP; per cui l'alterazione dell'indirizzo da parte di un
In genere, nei dispositivi preposti alla gestione dei tunnel IPsec e nei client VPN, il NAT-T non è abilitato di default ma deve essere impostato a mano; tuttavia il suo utilizzo rimane opzionale: difatti durante la creazione della '''security association''', i peer determinano se uno dei due subisce operazioni di NAT e solo in questo caso viene usato il NAT-T; questa operazione viene fatta durante la prima fase della
In prima battuta, i ''peer'' verificano che entrambi siano in grado di supportare in NAT-T; questa verifica è eseguita nella primissima fase del protocollo IKE, per mezzo di un pacchetto con un campo ''Vendor-ID'', che contiene un valore
Una volta stabilito che entrambi supportano il NAT-T, vengono inviate delle frame "NAT-Discovery" (NAT-D), in modo da verificare chi dei due subisca il NAT, o al limite se lo subiscano entrambi.
Una volta stabilito chi subisce il NAT, la comunicazione si sposta su una nuova coppia di
Descriviamo come viene incapsulato il pacchetto originale ESP.
Riga 249 ⟶ 283:
<small>ESP in Tunnel mode con incapsulamento UDP per NAT-T</small>
I campi segnati in <
== Elenco degli RFC relativi ad IPsec ==
== Voci correlate ==
* [[Sicurezza informatica]]
* [[HTTPS]]
* [[Transport Layer Security]]
* [[Secure Shell]]
* [[IP spoofing]]
== Altri progetti ==
{{interprogetto}}
== Collegamenti esterni ==
*http://www.ipsec-howto.org/italian/x151.html
*{{cita web|https://www.linux.it/~davide/doc/tesi_html/index.html|IPsec e TLS a confronto: funzioni, prestazioni ed estensioni}}
*{{cita web | 1 = http://www.isaserver.org/articles/IPSec_Passthrough.html | 2 = How to pass IPSec traffic through ISA Server | accesso = 4 luglio 2005 | dataarchivio = 3 maggio 2005 | urlarchivio = https://web.archive.org/web/20050503121918/http://www.isaserver.org/articles/ipsec_passthrough.html | urlmorto = sì }}
{{IPstack}}
{{Controllo di autorità}}
{{Portale|Crittografia|Sicurezza informatica|Telematica}}
[[Categoria:Standard Internet]]
[[Categoria:
[[Categoria:Protocolli livello rete]]
[[Categoria:Sicurezza di rete]]
[[Categoria:Protocolli crittografici]]
| |||