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 tout­terrain
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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ Reproduction Interdite
Interface graphique client
✗
gpppclient : Écrit en perl-GTK
✗
Aide à la configuration
✗
Lancement et contrôle
8 / 14
Copyright Hervé Schauer Consultants 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ 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 2000­2003 ­ Reproduction Interdite