venerdì, Dicembre 27, 2024

VPN ovvero Reti Private Virtuali: Tecnologia IPsec v3 – 4a parte

AreaNetworking.it
AreaNetworking.ithttps://www.areanetworking.it
AreaNetworking.it è tra i principali e più storici media italiani del settore ICT. Nato nel 2003 per opera di Federico Lagni, l'attività del gruppo è sia online - con il portale rivolto a figure professionali ICT (IT Manager, CTO, Security Specialist, Datacenter Engineer, etc) - sia offline con l'organizzazione delle più importanti conferenze italiane su temi tecnologici.

IPsec

IPsec (IP Security) è un estensione del protocollo IP che fornisce servizi di sicurezza di alta qualità basata sulla crittografia, che rende sicuro il traffico al livello IP e per i protocolli dei livelli superiori. È stato sviluppato dal gruppo di lavoro incaricato dall’IETF di migliorare la sicurezza al protocollo IP per lo standard IPv6 in cui l’implementazione è obbligatoria ed in seguito inserito nell’Ipv4 in cui l’implementazione è opzionale.

IPsec è un protocollo standard di internet per il tunneling, la cifratura e l’autenticazione. L’architettura di IPsec è attualmente esposta nella terza serie Standard la RFC 4301 (la prima era descritta nelle RFC 1825-1827 e la seconda nelle RFC 2401, 2402 e 2406) che descrive la struttura generale per questa architettura. IPsec è stato progettato come una struttura/framework modulare di standard aperti che possa rimanere stabile nel tempo in cui vanno implementati vari protocolli e algoritmi di sicurezza. Protocolli e algoritmi che nel tempo possono rivelare debolezze e quindi possono essere con facilità sostituiti da altri più nuovi, migliori ed efficienti. La sostituzione e l’aggiornamento di questi protocolli e algoritmi può avvenire senza creare problemi al resto della suite IPsec. Le specifiche tecniche, le RFC di questi protocolli e algoritmi sono pubblicate separatamente dai protocolli AH, ESP, e IKE che offrono la maggior parte dei servizi di sicurezza di IPsec.

Cosa fa IPsec

IPsec fornisce una serie di servizi di sicurezza al traffico dei dati sul livello IP creando un confine, un accesso controllato tra una interfaccia protetta all’interno di un perimetro di sicurezza e una interfaccia non protetta all’esterno di un perimetro di sicurezza. Il traffico che attraversa questo confine è soggetto a controlli di sicurezza. IPsec può essere usato per proteggere uno o più “percorsi” tra una coppia di host, tra un paio di security gateway o tra un security gateway ed un host. (Il termine security gateway viene usato per riferirsi ad un sistema intermedio che implementa i protocolli di IPsec. Per esempio, un router, un concentratore VPN o un firewall che implementa IPsec è un security gateway).
L’insieme dei servizi di sicurezza a cui IPsec provvede include:

  • Il controllo degli accessi.
  • L’integrità dei datagrammi connectionless.
  • Autenticazione dell’origine dei dati.
  • Protezione contro la ripetizione dei pacchetti (una forma parziale di verifica dell’integrità di sequenza).
  • La riservatezza dei dati mediante la cifratura.
  • Una limitata riservatezza del flusso di traffico.
  • Una limitata funzionalità di firewall. (È possibile per i vari vendor che implementano IPsec offrire meccanismi di firewall più sofisticati.)

Poiché questi servizi sono offerti al livello IP, questi servizi di sicurezza possono essere usati per offrire protezione ad ogni protocollo di livello superiore ad IP (incluso IP stesso), ad esempio TCP, UDP, ICMP, BGP, ecc.

Security Policy (SP)

