Vérification automatique de code bas-niveau: C, assembleur et binaire

par Frédéric Recoules

Projet de thèse en Informatique

Sous la direction de Marie-Laure Potet et de Laurent Mounier.

Thèses en préparation à Grenoble Alpes , dans le cadre de École doctorale mathématiques, sciences et technologies de l'information, informatique (Grenoble) , en partenariat avec VERIMAG (laboratoire) et de Preuves et Analyses de Code pour la Sûreté et la Sécurité (equipe de recherche) depuis le 20-04-2017 .


  • Résumé

    S'assurer de la sûreté et de la sécurité informatique des infrastructures numériques est un enjeu crucial. Un des points clés est de s'assurer que le logiciel ne contient pas d'erreur ou de faille. Les techniques appliquées au code source sont devenues une réalité industrielle dans les systèmes critiques, comme le montre l'outil Frama-C [5]. Malheureusement, ces techniques présupposent un accès complet au code source, alors que la majeure partie des codes existants font appel à des éléments non-écrits en C, par exemple des bibliothèques, dont le code source n'est pas disponible, ou des fragments d'assembleur, comme pour la bibliothèque numérique GMP (https://gmplib.org/). Ce sujet de thèse consiste justement à concevoir et mettre en oeuvre des analyses de code C mixte, c'est-à-dire combinant source C, assembleur et binaire. Le but est de comprendre comment les analyses de l'état de l'art aux niveaux source[6] et binaire[1] peuvent être combinées pour analyses de tels codes. Nous nous plaçons dans un cadre où l'utilisateur à la possibilité d'annoter son code C et son code binaire ou assembleur. Dans cette optique, nous chercherons à vérifier, au moins partiellement, ces annotations, voire à les générer automatiquement. Les difficultés principales de ce sujet concerne l'amélioration et l'extension de l'état de l'art sur les aspects suivants : - Faire le lien entre le langage d'annotation niveau C[2] et le bloc de code bas niveau ; - Comprendre les hypothèses implicites de bon fonctionnement entre le code source et le code bas niveau ; - Combiner les analyses à des niveaux d'abstraction différents, au niveau C pour vérifier que les hypothèses identifiées précédemment sont bien remplies et au niveau assembleur/binaire pour vérifier le contrat. Le candidat pourra s'appuyer, d'une part, sur l'expérience de ses encadrants en terme d'analyse de code source et exécutable et d'autre part sur l'expérience globale du LSL dans ces domaines, acquise à travers les outils Frama-C et BINSEC[3, 4]. [1] Gogul Balakrishnan et Thomas W. Reps. “WYSINWYX: What you see is not what you eXecute”. In : ACM Trans. Program. Lang. Syst. 32.6 (2010). doi : 10.1145/1749608.1749612. url : http://doi.acm.org/ 10.1145/1749608.1749612. [2] Patrick Baudin et al. ACSL: ANSI/ISO C Specification Language Version 1.11. 2016. [3] Robin David et al. “BINSEC/SE: A Dynamic Symbolic Execution Toolkit for Binary-Level Analysis”. In : IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering, SANER 2016, Suita, Osaka, Japan, March 14-18, 2016. 2016, p. 653–656. [4] Adel Djoudi et Sébastien Bardin. “BINSEC: Binary Code Analysis with Low-Level Regions”. In : Tools and Algorithms for the Construction and Analysis of Systems - 21st International Conference, TACAS 2015, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2015, London, UK, April 11-18, 2015. Proceedings. 2015, p. 212–217. [5] Florent Kirchner et al. “Frama-C: A software analysis perspective”. In : Formal Asp. Comput. 27.3 (2015), p. 573–609. doi : 10 . 1007 / s00165 014-0326-7. [6] A. Simon. Value-Range Analysis of C Programs. Springer, 2008. doi : 10. 1007/978-1-84800-017-9.

  • Titre traduit

    Automatic Verification of low-level code: C, assembler and binary


  • Résumé

    Ensuring the safety and security of digital infrastructure is a crucial issue. One of the key points is to ensure that the Software does not contain any error or flaw. The techniques applied to Source code have become an industrial reality in critical systems, As shown in the Frama-C tool [5]. Unfortunately, these techniques Presuppose full access to the source code, while the majority of existing codes use non-written elements in C, for example libraries, the source code of which is not available, or fragments As for the GMP digital library (https://gmplib.org/). This thesis consists precisely in the design and implementation of Analyzes of mixed C code, that is to say combining source C, assembler and binary. The goal is to understand how state-of-the-art analyzes at Source and binary data can be combined for analysis of such codes. We place ourselves in a framework where the user has the ability to annotate his C code and his binary code or assembler. In this context, we will seek to Verify, at least partially, these annotations, or even to generate them automatically. The main difficulties of this The improvement and extension of the state of the art on the following aspects: - Make the link between the annotation language level C and the low code block Level; - Understand the implicit assumptions of good functioning between the code Source code and low-level code; - Combine the analyzes at different levels of abstraction, at level C to verify that the assumptions identified above have been met and Assembler / binary level to check the contract. The candidate will be able to rely, on the one hand, on the experience of his supervisors in terms of analysis of source and executable code and on the other hand on the overall experience of the LSL in these domains, acquired through the tools Frama-C and BINSEC.