2025-11-10T03:00:57.254697

Decompiling for Constant-Time Analysis

Arranz-Olmos, Barthe, Blatter et al.
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.
academic

Decompilazione per l'Analisi del Tempo Costante

Informazioni Fondamentali

  • ID Articolo: 2501.04183
  • Titolo: Decompilazione per l'Analisi del Tempo Costante
  • Autori: 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)
  • Classificazione: cs.PL (Linguaggi di Programmazione)
  • Data di Pubblicazione: Gennaio 2025 (preprint arXiv)
  • Link Articolo: https://arxiv.org/abs/2501.04183

Riassunto

Le librerie crittografiche sono bersagli principali degli attacchi ai canali laterali temporali. Un approccio pratico per difendersi da tali attacchi consiste nel seguire strategie di tempo costante (CT). Tuttavia, scrivere codice a tempo costante è difficile, e anche il codice sorgente a tempo costante può essere trasformato dai compilatori mainstream in codice binario vulnerabile. Questo articolo esamina come verificare se il codice binario soddisfa i requisiti di tempo costante. Un approccio comune consiste nell'utilizzare un decompilatore come frontend per trasformare il codice binario in codice sorgente o rappresentazione intermedia, quindi applicare strumenti di analisi CT esistenti. Sfortunatamente, questo metodo "decompilazione-analisi" presenta problemi. L'articolo dimostra, attraverso esempi come la vulnerabilità Clangover, che cinque decompilatori popolari eliminano le violazioni CT, rendendo i risultati dell'analisi inaffidabili.

Contesto di Ricerca e Motivazione

Contesto del Problema

  1. Minaccia degli Attacchi ai Canali Laterali Temporali: Le implementazioni crittografiche sono vulnerabili agli attacchi ai canali laterali temporali, dove gli attaccanti possono dedurre informazioni segrete osservando il tempo di esecuzione del programma
  2. Strategia di Tempo Costante: La strategia CT richiede che il tempo di esecuzione del programma non dipenda dall'input segreto, incluso il non eseguire accessi alla memoria dipendenti da segreti e salti condizionali
  3. Vulnerabilità del Compilatore: Le ottimizzazioni dei compilatori mainstream possono compilare codice sorgente sicuro in codice binario con violazioni CT

Problema Centrale

Il metodo "decompilazione-analisi" esistente presenta un difetto fondamentale: i decompilatori potrebbero eliminare le violazioni CT durante la trasformazione, causando agli strumenti di analisi di ritenere erroneamente che il codice binario vulnerabile sia sicuro.

Motivazione della Ricerca

  1. Necessità Pratica: È necessario eseguire analisi CT sul codice binario, ma gli strumenti esistenti si concentrano principalmente sul codice sorgente
  2. Difetto del Metodo: L'approccio attuale che utilizza i decompilatori come frontend è inaffidabile
  3. Lacuna Teorica: Manca un quadro teorico per valutare se le trasformazioni di programmi sono adatte all'analisi CT

Contributi Principali

  1. Identificazione e Dimostrazione del Problema: Dimostra attraverso esempi come Clangover che cinque decompilatori mainstream eliminano le violazioni CT, rendendo i risultati dell'analisi inaffidabili
  2. Proposizione della Teoria della Trasparenza CT: Definisce formalmente il concetto di trasparenza CT, ovvero le trasformazioni di programmi che non eliminano né introducono violazioni CT
  3. Sviluppo di Tecniche di Dimostrazione: Propone un metodo generico basato sulla simulazione per provare la trasparenza CT delle trasformazioni di programmi
  4. Costruzione di Strumenti Pratici: Sviluppa lo strumento CT-RetDec, basato su un decompilatore RetDec modificato per un'analisi CT binaria affidabile
  5. Scoperta di Difetti negli Strumenti: Dimostra che le trasformazioni utilizzate internamente dagli strumenti di analisi CT esistenti (CT-Verif e BinSec) non sono trasparenti, presentando vulnerabilità di sicurezza

Spiegazione Dettagliata del Metodo

Definizione del Compito

Input: Programma binario Output: Risultato dell'analisi CT (sicuro/non sicuro) Vincoli: Il risultato dell'analisi deve riflettere accuratamente le proprietà CT effettive del programma binario

Quadro Teorico

Definizione della Trasparenza CT

