Cryptographic libraries are a main target of timing side-channel attacks. A practical means to protect against these attacks is to adhere to the constant-time (CT) policy. However, it is hard to write constant-time code, and even constant-time code can be turned vulnerable by mainstream compilers. So how can we verify that binary code is constant-time? The obvious answer is to use binary-level CT tools. To do so, a common approach is to use decompilers or lifters as a front-end for CT analysis tools operating on source code or IR. Unfortunately, this approach is problematic with current decompilers. To illustrate this fact, we use the recent Clangover vulnerability and other constructed examples to show that five popular decompilers eliminate CT violations, rendering them not applicable with the approach.
In this paper, we develop foundations to asses whether a decompiler is fit for the Decompile-then-Analyze approach. We propose CT transparency, which states that a transformation neither eliminates nor introduces CT violations, and a general method for proving that a program transformation is CT transparent. Then, we build CT-RetDec, a CT analysis tool based on a modified version of the LLVM-based decompiler RetDec. We evaluate CT-RetDec on a benchmark of real-world vulnerabilities in binaries, and show that the modifications had significant impact on CT-RetDec's performance.
As a contribution of independent interest, we found that popular tools for binary-level CT analysis rely on decompiler-like transformations before analysis. We show that two such tools employ transformations that are not CT transparent, and, consequently, that they incorrectly accept non-CT programs. While our examples are very specific and do not invalidate the general approach of these tools, we advocate that tool developers counter such potential issues by proving the transparency of such transformations.
- ID de l'article: 2501.04183
- Titre: Decompiling for Constant-Time Analysis
- Auteurs: Santiago Arranz-Olmos (MPI-SP), Gilles Barthe (MPI-SP & IMDEA), Lionel Blatter (MPI-SP), Youcef Bouzid (ENS Paris-Saclay), Sören van der Wall (TU Braunschweig), Zhiyuan Zhang (MPI-SP)
- Classification: cs.PL (Langages de Programmation)
- Date de Publication: Janvier 2025 (prépublication arXiv)
- Lien de l'article: https://arxiv.org/abs/2501.04183
Les bibliothèques cryptographiques sont des cibles principales des attaques par canaux auxiliaires temporels. Une approche pratique pour se défendre contre ces attaques consiste à respecter la stratégie du temps constant (TC). Cependant, l'écriture de code à temps constant est difficile, et même le code source à temps constant peut être transformé par les compilateurs courants en code binaire vulnérable. Cet article étudie comment vérifier si le code binaire satisfait les exigences du temps constant. Une approche courante consiste à utiliser un décompilateur comme frontal pour transformer le code binaire en code source ou représentation intermédiaire, puis appliquer les outils d'analyse TC existants. Malheureusement, cette approche « décompilation-analyse » présente des problèmes. Cet article démontre, par des exemples tels que la vulnérabilité Clangover, que cinq décompilateurs populaires éliminent les violations du TC, rendant les résultats d'analyse peu fiables.
- Menace des attaques par canaux auxiliaires temporels: Les implémentations cryptographiques sont vulnérables aux attaques par canaux auxiliaires temporels, où les attaquants peuvent déduire des informations secrètes en observant le temps d'exécution du programme
- Stratégie du temps constant: La stratégie TC exige que le temps d'exécution du programme ne dépende pas des entrées secrètes, y compris l'absence d'accès mémoire dépendant des secrets et de sauts de branche
- Vulnérabilités du compilateur: Les optimisations des compilateurs courants peuvent transformer du code source sûr en code binaire présentant des violations du TC
L'approche existante « décompilation-analyse » présente un défaut fondamental: le décompilateur peut éliminer les violations du TC lors de la transformation, ce qui conduit les outils d'analyse à conclure à tort que le code binaire vulnérable est sûr.
- Besoin pratique: Nécessité d'effectuer une analyse TC sur le code binaire, mais les outils existants ciblent principalement le code source
- Défaut méthodologique: La méthode actuelle utilisant un décompilateur comme frontal n'est pas fiable
- Lacune théorique: Absence d'un cadre théorique pour évaluer si les transformations de programme conviennent à l'analyse TC
- Découverte et preuve du problème: Démonstration que cinq décompilateurs courants éliminent les violations du TC par des exemples tels que Clangover, rendant les résultats d'analyse peu fiables
- Proposition d'une théorie de la transparence TC: Définition formelle du concept de transparence TC, c'est-à-dire que la transformation de programme n'élimine ni n'introduit de violations du TC
- Développement de techniques de preuve: Proposition d'une méthode générale basée sur la simulation pour prouver la transparence TC des transformations de programme
- Construction d'un outil pratique: Développement de l'outil CT-RetDec, basé sur un décompilateur RetDec modifié pour une analyse TC binaire fiable
- Découverte de défauts d'outils: Preuve que les transformations utilisées en interne par les outils d'analyse TC existants (CT-Verif et BinSec) ne sont pas transparentes et présentent des vulnérabilités de sécurité
Entrée: Programme binaire
Sortie: Résultat d'analyse TC (sûr/non sûr)
Contrainte: Le résultat d'analyse doit refléter avec précision les propriétés TC réelles du programme binaire
Pour une transformation de programme [[⋅]]:Ls→Lt, définition de trois propriétés:
- Réflexivité (Reflection): Si [[P]] est φ-TC, alors P est φ-TC
- Préservation (Preservation): Si P est φ-TC, alors [[P]] est φ-TC
- Transparence (Transparency): Satisfaction simultanée de la réflexivité et de la préservation
Deux méthodes de simulation sont employées:
Simulation pas à pas: Chaque étape du programme de sortie correspond à une étape du programme d'entrée
- Relation de simulation: s∼t
- Transformateur d'observation: T:Os→Ot
- Condition clé: T doit être injectif
Simulation relâchée: Permet aux programmes d'entrée et de sortie d'exécuter un nombre d'étapes différent
- Fonction du nombre d'étapes: ns:PC→N>0
- Fonction de suffixe: sf:PC→Os∗
- Injectivité du PC: Pour chaque point de programme, le transformateur d'observation est injectif
- Concept d'injectivité du PC: Extension des techniques existantes de préservation du TC, en exigeant que le transformateur d'observation soit injectif à chaque point de programme pour garantir la réflexivité
- Cadre unifié: Analyse de multiples transformations de programme dans un même cadre théorique
- Orientation pratique: Fourniture non seulement d'une analyse théorique, mais aussi développement d'outils pratiquement utilisables
- Tests de décompilateur: Utilisation de la vulnérabilité Clangover et de contre-exemples minimaux construits pour tester 5 décompilateurs
- Ensemble de référence: 160 programmes binaires contenant 10 types de vulnérabilités connues de canaux auxiliaires temporels
- Compilateurs: Clang 10/14/18/21
- Niveaux d'optimisation: -O0, -Os
- Architectures: x86-32, x86-64
- Exactitude: Identification correcte des violations du TC
- Complétude: Absence de faux négatifs
- Taux de faux positifs: Marquage incorrect du code sûr comme non sûr
- RetDec original + CT-LLVM
- CT-RetDec (version modifiée)
- Analyse manuelle comme vérité de référence
- Désactivation de 10 passes d'optimisation non transparentes dans RetDec
- Conservation de 52 passes, dont 7 prouvées théoriquement transparentes
- Utilisation de CT-LLVM pour l'analyse TC finale
Tous les 5 décompilateurs testés éliminent certaines violations du TC:
| Décompilateur | Clangover | Branch Coalescing | Empty Branch | Dead Load | Dead Store |
|---|
| Angr | ✗ | ✗ | - | ✗ | - |
| BinaryNinja | - | ✗ | ✗ | ✗ | ✗ |
| Ghidra | - | - | ✗ | ✗ | - |
| Hex-Rays | - | ✗ | ✗ | ✗ | - |
| RetDec | ✗ | ✗ | ✗ | ✗ | ✗ |
Sur 160 programmes de référence:
- Taux de précision: 100% (sans faux positifs, sans faux négatifs)
- RetDec original: Omet la plupart des violations du TC
- Effet d'amélioration: Amélioration significative de la fiabilité de l'analyse TC
Analyse de la transparence de 10 transformations de programme courantes:
Transformations transparentes (7 types):
- Substitution d'expressions (repliement de constantes, déroulement, etc.)
- Élimination de branches mortes
- Élimination d'affectations mortes
- Optimisation anti-débordement
- Analyse structurée
- Rotation de boucles
Transformations non transparentes (3 types):
- Fusion de branches
- Conversion If
- Élimination d'accès mémoire
Découverte de vulnérabilités de sécurité dans les outils CT-Verif et BinSec:
- CT-Verif: Le transformateur SMACK élimine les chargements morts, ce qui conduit à accepter les programmes non-TC
- BinSec: Le processus d'élévation DBA fusionne les branches vides, éliminant les violations du TC
Les outils d'analyse TC existants sont principalement basés sur:
- Construction de programmes produits (CT-Verif)
- Systèmes de types (Jasmin)
- Solveurs SMT (Vale)
- Interprétation abstraite (Blazy et al.)
- Exécution symbolique (BinSec)
Les recherches connexes se concentrent sur la façon dont les compilateurs préservent les propriétés de sécurité:
- Techniques de simulation TC (Barthe et al.)
- Méthode des transformateurs de fuite
- Preuves de préservation du TC des compilateurs Jasmin et CompCert
Les travaux existants se concentrent principalement sur la correction fonctionnelle, avec peu de considération pour la préservation des propriétés de sécurité.
- Universalité du problème: Les décompilateurs courants présentent universellement des problèmes de transparence TC
- Nécessité théorique: Un cadre théorique formel est nécessaire pour évaluer et garantir la transparence des transformations de programme
- Faisabilité pratique: Grâce à la théorie, il est possible de construire des outils d'analyse TC binaire fiables
- Défauts des outils: Les outils d'analyse TC existants eux-mêmes présentent des problèmes de transparence
- Couverture: Analyse uniquement de la stratégie TC de base, sans considération pour le déchiffrement et les modèles de fuite affinés
- Types de transformations: L'analyse théorique ne couvre que 10 transformations courantes, RetDec contient 62 passes
- Défauts d'implémentation: Même pour les transformations théoriquement transparentes, des bogues peuvent exister dans l'implémentation
- Extension théorique: Support de propriétés de sécurité plus complexes et de modèles de fuite
- Vérification automatisée: Développement d'outils pour vérifier automatiquement la transparence des transformations
- Amélioration du compilateur: Intégration des exigences de transparence dans la conception du compilateur
- Importance du problème: Résout un problème clé dans l'analyse de sécurité pratique
- Contribution théorique: Propose un cadre théorique complet de transparence TC
- Validation empirique suffisante: Vérification de la théorie par plusieurs exemples et tests de référence
- Valeur pratique: Développement d'outils utilisables et découverte de défauts dans les outils existants
- Rigueur formelle: Fourniture de preuves mécanisées en Coq
- Couverture théorique: Analyse uniquement de certains types de transformations de programme
- Échelle expérimentale: Bien que l'ensemble de référence contienne des vulnérabilités réelles, l'échelle est relativement limitée
- Maturité de l'outil: CT-RetDec repose toujours sur des méthodes empiriques pour désactiver certaines passes
- Valeur académique: Fournit un nouveau cadre théorique pour l'analyse de sécurité des transformations de programme
- Signification pratique: Affecte directement la pratique d'analyse de sécurité des logiciels cryptographiques
- Impact des outils: Les défauts d'outils découverts favoriseront l'amélioration des outils connexes
- Analyse de logiciels cryptographiques: Applicable aux scénarios nécessitant une analyse TC des implémentations cryptographiques binaires
- Développement de compilateurs: Fournit une base théorique pour la vérification de la sécurité des optimisations du compilateur
- Développement d'outils de sécurité: Fournit des conseils pour le développement d'outils d'analyse binaire de sécurité fiables
L'article cite 61 références connexes, couvrant plusieurs domaines tels que l'analyse des canaux auxiliaires, la compilation sécurisée et les techniques de décompilation, fournissant une base théorique solide pour la recherche.