Rapport: simulation d'une infrastructure d'authentication 802.1x pour le test du protocole EAP-SIM Sami TABIBEL 28 mars 2013 1
Introduction Ce document à pour objectif de détailler les étapes nécessaires pour la mise en place d'un réseau virtuel d'authentication 802.1x ; Ce réseau nous servira d'infrastructure pour l'expérimentation et le test des protocoles d'authentication 802.1x tel que EAP-PEAP, EAP-MD5, EAP-SIM. Nous nous intéresserons particulièrement à ce dernier, cependant pour un premier temps nous allons illustré le fonctionnement de cette infrastructure par une authentication EAP-PEAP. 1 La structure visée Comme nous l'avons vu dans les chapitres précédents l'authentication 802.1x a un fonctionnement tripartite, dont les acteurs sont le supplicant, l'authenticator (Point d'accès) et le serveur d'authentication (Radius). La gure suivante illustre la structure que nous avons réalisé. Fig. 1 Infrastructure pour l'authentication 802.1x. 2 Pré-requis La structure sus-décrite a été réalisée sous un système GNU/Linux, distribution Fedora 16 ; Nous fournirons également les instructions pour l'installation des pré-requis sous Ubuntu. Pour les diérents chiers de conguration des diérents logiciels que nous allons utiliser dans ce travail, nous noterons seulement les lignes à modier par rapport aux chiers originaux et nous donnerons des liens vers les chiers complets. 2
LXC Container Les sources sont téléchargeables ici. Sous Fedora : $ sudo yum i n s t a l l l x c. i686 Sous Ubuntu : $ sudo apt get i n s t a l l l x c gcc Les sources sont disponibles en ftp à ftp ://gd.tuwien.ac.at/gnu/gcc/ Sous Fedora : $ sudo yum i n s t a l l gcc. i686 Sous Ubuntu : $ sudo apt get i n s t a l l build e s s e n t i a l GNU Make Les sources sont disponibles ici. Sous Fedora : $ sudo yum i n s t a l l make. i686 Sous Ubuntu : il est installé avec le paquet build-essential vue précédemment. SSH Server Ne requière pas de pré-conguration, nous allons donc installer les paquets pré-compilés. Sous Fedora 3
$ sudo yum i n s t a l l openssh s e r v e r. i686 Sous Ubuntu $ sudo apt get i n s t a l l openssh s e r v e r Les chiers de conguration ainsi que les clés RSA pour la connexion client/serveur ssh sont disponible sur le wiki : ssh.tar. Conguration du client et du serveur SSH Extrayez l'archive et placez vous dans le dossier ssh $ t a r xvf ssh. t a r $ cd ssh Éditez le chier cong et remplacez 'user_name' par votre nom d'utilisateur à la ligne : User user_name Placez les chiers de congurations dans les répertoires appropriés $ cp authorized_keys c o n f i g id_eapsim id_eapsim. pub ~/. ssh Éditez le chier /etc/ssh/sshd_cong et veillez à ce que les lignes ci-dessous soient présentes et que 'user_name soit remplacé par votre nom d'utilisateur HostKey /home/ user_name /. s s h / id_eapsim HostKey /home/ user_name /. s s h / id_eapsim AuthorizedKeysFile /home/user_name /. ssh / authorized_keys 4
3 Installation Cette section à pour objectif de congurer chacun des trois acteurs de notre structure à rappeler : le supplicant, l'authenticator et le serveur d'authentication. 3.1 Le supplicant Il s'agit de la machine réelle aussi appelée hôte. C'est sur cette partie de l'infrastructure que va s'exécuter le logiciel à réaliser (EAP-SIM supplicant) ; Pour des besoins d'expérimentation nous allons installer et congurer le supplicant wpa_supplicant. Téléchargement Les sources sont disponibles ici. Conguration Extrayez l'archive contenant les sources et créez le chier de conguration de l'installation $ sudo t a r xvfz wpa\ _supplicant x. y. t a r. gz $ cd wpa\ _ supplicant x. y $ cp d e f c o n f i g. c o n f i g Maintenant éditez le chier.cong avec votre éditeur de texte préféré et veillez à ce que les lignes suivantes soient présentes et actives 1 CONFIG_DRIVER_WIRED=y CONFIG_IEEE8021X_EAPOL=y CONFIG_EAP_MD5=y CONFIG_EAP_MSCHAPV2=y CONFIG_EAP_PEAP=y CONFIG_EAP_SIM=y CONFIG_USIM_SIMULATOR=y CONFIG_SIM_SIMULATOR=y Un chier complet est disponible sur le wiki du projet à cette adresse. 1 : Pour activer une ligne, supprimez le '#' au début de cette dernière, s'il est présent. 5
Installation $ make $ sudo cp wpa_cli wpa_supplicant / usr / l o c a l / bin eapol_test C'est un outil en ligne de commande que nous avons découvert en posant une question dans le mailing-list de Freeradius ; Il s'agit d'un outil de test de serveurs radius. eapol_test est fournit avec wpa_supplicant cependant il n'est pas constructible par défaut. Pour construire eapol_test éditez à nouveau le chier.cong et remplacez la ligne : # CONFIG_EAPOL_TEST=y par : CONFIG_EAPOL_TEST=y Ensuite, construisez la cible eapol_test : $ make eapol_test $ cp eapol_test / usr / l o c a l / bin 3.2 L'authenticator ou le point d'accès Il s'agit du commutateur ou du point d'accès a travers lequel notre supplicant va se connecter au réseau. Pour simuler un point d'accès nous allons utiliser un container LXC que nous appellerons 'authenticator' ; An que notre container puisse se comporter comme un point d'accès nous allons l'équiper d'un logiciel spécique appelé "Hostapd". Hostapd Est un démon qui s'exécute sur un point d'accès et qui implémente la norme IEEE 802.11, ce logiciel gère aussi la norme 802.1x avec une connexion laire réelle ou virtuelle comme nous l'avait armé l'auteur du wpa_supplicant 6
et du hostapd Jouni Malinen dans cette réponse à une question que nous avons posé dans le mailing-list du hostapd. Téléchargement Téléchargez l'archive contenant les sources. Conguration Décompressez l'archive et éditez le chier de conguration $ t a r xvfz hostapd x. y. t a r. gz $ cd hostapd x. y $ cd hostapd $ cp d e f c o n f i g. c o n f i g Éditez le chier.cong et veillez à ce que les lignes suivantes soient actives CONFIG_DRIVER_WIRED=y CONFIG_DRIVER_NONE=y CONFIG_EAP_SIM=y CONFIG_DRIVER_HOSTAP=y Installation $ make $ cp hostapd hostapd_cli / usr / l o c a l / bin Le chier de conguration complet est disponible sur le wiki à ce lien. 3.3 Freeradius Installation Sous Fedora $ sudo yum i n s t a l l f r e e r a d i u s. i686 Sous Ubuntu 7
$ sudo apt get i n s t a l l f r e e r a d i u s Conguration Les chiers de conguration se trouvent ici. À Extraire et à copier dans le répertoire /etc/raddb sous Fedora. $ t a r xvfz raddb. t a r. gz $ cd raddb $ sudo cp R / e t c /raddb Un tutoriel sur l'installation et la conguration de freeradius est disponible à cette adresse. 4 Mise en place du réseau virtuel Rappel sur la conguration réseau Fig. 2 Infrastructure pour l'authentication 802.1x. 8
Création du point d'accès Le chier network-cong # a c t i v a t i o n du f o r w a r d i n g sudo s y s c t l w net. ipv4. ip_forward=1 # c r e a t i o n e t a c t i v a t i o n du b r i d g e r e l i a n t l ' a u t h e n t i c a t o r # au s u p p l i c a n t, i l s ' a g i t du l i e n EAP Over Lan sudo b r c t l addbr eapolan sudo b r c t l s e t f d eapolan 0 sudo ip l i n k s e t eapolan up Le chier routing-cong # on f i x e l ' a d r e s s e de l ' i n t e r f a c e de l ' a u t h e n t i f i c a t e u r # v e r s l e s u p p l i c a n t sudo ip addr add 1 0. 0. 0. 1 / 2 4 dev eapolan Le chier de conguration du point d'accès nas.cfg l x c. utsname = a u t h e n t i c a t o r # network between s u p p l i c a n t and a u t h e n t i c a t o r l x c. network. type = veth l x c. network. veth. p a i r = veth_supp l x c. network. f l a g s = up l x c. network. l i n k = eapolan l x c. network. name = eth0 l x c. network. hwaddr = aa : 0 0 : bb : 0 0 : cc : 1 1 l x c. network. ipv4 = 1 0. 0. 0. 2 / 2 4 Le chier startnas sudo lxc execute n Nas f nas. c f g bash Le chier allcong.nas source source source network c o n f i g routing c o n f i g s t a r t n a s 9
Donner le droit d'exécution au chier allcong.nas $ chmod u+x a l l c o n f i g. nas Création du serveur radius Le chier nas-network-cong # a c t i v a t i o n du f o r w a r d i n g sudo s y s c t l w net. ipv4. ip_forward=1 # c r e a t i o n e t a c t i v a t i o n du b r i d g e r e l i a n t l ' a u t h e n t i c a t o r # au s e r v e u r radius, i l s ' a g i t du l i e n EAP Over Radius sudo b r c t l addbr eaporad sudo b r c t l s e t f d eaporad 0 sudo ip l i n k s e t eaporad up Le chier nas-routing-cong # on f i x e l ' a d r e s s e de l ' i n t e r f a c e de l ' a u t h e n t i f i c a t e u r # v e r s l e s e r v e u r r a d i u s sudo ip addr add 2 0 0. 0. 0. 1 / 2 4 dev eaporad Le chier de conguration du serveur radius nas.cfg l x c. utsname = r a d i u s l x c. network. type = veth l x c. network. veth. p a i r = veth_radius l x c. network. f l a g s = up l x c. network. l i n k = eaporad l x c. network. name = eth0 l x c. network. hwaddr = aa : 0 0 : ba : f e : 0 a : be l x c. network. ipv4 = 2 0 0. 0. 0. 1 0 0 / 2 4 Le chier startradius sudo lxc execute n Rads f r a d i u s. c f g bash 10
Le chier allcong.rad source source source nas network c o n f i g nas routing c o n f i g s t a r t r a d i u s Rendre le chier allcong.rad exécutable $ chmod u+x a l l c o n f i g. rad L'ensemble des chiers de conguration du réseau virtuel est disponible sur le wiki dans l'archive lxc-cong.tar 5 Illustration : réalisation d'une authentication EAP- PEAP d'illustration Depuis un terminal lancez l'authenticator $. / a l l c o n f i g. nas dans le même terminal (authenticator) lancer le serveur SSH $ / usr / sbin / sshd Depuis un autre terminal connectez vous à l'authenticator via ssh et lancez le container du serveur $ ssh h l o c a l $. / a l l c o n f i g. rad Maintenant on a un terminal représentant l'authenticator, un deuxième représentant le serveur radius et le supplicant sera notre machine hôte. 11
Fig. 3 création du serveur et du point d'accès. Depuis l'authenticator lancez hostapd avec le chier de conguration hostapd.conf $ sudo hostapd dd hostapd. c o n f Depuis le serveur lancer freeradius $ sudo radiusd X Le serveur Freeradius et le point d'accès sont en attente de nouvelles connexions. 12
Fig. 4 création du serveur et du point d'accès. Depuis la machine hôte ouvrez un terminal et lancez une demande d'authentication avec wpa_supplicant et le chiers de conguration wpa.confv1.1 : c t r l _ i n t e r f a c e =/var /run/ wpa_supplicant ap_scan=0 fast_reauth=1 network={ s s i d=" t e s t " scan_ssid=0 key_mgmt=ieee8021x eap=peap phase2=" auth=mschapv2" i d e n t i t y="sami" password=" samipass " Demande d'authentication wpa_supplicant i e apol an c wpa. conf v1. 1 Dwired 13
Fig. 5 Authentication auprès du serveur freeradius via l'authenticator avec wpa_supplicant. Et si on regarde du coté serveur et point d'accès... 14
Fig. 6 Messages du serveur et du point d'accès en réponse à une demande d'authentication depuis wpa_supplicant. 6 Sning et capture wireshark Nous avons lancer en même temps que l'exécution de la demande d'authentication avec wpa_supplicant une capture wireshark sur l'interface eapolan avec comme ltre l'expréssion 'eapol' 15
Fig. 7 Capture des paquets d'une authentication EAP-PEAP. 16
Le chier contenant les paquets de cette capture est disponible ici : capture01.pcap 7 Interaction avec scapy Nous allons lancer l'authenticator dans l'écran de droite et scapy dans l'écran de gauche et envoyer depuis scapy un paquet EAPOL/Start pour ensuite observer la réaction de l'authenticator : Fig. 8 État du point d'accès avant la demande d'authentication. On envoie le paquet EAPOL/Start 17
Fig. 9 État du point d'accès après la demande d'authentication. 18
Conclusion Nous avons vu comment cette structure permet-elle à un supplicant de s'authentier auprès d'un serveur freeradius en passant par un point d'accès qui gère l'authentication 802.1x. Il nous reste à exploiter cette structure pour faire de l'authentication EAP-SIM puis d'écrire un supplicant en python qui réalise ce type d'authentication. 19