Franck de Goër - Rétro-ingénierie de programmes binaires en une exécution - une analyse dynamique légère basée au niveau des fonctions

08:15
Vendredi
20
Oct
2017
Organisé par : 
Franck de Goër
Intervenant : 
Franck de Goër, LIG/VASCO et VERIMAG/PACSS
Équipes : 

Jury :

  • Roland Groz, professeur, Grenoble INP, directeur de thèse
  • Laurent Mounier, maître de conférences, Université Grenoble Alpes, codirecteur de thèse
  • Kavé Salamatian, professeur des universités, Université de Savoie, examinateur
  • Valérie Viet Triem Tong, professeur associé, Centrale Supelec, rapporteur
  • Jacques Klein, Senior Research scientist, Université du Luxembourg , rapporteur
  • Andy King, professeur, University of Kent, examinateur
  • Sarah Zennou, ingénieur de recherche, Airbus Group, examinateur
  • Marion Videau, maître de conférences, LORIA, examinateur
     

Dans cette thèse, nous proposons une nouvelle approche d’analyse dynamique de programmes binaires. Ce travail se place dans un contexte de rétro-conception de binaires avec des motivations liées à la sécurité : compréhension de logiciels malveillants, détection de vulnérabilités, etc. Concrètement, nous nous intéressons à retrouver des informations de haut niveau à partir d’un binaire en une seule exécution : les prototypes de fonctions, une nouvelle notion que nous nommons « couplage », et les allocateurs mémoire. L’approche proposée est basée sur des heuristiques afin d’analyser rapidement de larges programmes, et les résultats expérimentaux montrent qu’une telle approche permet d’obtenir des résultats précis. 

Les trois objectifs principaux de notre approche sont : 1) l’universalité - les hypothèses sur le programme à analyser sont le plus faibles possibles (pas de recompilation nécessaire, pas de source, applicable à des programmes strippés), 2) le passage à l’échelle - l’analyse se veut suffisamment légère pour pouvoir analyser de gros programmes, 3) la précision orientée correction - dans les résultats produits, on cherche à minimiser les faux-positifs (par exemple, détecter des paramètres de fonction qui n’existent pas).