XeeK, framework d’exploitation pour XSS

13 novembre 2008 – 17:27

La faille XSS, ou Cross-Site Scripting, est certainement la plus répandue sur le Web. Tous les débutants dans le domaine de la sécurité informatique ou du hacking la connaissent et savent comment voler un cookie ou afficher un message d’erreur, mais pensent trop souvent à tort que cette faille se limite à cela (j’ai déjà posté un article sur le sujet). D’un autre côté, ceux qui programment un minimum en JavaScript/Ajax savent que ce langage permet de faire des merveilles en matière de pages dynamiques et contrôle de navigateur, mais ignorent souvent les possibilités offertes pour une personne malveillante. C’est à partir de ces deux constats que m’est venue une idée qui est en train de se concrétiser, et qui tient en un mot : XeeK.

[EDIT]

Le projet a subit de nombreux changements depuis la publication de ce billet. J’ai publié la première version du projet ici ; en attendant un tutorial vous pouvez retrouver des informations plus à jour dans ce billet. Gardez à l’esprit que les informations qui suivent (et particulièrement le jargon associé à l’outil ainsi que les fonctionnalités) ne sont plus complétement valides…

Le projet

XeeK, pour XSS Easy Exploitation Kernel, est un projet dont l’objectif est le suivant : démontrer la puissance de la XSS en proposant un outil pour exploiter facilement ce type de faille. Les premières idées qui ont engendré ce projet me sont venues cet été, mais c’est uniquement depuis quelques semaines que j’ai vraiment commencé à y travailler.

Un noyau et des modules

Certains me trouveront peut-être un peu ambitieux, mais mon but serait de faire de XeeK une sorte de Metasploit pour la XSS. Pour dire les choses autrement, l’objectif serait de proposer un framework, c’est à dire un ensemble de classes, ou de modules capables d’interagir ensemble. En fait, si le K de XeeK signifie kernel (noyau) c’est parce qu’il sera effectivement composé d’un noyau proposant les fonctionnalités génériques de base et d’une suite de modules qui pourront s’y greffer. Dans l’idéal, ces modules pourront être développés par n’importe qui. A titre de comparaison, considérez le noyau Linux et ses modules, ou bien Firefox et ses extensions.

Architecture

Concrètement, XeeK se composera d’une interface Web déployée sur un serveur appartenant à un attaquant, disons hacker.com. XeeK étant censé faciliter l’exploitation des failles XSS, il appartient à l’attaquant de découvrir ces failles ; je n’envisage pour le moment pas d’intégrer un scanner de ce type dans l’outil. Une fois une XSS trouvée sur un site quelconque, disons victime.com, l’attaquant pourra utiliser l’interface de XeeK afin de générer un exploit personnalisé et paramétrable. Après avoir défini l’exploit, celui-ci pourra être intégré à un lien piégé exploitant la XSS sur victime.com. Il ne restera plus à l’attaquant qu’à faire cliquer la victime sur ce lien…

Dans le jargon XeeK, l’attaquant commencera par créer une session, choisira sa ou ses victimes, et sélectionnera un scheduler, ou ordonnanceur. C’est ce composant qui déterminera comment les actions de l’exploit seront exécutées sur le navigateur de la victime. J’envisage pour le moment deux types de schedulers :

  • Statique — toutes les actions de l’exploit seront définies à l’avance et intégrées « en dur » de façon définitive.
  • Dynamique — l’exploit chargé sur le navigateur de la victime ne contiendra pas les actions proprement dit, mais un loader qui sera chargé de récupérer les actions sur le serveur XeeK (hacker.com) de façon dynamique et transparente. Ainsi, l’attaquant pourra modifier l’exploit et suivre la progression de la victime en temps réel.

Les actions exécutées chez les victimes seront susceptibles de retourner des résultats qui seront visualisables directement par le biais de l’interface. En fait, XeeK cachera l’aspect technique de l’exploitation et sera conçu pour simplifier au maximum les choses à l’attaquant. Plus précisément, l’attaquant aura devant lui une interface ressemblant à un debugger, à partir de laquelle il lance son exploit, observe sa progression et visualise les résultats. La différence avec un vrai debugger est que cet exploit sera exécuté sur les victimes et non sur sa propre machine…

