Protections des processeurs contre les cyber-attaques par vérification de l'intégrité du flot d'exécution

par Michaël Timbert

Projet de thèse en Informatique, données, IA

Sous la direction de Jean-Luc Danger et de Adrien Facon.

Thèses en préparation à l'Institut polytechnique de Paris , dans le cadre de Ecole Doctorale de l'Institut Polytechnique de Paris , en partenariat avec LTCI - Laboratoire de Traitement et Communication de l'Information (laboratoire) , SSH – Secure and Safe Hardware (equipe de recherche) et de Télécom ParisTech (établissement de préparation de la thèse) depuis le 01-10-2016 .


  • Résumé

    Les cyber-attaques reposent sur des intrusions dans les systèmes numériques tirant parti de failles logicielles de nature très diverses. Les plus pernicieuses sont véhiculées par des “malware”, virus ou vers (programmes dont l'objectif est de se propager vers le système ciblé, de l'infecter et de s'y maintenir sans être détecté). Elles peuvent également être directement réalisées à distance en cas de mauvaises configurations des pare-feux, d'utilisation de mots de passe faibles, etc. De nombreuses protections existent contre les cyber-attaques. Parmi elles, citons les techniques d'obfuscation de code, de vérifications d'intégrité de la mémoire, la personnalisation du jeu d'instruction, la distribution aléatoire de l'espace d'adressage (ASLR), les anticipations par les canaris ou bac à sable, l'isolation des processus (machines virtuelles), la gestion droits d'accès… Ces techniques sont majoritairement logicielles. Au niveau matériel, les processeurs modernes procurent des techniques de sécurisation par isolation de zones (anneaux de protection, MMU, NX bit, Trustzone…). Leur mauvaise utilisation par la partie logicielle (par exemple suite à une erreur de programmation) peut remettre en cause la sécurité du système. L'action des cyber-attaques se traduit par des modifications dans l'exécution des programmes, pouvant être obtenus notamment par débordement des zones mémoires tampons. Le contrôle de l'intégrité du flux d'exécution (CFI, Control Flow Integrity) est une méthode théoriquement efficace pour détecter une cyber-attaque mais son implantation peut présenter de nombreux défauts et dégrader significativement les performances du système. Dans la littérature académique, plusieurs solutions ont été proposées. L'équipe de Abadi et al. [1] est une des première à avoir introduit et réalisé des protections CFI en instrumentant du code binaire x86. La technologie CFImon décrite par Xia et al. [5] est un moniteur de sécurité chargé de vérifier l'intégrité des branchements en exploitant les compteurs de performance. La sécurité a été évaluée et des modifications matérielles ont été suggérées. Des contrôles au niveau du code C peuvent également être effectués, comme ceux proposés par Lalande, Heydemann, Berthomé [4]. Ces protections sont conceptuellement efficaces mais restent perfectibles au niveau de leur couverture et relativement lentes car implantées en logiciel. Il existe de grands marges d'amélioration au niveau de l'évaluation sécuritaire et des temps de détection qui peuvent être rédhibitoires sur des systèmes nécessitant un haut niveau de performance. Par exemple, le CFI de Abadi et al. [1] consiste en une instrumentation du code avec des canaris potentiellement égaux en de multiples endroits. Ainsi, un contournement de la contremesure peut être envisagé, ce qui réduit le niveau de sécurité escompté (l'analyse de sécurité est incomplète). Dans le travail de Xia et al. [5], la probabilité de détection ainsi que la latence du moniteur CFImon n'ont pas été évalués. La vérification au niveau du code C reste quant à elle trop haut niveau, parcellaire, et trop lente. L'objectif de la thèse est de proposer des solutions de vérification d'intégrité basées sur un calcul matériel, de façon à garantir une converture optimale et une réactivité très importante. Un autre atout est de ne pas être modifiable par essence et donc robuste nativement. La modification architecturale du processeur se doit aussi d'être peu intrusive. Elle s'inspirera dans un premier temps des travaux sur le HCODE [3] qui décrit un bloc de vérification se greffant en lecture seule sur un cœur de processeur. La solution HCODE présente des limites qu'il faudra dépasser et valider dans les travaux de thèse ; par exemple, HCODE ne permet pas de traiter les sauts non définis statiquement (sauts indirects, pointeurs de fonctions) et ne gère pas les informations d'appel des fonctions de librairie externe. Le travail de vérification entraîne nécessairement des modifications sur le compilateur dédié au coeur de processeur. Il peut s'inspirer des travaux sur PICON [2] utilisant le langage intermédiaire LLVM IR. La validation de sécurité peut aussi tirer parti de méthodes à base de “fuzzing” en utilisant des modèles d'interface au niveau binaire (ABI, Application Binary Interface) des processeurs.

  • Titre traduit

    Protections of Processors against Cyber Attacks by control Flow Checking


  • Résumé

    None