IPsec e TLS sono strutturati in maniera
molto diversa: TLS è un singolo protocollo descritto da un unico
RFC, ed ha una struttura lineare e relativamente semplice, IPsec
al contrario ha un'architettura molto complessa e formata da
elementi diversi (i protocolli AH, ESP e IKE34, i database SPD e
SAD) specificati in documenti diversi. Questa grande complessità
determina probabilmente varie difficoltà nell'implementazione e
nell'utilizzo di IPsec, ed è secondo alcuni (si veda [11]) una
debolezza anche dal punto di vista della sicurezza
crittografica.
Le funzionalità ``ad alto livello'' sono abbastanza simili:
sia IPsec che TLS offrono servizi di riservatezza, integrità e
autenticazione, e nessuno
dei due offre il non ripudio35. Inoltre, sono entrambi flessibili per quanto
riguarda la scelta degli algoritmi di cifratura e di hash, ma IKE di
IPsec offre diversi meccanismi di autenticazione dell'identità
dell'interlocutore mentre TLS utilizza solo i certificati. D'altra
parte TLS permette anche un'autenticazione asimmetrica
dell'identità, ovvero permette di autenticare il server senza
autenticare il client, mentre IKE di IPsec, essendo
un protocollo peer-to-peer e non client-server, non fornisce
questa possibilità per cui o si autenticano entrambi gli
interlocutori oppure non si autentica nessuno dei due. Descrivendo
la sequenza delle trasformazioni applicate da TLS si è visto
inoltre che è esplicitamente prevista la compressione dei dati
prima della cifratura: questa funzione non è propriamente presente
in IPsec, ma è comunque realizzabile attraverso il protocollo
IPComp [9]. Vale la pena di notare che la
sequenza delle operazioni di cifratura e autenticazione è diversa nei
due casi: in TLS prima si calcola il MAC e poi si cifra il tutto, MAC
compreso, mentre in IPsec prima si cifra e poi si aggiungono i dati di
autenticazione, che vengono quindi calcolati sul messaggio cifrato e non su
quello in chiaro. Quello di TLS è in effetti l'ordine usuale in cui vengono
applicate autenticazione e cifratura; la ragione per cui IPsec compie queste
operazioni in ordine inverso è legata alle prestazioni: in questo modo infatti
un pacchetto con un'autenticazione non valida viene scartato subito,
senza doverlo prima decifrare. Quest'approccio è anche più robusto
dal punto di vista degli attacchi di denial of service,
anche se è controverso dal punto di vista crittografico (si veda ancora
[11]).
Le differenze tra IPsec e TLS sono per la maggior parte una
diretta conseguenza della loro diversa posizione all'interno dello
stack TCP/IP. Innanzitutto bisogna considerare il diverso
``punto terminale'' della comunicazione sicura: TLS offre un
canale sicuro tra due applicazioni, poiché opera al livello dei
socket, mentre i terminali della comunicazione IPsec sono due
macchine. Questo non significa che le security association di
IPsec siano associate esclusivamente alle macchine: possono avere
granularità più o meno fine, e in particolare possono essere
associate ai socket e quindi alle applicazioni. Tuttavia
l'elaborazione IPsec avviene comunque a livello IP, e quindi in un
ambito relativo all'host e non all'applicazione: quando il
traffico è arrivato nell'host di destinazione, IPsec ha finito il
suo compito e quindi i dati non sono più protetti. Il discorso è
analogo per quanto riguarda l'entità che viene autenticata: con TLS
è naturale che sia l'applicazione o l'utente, mentre questo è un po'
più complicato (per quanto possibile) con IPsec, attualmente più
adatto ad autenticare la macchina.
Per quanto riguarda i protocolli di livello superiore, IPsec
protegge tutto ciò che sta sopra IP, quindi ad esempio TCP, UDP,
ICMP. TLS invece si deve appoggiare su un protocollo di trasporto
affidabile, e quindi può essere utilizzato solo per proteggere
traffico TCP; questa è una limitazione importante perché esclude
ad esempio molte applicazioni real-time che viaggiano su UDP.
TLS è adatto a proteggere la comunicazione tra due applicazioni,
mentre IPsec può facilmente rendere sicuro tutto il traffico tra
determinati host, o tra intere sottoreti.
IPsec cifra tutto ciò che segue l'header IP, e quindi anche
l'header TCP, e questo può prevenire alcuni attacchi a basso
livello (attacchi al TCP) o alcune analisi del traffico (in quanto
non sono visibili dati come i numeri di sequenza, o le porte sorgente e
destinazione). D'altre parte però, come si vedrà nel prossimo
paragrafo, questo fatto può comportare anche alcuni problemi.
Un'altra caratteristica di IPsec utile contro gli attacchi a basso
livello è quella di proteggere i messaggi ICMP.
Riguardo ai numeri di sequenza, un semplice attacco a TLS è
descritto in [12], ed è una conseguenza del fatto che questo
opera al di sopra di TCP, il quale quindi non partecipa alle
funzioni di sicurezza e non è al corrente delle operazioni
crittografiche. Se un intruso inserisce nella comunicazione un
pacchetto con un numero di sequenza valido, in ricezione TCP non
si accorgerà di nulla per cui invierà il riscontro e passerà i
dati a TLS. TLS si accorgerà che i dati non sono validi ma non
potrà comunicarlo a TCP, il quale scarterà poi il pacchetto vero
considerandolo un duplicato: a questo punto sarà necessario
abbattere la connessione.
IPsec può garantire in una certa misura l'anonimato degli interlocutori rispetto
a chi intercetta il traffico cifrato: sia durante l'handshake (se si utilizza
IKE main mode) che durante il trasferimento gli unici dati
resi pubblici sono gli indirizzi IP dei security gateway,
e non c'è modo di sapere quali siano i due interlocutori. Il caso host-to-host,
se si utilizza la modalità tunnel, non è distiguibile da quello gateway-to-gateway
da parte di chi intercetti il traffico tra i due host (a meno di sapere con certezza
che un dato indirizzo IP non corrisponde ad un security gateway). TLS è invece
esclusivamente host-to-host, e dunque sono noti gli indirizzi IP dei due
interlocutori e, come poco fa ricordato, al contrario di quanto avviene con
IPsec qui sono note anche le porte, per cui sono in una certa misura noti i processi che
stanno comunicando, e non semplicemente gli host. A ciò si aggiunge il fatto che durante
l'handshake di TLS i certificati delle due parti (che rivelano molte più informazioni
sull'identità rispetto al solo indirizzo IP) viaggiano in chiaro, mentre con IKE main
mode sono cifrati.
Secondo alcuni (si veda [13]) SSL/TLS
non è sicuro ed è vulnerabile ad attacchi di tipo
man-in-the-middle (MITM), tant'è che
esistono programmi come dsniff36 ed ettercap37 che permettono
di realizzarli. Tali attacchi si fondano però su comportamenti erronei
dell'utente più che su debolezze del protocollo, in quanto si basano
sul fatto che l'utente tenda ad ignorare degli avvertimenti che l'applicazione
gli presenta, ad esempio nel caso in cui il certificato del server è firmato
da un'autorità sconosciuta oppure quando il nome dell'host non coincide con
quello indicato nel certificato. È però vero che TLS richiede una grossa
partecipazione all'applicazione (che deve espressamente richiedere una connessione
sicura, deve preoccuparsi di controllare il certificato fornito dall'interlocutore,
deve controllare che i parametri negoziati siano abbastanza forti, eccetera), la
quale in genere la richiede all'utente (sia in fase di configurazione
dell'applicazione stessa che in fase di utilizzo): questo fatto, pur non essendo un difetto
dal punto di vista della sicurezza crittografica, può comunque costituire un
punto di debolezza del protocollo.
La situazione di IPsec da questo punto di vista è in parte differente, per almeno
due ragioni. In primo luogo, IPsec opera al livello del sistema
operativo e non dell'applicazione e in genere non interagisce con l'utente, per cui nel
caso di sistemi non ``casalinghi'' (in cui cioè il sistema è configurato da un
amministratore che si presume più esperto, e non dall'utente) il problema di un'errata
configurazione e di politiche di sicurezza troppo deboli è minore. Inoltre, gli
attacchi di tipo MITM a TLS/SSL colpiscono come detto la fase di scambio delle chiavi,
la quale come già ricordato non fa propriamente parte di IPsec. Se si utilizza IKE
secondo una modalità simile all'handshake di TLS, in cui ciascuna delle
due parti invia un proprio certificato all'altra, tendenzialmente
si è vulnerabili ad attacchi dello stesso tipo (tenendo però presente l'osservazione
fatta poco fa sul rapporto con l'utente); tuttavia ci sono altre possibilità, quali
l'utilizzo di DNSSEC [14]
per reperire le chiavi pubbliche, oppure l'utilizzo di un diverso protocollo di scambio
delle chiavi che si appoggi su un sistema di autenticazione robusto (quale ad esempio
Kerberos38, il cui uso non è però ipotizzabile nel caso
generale di due host che non hanno alcun rapporto tra di loro).
In teoria si potrebbe utilizzare DNSSEC anche con TLS (anche se lo standard attuale
del protocollo non lo prevede) ed è prevista un'estensione di TLS che permette l'uso
di Kerberos [16], ma questo graverebbe comunque sull'applicazione, che dovrebbe
essere riscritta per poterlo fare e dovrebbe preoccuparsi da sé di gestire il tutto.
L'accoppiata IPsec-DNSSEC è generalmente considerata più sicura rispetto a TLS (si veda
[17] o le ``frequently asked questions'' di dsniff), ma la sua diffusione su
larga scala è ancora lontana, sia per DNSSEC in sé sia per IPsec [18],
soprattutto per problemi relativi all'attuale protocollo IKE e alla sua grande complessità.
Alcune possibili soluzioni attualmente allo studio relativamente all'instaurazione
della connessione IPsec saranno trattate al capitolo 5.
Footnotes
- ... IKE34
- Si veda la nota
4 a pagina
.
- ... ripudio35
- In entrambi i casi tutti i messaggi possono essere generati
indifferentemente da uno qualsiasi dei due interlocutori, poiché
entrambi sono in possesso delle chiavi segrete necessarie. Questo
avviene perché l'uso della crittografia a chiave pubblica, per
motivi di prestazioni, è
limitato all'autenticazione delle parti nella fase di handshake,
mentre per il resto della comunicazione si utilizzano algoritmi
simmetrici.
- ... dsniff36
- Disponibile presso
http://www.monkey.org/~dugsong/dsniff.
- ... ettercap37
- Disponibile
presso http://ettercap.sourceforge.net.
- ...Kerberos38
- A questo proposito, è attualmente allo studio il
protocollo KINK [15], che permette di instaurare security association
IPsec appoggiandosi appunto su Kerberos.
©2001 Davide Cerri