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 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).La thèse se découpe en trois parties : une première partie dans laquelle on présente le contexte de rétro-conception dans lequel ce travail se situe, une seconde partie dans laquelle nous présentons notre approche, et une troisième partie qui détaille notre implémentation et des résultats numériques. / In this thesis, we propose a new dynamic approach to analyze binary programs. The context of this work is reverse-engineering binaries with motivations related to security: understanding malwares, detecting vulnerabilities, etc. Concretely, we focus on retrieving high-level information from a binary in a single execution: function prototypes, a new notion we name coupling, and memory allocators. The proposed approach is based on heuristics to analyze efficiently large programs, and experimental results show that with an approach leads to accurate results.The three main objectives of the approach are: 1) universality - hypothesis on the program to analyze are as weak as possible (no recompilation, no source code, possibly stripped), 2) scalability - the analysis aims to be lightweight enough to handle large programs, 3) soundness - we aim to minimize false positives in the results (e.g., detecting parameters of functions that actually do not exist).The thesis is divided in three parts: a first part presenting the context of reverse-engineering we work in, a second part in which we present our approach, and a third part to describe our implementation and numeric results.
Identifer | oai:union.ndltd.org:theses.fr/2017GREAM058 |
Date | 20 October 2017 |
Creators | Goër de Herve, Franck de |
Contributors | Grenoble Alpes, Groz, Roland |
Source Sets | Dépôt national des thèses électroniques françaises |
Language | English |
Detected Language | French |
Type | Electronic Thesis or Dissertation, Text |
Page generated in 0.0022 seconds