Moving code analysis from safety to security : attacker model - IMAG Access content directly
Theses Year : 2023

Moving code analysis from safety to security : attacker model

Aller de la sûreté à la sécurité en analyse de code : le modèle d'attaquant

Soline Ducousso
  • Function : Author
  • PersonId : 1404810
  • IdRef : 279579586

Abstract

Major works have delved into program analysis over the last decades, leveraging techniques such as symbolic execution, static analysis, abstract interpretation or bounded model checking, to hunt for software vulnerabilities and bugs in programs, or to prove their absence, leading to industrial adoption in some leading companies. As bugs are an attack entry point, removing them is a first step towards better software security. Yet, they are based on the standard concept of reachability and represent an attacker able to craft smart, legitimate input, through legitimate input sources of the program, exploiting corner cases in the code itself, a rather weak threat model, typically a file formatted to trigger a buffer overflow in data processing. Tools only looking for bugs and software vulnerabilities may deem a program secure while the bar remains quite low for an advanced attacker, able for example to take advantage of attack vectors such as (physical) hardware fault injections, micro-architectural attacks, software-based hardware attacks like Rowhammer, or any combination of vectors.In this thesis, our goal is to devise a technique to automatically and efficiently reason about the impact of an advanced attacker onto a program security properties.We propose adversarial reachability, a formalism extending standard reachability to reason about a program execution in the presence of an advanced attacker. As equipping the attacker with new capacities significantly increases the state space of the program under analysis, we build a new algorithm based on symbolic techniques, named adversarial symbolic execution, to address the adversarial reachability problem from the bug-finding point of view (bounded verification). Our algorithm prevents path explosion thanks to a new forkless encoding of attacker capabilities, modeled as faults. We show it correct and k-complete with respect to adversarial reachability. To improve the performance further, we design two new optimizations to reduce the number of injected faults while keeping the same attacker power: Early Detection of faultSaturation and Injection On Demand.We propose an implementation of our techniques for binary-level analysis, on top of the BINSEC framework. We systematically evaluate its performances against prior work, using a standard fault injection benchmark from physical fault attacks and smart cards. Experiments show a very significant performance gain against prior approaches, for example up to x10 and x200 times on average for 1 and 2 faults respectively - with a similar reduction in the number of adversarial paths. At most, we are x200 times faster for 1 fault and x6000 for 2. Moreover, our approach scales up to 10 faults whereas the state-of-the-art starts to timeout for 3 faults. We also show the use of our method in a number of different security scenarios such as reproducing a BellCoRe attack with one reset fault on CRT-RSA or looking for attacks on a program protected by the SecSwift countermeasure. In addition, we perform a security analysis of the well-tested WooKey bootloader and demonstrate the ability of our analysis to find attacks and evaluate countermeasures in real-life security scenarios. We were especially able to find an attack not mentioned before on a recently proposed patch, and proposed a new patch to the developers.
Des travaux majeurs ont été réalisés, ces dernières décennies, dans le domaine de l'analyse de programme, tirant parti de techniques telles que l'exécution symbolique, l'analyse statique, l'interprétation abstraite ou la vérification bornée de modèles, pour chasser les bogues et vulnérabilités logicielles, conduisant à l'adoption de ces techniques par de grandes entreprises. Les bogues étant des points d'entrées pour les attaques, les éliminer est un premier pas vers une meilleure sécurité logicielle. Cependant, ces techniques reposent sur un modèle d'attaquant seulement capable de concevoir des entrées malicieuses, exploitant des cas particuliers dans le code lui-même, typiquement un fichier formaté de manière à déclencher un débordement mémoire dans les routines de traitement. Un modèle d'attaquant plutôt faible, alors qu'un attaquant avancé est capable de perturber l'exécution d'un programme en exploitant des vecteurs d'attaques tels que les injections de fautes matérielles, les attaques micro-architecturales, les attaques matérielles contrôlées par logiciel, et n'importe quelle combinaison de ces vecteurs d'attaques.Dans cette thèse, notre objectif est de concevoir une technique automatique et efficace pour raisonner sur l'impact d'un attaquant avancé sur les propriétés de sécurité d'un programme. Nous proposons l'atteignabilité adversariale, un formalisme qui étend la notion d'atteignabilité en y incluant les capacités de l'attaquant. Nous avons construit un nouvel algorithme, l'exécution symbolique adversariale, pour répondre au problème de l'atteignabilité adversariale sous l'angle de la recherche de bogues (vérification bornée). Notre algorithme évite l'augmentation significative de l'espace d'états à analyser due nouvelles capacités de l'attaquant, grâce à un nouvel encodage non branchant de celles-ci sous forme de fautes injectées. Nous le montrons correct et k-complet pour l'atteignabilité adversariale. De plus, nous avons imaginé deux optimisations visant à réduire le nombre de fautes : la détection précoce de saturation et l'injection à la demande.Nous proposons une implémentation de l'exécution symbolique adversariale au niveau binaire intégrée à l'outil BINSEC. Notre évaluation expérimentale repose sur des programmes usuels du domaine des fautes matérielles et des cartes à puce. Nos expériences montrent un gain de performance significatif par rapport à l'état de l'art, en moyenne d'un facteur x10 et x200 pour 1 et 2 fautes respectivement, avec un gain similaire en termes de chemins explorés. De plus, notre approche passe à l'échelle jusqu'à considérer 10 fautes alors que l'état de l'art atteint le temps limite pour 3 fautes. Nous montrons également l'utilisabilité de notre méthode dans différents scénarios de sécurité tels que reproduire une attaque BellCoRe sur CRT-RSA, chercher des attaques sur un programme protégé par la contre-mesure SecSwift, ou évaluer la robustesse d'un réseau de neurones. D'autre part, nous avons exploré le cas du programme de démarrage de WooKey en rejouant des attaques et en évaluant des contre-mesures proposées. En particulier, nous avons trouvé une attaque non mentionnée précédemment et avons proposé un nouveau correctif aux développeurs.
Fichier principal
Vignette du fichier
DUCOUSSO_2023_archivage.pdf (2.56 Mo) Télécharger le fichier
Origin Version validated by the jury (STAR)

Dates and versions

tel-04662172 , version 1 (25-07-2024)

Identifiers

  • HAL Id : tel-04662172 , version 1

Cite

Soline Ducousso. Moving code analysis from safety to security : attacker model. Modeling and Simulation. Université Grenoble Alpes [2020-..], 2023. English. ⟨NNT : 2023GRALM084⟩. ⟨tel-04662172⟩
66 View
22 Download

Share

Gmail Mastodon Facebook X LinkedIn More