Analyse de programme par traçageDaniel Reynaud,Jean-Yves Marion,Wadie Guizani

L'analyse de programme sans code source, regroupant la recherche de vulnérabilités et l'analyse de logiciels malveillants, relève actuellement plus de la programmation système que de l'algorithmique. Par conséquent, ces champs de recherche ne bénéficient pas des avancées en analyse de code et en optimisation.

Nous proposons un cadre formel basé sur l'analyse de traces permettant de raisonner sur les propriétés algorithmiques des programmes binaires. Nous avons appliqué ce cadre à l'analyse des programmes auto-modifiants comme par exemple les malwares compressés ou chiffrés, et nous avons validé son utilité par l'expérience en testant une implémentation sur environ 100.000 échantillons collectés sur des honeypots.

Les traces présentent un intérêt évident pour l'ingénierie inverse : faciles à collecter de manière générique avec différents outils (même statiques) et plus fiables que le désassemblage, elles permettent de raisonner avec exactitude sur les effets d'un programme sur le système, les flux de données ou encore les multiples chemins d'un exécutable. Elles sont donc une manière simple et élégante d'unifier les différentes branches de l'analyse de programme.