Per una trasformazione di programma :LsLt\llbracket \cdot \rrbracket : L_s \to L_t, si definiscono tre proprietà:

  1. Riflessione (Reflection): Se P\llbracket P \rrbracket è φ-CT, allora P è φ-CT
  2. Preservazione (Preservation): Se P è φ-CT, allora P\llbracket P \rrbracket è φ-CT
  3. Trasparenza (Transparency): Soddisfa contemporaneamente sia la riflessione che la preservazione

Tecniche di Simulazione

Adotta due metodi: simulazione a passo sincronizzato e simulazione rilassata:

Simulazione a Passo Sincronizzato: Ogni passo del programma di output corrisponde a un passo del programma di input

  • Relazione di simulazione: sts \sim t
  • Trasformatore di osservazione: T:OsOtT : O_s \to O_t
  • Condizione critica: T deve essere iniettiva

Simulazione Rilassata: Consente ai programmi di input e output di eseguire un numero diverso di passi

  • Funzione di numero di passi: ns:PCN>0ns : PC \to \mathbb{N}_{>0}
  • Funzione di suffisso: sf:PCOssf : PC \to O_s^*
  • Iniettività PC: Per ogni punto di programma, il trasformatore di osservazione deve essere iniettivo

Punti di Innovazione Tecnica

  1. Concetto di Iniettività PC: Estende le tecniche di preservazione CT esistenti, richiedendo che il trasformatore di osservazione sia iniettivo in ogni punto di programma per garantire la riflessione
  2. Quadro Unificato: Analizza molteplici trasformazioni di programmi sotto lo stesso quadro teorico
  3. Orientamento alla Praticità: Fornisce non solo analisi teorica, ma sviluppa anche strumenti praticamente utilizzabili

Configurazione Sperimentale

Dataset

  1. Test dei Decompilatori: Utilizza la vulnerabilità Clangover e controesempi costruiti per testare 5 decompilatori
  2. Suite di Benchmark: 160 programmi binari, contenenti 10 tipi noti di vulnerabilità ai canali laterali temporali
    • Compilatori: Clang 10/14/18/21
    • Livelli di ottimizzazione: -O0, -Os
    • Architetture: x86-32, x86-64

Metriche di Valutazione

  • Accuratezza: Se le violazioni CT vengono identificate correttamente
  • Completezza: Se le vulnerabilità reali vengono omesse
  • Tasso di Falsi Positivi: Se il codice sicuro viene contrassegnato come non sicuro

Metodi di Confronto

  • RetDec originale + CT-LLVM
  • CT-RetDec (versione modificata)
  • Analisi manuale come ground truth

Dettagli di Implementazione

  • Disabilitazione di 10 pass di ottimizzazione non trasparenti in RetDec
  • Conservazione di 52 pass, di cui 7 provati teoricamente trasparenti
  • Utilizzo di CT-LLVM per l'analisi CT finale

Risultati Sperimentali

Risultati Principali

Test di Trasparenza dei Decompilatori

Tutti e 5 i decompilatori testati eliminano alcune violazioni CT:

DecompilatoreClangoverBranch CoalescingEmpty BranchDead LoadDead Store
Angr--
BinaryNinja-
Ghidra---
Hex-Rays--
RetDec

Valutazione delle Prestazioni di CT-RetDec

Su 160 programmi di benchmark:

  • Tasso di Accuratezza: 100% (nessun falso positivo, nessun falso negativo)
  • RetDec Originale: Omette la maggior parte delle violazioni CT
  • Effetto del Miglioramento: Migliora significativamente l'affidabilità dell'analisi CT

Analisi delle Trasformazioni di Programmi

Analizza la trasparenza di 10 trasformazioni di programmi comuni:

Trasformazioni Trasparenti (7):

  • Sostituzione di espressioni (piegatura di costanti, espansione, ecc.)
  • Eliminazione di rami morti
  • Eliminazione di assegnazioni morte
  • Ottimizzazione anti-overflow
  • Analisi strutturata
  • Rotazione di cicli

Trasformazioni Non Trasparenti (3):

  • Fusione di rami
  • Conversione If
  • Eliminazione di accessi alla memoria

Scoperta di Difetti negli Strumenti