L’insieme dei servizi di sicurezza per la protezione al traffico dei dati si basa su una serie di requisiti definiti in una Security policy (SP). Cioè, l’entità che amministra la rete definisce “quale” tipo di traffico proteggere con IPsec. È infatti l’amministratore, che decide in un particolare contesto, come impiegare IPsec. Ovvero, definisce la politica di sicurezza (SP) (Security Policy) attraverso l’uso di ACL (Access Control List).

Una security policy specifica normalmente i seguenti parametri:

  • Sorgente e destinazione del pacchetto da proteggere. In transport mode sono i medesimi della corrispondente SA. Ma in tunnel mode possono cambiare.
  • Il protocollo (e la porta) da proteggere. Alcune implementazioni non permettono di definire un protocollo in particolare. In questo caso tutto il traffico tra i due IP specificati viene protetto.
  • La Security Association da utilizzare per la protezione dei pacchetti.
  • Una indicazione precisa del tipo di traffico di rete alla quale saranno applicate le SA, per esempio tutto il traffico IP, solamente le sessioni di Telnet, e così via.
  • Le dimensioni per la sliding window, per proteggersi contro gli attacchi di ripetizione.
  • La durata del tempo di vita della SA.

Tutte queste informazioni sono contenute in una Security Policy (SP) (politica di sicurezza) attiva e immagazzinate a turno in un database delle SP detto SPDB (Security Policy Database).

Ogni volta che bisogna fare una scelta che riguarda i requisiti di sicurezza di una trasmissione, la scelta viene fatta interrogando questo database (SPDB). Il database SPDB deve essere consultato durante il processamento di ogni tipo di traffico (in entrata ed in uscita), incluso il traffico non – IPsec. Questo include anche il traffico di gestione di IPsec come IKE. Il database SPDB richiede entrate distinte per il traffico in entrata e in uscita per questo motivo il database è suddiviso in maniera logica. Un database SPDB deve discriminare fra il traffico che è necessario proteggere con IPsec e il traffico al quale è permesso aggirare IPsec e deve specificare quale azione verrà intrapresa. Questa protezione applicata ad IPsec deve essere applicata dal mittente e dal ricevente IPsec.

SPDB-S, SPDB-O, SPDB-I

Un database SPDB è diviso logicamente in tre parti, in tre cache. La cache SPDB-S (traffico Sicuro) contiene le entrate per ogni traffico soggetto alla protezione di IPsec. La cache SPDB-O (a destinazione esterna, Outbound) contiene entrate per ogni traffico a destinazione esterna che sarà bypassato o sarà scartato. La cache SPDB-I (a destinazione interna, Inbound) viene applicato al traffico in entrata che sarà bypassato o sarà scartato. Tutti e tre i database possono essere de-correlati, scollegati per facilitare il caching.

La divisione logica in tre cache del SPDB ad esempio, permette al SPDB-I di poter essere consultato senza che per tale tipo di traffico si debba consultare il database SPDB-S.

Il database SPDB è un database ordinato. Il requisito di ordinazione è necessario perché le entrate andranno a ricoprire una serie di valori per ogni selettore. Non c’è nessun modo di imporre un ordine generale sulle entrate di SPDB, perché i tipi diversi di selettori non sono gerarchicamente relazionati.

SPDB Entrate

Ogni entrata di SPDB è disposta da un elenco ordinato di uno o più selettori. I tipi di selettore richiesti sono:

  • Remote IP Address (IPv4 o IPv6).
  • Local IP Address (IPv4 o IPv6).
  • Next Layer Protocol.

In generale, ogni tipo di trasmissione deve affrontare un esame, questo esame viene effettuato dal database SPDB, in base al risultato di questo esame, il pacchetto può essere:

  • Scartato: al traffico verrà impedito di entrare/uscire attraverso il confine IPsec droppandolo;
  • Aggirare IPsec: Non verrà applicata alcuna politica di sicurezza. Il traffico verrà inviato in rete cioè, verrà consentito di attraversare il confine IPsec senza che a questo siano applicati i servizi di sicurezza IPsec e non ci si aspetterà di averne sui pacchetti in entrata;
  • Applicare IPsec: al pacchetto verranno applicati i servizi di sicurezza IPsec in uscita e ci si aspetterà di averne sul pacchetto in entrata. Per tale traffico il database SPDB deve specificare i protocolli di sicurezza, i servizi di sicurezza, la loro maniera di trasporto, gli algoritmi crittografici da usare.

