Opportunistic encryption

L'opportunistic encryption (ou appelé OE) est une fonctionnalité non RFC ajoutée par les développeurs de freeswan sur le protocole IPSEC. Il a pour intérêt de pouvoir négocier avec n'importe quel serveur (connu ou non) acceptant l'OE la création d'un tunnel ipsec temporaire entre une machine et l'autre.

\includegraphics[width=100mm]{images/vpn_OE.eps}

Pour cela, il utilise les propriétés des DNS pour pouvoir authentifier la machine distante.
Sans rentrer dans les arcanes des DNS, il va faire une double vérification en se basant sur les champs de commentaires de DNS (champs TXT).
Lorsqu'une machine se connecte à une serveur ipsec gérant l'OE, il va faire deux résolutions DNS :

Ainsi, lors du processus de connexion, l'ipsec va vérifier la présence de ces deux champs. Et ceux, des deux cotés de la connexion.

Il est possible de tester l'existence de ces deux champs à la main (ici avec le programme host).
# host -t TXT machine.ecranbleu.org
machine.ecranbleu.org  TXT     "X-IPsec-Server(10)=81.255.82.6"
 " AQNnycIot0WaNFL6LHInCoWnLz72qHb6Cvpw7Za3oWkWO5uksyKn2EN8Ckw
6N/bX2Opbz53h+PjFBUcyjO65UzamUqbOdiJemE0RZq2Jv1fmcAOTw+8oKoq6N
a0pMD3Nl9MP0bhrW5KnExTZ8IBAWIGF7yqlFaSXW6rsCYmavkU+kHFo7NsEa0W
oHUwdzEscyapV0WR0Apvqu4t8AB3pgkTg5/Xpo2qD64QQybjkUFx7QKYLg7QX1
WcnwAgHW2" "EyEz+Z9tAwoamhAG4Ckunbwm3ot8mhu4EFdukrG+mXDOVPXiZn
w3zmvWYDiJFdqcfl6oy8cbTmOao2UDoOGkjgzk+SE7L1EAod    ipsec auto
 --up net-to-netlhBU/z4bidc+y3xxcVs5NaCKOTXUVBw/qirOHnmCC+FYYg
bwS7qobaL1XOb+w7N2ipgba/f6NFmxC+WHuTbepYv7+4iafajeizDQEeEYSZVD
7qFqe9H0HeY5jF+x+gKFKM/cgrMYEoBJQb3s2f4qWOnf6s1Kv" "p1fCER+qD0U
Af4JZEbBAvNMWcdK6ll3HkvwtfVlSaEW8Bs="

# host -t TXT 6.82.255.81.in-addr.arpa.
6.82.255.81.in-addr.arpa        CNAME   6.0-16.82.255.81.in-addr.arpa
6.0-16.82.255.81.in-addr.arpa   TXT     "X-IPsec-Server(10)=81.255.82.6"
 " AQNnycIot0WaNFL6LHInCoWnLz72qHb6Cvpw7Za3oWkWO5uksyKn2EN8Ckw6N/bX2Opb
z53h+PjFBUcyjO65UzamUqbOdiJemE0RZq2Jv1fmcAOTw+8oKoq6Na0pMD3Nl9MP0bhrW5K
nExTZ8IBAWIGF7yqlFaSXW6rsCYmavkU+kHFo7NsEa0WoHUwdzEscyapV0WR0Apvqu4t8AB
3pgkTg5/Xpo2qD64QQybjkUFx7QKYLg7QX1WcnwAgHW2" "EyEz+Z9tAwoamhAG4Ckunbwm
3ot8mhu4EFdukrG+mXDOVPXiZnw3zmvWYDiJFdqcfl6oy8cbTmOao2UDoOGkjgzk+SE7L1E
AodlhBU/z4bidc+y3xxcVs5NaCKOTXUVBw/qirOHnmCC+FYYgbwS7qobaL1XOb+w7N2ipgb
a/f6NFmxC+WHuTbepYv7+4iafajeizDQEeEYSZVD7qFqe9H0HeY5jF+x+gKFKM/cgrMYEoB
JQb3s2f4qWOnf6s1Kv" "p1fCER+qD0UAf4JZEbBAvNMWcdK6ll3HkvwtfVlSaEW8Bs="

Pour rajouter ces champs, il faut générer la clé public. Il existe un programme inclus dans openswan qui permet de générer l'enregistrement DNS au format utilisé par BIND (principal serveur DNS sur le net) :

# ipsec showhostkey --txt @`hostname --fqdn` # la partie entre entre backquote permet de récuperer le nom de la machine

Une fois le processus de vérification et d'échange des clés a été effectué, un tunnel est effectué de manière transparente entre les deux machines. Par exemple, si une machine gérant l'OE essaye de consulter un site internet héberge sur une machine supportant cette technologie, la sécurisation se ferra automatiquement.

Le projet freeswan met à disposition publique une machine de test pour vérifier que cette fonctionnalité marche de manière correcte. Ainsi, si on essaye de se connecter (quelque soit le protocole) sur la machine oetest.freeswan.org, le tunnel va être mis en place pour une certaine durée.

Le tunnel ainsi obtenu est similaire à celui que l'on a pu obtenir précédemment en dehors du fait qu'il a une durée de vie.

# ipsec eroute 
0 193.17.15.19/32 -> 81.255.82.7/32 => tun0x1002@81.255.82.7

Si on sniffe le réseau, on ne va voir que des informations chiffrées circuler, sans même d'informations quant au port de destination ou source. Voila ce que tcpdump nous retourne quand on sniffe une connexion cryptée.

Entête : 14:16:52.493098 81.255.82.7 > 193.17.15.19: 
ESP(spi=0x629ad466,seq=0x19)
Contenu du packet : E..h^U..42..Q.R.....b..f.....B..+.....-.o/|....
.]q.g[...Y.".....y..4r..P."..Kx..
Entête : 14:16:52.493199 193.17.15.19 > 81.255.82.7: 
ESP(spi=0xf9e66fad,seq=0x1b)
Contenu du packet : E..`i...@2......Q.R...o........<..^...z9Rt....
.Q..~6..Y..8..:n.G...Q,.....I...wx..

Alors que si la connexion n'avait pas été chiffré, on aurait obtenu bien plus d'informations, tel que le port source, de destination, les numéros de séquence et surtout le contenu du paquet :

Entête : 14:19:29.709798 81.255.82.7.21 > 193.17.15.19.36111: 
P 62:94(32) ack 11 win 32416 <nop,nop,timestamp 90859454 188978569>
 (DF) [tos 0x10] 
Contenu du packet : 220 ProFTPD 1.2.9 Server (Debian) [brannigan.ecranbleu.org]..              
Entête : 14:20:42.840999 193.17.15.19.36113 > 81.255.82.7.21: 
P 11:26(15) ack 94 win 5840 <nop,nop,timestamp 188985899 90866560>
 (DF)
Contenu du packet : PASS mon_pass..

Intêret de l'OE L'opportunistic encryption est très intéressante pour sécuriser les flux sur internet. Si toutes les machines utilisaient ce système, les problèmes de sécurité a l'échelle d'internet seraient sensiblement diminués étant donné que tous les flux sont automatiquement cryptés entre deux périphériques. Mais malheureusement, cette technologie est difficile à déployer pour principalement trois raisons :

D'autres méthodes de mise en place de la connexion OE sont actuellement à l'étude (en particulier un draft d'une RFC pour utiliser IKE (Internet Key Exchange) au lieu des serveurs DNS).

root 2004-05-04