Version PDF - Herve Schauer Consultants
Transcription
Version PDF - Herve Schauer Consultants
HERVÉ SCHAUER CONSULTANTS Cabinet de Consultants en Sécurité Informatique depuis 1989 Spécialisé sur Unix, Windows, TCP/IP et Internet Solutions Linux 2004 SSLTunnel : Un VPN toutterrain Alain Thivillon <[email protected]> SSLTunnel – Buts ✗ Problème générique : monter un tunnel IP depuis n'importe où : ✗ Derrière de la NAT ✗ ✗ Derrière un firewall n'autorisant que quelques ports ✗ ✗ ✗ PPTP, Tunnels sur UDP impossibles Derrière un relais HTTP ✗ ✗ IPSEC difficile Vérification du contenu non SSL, vérification de l'établissement d'une session SSL OpenSource Solutions partielles : ✗ ✗ ✗ 2 / 14 tunnels PPP sur SSH : le contrôle de contenu peut empêcher la connexion VTun : utilise UDP, cryptographie critiquable OpenVPN : peut utiliser TCP, mais pas de passage proxy Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite SSLTunnel – Principes ✗ Utilisation d'une session SSL/TLS sur TCP pour encapsuler PPP ✗ ✗ ✗ Authentification en utilisant des certificats clients X509 ✗ ✗ ✗ Implémentation en utilisant les librairies OpenSSL : peu de code de cryptographie à réécrire. Utilisation de PPP : criticable mais pas besoin de réécrire une couche de négociation IP, possibilité de passer d'autres protocoles. Plus sûr qu'un login/mot de passe Authentification mutuelle : le client vérifie le certificat du serveur : pas de risque d'attaque Man in The Middle. Passage à travers les proxies HTTP ✗ ✗ 3 / 14 Utilisation du verbe CONNECT pour faire un tunnel TCP vers le serveur sur le port 443 Authentification en Proxy-Auth ou NTLM-Auth (MS-ISA server) Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite SSLTunnel – Serveur ✗ Un démon serveur ✗ ✗ ✗ ✗ Écoute sur plusieurs ports/adresses Utilisation optionnelle de libwrap (tcpwrapper) fork() à chaque nouvelle connexion en comptant le nombre de clients simultanés Vérification du certificat envoyé par le client : ✗ ✗ ✗ ✗ ✗ ✗ ✗ 4 / 14 Validé par l'autorité Recherche du Subject dans un fichier plat Vérification de l'empreinte Changement d'identité Vérification que le client n'est pas déjà connecté (un fichier verrou par empreinte) Envoi d'une bannière, attente de la réponse du client afin de choisir le niveau de protocole Lancement de pppd avec les paramètres donnés par les données utilisateur Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite SSLTunnel – Client ✗ Client ligne de commande ✗ Lecture du fichier de paramètres et des éventuelles options. ✗ Récupération des clés et certificats (éventuellement passphrase). ✗ Connexion au serveur ou au proxy. ✗ Envoi de la bannière. ✗ Lancement de pppd. ✗ ✗ Si la connexion se coupe (erreur SSL, sortie pppd), éventuellement attente de 10s puis relance de la connexion. Utilisation de pppd : 5 / 14 ✗ Remplir /etc/ppp/options, /etc/ppp/peers/ ✗ /etc/ppp/ip-up pour la mise en place de routes, règles de filtrage, ... ✗ /etc/ppp/ip-down nettoyage quand l'interface tombe. Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite Configuration Serveur ✗ /usr/local/etc/ssltunnel/tunnel.conf ✗ ✗ ✗ Fichier Ascii plat Définit les chemins d'accès aux clés et certificats, les fichiers journaux, les adresses d'écoute, le nombre maximal de clients /usr/local/etc/ssltunnel/users user /C=FR/ST=75/L=Paris/O=Alain Thivillon/CN=AlainThivillon/[email protected] fingerprint 39:E5:86:E3:84:DC:5F:86:96:20:77:33:A7:81:AF:C9 issuer /C=FR/ST=Paris/L=Paris/O=Rominet Networks Inc./CN=Rominet Networks/[email protected] command /usr/sbin/pppd args 192.168.230.1:192.168.230.6 nodefaultroute nodetach args lcp-echo-failure 10 lcp-echo-interval 10 proxyarp uid 1000 uid 68 ✗ Les processus changent de nom : 61285 56374 56375 6 / 14 ?? ?? ?? Is S S 0:02.78 pppserver: accepting connections (pppserver) 0:01.14 pppserver: server for Alain Thivillon (pppserver) 0:00.06 /usr/sbin/pppd 192.168.230.1:192.168.230.6 nodefaultroute lcp-echo-i... Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite Configuration Client ✗ Fichier texte à plat ($HOME/.ssltunnelrc par défaut) cacertfile certfile keyfile remotehost proxy proxyport proxypass proxyuser port ipparam useproxy ✗ /home/at/certs/ca-cert.pem /home/at/certs/mycert.pem /home/at/certs/mykey.pem roadrunner.dyn.rominet.net 192.168.10.1 8080 secret rominet 443 road 1 /etc/ppp/ip-up: mise en place des routes if [ $6 = 'road' ]; then /sbin/route add -net 192.168.230.0/24 -iface $1 else if [ $6 = 'wifi' ]; then /sbin/route add default -iface $1 fi ✗ Lancement par la ligne de commande : pppclient [-h finalhost] [-p finalport] [-r proxyname] [-u proxyport] [-a user-proxy:pass-proxy] [-c 0|1] [-d 0|1] [-l logfile] [ configfile] 7 / 14 Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite Interface graphique client ✗ gpppclient : Écrit en perl-GTK ✗ Aide à la configuration ✗ Lancement et contrôle 8 / 14 Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite Journaux ✗ Journalisation des sessions dans un format wtmp # pppwho Alain Thivillon 56374 carbone.hsc.fr # pppwho -an | tail -4 khany.hsc.fr 89921 taz.hsc.fr 90148 silver.hsc.fr 90272 groar.hsc.fr 90510 ✗ 80.13.122.zz 81.67.214.ttt 62.4.rr.vv 62.212.zz.aa 10/28 10:52 10/28 10/28 10/28 10/28 04:45 08:22 (03:37) 06:34 08:00 (01:25) 07:37 08:14 (00:36) 09:33 Journalisation Syslog Oct 28 09:49:46 roadrunner pppserver[55988]: Accepting connection from 192.70.106.49 Oct 28 09:49:46 roadrunner pppserver[55988]: Client certificate : /C=FR/ST=75/L=Paris/O=Alain Thivillon/CN=Alain Thivillon/[email protected] Oct 28 09:49:46 roadrunner pppserver[55988]: Certificate fingerprint: 39:E5:86:E3:84:DC:5F:86:96:20:77:33:A7:81:AF:C9 Oct 28 09:49:46 roadrunner pppserver[55988]: Issuer : /C=FR/ST=Paris/L=Paris/O=Rominet Networks Inc./CN=Rominet Networks/[email protected] Oct 28 09:49:46 roadrunner pppserver[55988]: setgid to 68 Oct 28 09:49:46 roadrunner pppserver[55988]: setuid to 1000 Oct 28 09:49:46 roadrunner pppserver[55988]: Client version : 1.13 Oct 28 09:49:46 roadrunner pppserver[55988]: Client Protocol version : 1.0 ... Oct 28 10:49:02 roadrunner pppserver[55988]: terminating normally Oct 28 10:49:02 roadrunner pppserver[55988]: In Bytes: 176418, Out Bytes: 1044338 Oct 28 10:49:02 roadrunner pppserver[55988]: killing child Oct 28 10:49:09 roadrunner pppserver[55988]: Child has exited 9 / 14 Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite Utilisation avec un proxy ✗ Utilisation de la méthode CONNECT ✗ ✗ ✗ Authentification Basic: ✗ ✗ ✗ Le serveur est sur le port 443, on fait du SSL : le relais ne peut pas distinguer le tunnel d'un client Web. À moins d'intercepter la session et de présenter un faux certificat : cela sera détecté par le client. Passage de "user:password" encodé en Base64 dans l'entête ProxyAuthorization Pas de sécurité Authentification NTLM: ✗ ✗ 10 / 14 Négociation en trois étapes avec passage d'un challenge que le client chiffre avec le hash LanMan et/ou MD4 de son mot de passe Permet de passer à travers un relais ISA Server Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite Avantages/Inconvénients MAL Bien ✗ Tout terrain : a atteint son but ✗ Simple à déployer ✗ ✗ ✗ ✗ Portable sur tout Unix (actuellement Linux, FreeBSD, Solaris, MacOSX) Code relativement petit, maintenable S'appuie sur une crypto sûre et auditée (OpenSSL et TLSv1) Licence de type BSD 11 / 14 ✗ ✗ ✗ ✗ ✗ IP sur TCP : aucun paquet perdu : problèmes de congestion Pas de compression Nécessité de créer des certificats X509 Nécessité de configurer PPP au préalable Pas de gestion de la couche réseau par le programme Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite DEMO ! (et là, c' est le drame ...) TCP/443 TUN0 192.70.106.212 GPRS 192.168.1.254 10.0.20.201 192.70.106.104 PPP0 192.70.106.211 12 / 14 Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite À faire ✗ ✗ ✗ ✗ ✗ ✗ Client Windows ! ✗ Nécessiter d'écrire un driver Ndiswan ... ✗ PPP sur SSH existe déjà, à voir (http://www.kmc.gr.jp/proj/vpn/). ✗ Recherche geeks du développement Windows Utilisateurs dans un annuaire LDAP (Intégration « PKI ») ✗ Problème pour les rechercher (sur le Subject ? Email ? ...) ✗ Récupération des paramètres PPP Intégrer le PFS (Perfect Forward Secrecy) Achever les paquetages en cours (port FreeBSD depuis Novembre) : ✗ Linux Debian ✗ RPM Créer dynamiquement /etc/ppp/peers, /etc/ppp/ip-up Filtrage dynamique 13 / 14 Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite URLs ✗ Téléchargement : http://www.hsc.fr/ressources/outils/ssltunnel/ ✗ Site du projet : http://sourceforge.net/projects/ssltunnel/ ✗ ✗ ✗ ✗ Liste de diffusion : [email protected] ( http://lists.sourceforge.net/lists/listinfo/ssltunnel-users) Cours PKI HSC : http://www.hsc.fr/ressources/cours/pki/index.html.fr OpenSSL : http://www.openssl.org/ How-To CA : http://www.post1.com/home/ngps/m2/howto.ca.html , http://www.grennan.com/CA-HOWTO.html 14 / 14 Copyright Hervé Schauer Consultants 20002003 Reproduction Interdite