Une application : BotNet

Puisque XeeK supportera plusieurs sessions en simultanée, chacune supportant elle-même plusieurs victimes, on en arrive à une des applications potentielles de l’outil : faire office de BotNet. Pour ceux qui l’ignorent, un botnet est un réseau de machines zombies contrôlable par un attaquant via un protocole quelconque. Ici, il s’agira de simples requêtes HTTP. La différence avec les « vrais » botnets est qu’ici, le code malveillant s’exécutera uniquement lorsque la victime aura son navigateur d’ouvert sur la page piégée.

Pour aider à la propagation du botnet, la possibilité la plus simple est d’utiliser une XSS permanente, c’est à dire quand l’injection de code est enregistrée en dur sur le site et affecte tous les visiteurs. Ainsi chaque visiteur tombant sur la page piégée rejoindra automatiquement le botnet à son insu et exécutera le même exploit que ses collègues. Tout cela grâce à une malheureuse petite XSS…

Imaginez qu’un site très connu et utilisé par des milliers de visiteurs soit vulnérable à une XSS permanente. Avec XeeK, il devient possible de lancer une attaque de masse contre tous les visiteurs de la page.

Fonctionnalités

Qu’est-ce que XeeK saura faire ? A vrai dire, les fonctionnalités définitives ne sont pas encore décidées (vu que les modules seront extensibles), mais voici un aperçu de ce que j’envisage.

  • Furtivité du point de vue du visiteur (le site exploité continue à fonctionner sans problèmes).
  • Exécution de code JavaScript arbitraire.
  • Envoi de requêtes asynchrones (Ajax) vers le site vulnérable. Une des applications pourraît être d’exploiter des éventuelles failles XSRF (Cross Site Request Forgery).
  • Envoi de requêtes asynchrones vers d’autres sites.
  • Détournement de formulaire. Exemple : lorsque la victime remplit un des formulaires de la page, tout son contenu est envoyé sur hacker.com de façon transparente.
  • Récupération de cookies.
  • Récupération du contenu de la page (code HTML vu par la victime).
  • Plus généralement, récupération de n’importe quelle variable accessible par JavaScript et DOM.
  • Traceur de visiteur. L’exécution de l’exploit continue même si le visiteur change de page, chaque nouvelle page visitée étant loguée et accessible directement par l’attaquant.
  • Simulation de clic sur des liens / boutons / n’importe quel élément graphique des pages.
  • Fonctionne aussi bien en HTTPS qu’en HTTP ; cela ne change absolument rien.

Technologies

XeeK est pour le moment développé à l’aide de PHP, JavaScript, Ajax et MySQL. Bien entendu, les langages liés tels que CSS et HTML sont également utilisés à foison. Pour ce qui est de la compatibilité des navigateurs, pour être sincère je n’ai encore utilisé que Firefox. Soyons honnête ; je ne suis ni designer ni un pros des subtilités de chaque navigateur. Mais je tiens à préciser qu’avant d’effectuer une release, je ferais mon possible pour au moins que la partie « victime » de l’outil fonctionne sur IE qui est toujours, il faut le rappeler, le navigateur le plus utilisé. Je vise au moins IE7, peut-être IE6 mais il ne faut peut-être pas trop en demander pour une 1ère release ;)

Release

Je sens venir la question « Quand XeeK sera-t-il publié ?« . Je n’ai malheureusement pas encore de réponse pour le moment. XeeK est encore au stade de prototype même si plusieurs fonctionnalités marchent déjà bien. Il me reste à concevoir la partie interface de l’outil, améliorer deux/trois petites choses, tester la partie exploitation sous IE… Comme vous pouvez vous en douter je ne travaille pas sur ce projet à plein temps, j’ai aussi des études. Pour donner une estimation, j’espère pouvoir publier une première release avant 2009. Mais cela ne constitue pas une garantie… En effet, je préfère prendre mon temps pour bien faire les choses, plutôt que de sortir quelque chose de bancal le plus vite possible. Au pire, je sortirais une alpha ou béta avant sa vraie sortie.

