_ _______________________________________ _ -*6*- `^°*;:,.> La secu sous X Tripped by Blured <.,:;*°^` ___________________/ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ\_____________________ Securite X Window 1. introduction 2000 2. Comment trouver des serveur X 'ouverts' 3. Le probleme du local-host 4. Techniques de snooping - dump de fenetres 5. Techniques de snooping - lecture du clavier 6. Securiser Xterm 7. Utilisation de trojan X [xlock et xdm] 8. Utilitaires de securite X - xauth MIT-MAGIC-COOKIE 9. Conclusion 10 Quelques zinfos 1. Motivation / introduction X windows, comme tout element ajoute au systeme, demande de s'attarder sur sa configuration afin d'eliminer tous les risques lies a la securite. En effet, sur un reseau, n'importe qui peut se connecter sur un affichage X ouvert, lire les touches frappees sur le clavier, faire des dumps des ecrans et des fenetres, et demarrer des application sur un affichage non protege. Cet article a donc pour but de vous montrer les aspects securitaires lies a X et a ses clones. 2. Comment trouver des affichages X ouverts Un affichage X est en quelque sorte un serveur X dont le controle d'acces a ete desactive. Pour desactiver le controle d'acces il suffit d'utiliser la commande xhost : $ xhost + Autorise les connexions a partir de n'importe quel hote. $ xhost + ZZZ.ZZZ.ZZZ.ZZZ Autorise les connexions d'un seul hote, ou Z est l'adresse Ip ou le nom de l'hote lui-meme. $ xhost - Active le controle d'acces. En effet, seul le local-host peut se connecter a l'afficheur. Dans ce cas, vous etes a l'abri d'une partie des scanners de ports (en tout cas pour le port 6000 et si le scanneur n'essaie aucune autre tactique sur ce port). $ xhost Affiche l'etat du controle d'acces avec la liste des domaines / utilisateurs / adresses ip autorisees. Ecrire un scanner pour le port 6000 est assez simple, il suffit grossierement d'ouvrir une socket sur le port 6000 de la machine serveur de verifier si la communication est etablie et ensuite d'appeler la fonction XOpenDisplay(" IP-ADRESS:0.0"). Ceci retournera un pointeur vers la structure d'affichage, si et seulement si le X de la cible a son controle d'acces desactive. Si le controle d'acces est actif, XOpenDisplay retourne 0 et envoie un message d'erreur a la sortie standard. Exemple : Xlib: connection to "display:0.0" refused by server Xlib: Client is not authorized to connect to Server ***'Prober'*** le port 6000 est necessaire car appeler XOpenDisplay() sur un hote qui n'a pas de serveur X en marche plantera l'appel et le programme par consequent. *** Vous trouverez plus loin un scanner de ce type *** 3. Le probleme du localhost Utiliser votre X avec le controle d'acces desactive (en utilisant xhost -) empechera les tentative de scan XOpenDisplay a travers le port 6000. Cependant, il existe un moyen de contourner ceci. Si vous pouvez vous logger sur l'hote, vous pouvez vous connecter a l'X du localhost. $ rlogin target $ xwd -root -display localhost:0.0 > ~/copie.xwd Realise la copie de l'X de la cible $ exit $ xwud -in ~/copie.xwd Affiche la copie d'ecran dans une fenetre Bien sur, il faut avoir un compte sur le systeme hote pour pouvoir realiser ce dump. Ceci signifie qu'aucun affichage n'est a l'abri de ces commandes dans un reseau fonctionnant avec un meme serveur X. Toute routine Xlib a la structure d'affichage comme premier argument. En ouvrant un affichage, vous pouvez le manipuler avec tous les appels a Xlib disponibles (lancer des applications, lire les touches frappees, copies d'ecran ...) 4. Techniques de snooping - dumping de fenetres La maniere la plus naturelle de dumper une fenetre d'un serveur x est d'utiliser l'utilitaire X11 xwd ou un autre similaire. Voici un extrait de la page man qui lui est consacree : (extrait) DESCRIPTION Xwd is an X Window System window dumping utility. Xwd allows Xusers to store window images in a specially formatted dump file. This file can then be read by various other X utilities for redisplay, printing, editing, formatting, archiving, image processing, etc. The target window is selected by clicking the pointer in the desired window. The keyboard bell is rung once at the beginning of the dump and twice when the dump is completed. (/extrait) En gros, xwd est un outil pour faire des dumps de fenetres X lisibles par un autre programme xwud par exemple. Voici un extrait de la page man consacree a xwud: (extrait) DESCRIPTION Xwud is an X Window System image undumping utility. Xwud allows X users to display in a window an image saved in a specially formatted dump file, such as produced by xwd(1). (/extrait) Ces 2 programmes permettent de dumper la fenetre root, une fenetre particuliere, ou un affichage specifique. Par mesure de securite xwd fera beeper le terminal qui dump une fois que xwd sera demarre, et deux fois lors de la fin de la manoeuvre meme si vous avez desactive les beeps lies a X (xset b off). Cependant, ceci n'est pas vraiment genant, comme le code source est disponible il est tres simple d'enlever cette fonction dite 'de securite'. Comme nous l'avons vu plus haut, il est possible de dumper une fenetre grace a la commande : $ xwd -name Attention, les fenetre xterm sont differentes. Vous ne pouvez pas la dumper directement en specifiant son nom. En effet la primitive X_Getimage utilisee par xwd a ete bloquee. Cependant cette protection n'est pas tres efficace car vous pouvez dumper la fenetre root de l'X qui contient la fenetre Xterm. 5. Les techniques de snooping - lecture du clavier Si vous pouvez vous connecter a un affichage, vous pouvez aussi logger et stocker toutes les touches qui ont ete passees au serveur X. Plusieurs programmes ont ete ecrits afin de realiser ce sniff avec le minimum d'effort (ex xkey, ttysnoop.c). L'ID d'une fenetre X root (c'est a dire ce qui correspond au bureau sous d'autres OS) peut etre obtenu grace a un appel a XQueryTree(), qui retournera le XWindowAttributes de toutes les fenetres. Le gestionnaire de fenetres est capable de controler tous les ID des fenetres ainsi qui les touches appuyees a un moment donne. Ainsi, en utilisant les fonctions liees au gestionnaire de fenetres de Xlib, les codes des touches appuyees peuvent etre capturees, et les KeySyms transformer en caracteres grace a la commande XLookupString. Vous pouvez meme envoyer des code KeySym a une fenetre, c'est a dire qu'il est possible de prendre le controle de l'hote. C'est pourquoi certains outils qui peuvent servir a l'administration sont securises contre ce genre d'attaques. 6. Xterm - option pour securiser le clavier. Beaucoup de mots de passes sont tapes dans des fenetres xterm. il est par consequent crucial que l'utilisateur ait le controle total sur les processus pouvant lire et ecrire sur cet xterm. La permission pour un serveur X d'envoyer des evenements a une fenetre Xterm est definie au moment de la compilation. Par defaut, la valeur est 'false' ainsi toutes les requetes SendEvent provenant d'un serveur X pour une fenetre xterm ne seront pas traitees. Vous pouvez cependant passer outre ce parametre grace au fichier .Xdefaults : xterm*allowSendEvents True Ou bien en selectionnant les options concernees du menu principal (Appuyer simultanement sur CTRL et le bouton gauche de la souris, cependant ce n'est pas recommande). Xterm permet d'empecher les autres clients X de lire le clavier grace a la fonction XGrabKeyboard(). En effet, suite a cette fonction seulement 1 seul processus peut lire le clavier a la fois. Pour activer cette fonction automatiquement, selectionnez 'Secure Keyboard' dans le menu principal de XTerm (appuyez simultanement sur CTRL et le bouton gauche de votre souris). La couleur de fond de xterm doit alors etre inversee. Il est a noter que certaines version de Xterm contienne un trou de securite qui permet aux utilisateurs de devenir root en exploitant les liens symboliques vers le fichier passwd. *** (voir Cert Advisory CA-93:17.xterm.logging.vulnerability) *** 7. Les clients X trojan - xlock et les login bases sur X Par exemple, il est possible de transformer xlock en trojan a l'aide de quelques lignes ajoutees a la routine getPassword. Tous les password rentres peuvent etre stockes sur un fichier utilisable plus tard. Il est aussi possible de detruire ce fichier a la fin de son execution pour que l'utilisateur ne se doute de rien. Si un utilisateur possede un repertoire accessible en ecriture et un ./ dans son PATH, il est vulnerable. Le spoof de login X est un peu plus complique, en effet vous devez simuler l'ecran de login execute par XDM. 8. Les outils de securites X - xauth MIT-MAGIC-COOKIE Pour empecher les connexions non autorises sur votre affichage X, vous pouvez utiliser la commande xauth qui cryptera les connexions utilisees. Quand vous vous loggez, xdm cree un fichier .Xauthority dans votre repertoire personnel. Ce fichier est binaire, et lisible uniquement avec la commande xauth. $ xauth list affichera, s'il a ete prealablement configure : votre.affichage.ip:0 MIT-MAGIC-COOKIE-1 73773549724b76682f726d42544a684a display name authorization type key Le fichier .Xauthority contient parfois des informations d'anciennes sessions, cependant ceci n'est pas important, car une nouvelle cle est cree a chaque nouvelle session. pour acceder a un affichage avec xauth actif, vous devez posseder la cle actuelle. Si vous voulez ouvrir votre affichage pour les connexion d'un utilisateur particulier, vous devez lui faire prendre connaissance de votre cle. Il doit ensuite taper la commande suivante : $ xauth add votre.affichage.ip:0 MIT-MAGIC-COOKIE-1 73773549724b7668etc. Maintenant, seulement cet utilisateur (et vous) peuvent se connecter a votre affichage. Ainsi, xauth elimine beaucoup de problemes de securites lies a X. 9. Conclusion Utilisez xauth, interdisez les SendEvent pour vos xterm et differentes consoles, securisez votre clavier. Tous vos commentaires sont les bienvenus, car ce texte n'est qu'un appercu de la securite sous X. 10. Quelques zinfos Parametre pour la commande Xauth : -f fichierAuth specifie le nom du fichier authority a utiliser. Par defaut, xauth utilisera le fichier definit dans la variable d'environnement XAUTHORITY ou .Xauthority dans le repertoire personnel de l'utilisateur. -q empeche l'affichage des messages de statut de xauth. Ceci est l'option par defaut lorsque xauth est utilise en mode ligne de commmande ou si la sortie standard n'est pas dirige sur un terminal. -v Mode verbeux. Ceci est le mode par defaut lorsque xauth lit ses commandes de l'entree standard et que la sortie standard est dirigee vers un terminal. -i Ignore tous les locks des fichiers authority. xauth empeche l'edition ou la lecture des fichier qui ont ete lockes par d'autres programmes. -b enleve tous les locks des fichiers authority avant son execution. Dans le prochain article, nous parlerons des commandes pour manipuler les fichiers authority. A bientot pour de nouvelles Xaventures. blured75@linuxmail.org