Scopre vulnerabilità di sicurezza negli strumenti CT-Verif e BinSec:

  • CT-Verif: Il trasformatore SMACK elimina i caricamenti morti, causando l'accettazione di programmi non CT
  • BinSec: Il processo di elevazione DBA fonde rami vuoti, eliminando le violazioni CT

Lavori Correlati

Analisi dei Canali Laterali

Gli strumenti di analisi CT esistenti si basano principalmente su:

  • Costruzione di programmi prodotto (CT-Verif)
  • Sistemi di tipo (Jasmin)
  • Risolutori SMT (Vale)
  • Interpretazione astratta (Blazy et al.)
  • Esecuzione simbolica (BinSec)

Compilazione Sicura

La ricerca correlata si concentra su come i compilatori preservano le proprietà di sicurezza:

  • Tecniche di simulazione CT (Barthe et al.)
  • Metodo del trasformatore di perdita
  • Prove di preservazione CT dei compilatori Jasmin e CompCert

Correttezza della Decompilazione

I lavori esistenti si concentrano principalmente sulla correttezza funzionale, considerando meno la preservazione delle proprietà di sicurezza.

Conclusioni e Discussione

Conclusioni Principali

  1. Universalità del Problema: I decompilatori mainstream presentano universalmente problemi di trasparenza CT
  2. Necessità Teorica: È necessaria una teoria formalizzata per valutare e garantire la trasparenza delle trasformazioni di programmi
  3. Fattibilità Pratica: Attraverso la guida teorica è possibile costruire strumenti affidabili di analisi CT binaria
  4. Difetti degli Strumenti: Gli strumenti di analisi CT esistenti presentano essi stessi problemi di trasparenza

Limitazioni

  1. Copertura: Analizza solo strategie CT di base, non affrontando decrittazione e modelli di perdita raffinati
  2. Tipi di Trasformazione: L'analisi teorica copre solo 10 trasformazioni comuni, mentre RetDec contiene 62 pass
  3. Difetti di Implementazione: Anche le trasformazioni teoricamente trasparenti potrebbero contenere bug nell'implementazione

Direzioni Future

  1. Estensione della Teoria: Supportare proprietà di sicurezza più complesse e modelli di perdita
  2. Verifica Automatizzata: Sviluppare strumenti per verificare automaticamente la trasparenza delle trasformazioni
  3. Miglioramento del Compilatore: Integrare i requisiti di trasparenza nella progettazione del compilatore

Valutazione Approfondita

Punti di Forza

  1. Importanza del Problema: Risolve un problema critico nell'analisi di sicurezza pratica
  2. Contributo Teorico: Propone un quadro teorico completo della trasparenza CT
  3. Evidenza Empirica Sufficiente: Verifica la teoria attraverso molteplici esempi e test di benchmark
  4. Valore Pratico: Sviluppa strumenti utilizzabili e scopre vulnerabilità negli strumenti esistenti
  5. Rigore Formalizzato: Fornisce prove meccanizzate in Coq

Insufficienze

  1. Copertura Teorica: Analizza solo tipi parziali di trasformazioni di programmi
  2. Scala Sperimentale: Sebbene i test di benchmark contengano vulnerabilità reali, la scala è relativamente limitata
  3. Completezza dello Strumento: CT-RetDec si basa ancora su metodi empirici per disabilitare alcuni pass

Impatto

  1. Valore Accademico: Fornisce un nuovo quadro teorico per l'analisi della sicurezza delle trasformazioni di programmi
  2. Significato Pratico: Influenza direttamente la pratica di analisi della sicurezza del software crittografico
  3. Impatto dello Strumento: Le vulnerabilità degli strumenti scoperte promuoveranno il miglioramento dei relativi strumenti

Scenari Applicabili

  1. Analisi del Software Crittografico: Applicabile a scenari che richiedono analisi CT di implementazioni crittografiche binarie
  2. Sviluppo del Compilatore: Fornisce basi teoriche per la verifica della sicurezza delle ottimizzazioni del compilatore
  3. Sviluppo di Strumenti di Sicurezza: Fornisce guida per lo sviluppo di strumenti affidabili di analisi della sicurezza binaria

Bibliografia

L'articolo cita 61 riferimenti correlati, coprendo molteplici aree di ricerca inclusa l'analisi dei canali laterali, la compilazione sicura e le tecniche di decompilazione, fornendo una solida base teorica per la ricerca.