XeeK sera publié sous license GPL (2 ou 3). En d’autres termes, n’importe qui pourra utiliser, développer et améliorer l’outil à condition qu’il publie ses travaux également sous GPL.

Click and hack

Certains me reprocheront peut-être :

Tu n’as pas honte, de mettre à disposition des scripts kiddies un outil aussi dangereux, où il suffit de cliquer pour pirater ?

Je leur répondrai tout simplement non pour plusieurs raisons :

  • Il existe des outils similaires encore lus puissants et plus simples à utiliser. Exemple : Metasploit. Personne ne se plaint de cet outil (enfin pas à ma connaissance) alors qu’il permet de rooter une machine sans aucune connaissance technique. C’est un outil utilisé par des professionnel pour le penetration testing.
  • Cet outil n’est pas plus « dangereux » que les possibilités offertes par la faille XSS. Il essaye juste d’utiliser ces possibilités au maximum.
  • En sortant cet outil et en le faisant connaître, j’espère faire prendre conscience à plus d’un que les failles XSS sont vraiment dangereuses, ce qui semble ne vraiment pas encore être le cas.

Sur ce, je crois que j’ai tout dit… Je vais continuer le développement de ce projet en espérant ne pas mettre trop de temps à le publier. Si vous avez des questions ou suggestions, les commentaires sont là pour ça !

  1. 13 réponses à “XeeK, framework d’exploitation pour XSS”

  2. Excellente présentation dude,

    C’est un projet carrément intéressant, je te souhaite de le réussir ;-)

    Par JoE le 14 novembre 2008

  3. http://engineeringforfun.com/browserrider.html

    Par 11 le 15 novembre 2008

  4. Sympa, je ne connaissais pas…
    Il faudra que je teste ça quand j’aurais du temps. Merci ;)

    Par Emilien Girault le 15 novembre 2008

  5. Salut, Emilien.
    C’est donc de ça que Heurs me parlait en voiture. Par conséquent, je te souhaite de te magner pour nous sortir le truc ! :)

    _Geo_

    Par Geo le 4 janvier 2009

  6. Tiens, une petite idée de module supplémentaire : un keylogger (en utilisant l’évenement onkeypress) pour enregistrer tout ce qui se passe sur la page.
    (http://niklosweb.free.fr/Programmation/XssKeyLogger.html)

    Pour FireFox je suis tombé sur ça aussi : http://fr.wikipedia.org/wiki/XPCOM
    Et puisque les différents composants XPCOM sont accessibles en JavaScript, on pourrait imaginer accèder au navigateur entier, et pas seulement à la page infectée (accéder à tous les onglets par exemple)

    Enfin, ça reste à vérifier (et à implémenter surtout ^^)

    Sinon, ça semble être un projet très interessant, j’attends la première release avec impatience.

    Par NiklosKoda le 5 janvier 2009

  7. « failles XRCF « , c’est CSRF ou XSRF normalement ;)

    Super sympa par contre l’idée, je viendrais sur ton blog pour voir ce que ça va donné.

    Cya

    Par Paul le 14 mars 2009

  8. Très juste ! Bien vu, ça doit être une typo… Je corrige ça tout de suite.

    Par Emilien Girault le 14 mars 2009

  9. A quant une version d’évaluation ? ;-)

    Par Stéphane le 24 décembre 2009

  10. Excellent projets …….

    j’attend avec impatience tes release

    peace

    Par peterdecloe le 23 mai 2010

  11. Merci pour cet article…

    Par Prestataire informatique Rouen le 20 juillet 2013

  1. 3 Trackback(s)

  2. 11 février 2010: Nuit Du Hack 2009 : Et les vainqueurs sont… | Segmentation fault
  3. 21 février 2010: Conférence sur XeeK à la NDH 2010 | Segmentation fault
  4. 1 novembre 2010: Petite dose de CSS et de JS pour une grande dose de SE. | UNTITLED.BLOG

Désolé, les commentaires sont fermés pour le moment.