Présentation : Gabriel CAMPANA
But principal de l’outil : Rendre complètement automatique le fuzzing.
A partir d’une seule exécution symbolique, il est capable d’extrapoler d’autres tests, en inversant chaque condition du chemin de données.
Cependant, il n’est pas réalisable de vérifier toutes les conditions, puisque le nombre de possibilités devient trop vite important. Des compromis devront être trouvés.
L’outil repose sur Valgrind et STP.
Valgrind pour l’analyse du code en temps réel.
STP est un solveur de contraintes. Il prend en entrée une requête composée d’une ou plusieurs contraintes. La sortie indique si la requête est satisfaisante ou non (en sortant un contre-exemple si besoin). de cette manière, les conditions pour atteindre un point précis du chemin d’exécution peuvent être trouvées.
Valgrind (a l’aide d’un plugin) va filtrer les données (taint data) liées à notre entrée, alors la représentation intermédiaire sera analysée, et éventuellement de nouvelles entrées seront calculées pour les tests suivants, et ainsi de suite jusqu’à vérifier tous les chemins de données.
Beaucoup de vulnérabilités connues ont été retrouvées par l’outil en quelques minutes seulement. Particulièrement puissant sur les bibliothèques.