MISE EN OEUVRE DU DÆMON SCOUT6 - La Recherche

Transcription

MISE EN OEUVRE DU DÆMON SCOUT6 - La Recherche
MISE EN OEUVRE DU DÆMON SCOUT6
Antoine Varet
Présentation de ce programme
Le dæmon SCOUT6 permet de rechercher la possibilité d'établir un canal sécurisé. Cette version
fonctionne avec IPv6 sur des PC Linux.
Son exécution ainsi que (presque) toutes les commandes présentées ici nécessitent les privilèges
maximaux sur un système Linux ; cette implémentation de SCOUT6 a été conçue et testée avec
Debian et des machines virtuelles.
Les protocoles SCOUT et SCOUT6 ont été présentés à la conférence SAR SSI 2012 à Cabourg
(France) dans un article scientifique intitulé « Security capability discovery protocol over unsecured
IP-based topologies ».
Installation et configuration du dæmon
Afin de le mettre en œuvre, il est nécessaire de disposer d'un système Linux, du programme binaire
scout6 et du script scout6d. De plus, ceux-ci nécessitent l'installation de la libipq (installée avec le
paquet Debian iptables-dev).
(root)# aptitude install iptables­dev
Le fichier de configuration de SCOUT6 se nomme /etc/scout6.conf . Bien que facultatif, il peut
être présent et ainsi surcharger les variables d'environnement et les valeurs par défaut que SCOUT6
utilise pour sa configuration.
Dans le cas d'un routeur interceptant des paquets non sécurisés pour leur imposer de transiter via un
tunnel sécurisé, il peut être nécessaire de spécifier quelles adresses ou plages d'adresses doivent
être sécurisées. Cela s'effectue via le fichier intercept_ra_for_addresses.conf, à raison d'une ligne
par adresse ou couple d'adresse. Par défaut, le dæmon tentera de sécuriser tout paquet transitant
(::/0).
Environnement de fonctionnement
Le dæmon peut fonctionner de différentes manières. Prenons le réseau minimal suivant :
Ha – Ra – Rb – Hb
avec la configuration IPv6 suivante :
Ha [2001::1/64 on eth1]
||
[2001::2/64 on eth1]
Ra [2002::2/64 on eth2]
||
[2002::3/64 on eth2]
Rb [2003::3/64 on eth1]
||
[2003::4/64 on eth1]
Hb
Mise en œuvre du dæmon SCOUT6
1/4
Ce réseau permet de mettre en évidence les 4 modes de résultats découverts par SCOUT :
• Mode Host-Host (Ha == Hb)
• Mode Router-Host (Ha – Ra == Hb)
• Mode Host-Router (Ha == Rb – Hb)
• Mode Router-Router (Ha – Ra == Rb – Hb)
Premier démarrage
Pour la suite, nous supposerons que nous avons le réseau minimal et que le dæmon SCOUT est
installé sur Ha et sur Hb (mode Host-host).
Après s'être assuré de la présence des fichiers ./scout6, ./scout6d,
./intercept_ra_for_addresses.conf et /etc/scout6.conf, il faut vérifier que le
programme scout6 peut s'exécuter sur la machine. Pour cela, il suffit de le lancer à l'aide de
« ./scout6 ». Un message d'erreur sur la librairie libipq ou sur une histoire d'exécutable 32bit ou
64bit signifie qu'il faut probablement recompiler scout6 (voir la section dédiée plus bas dans ce
document). Sinon, let's go...
Commandes pour configurer les hôtes
Sur Ha :
(user)@ha$ su
# Ajouter l'IPv6 2001::1 à l'interface eth1 qui est liée à Ra
(root)@ha# ifconfig eth1 add 2001::1/64 up
# Puis ajouter une route pour les paquets passant par Ra
(root)@ha# route ­6 add 2000::/8 gw 2001::2 Sur le routeur Ra :
(root)@ra# ifconfig eth1 add 2001::2/64 up
(root)@ra# ifconfig eth2 add 2002::2/64 up
# Envoyer par défaut à Rb
(root)@ra# route ­6 add 2000::/8 gw 2002::3
# Activer le routage IPv6
(root)@ra# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
De même sur Rb :
(root)@rb# ifconfig eth1 add 2003::3/64 up
(root)@rb# ifconfig eth2 add 2002::3/64 up
(root)@rb# route ­6 add 2000::/8 gw 2002::2
(root)@rb# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Et enfin sur Hb :
(root)@hb# ifconfig eth1 add 2003::4/64 up
(root)@hb# route ­6 add 2000::/8 gw 2003::3
A noter que dès à présent, Ha et Hb doivent pouvoir communiquer sans sécurité :
(user)@ha$ ping6 2003::4 (...ok)
On peut désormais lancer SCOUT6 sur ha et hb :
(root)# ./scout6d start eth1
Mise en œuvre du dæmon SCOUT6
2/4
A partir de ce moment, les paquets ICMPv6 émis par ping6 et les paquets UDPv6 seront interceptés
et déclencheront la découverte de tunnel puis l'invocation de celui-ci. A noter qu'il est intéressant de
se placer sur l'un des routeurs (par exemple) et d'observer le comportement du réseau à l'aide d'un
analyseur réseau tel que Wireshark.
L'état des dæmons peut être demandé à tout moment à l'aide de
(root)# ./scout6d status
Les dæmons peuvent être arrêtés à tout moment à l'aide de
(root)# ./scout6d stop
La commande suivante de démarrage permet d'être beaucoup plus verbeux :
(root)# VERBOSE="scout6d_parle" cmd_line_plus="­vvv ­f scout6.conf" ./scout6d start eth1
La variable VERBOSE demande au script de démarrage de détailler les étapes, le « ­vvv » rend
bavard le programme scout6 en le faisant passer du niveau d'affichage 0 (quiet) à 3 (info) (le
maximum est le niveau 4 debug avec « ­vvvv ») tandis que le « ­f scout6.conf » indique
d'utiliser le fichier ./scout6.conf à la place du fichier par défaut /etc/scout6.conf.
D'autres expériences peuvent être effectuées en arrêtant l'un des dæmons, en exécutant SCOUT6
sur Ra, Rb ou les deux routeurs et en l'arrêtant sur Ha, Hb ou les deux hôtes d'extrémité...
Toutefois, le script se contente pour l'instant d' « invoquer » la commande echo, affichant les
adresses IPv6 en jeu, mais aucun tunnel n'est réellement créé bien que la découverte aboutisse
correctement.
Mise en place des tunnels
En raison des nombreuses variantes des programmes permettant l'établissement des tunnels, il faut
utiliser ou fabriquer un script adéquat. Dans ce readme et à des fins de démonstration, nous avons
choisi d'utiliser des tunnels SSH.
Il est possible de créer un tunnel SSH de niveau 3 (IPv6) depuis Ra entre Ra et Rb pour sécuriser les
flux de Ha vers Hb ainsi que les flux retours à l'aide de la commande
(root)@ra# # Ha – Ra == Rb – Hb
(root)@ra# sh start_ssh_tunnel.sh @ha @ra @rb @hb ».
Ce script nécessite que la commande « sh prepare_for_ssh_tunnels.sh » ait été exécutée
à l'installation sur les nœuds d'extrémités des tunnels potentiels : il complète la configuration stockée
dans /etc/ssh/ssh_config et /etc/ssh/sshd_config.
La commande suivante permet de créer un tunnel entre Ha et Hb et de l'utiliser pour les flux entre
ces deux nœuds :
(root)@ha# # Ha == Hb ( Ha ==(across Ra)==(across Rb)==Hb )
(root)@ha# sh start_ssh_tunnel.sh @ha @ha @hb @hb
De plus, à défaut de configuration adéquate du client et du serveur SSH (ssh et sshd),
« start_ssh_tunnel.sh » demande à chaque action les mots de passe et éventuellement
d'accepter le certificat du nœud distant ; cette interactivité pose problème pour l'automatisation.
Le script start_tunnel_ssh.sh peut être appelé automatiquement par le dæmon scout6, via le
script invoke_ssh_tunnel.sh, en complétant le fichier de configuration à l'aide des lignes :
Mise en œuvre du dæmon SCOUT6
3/4
BIT31_ENABLED=1
BIT31_COMMAND=sh invoke_ssh_tunnel.sh
Cependant, des problèmes peuvent survenir si la configuration des nœuds ne permet pas un
établissement de tunnels non interactif : tant que le tunnel n'est pas établi, la recherche redémarre et
invoque donc à l'infini le script de création du tunnel.
Compilation de SCOUT6
Si le binaire ne peut pas s'exécuter sur le système (processeur incompatible, version du noyau
incompatible avec la 2.6.37...), il peut être nécessaire de le reconstruire à partir de son fichier source
scout6.c. Cela s'effectue à l'aide de l'utilitaire make et du compilateur gcc (par exemple), présents de
base sur de nombreux systèmes :
(any_user)$ make
Kifékoi, ou à quoi servent tous les fichiers ?
debugguer_scout6.c
Programme de débogage pour émettre des Doq, des
Raq et des DOR
intercept_ra_for_addresses.conf Liste d'adresses d'interception des Raq
Makefile
Script pour générer le programme (« make »)
invoke_ssh_tunnel.sh
Script pour exécuter start_ssh_tunnel sans attendre sa
terminaison
prepare_ssh_tunnel.sh
Script pour permettre à start_ssh_tunnel de fonctionner
readme.odt
Ce fichier d'explications
scout6
Code binaire du cœur du dæmon scout6
scout6.c
Code source du cœur du dæmon scout6
scout6.conf
Fichier de configuration (1 ligne/variable)
scout6d
Script de démarrage/arrêt du dæmon scout6, utilisable
comme un service (ou presque)
start_ssh_tunnel.sh
Script permettant d'établir un tunnel avec SSH
Autre note à l'attention de développeurs...
•
•
•
•
•
•
Le fichier scout6.c a été adapté pour être parsé avec doxygen qui rend les 1600 lignes du
code source plus accessible en générant une documentation (html, pdf...) conviviale.
debugguer_scout6.c permet d'envoyer des paquets Doq, Raq et Dor sur le réseau.
En mode router-router, on a {Ha=inspiring node, Ra=initiator node, Rb=responder node,
Hb=targeted node}
En mode host-host, on a {Ha=inspiring node=initiator node, Hb=responder node=targeted
node}
Les commandes invoquées sont suivies de 4 paramètres qui sont respectivement les @IPv6
inspiring, initiator, responder puis targeted.
Merci de me contacter pour m'indiquer les bugs éventuels, les suggestions d'amélioration, les
bouts de code utiles, quel(s) mode(s) du dæmon sont utilisés...
[email protected]
Mise en œuvre du dæmon SCOUT6
4/4