PPTP : du VPN signé MS
PPTP ou le Point-to-Point Tunneling Protocol est l'oeuvre de Microsoft(tm) reposant sur une version améliorée de PPP. Chose étonnante, les spécifications de PPTP ont été rendues disponibles et des implémentations Linux ont vu le jour.
PPTP est directement basé sur PPP (RFC 1171) et utilise l'encapsulation GRE ou Generic Routing Encapsulation (RFC 1701 et 1702). Le principe de fonctionnement est relativement commun. Il s'agit d'encapsuler du PPP dans des datagrammes IP avec GRE.
Microsoft a annoncé un protocole ouvert et reposant sur des protocoles reconnus comme PPP et GRE. Seules taches noires dans le discours : MS/CHAP et MPPE.
Le premier est une extension du protocole CHAP (Challenge/Handshake Authentication Protocol) déjà largement utilisé pour authentifier les connexions PPP entre les clients et leur ISP. Ce protocole permet de ne pas envoyer de noms d'utilisateurs et mots de passe en clair sur la liaison PPP. Nous n'entrerons pas dans le détail, mais un certain nombre de clients CHAP bogués ouvraient une faille énorme dans le protocole. Microsoft a donc décidé d'ajouter sa propre extension pour corriger le problème. On différenciera donc le protocole CHAP classique utilisant l'identifiant 5 (en hexa) du protocole MS/CHAP utilisant l'identifiant 80 (toujours en hexa).
Voici pour l'authentification. En ce qui concerne le chiffrement de la connexion, le protocole PPP n'offrait aucune facilité de ce type. MPPE ou Microsoft Point-to-Point Encryption a donc vu le jour. Celui-ci utilise un algorithme de chiffrement RC4 en 40 ou 128 bits.
Restons dans le domaine du chiffrement et plus exactement dans celui de la cryptanalyse de protocole comportant des faiblesses. La première version de MS/CHAP comportait en effet un grand nombre de faiblesses très importantes parmi celles-ci :
- Aucun système d'authentification n'existait pour les serveurs.
- L'échange de mots de passe utilisait plusieurs paquets, ce qui ouvrait la porte à des attaques basées sur le spoofing de paquets.
- MPPE utilisait les mêmes clefs dérivées de MS/CHAP quelle que soit la direction (client/serveur, serveur/client). Le chiffrement de la connexion utilisant RC4, il était possible d'analyser les flux de données et de porter une attaque XOR suivie d'une cryptanalyse sur les données.
Ces quelques points ont été corrigés avec la version 2 de MS/CHAP et ce, avec le plus grand zèle. Consultez l'URL de Counterpane en fin d'article pour les détails.
INSTALLATION
Il existe plusieurs implémentations serveur et client de PPTP sous Linux. Nous avons choisi les projets qui semblaient les plus avancés comme PopTop pour le serveur, ou encore PPTP Linux client, et une version de PPP 2.4 mise à disposition sur le Sourceforge de Compaq.
Le support de PPTP sous Linux repose surtout sur PPP, qui devra être en mesure de comprendre et de traiter les informations chiffrées et le protocole d'authentification utilisé par un serveur ou un client MS. Afin d'obtenir une version finale de PPP supportant les nouvelles fonctionnalités, il est nécessaire d'appliquer aux sources de PPP un grand nombre de patches. C'est exactement en cela que l'archive mise à disposition par Compaq est utile : elle contient tous les patches mais également un script procédant aux modifications pour vous.
Après avoir téléchargé et décompacté l'archive ppp-mppe-2.4.0-4.tar.gz, vous n'aurez plus qu'à vous placer dans le répertoire nouvellement créé et à lancer le script par :
# sh unpack.sh
Ce script décompactera les sources de ppp 2.4.0 dans un sous-répertoire ppp-2.4.0 où vous n'aurez plus qu'à faire le triplet de commandes classique (./configure && make && make install). Vous aurez alors sur votre système un démon pppd capable de répondre à vos nouveaux besoins. Mais ce n'est pas tout. En effet, ce n'est pas le démon qui gère les paquets mais le kernel.
Vous devrez donc compiler une nouvelle version du module ppp_generic.o ainsi qu'un nouveau module mppe.o. Vous devrez, bien sûr, avoir installé les headers sur le kernel pour que cette compilation fonctionne :
- placez-vous dans le répertoire ppp-mppe-2.4.0-4/ppp-2.4.0/linux-kernel
- lancez sh kmodbuild.sh
Les nouveaux modules seront placés dans ppp-mppe-2.4.0-4/ppp-2.4.0/linux-kernel/linux-kernel/kernel-modules/new- suivi du numéro de version de votre kernel. Il est possible de les installer automatiquement avec :
# kernel-modules/kmodinst.sh kernel-modules/new-numero_version_kernel
Ceci recopiera les modules dans leur emplacement adéquat, lancera un depmod et ajoutera les entrées dans /etc/modules.conf.
A partir de ce moment, votre système est capable de gérer les paquets PPP utilisés par PPTP.
INSTALLATION SERVEUR
Pour cette partie, nous avons utilisé l'implémentation appelée PopTop de PPTP pour Linux. Il s'agit d'un démon pptpd attendant les connexions PPTP.
La compilation est très simple : après avoir décompressé et désarchivé les sources stables de PopTop (archive pptpd-1.0.1.tar.gz), vous n'aurez qu'à faire ./configure && make && make install.
Le binaire pptpd se place automatiquement dans /usr/local/sbin ainsi que pptpctrl, le gestionnaire de connexion.
Il ne vous reste plus qu'à configurer l'ensemble. Voici pour /etc/ppp/options :
debug
name morgane
auth
require-chap
+chapms-v2
mppe-40
Rien d'extraordinaire ici, si ce ne sont les mentions +chapms-v2 et mppe-40 concernant respectivement le protocole d'authentification MS/CHAPv2 et le chiffrement MPPE en RC4 40 bits.
Le /etc/ppp/chap-secrets contient les informations habituelles (utilisateur, serveur, mot de passe et adresse IP) :
moimeme
morgane
passss
*
Enfin, le fichier /etc/pptpd.conf reprend la syntaxe d'un ppp/options :
speed 115200
localip 192.168.1.1
remoteip 192.168.1.2
On détermine l'adresse IP locale et distante ainsi que la vitesse. Et voilà, votre serveur est configuré et prêt à l'emploi. Il ne vous reste plus qu'à lancer le démon :
# pptpd
et, bien sûr, à surveiller attentivement le journal système...
Dans un premier temps, vous devez y trouver une mention concernant le nouveau module PPP :
kernel: PPP MPPE compression module registered
puis le démarrage du démon PPTP :
morgane pptpd[17650]: MGR: Manager process started
C'est très regrettable, mais pour être véritablement certain que le serveur fonctionne et soit effectivement compatible avec les protocoles, nous sommes obligés de le tester avec un client et donc une implémentation Microsoft. Nous n'entrerons pas dans le détail, signalons simplement qu'il est nécessaire sous Windows d'ajouter un adaptateur réseau (carte) Microsoft VPN et un accès réseau à distance utilisant cet adaptateur. Le reste de la configuration est classique, mais on n'oubliera pas de cocher les cases "compression", "demander un mot de passe crypté" et "demander le crytage des données" dans l'onglet "Type de serveur".
Dès la connexion d'un client, plusieurs informations arriveront dans le log système :
- le démarrage de ppp et GRE
morgane pptpd[17652]: CTRL: Starting call (launching pppd, opening GRE)
- l'utilisation de MS/CHAPv2 (81 hex)
pppd[17653]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <auth chap 81> ...
pppd[17653]: MSCHAP-v2 peer authentication succeeded for moimeme
- et l'utilisation de MPPE
pppd[17653]: MPPE 40 bit, non-stateless compression enabled
Côté Windows, on pourra vérifier dans le détail de la fenêtre "Etat" que la connexion est chiffrée et utilise une "Authentification mutuelle de protocole de contrôle Microsoft" (dixit la fenêtre à l'écran :).
Si vous désirez mettre en oeuvre un client PPTP sous Linux, il vous faudra également disposer d'une version modifiée de pppd. Ensuite, vous n'aurez qu'à installer le client PPTP de C. Scott Ananian. Nous n'avons pas effectué de tests clients sous Linux, mais la documentation et un script de configuration (interface à menus) semble permettre une configuration simple et rapide.
PPTP vous permettra d'interopérer avec des systèmes propriétaires et de créer un VPN multi plate-forme. Attention cependant, nous vous conseillons de n'utiliser ce protocole que dans le cas où aucune autre alternative n'est possible. PPTP est utilisé par Win95/98 et NT, mais bien que Microsoft ait affirmé que PPTP n'était pas un protocole propriétaire, force est de constater que les deux protocoles (chiffrement et authentification) le sont. L'utilisation de PPTP ne s'est donc pas généralisée et Windows 2000 n'est même plus compatible PPTP. Il utilise, à la place, L2TP, qui est un protocole de l'IETF, ouvert, et dont des implémentations sont également disponibles sous Linux en GPL.
Liens
Le serveur PopTop
http://poptop.lineo.com/
Un client PPTP Linux
http://www.scooter.cx/alpha/pptp.html
http://www.cag.lcs.mit.edu/~cananian/Projects/PPTP/
PPP avec MPPE et MS/CHAP
http://linuxalpha.compaq.com/sourceforge/project/filelist.php?group_id=8
Crytanalyse de PPTP
http://www.counterpane.com/pptpv2-paper-fr.html