Il pacchetto IP

La sicurezza alla trasmissione fra due pari viene applicata al livello tre modificando in maniera sostanziale il pacchetto IP. Che originalmente cioè, senza la protezione IPsec si presenta in questa maniera.

Ovvero, un pacchetto IP, un datagramma IP ha un header IP che incapsula un segmento che è a sua volta composto da un header di livello superiore (TCP) e dal Payload dei dati da trasportare.

Il formato dell’header IPv4

L’header IP contiene le informazioni necessarie per instradare il pacchetto
Header IPv4

L’header di un pacchetto IPv4 è formato dai seguenti campi:
Version: 4 bit

Il campo Version indica il formato dell’header Internet. Qui verrà descritto la versione 4 di IP.
Lenght o IHL: 4 bit

Questo campo Length o Internet Header Length indica la lunghezza dell’header IP in parole di 32 bit; la lunghezza minima di un header è sempre lungo 20 byte (5 parole) quando non vi sono opzioni fino ad un massimo di 15. la lunghezza di questo header non include mai la lunghezza del payload o di altri header che seguono.
Type of service: 8 bit

Il campo Type of Service fornisce un’indicazione ai parametri della qualità. Infatti questo campo si divide in due sottocampi Precedence e Type of Service. Questi parametri saranno usati per guidare la selezione delle precedenze nella trasmissione dei datagrammi attraverso una particolare rete. Molte reti offrono il servizio di precedenza per il traffico, queste reti trattano il traffico con precedenza alta come un traffico più importante degli altri tipi di traffico influenzando così la priorità di trattamento di un pacchetto in una coda. I valori di precedenza sono otto:

  • 111 – Network Control
  • 110 – Internetwork Control
  • 101 – CRITIC-ECP
  • 100 – Flash Override
  • 011 – Flash
  • 010 – Immediate
  • 001 – Priority
  • 000 – Routine

La scelta del tipo di servizio riguarda tre modalità : low-Delay, High-Throughput e High-Relibility.
Bit 0-2: Riservati per il subcampo Precedence.

Bit 3: 0 = Normal Delay, 1 = Low Delay.

Bit 4: 0 = Normal Throughput, 1 = High Throughput.

Bit 5: 0 = Normal Relibility, 1 = High Relibility.

Bit 6-7: Riservato per usi futuri.
Il settaggio dei flag di questo campo servono a determinare il percorso che il pacchetto farà per giungere a destinazione.
Total length: 16 bit

Il campo total length è lunghezza totale del datagramma (header + dati), misurata in byte; incluso l’header la lunghezza massima di un pacchetto IP è di 65535 byte, ma non è detto che tutte le implementazioni siano in grado di gestire questa dimensione per questo è raccomandato di inviare datagrammi non più grandi di 576 byte.

Il numero di 576 è stato selezionato per consentire una ragionevole grandezza del blocco dei dati da trasmettere in aggiunta alle informazioni dell’header. Per esempio, questa grandezza consente un blocco dati di 512 byte più 64 byte per l’header. La grandezza massima per un header internet è di 60 byte, mentre un header tipico è di 20 byte consentendo così un margine per gli header dei protocolli di alto livello.

La lunghezza massima di un datagramma trasmissibile su un link di rete si chiama MTU (Maximum Transmission Unit).

