SSTIC 2013 - Fuzzing de XSS intelligent

Par Fabien Duchene

Bon, pendant que la pression monte chez les speaker, l’amphi se rempli.

Fuzzing evolutionnaire pour détecter des XSS. A coup de data-tainting l’orateur cherche à découvrir une entrée telle que sa sortie vient teinter une propriété / valeur coté html / javascript. L’auteur nous décrit ensuite le fonctionnement d’une attaque XSS réfléchie et sa formalisation.

La detection de XSS type 1 et 2 dans les scanners (évalués en 2010) n’est vraiment pas très bonne… du fait d’une mauvaise connaissance du SUT (system under test) et la faible quantité de vecteurs d’attaque employés.

Le système de détection de XSS proposé repose sur un moteur d’inférence de flux de contrôle et d’inférence de teinte. En gros le système « devine » la structure logique interne en fonction des entrées/sorties, et viens déduire en suite une propagation de teinte dans ce système.

Le gros problème c’est qu’il faut bien crawler le site et bien l’explorer pour obtenir un modèle le plus fidèle possible à la réalité.

L’orateur à mis au point un algorithme évolutionnaire qui va envoyer des requête HTTP contenant des vecteurs d’attaque généré par une grammaire (issue d’un ensemble très grand de vecteurs de XSS). Les réponses sont en suite analysées et les Injections sont transformées pour être re-injectées jusqu’au succès de l’injection. Les mutations simples employées dans l’algo de fuzzing consistent à choisir une autre branche dans la grammaire. (tu prends des XSS tu mélanges bien et paf ça fait des chocapics… le background théorique derrière est assez impressionnant).

Une fonction de fitness vient mesurer à quel point on est proche (ou pas) de découvrir une faille XSS.

S’en suit une démo de l’outil.