Test en frelatage (fuzzing) et code binaire

De Ensiwiki
Aller à : navigation, rechercher


Test en frelatage (fuzzing) et code binaire

Labo LIG
Equipe Vasco
Encadrants Roland.Groz@imag.fr

Thème général

  • Sécurité logicielle
  • Frelatage (fuzzing) de données, test aléatoire
  • Analyse de code binaire x86

Compétences attendues

  • Connaissance de l'assembleur x86.
  • Des notions de Python pourraient être utiles (c'est le langage de programmation utilisé par la plupart des fuzzers).
  • Notion de décidabilité, analyse statique (compilation).

Contexte du travail

La complexité des logiciels permet des attaques basées sur des vulnérabilités introduites par des fautes de programmation. Comme celles-ci ont échappé au processus de conception, on s'intéresse à des techniques visant à détecter (avant les pirates) des vulnérabilités en soumettant le logiciel à des tests. Une technique particulièrement utilisée dans ce domaine, le "fuzzing" (frelatage des requêtes envoyées au logiciel) teste la robustesse du logiciel face à des données aléatoires jouant sur des paramètres invalides ou proche de bornes. Ce type de test reste largement aléatoire et handicapé par l'absence d'information sur l'état interne du système.

Afin d'affiner les capacités des outils de frelatage, on cherchera à évaluer la façon dont ils parcourent le code binaire des programmes. On s'intéresse en particulier aux programmes en binaire x86.

Sujet

Il s'agit d'étudier des méthodes d'analyse de couverture pour trouver les branches, ou les chemins sont parcourus dans un code binaire lors de l'exécution de tests de frelatage. Pour le test de logiciel à partir du code source, il existe de nombreux outils d'analyse de couverture de test (le plus simple étant gcov). Mais ceux-ci reposent sur une instrumentation ajoutée à la compilation par ajout de code lors de la traduction. Or il est difficile d'instrumenter du code binaire. On s'intéressera donc aux outils d'émulation permettant de retrouver les chemins d'exécution. Il faudra ensuite étudier quels types de couverture du code peuvent être analysés sur les données fournies à l'exécution (émulée). L'étudiant devra étudier les limites théoriques et pratiques des solutions qui seront abordées.

Résultats attendus

Proposition de solutions d'analyse de couverture, évaluation sur quelques exemples simples et identification des limites.