I successivi tre campi servono a gestire la frammentazione di un pacchetto IP. Identification di 16 bit , Flags di 3 bit e Fragment Offset di 13 bit i quali permettono di suddividere il pacchetto in unità più piccole quando esso deve passare attraverso una rete che prevede frame di dimensioni minori cioè, che hanno un MTU più piccolo di quello utilizzato dal mittente per spedire il pacchetto, e quindi deve essere frammentato durante il percorso e ricostruito all’uscita dalla rete.
Identification: 16 bit

In questo campo c’è un valore intero che viene assegnato dal mittente e che identifica univocamente il datagramma; si usa per risalire a quale datagramma appartengono i fragments cioè, dei pacchetti suddivisi in altri più piccoli.
Flags: 3 bit

Questo campo ha diversi bit il cui settaggio a zero (0) o uno (1) ha funzioni di controllo sulla frammentazione dei pacchetti.
Bit 0: il primo bit è riservato e deve essere a zero (0).

Bit 1: (DF) 0 = May Fragment, 1 = Don’t Fragment.

Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.
Fragment offset: 13 bit

Questo campo indica a quale parte del datagramma appartiene questo frammento. Il fragment offset è misurato in unità di 8 byte (64 bit). Il primo frammento ha un offset di zero (0).
Time to Live: 8 bits

Il campo TTL (Time To Live) indica il tempo di vita massimo a cui ad un datagramma è consentito rimanere in Internet. Se questo campo raggiunge il valore zero (0), il datagramma verrà scartato.

Questo campo viene modificato durante il processo di instradamento di internet. Il tempo è misurato in secondi, ma in ogni nodo che tratta un datagramma, il campo TTL deve essere decrementato di uno (1), anche se tratta il datagramma in meno di un secondo. L’obiettivo di questo campo è di scartare i datagrammi la cui destinazione sia “irraggiungibile”, ed entrino quindi in un “loop” di routing infinito persistendo per sempre in rete. Questo campo e’ utile anche ai protocolli di livelli superiori. Per esempio, se TCP attende lo scadere del TTL dopo la chiusura di una connessione, ha la garanzia che non possano arrivare pacchetti che appartenevano alla connessione chiusa.
Protocol: 8 bit

Il campo Protocol identifica l’header immediatamente seguente all’header IPv4 a cui il pacchetto deve essere passato. Il datagramma IP incapsula sempre al suo interno uno o più header/protocolli, ed è necessario indicare al processore di destinazione il prossimo header/protocollo da trattare. È quindi un indicatore che identifica il prossimo header (Next Header) che segue immediatamente l’header IPv4. Questo campo indica il tipo di protocol header che seguirà (Next Header). Ne sono previsti vari tipi di header/protocolli. Sono definiti vari numeri identificativi per i diversi protocolli in Assigned Numbers, una tabella tenuta dallo IANA (Internet Assigned Numbers Autority) (RFC 1700).
Header Checksum: 16 bit

Il valore contenuto in questo campo viene ricavato da un controllo della correttezza dei dati contenuto nell’header IP del pacchetto ricevuto. Il calcolo viene eseguito escludendo il campo Header Checksum stesso e quindi ponendo il suo contenuto a zero (0). Questo campo serve a controllare solo l’integrità dell’header IP durante la trasmissione. Siccome alcuni campi dell’header IP cambiano durante il percorso (ad esempio il campo Time To Live), questo campo viene ricalcolato e quindi modificato da ogni nodo durante il percorso;
Source IP address: 32 bit

contiene l’indirizzo IPv4 del mittente;
Destination IP address: 32 bit

contiene l’indirizzo IPv4 del destinatario;
Options: campo di dimensioni variabili

Questo campo è opzionale, contiene informazioni sulle operazioni che devono essere effettuate durante il percorso (registrazione del percorso, meccanismi di sicurezza). Nella RFC 791 sono definite molte opzioni per questo campo.
Padding: campo di dimensioni variabili

Questo campo di dimensioni variabili è usato per assicurare che l’header finisca al limite dei 32 bit o a un suo multiplo. Il padding viene fatto riempendolo di zero (0).
Data: i dati trasportati dal protocollo.
Il datagramma IPv4 si presenta in questa maniera:

