Négociation de La Fonction NAT-T de IPSec
Négociation de La Fonction NAT-T de IPSec
Négociation de La Fonction NAT-T de IPSec
Introduction
Ce document est divisé en deux parties. La première partie décrit les besoins de la
phase 1 IKE pour le support du NAT-Traversal (NAT-T). Un des besoins consiste à
détecter si l’autre pair IPSec supporte le NAT-T, et s’il y a des équipements NAT
entre les deux pairs.
La deuxième partie décrit la négociation de l’encapsulation des paquets IPSec dans
des paquets UDP dans la phase Quick Mode du protocole IKE. Elle décrit de même
comment transmettre les adresses IP source et destination d’origine, si l’autre pair en
a besoin. Les adresses IP source et destination peuvent être utilisées dans le mode
transport pour la mise à jour incrémentale du checksum TCP/IP, afin de le faire
correspondre après la transformation NAT. Le NAT ne peut pas le faire, car le
checksum TCP/IP se trouve à l’intérieur des paquets UDP contenant les paquets
IPSec.
Le document draft-ietf-ipsec-udp-encaps-06.txt décrit les détails de l’encapsulation
UDP ; le document draft-ietf-ipsec-nat-reqts-04.txt donne des informations et les
motifs généraux sur le NAT-Traversal.
Par exemple, quand le serveur envoie un paquet ayant 500 comme port source et
destination, le NAT le modifie pour obtenir un paquets avec 12312 comme port
source et 500 comme port de destination. L’autre pair doit être capable de traiter ce
type de paquets (avec ports source différent de 500), et il doit répondre avec un
paquets avec 500 comme ports source et 12312 comme port de destination. C’est le
NAT qui va ensuite translater le message pour avoir un paquets avec 500 comme port
source et destination.
Quand les deux pairs reçoivent le Vendor ID, la détection du NAT peut continuer.
Pour détecter la présence de NAT, on doit détecter les changements d' adresses IP
pendant le cheminement des paquets. Ceci est fait avec l' envoi du hash des IP et des
ports source et destination entre les pairs. Il n' y pas de NAT quand les deux
correspondants obtiennent le même résultat que l' hachage. Si ce n' est pas le cas,
quelqu'un a modifié l'IP ou les ports et on doit utiliser le NAT-T pour faire passer
IPSec.
Si l'
instigateur de la connexion ne connaît pas son IP (dans le cas, par exemple, de
plusieurs interfaces réseaux et d'
une implémentation ne connaissant pas laquelle est
Les hachages sont envoyés comme une série de payloads NAT-D. Chaque payload
contient seulement un hachage, donc dans le cas d'hachages multiples, plusieurs
payloads sont envoyés.
Ces messages sont inclus dans le troisième et quatrième message du main mode et
aggressive mode.
dans le deuxième et troisième message de l'
Le format d'
un paquet NAT-D est le suivant:
! "
L'
hachage est calculé comme de suite avec l'
algorithme négocié:
#$ # ) #$ #* +, - . +, . - . & /
L'adresse IP est codée avec 4 octets pour l' IPv4 et avec 16 octets pour l' IPv6. Les
ports sont codés avec 2 octets.
Le premier payload NAT-D contient l' IP et le port distants (IP et port de destination
pour les paquets UDP). Lest autres payloads NAT-D contiennent toutes les IP et ports
locales possibles (IP et ports de sources pour les paquets UDP).
S'il n'
existe aucun NAT entre les pairs, le premier payload NAT-D doit correspondre
à au moins un des paquets NAT-D locaux envoyés. Cette règle est valable pour les
deux correspondants. Si le premier check n' aboutisse pas, alors il existe du NAT
dynamique et il faut envoyer un keepalive en premier, comme décrit dans le document
draft-ietf-ipsec-udp-encaps-06.txt.
CKY-I et CKY-R sont les cookies de l' instigateur et de son pair. Il sont utilisés pour
éviter les attaques d'
usurpation d'
adresses IP.
# 1 $1 -
# 1 $1 -
# 1 + 1 01 $2 1 $2
# 1 + 1 &1 $2 1 $2
Un exemple de la phase 1 de IKE utilisant le NAT-T avec l' aggressive mode est
donné dans le schéma suivant (authentification par signatures):
# 1 $1 + 1 01 - 001
-
# 1 $1 + 1 &1 - 0&1 21 1
- 1 $2 1 $2 1 -34
# 561 21 1 $2 1
$2 1 -34-
Le signe '
#'identifie les paquets envoyés vers le port modifié si le NAT est détecté.
Le cas le plus commun est celui de l'initiateur derrière le NAT. Il doit changer son
port source à 4500, aussitôt le NAT détecté, pour éviter les problèmes liés aux NAT
intelligents.
Une fois le changement de port effectué, un paquet arrivant sur le port 500 est
considéré comme vieux. Si c' est un paquet d' information et la politique locale le
permette, il peut être utilisé. Si le paquet appartient au mode aggressive ou main il
doit être détruit.
7 * 881 88/ # 1 $1 -
7 * 881 / # 1 $1 -
7 * 881 88/ # 1 + 1 01
$2 1 $2
7 * 881 / # 1 + 1 &1
$2 1 $2
7 * 881 88/ # 561
- 001 21 -34-
7 * 881,/ # 561 - 0&1
21 1 -34
Son pair effectue le même processus et si tout se passé bien, il doit mettre à jour ces
ports IKE internes. Il doit aussi répondre à tous les paquets IKE par des paquets
UDP(4500,Y).
Voici un exemple:
7 * 881 88/ # 1 $1 + 1
01 - 001 -
7 * 881 / # 1 $1 + 1 &1 - 0&1
21 1 - 1 $2 1 $2 1 -34
7 * 881 88/ # 561 21
1 $2 1 $2 1 -34-
Un cas très répandu est celui d' un serveur derrière du NAT effectuant un translation
statique 1-1. Dans ce cas, l'
instigateur doit continuer à changer les deux port à 4500.
Le serveur utilise exactement le même algorithme vu précédemment, même si dans ce
cas, Y est égale à 4500, vu qu'aucune translation d'adresse intervienne.
Quick Mode
Une fois la phase 1 terminée, les deux pairs connaissent s' il y a de la translation
d'
adresse. Le choix d' utiliser ou pas le NAT-T est laissé au quick mode. L' usage du
NAT-T est négocié dans les payloads des SA du quick mode. Dans ce mode les deux
parties peuvent s'échanger leurs adresses IP originelles (dans le mode transport) afin
de corriger le checksum TCP/IP après la translation NAT.
7 > ('? 2?
7 > ('? 2& '( &
Ce n' est pas normal de proposer les modes tunnel ou transport standards et les
modes tunnel ou transport encapsulés (UDP). Si un NAT existe, les modes
standards ne pourront pas être utilisés. Si le NAT n' existe pas, il serait dommage
d'utiliser de la bande passante en rajoutant une encapsulation UDP. A cause de ça,
initiateur ne doit pas inclure les modes tunnel ou transport standards et les modes
l'
tunnel ou transport encapsulés dans ses proposition.
Les addresses originelles sont transmises avec les payloads NAT-OA (NAT Original
Address).
Exemple 1:
- & ?@ &
L'instigateur de la connexion est derrière un NAT et cause avec son pair qui est
disponible publiquement sans NAT. L' instigateur a l'
adresse IP Iaddr tandis que le
répondeur a l'adresse IP Raddr. Le NAT a une adresse IP publique NatPub.
Instigateur:
$2 A$0 ) - &
$2 A$& ) &
Répondeur:
$2 A$0 ) $2 ?@
$2 A$& ) &
- & ?@ ?@ &
Içi, NAT2 publique Nat2Pub pour le répondeur et renvoie tout trafic de cette adresse
au répondeur.
Instigateur:
$2 A$0 ) - &
$2 A$& ) ?@
Répondeur:
$2 A$0 ) ?@
$2 A$& ) &
Dans le cas du mode transport, les deux pairs doivent s'envoyer l'original Initiator
address et l'
original Responder address.
Pour le mode tunnel, les deux pairs ne doivent pas s'
envoyer leurs adresses d'
origine.
Les payloads NAT-OA sont envoyés dans le premier et le second paquet du quick
mode. L' initiateur doit envoyer le payload si il propose un mode de transport
(transport ou tunnel) encapsulés (UDP). Le répondeur doit envoyer le payload
uniquement si il choisit le mode UDP-Encapsulated-Transport. Par exemple, si
l'
initiateur envoie on payload NAT-OA, mais il propose le mode UDP-Encapsulated-
Transport et le mode UDP-Encapsulated-Tunnel, alors le répondeur choisit le mode
UDP-Encapsulated-Tunnel, et il n' envoie pas de payload NAT-OA en réponse.
! "
- 2 (
L'ID Type est définit dans la [RFC-2407]. Sont premises seulement des addresses
ID Type doivent être à 0.
IPv4 et IPv6. Les deux champs reserves aprs l'
# 51 #$ #* /1 $1 01 1
+ 1 - >01 - >& 1 $2
A$01 $2 A$&
# 51 #$ #* /1 $1 &1 1
+ 1 - >01 - >& 1 $2
A$01 $2 A$&
# 51 #$ #* /
Les adresses IP et les ports source des messages de notifications Initial-Contact pour
une machine derrière un NAT ne peuvent pas être utilisés pour déterminer quelle SA
devrait être effacée. Il faut utiliser l' ID payload envoyé. Par exemple quand la
notification Initial-Contact est reçue, le pair doit effacer toutes les SA associées qui
ont le même ID payload.
Les keepalives ne peuvent pas être utilisés pour cet objectif car il ne sont pas
authentifiés, mais n' importe quel paquet IKE ou ESP authentifié fera l'
affaire et on
pourra détecter si le port ou l'
IP ont changés.
Comme les adresses IP sont codes sur 32 octets, il est possible qu' un attaquant,
avec de la force brute pour trouver le bon hash, trouve la classe d' adresses
utilisé derrière le NAT. Les ports utilisés sont généralement à 500 et les
cookies peuvent être extraites des paquets. Ceci limite le calculs à 232. Si de
plus on utilise des classes privées (ce qui devrait être le cas), alors le nombre
de calculs pour trouver la bonne adresse IP descendent à 224+2*(216).
L'envoi de l' adresse IP source original dans le quick mode, révèle l' IP caché
par le NAT à l' autre pair. Dans ce cas on est déjà authentifié et l'
envoi de l'
IP
originale est requis uniquement avec le mode transport.
La mise à jour d' une SA IKE, ou des port pour l' encapsulation ESP dans de
l'
UDP, pour chaque paquet authentifié, peut causer un attaque de déni de
service si un attaquant peut écouter et changer l' ordre des paquets. Par
exemple un hacker sniffe un paquet authentifié d' une machine derrière un
NAT, modifie l' IP, le port UDP source ou destination de ce paquet, et il
l'
envoie vers le pair avant le vrai paquet arrive. Le pair qui n'
est pas derrière
un NAT mettra à jour ses IP et ports et envoiera ses paquets à une fausse
destination. Cette situation est fixé immédiatement après que l' attaquant
stoppe la modifications des paquets. Les implémentations devraient auditer
cet évènement à chaque fois qu' il survienne, car dans des cas normaux il ne
devrai pas apparaître très souvent.
Mots clés
IKE Internet Key Exchange Protocol
NAT-T Traversal Network Address Translation
NAT-D Discovery Network Address Translation
NAT-OA Original Address Network Address Translation
Quick Mode Deuxième phase du protocole IKE
SA Security Association