Sécuriser X Window

Martin.Ouwehand@epfl.ch, SIC

Un récent audit montre qu'un grand nombre de displays X Window sont mal sécurisés à l'EPFL. Le but de cet article est d'expliquer le problème et de proposer des solutions.

De quoi s'agit-il ?

Le serveur X est un programme contrôlant votre display (l'écran devant lequel vous êtes assis, avec le clavier et la souris attenants). Les services qu'il rend aux clients X Window (xterm, xclock, etc.) s'exécutant sur n'importe quel ordinateur incluent l'affichage du contenu des fenêtres et la transmission de divers événements (mouvement de souris, frappe de touche au clavier). Il est donc possible de programmer un client X qui demandera au serveur de lui communiquer toutes vos frappes de touche au clavier. Et, de fait, il circule dans les coins mal famés d'Internet de tels programmes, que les pirates utilisent pour recueillir les mots de passe lorsque vous les entrez pour vous connecter à d'autres machines, par exemple.

Comment savoir si je suis vulnérable ?

Entrez la commande xhost. Vous êtes vulnérable si elle affiche:

     access control disabled, clients can connect
 from any host

Vous trouverez certainement la commande xhost dans un des répertoires suivants: /usr/bin/X11, /usr/openwin/bin, /usr/X11R6/bin ou /usr/local/bin/X11. Vous êtes vulnérable parce que quelque part, dans un des fichiers de démarrage de X Window, se trouve la ligne de commande suivante:

     xhost +

Il faut donc trouver cette ligne de commande et la changer en:

     xhost -

Malheureusement, ces fichiers de démarrage de X Window sont en général de splendides usines à gaz où il est parfois bien difficile de se retrouver. Si nécessaire, il faudra donc demander de l'aide à un expert ou bien, en dernier ressort, simplement faire figurer cette commande «xhost -» dans vos propres fichiers de démarrage pour annuler l'autre.

xhost ou comment contrôler l'accès à mon display ?

Après la modification du paragraphe précédent, la commande xhost affichera:

     access control enabled, only authorized
 clients can connect

et par défaut, seul des clients X Window s'exécutant sur la même machine que le serveur X pourront accéder au display et y affichier des fenêtres. Pour permettre à des clients d'accéder au display depuis d'autres machines, on peut de nouveau utiliser xhost. Par la commande xhost +machine on donne la permission à tous les utilisateurs de l'ordinateur machine d'accéder à son display. On peut par la suite retirer cette permission par la commande xhost -machine.

xauth ou comment contrôler l'accès à mon display de manière plus fine ?

La solution xhost n'est adaptée que si on peut faire confiance à tous les utilisateurs de la machine à laquelle on donne accès. C'est le cas en général pour une station de travail partagée avec quelques collègues, mais ne s'appliquera pas pour un serveur de Département, par exemple. Dans ce cas, la commande xauth permet d'avoir un contrôle d'accès plus fin, par compte. Voici la procédure à suivre:

          xauth add machine/unix:0 MIT-MAGIC-COOKIE-1 
clef
          xauth add machine.epfl.ch:0 MIT-MAGIC-
COOKIE-1 clef

Ici l'argument clef est une suite de 32 chiffres hexadécimaux (0-9a-f) absolument quelconque. Un moyen pratique de générer une telle clef est de taper du charabia sur le standard input de la commande md5sum (disponible par ASIS dans le package GNU.SYS/textutils, cf. http://castor.epfl.ch/asis/GNU.SYS/textutils.html ) puis de taper un <Ctrl>-D (EOF) et d'utiliser la chaîne ainsi imprimée. Cette clef joue le rôle d'un mot de passe et doit rester confidentielle.

N'y a-t-il pas un moyen plus simple ?

Comme on le voit, l'utilisation de xauth n'est pas simple! Une bonne solution pour se simplifier la vie est d'utiliser SSH (Secure SHell), qui met automatiquement en place le contrôle d'accès par compte. Une utilisation typique sera d'invoquer sur la machine où tourne le serveur X une commande lançant un client X Window sur une machine remote, par exemple:

     ssh -n remote -l user xload &

Il faudra prendre garde de laisser SSH gérer la variable d'environnement DISPLAY sur la machine remote (voir http://slwww.epfl.ch/SIC/SL/Securite/outils/ssh-install.html#XWindow pour plus de détails) et ne pas utiliser l'option -display.

Pour en savoir plus sur SSH, consulter les page suivantes:

C'est tout ?

Non. Le trafic X Window entre le client et le serveur n'est pas encrypté. Un pirate peut donc renifler le réseau entre ces deux machines et en déduire vos frappes de touche au clavier, par exemple. La solution est de nouveau d'utiliser SSH, comme décrit au point précédent, qui encryptera automatiquement la connexion entre le client et le serveur.

Et sous Windows ?

Les serveurs X Window sous Windows, Exceed et X-Win32, sont par défaut vulnérables comme décrit au début de l'article mais ils offrent des possibilités de contrôle d'accès, qu'il est donc indispensable d'utiliser.

Pour Exceed, cliquer avec le bouton de droite sur le pavé Exceed dans la barre de tâches et suivre le chemin Tools -> Configuration..., et sélectionner Security. La partie Host Access Control List est analogue à xhost: choisir le champ File et éditer le fichier indiqué et y faire figurer les machines auxquelles vous voulez donner le droit d'accès au serveur X. La partie Enable User Access Control List correspond à xauth: dans le champ File, indiquer le nom d'un fichier contenant la clef à utiliser. Il n'y a pas d'autre moyen que de le générer sous Unix (fichier .Xauthority ou spécifié par l'option -f de xauth) et de le rapatrier sous Windows.

Pour X-Win32, il faut lancer le programme X-Config, sélectionner l'onglet Security, et utiliser Add pour ajouter dans le bloc X-Host list les machines auxquelles vous voulez donner le droit d'accès au serveur X et enfin cliquer sur Apply. Cet analogue de xhost est simple à mettre en place, mais comme ce n'est pas le cas de l'analogue de xauth, nous renvoyons à la documentation en ligne (commande X-Win32 Help). W-Win32 offre une autre possibilité: en cochant Access Control vous serez averti de chaque tentative de connexion au serveur X et vous pourrez choisir dans chaque cas de refuser ou d'accepter.


retour au sommaire du Flash informatique du mois de juin 1
retour à la page principale des Flash informatique
Vos commentaires
© FI-6-1 du 26 juin 1