Il formato dell’header IPv6

Header IPv6

L’header di un pacchetto IPv6 è formato dai seguenti campi:
Version: 4 bit

Il campo Version indica il formato dell’header Internet. Qui verrà descritto la versione 6 di IP.
Traffic Class: 8 bit

Questo campo serve ad identificare i pacchetti che appartengono ad una stessa classe di traffico e quindi distinguere dal flusso di traffico pacchetti con diversa priorità.
Flow Label: 20 bit

Questo campo indica l’Etichetta di flusso. Un flusso è una sequenza di pacchetti di dati spedita da una sorgente verso una destinazione. La sorgente desiderando gestire questo flusso di dati in maniera speciale dai nodi durante il percorso. Inserisce in questi pacchetti una etichetta che permette di identificare univocamente un flusso. Un flusso è identificato unicamente dalla combinazione di un indirizzo sorgente ed una etichetta di flusso di valore non zero. I Pacchetti che non appartengono ad un flusso determinato portano un etichetta di flusso uguale a zero.
Un’etichetta di flusso è assegnata ad un flusso dal nodo sorgente. Una nuova etichetta di flusso deve essere scelta in maniera pseudo-casuale dal range esadecimale dei valori che vanno da 1 ad FFFFF. Lo scopo dell’allocazione casuale è dovuta al fatto di settare il campo Flow Label con un valore che sia come una firma hash a cui bisogna riferirsi per indicare un particolare flusso di dati. Tutti i pacchetti che appartengono allo stesso flusso devono essere spediti con lo stesso indirizzo di sorgente, indirizzo di destinazione, ed etichetta di flusso.
Payload Length: 16 bit

Lunghezza del payload (carico utile) Ipv6, è un campo di 16 bit che definisce in ottetti (byte) la lunghezza massima di un pacchetto. Un campo da 16 bit permette una lunghezza massima di un payload IPv6 di 64 Kbyte, nel calcolo del payload però, bisogna includere anche ogni Extension Header.
La dimensione dei pacchetti comunque per particolari esigenze (ad esempio per fare comunicare supercomputer direttamente collegati) può superare il limite dei 64 Kbyte con l’opzione “jumbogram” in cui il campo payload length viene posto a zero (0) superando così i limiti imposti .
Next Header: 8 bit

Questo campo identifica il tipo di header immediatamente seguente all’header Ipv6 a cui il pacchetto deve essere passato. Il datagramma IP incapsula sempre al suo interno uno o più header/protocolli, ed è necessario indicare al processore di destinazione il prossimo header/protocollo da trattare. È quindi un indicatore che identifica il prossimo header (Next Header) che segue immediatamente l’header di IPv6. Questo campo indica il tipo di protocol header che seguirà (Next Header). Ne sono previsti vari tipi e usa gli stessi valori del campo “protocol” di IPv4 . Sono definiti vari numeri identificativi per i diversi protocolli in Assigned Numbers una tabella tenuta dallo IANA (Internet Assigned Numbers Autority) (RFC 1700).
Hop Limit: 8 bit

Questo campo viene decrementato di una unità da ogni nodo che inoltra il pacchetto. Quando il valore di questo campo raggiunge lo zero (0) il pacchetto viene scartato. Quindi il numero massimo di nodi (hop) che un pacchetto IPv6 può attraversare prima di giungere a destinazione è di 255.
Source Address: 128 bit

Indirizzo IP di sorgente del pacchetto.
Destination Address: 128 bit

indirizzo IP di destinazione del pacchetto.
Il datagramma IPv6 si presenta in questa maniera.

Continua a leggere VPN ovvero Reti Private Virtuali: Tecnologia IPsec v3 – 5a parte

Articoli correlati

Noleggia una Tesla per il tuo evento ICT!

Categorie