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 del Artículo: 2501.04183
- Título: Descompilación para Análisis de Tiempo Constante
- Autores: 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)
- Clasificación: cs.PL (Lenguajes de Programación)
- Fecha de Publicación: Enero de 2025 (preimpresión en arXiv)
- Enlace del Artículo: https://arxiv.org/abs/2501.04183
Las bibliotecas criptográficas son objetivos principales de ataques de canal lateral de temporización. Un método práctico para defenderse contra estos ataques es seguir estrategias de tiempo constante (TC). Sin embargo, escribir código de tiempo constante es difícil, e incluso el código fuente de tiempo constante puede ser transformado por compiladores convencionales en código binario vulnerable. Este artículo investiga cómo verificar si el código binario satisface los requisitos de tiempo constante. Un enfoque común es utilizar descompiladores como interfaz frontal para transformar código binario en código fuente o representación intermedia, y luego aplicar herramientas de análisis TC existentes. Desafortunadamente, este método de "descompilación-análisis" presenta problemas. Este artículo demuestra, mediante ejemplos como la vulnerabilidad Clangover, que cinco descompiladores populares eliminan violaciones de TC, haciendo que los resultados del análisis sean poco confiables.
- Amenaza de Ataques de Canal Lateral de Temporización: Las implementaciones criptográficas son susceptibles a ataques de canal lateral de temporización, donde los atacantes pueden inferir información secreta observando el tiempo de ejecución del programa
- Estrategia de Tiempo Constante: La estrategia TC requiere que el tiempo de ejecución del programa no dependa de entradas secretas, incluyendo no ejecutar accesos a memoria dependientes de secretos ni saltos condicionales
- Vulnerabilidades de Compilador: Las optimizaciones de compiladores convencionales pueden compilar código fuente seguro en código binario con violaciones de TC
El método actual de "descompilación-análisis" presenta un defecto fundamental: los descompiladores pueden eliminar violaciones de TC durante la transformación, causando que las herramientas de análisis crean erróneamente que el código binario vulnerable es seguro.
- Necesidad Práctica: Se requiere análisis TC de código binario, pero las herramientas existentes se orientan principalmente al código fuente
- Defecto del Método: El método actual de usar descompiladores como interfaz frontal no es confiable
- Vacío Teórico: Falta un marco teórico para evaluar si las transformaciones de programas son adecuadas para análisis TC
- Descubrimiento y Prueba del Problema: Mediante ejemplos como Clangover, se demuestra que cinco descompiladores convencionales eliminan violaciones de TC, haciendo que los resultados del análisis sean poco confiables
- Propuesta de Teoría de Transparencia TC: Se formaliza el concepto de transparencia TC, es decir, transformaciones de programas que ni eliminan ni introducen violaciones de TC
- Desarrollo de Técnicas de Prueba: Se propone un método genérico basado en simulación para probar la transparencia TC de transformaciones de programas
- Construcción de Herramienta Práctica: Se desarrolla la herramienta CT-RetDec, basada en un descompilador RetDec modificado para análisis TC binario confiable
- Descubrimiento de Defectos de Herramientas: Se demuestra que las transformaciones utilizadas internamente por herramientas de análisis TC existentes (CT-Verif y BinSec) tampoco son transparentes, presentando vulnerabilidades de seguridad
Entrada: Programa binario
Salida: Resultado del análisis TC (seguro/inseguro)
Restricción: El resultado del análisis debe reflejar con precisión las propiedades TC reales del programa binario
Para una transformación de programa [[⋅]]:Ls→Lt, se definen tres propiedades:
- Reflexividad (Reflection): Si [[P]] es φ-TC, entonces P es φ-TC
- Preservación (Preservation): Si P es φ-TC, entonces [[P]] es φ-TC
- Transparencia (Transparency): Satisface simultáneamente reflexividad y preservación
Se emplean dos métodos: simulación de paso sincronizado y simulación relajada:
Simulación de Paso Sincronizado: Cada paso del programa de salida corresponde a un paso del programa de entrada
- Relación de simulación: s∼t
- Transformador de observación: T:Os→Ot
- Condición clave: T debe ser inyectiva
Simulación Relajada: Permite que los programas de entrada y salida ejecuten diferentes números de pasos
- Función de pasos: ns:PC→N>0
- Función de sufijo: sf:PC→Os∗
- Inyectividad de PC: Para cada punto de programa, el transformador de observación debe ser inyectivo
- Concepto de Inyectividad de PC: Extiende las técnicas existentes de preservación TC, requiriendo que el transformador de observación sea inyectivo en cada punto de programa para garantizar reflexividad
- Marco Unificado: Unifica múltiples transformaciones de programas bajo el mismo marco teórico de análisis
- Orientación Práctica: No solo proporciona análisis teórico, sino que también desarrolla herramientas prácticamente utilizables
- Pruebas de Descompilador: Se utiliza la vulnerabilidad Clangover y contraejemplos mínimos construidos para probar 5 descompiladores
- Conjunto de Referencia: 160 programas binarios, conteniendo 10 tipos conocidos de vulnerabilidades de canal lateral de temporización
- Compiladores: Clang 10/14/18/21
- Niveles de optimización: -O0, -Os
- Arquitecturas: x86-32, x86-64
- Precisión: ¿Se identifican correctamente las violaciones de TC?
- Completitud: ¿Se omiten vulnerabilidades reales?
- Tasa de Falsos Positivos: ¿Se marca código seguro como inseguro?
- RetDec original + CT-LLVM
- CT-RetDec (versión modificada)
- Análisis manual como verdad fundamental
- Se desactivan 10 pases de optimización no transparentes en RetDec
- Se conservan 52 pases, de los cuales 7 se demuestran teóricamente como transparentes
- Se utiliza CT-LLVM para el análisis TC final
Todos los 5 descompiladores probados eliminan algunas violaciones de TC:
| Descompilador | Clangover | Fusión de Ramas | Rama Vacía | Carga Muerta | Almacenamiento Muerto |
|---|
| Angr | ✗ | ✗ | - | ✗ | - |
| BinaryNinja | - | ✗ | ✗ | ✗ | ✗ |
| Ghidra | - | - | ✗ | ✗ | - |
| Hex-Rays | - | ✗ | ✗ | ✗ | - |
| RetDec | ✗ | ✗ | ✗ | ✗ | ✗ |
En 160 programas de referencia:
- Precisión: 100% (sin falsos positivos, sin falsos negativos)
- RetDec Original: Omite la mayoría de violaciones de TC
- Efecto de Mejora: Mejora significativa en la confiabilidad del análisis TC
Se analizan 10 transformaciones de programa comunes para transparencia:
Transformaciones Transparentes (7 tipos):
- Sustitución de expresiones (plegado de constantes, expansión, etc.)
- Eliminación de ramas muertas
- Eliminación de asignaciones muertas
- Optimización anti-desbordamiento
- Análisis estructurado
- Rotación de bucles
Transformaciones No Transparentes (3 tipos):
- Fusión de ramas
- Conversión If
- Eliminación de acceso a memoria
Se descubren vulnerabilidades de seguridad en las herramientas CT-Verif y BinSec:
- CT-Verif: El transformador SMACK elimina cargas muertas, causando aceptación de programas no-TC
- BinSec: El proceso de elevación DBA fusiona ramas vacías, eliminando violaciones de TC
Las herramientas de análisis TC existentes se basan principalmente en:
- Construcción de programa producto (CT-Verif)
- Sistemas de tipos (Jasmin)
- Solucionadores SMT (Vale)
- Interpretación abstracta (Blazy et al.)
- Ejecución simbólica (BinSec)
La investigación relacionada se enfoca en cómo los compiladores preservan propiedades de seguridad:
- Técnicas de simulación TC (Barthe et al.)
- Método de transformador de fuga
- Pruebas de preservación TC de compiladores Jasmin y CompCert
El trabajo existente se enfoca principalmente en corrección funcional, con menos consideración de preservación de propiedades de seguridad.
- Universalidad del Problema: Los descompiladores convencionales presentan ampliamente problemas de transparencia TC
- Necesidad Teórica: Se requiere teoría formalizada para evaluar y garantizar la transparencia de transformaciones de programas
- Viabilidad Práctica: Mediante teoría guiada se pueden construir herramientas confiables de análisis TC binario
- Defectos de Herramientas: Las herramientas de análisis TC existentes también presentan problemas de transparencia
- Alcance de Cobertura: Solo se analizan estrategias TC básicas, sin involucrar descifrado y modelos de fuga refinados
- Tipos de Transformación: El análisis teórico solo cubre 10 transformaciones comunes, mientras que RetDec contiene 62 pases
- Defectos de Implementación: Incluso transformaciones teóricamente transparentes pueden contener errores en la implementación
- Extensión Teórica: Soporte para propiedades de seguridad más complejas y modelos de fuga
- Verificación Automatizada: Desarrollo de herramientas para verificar automáticamente la transparencia de transformaciones
- Mejora de Compiladores: Integración de requisitos de transparencia en el diseño de compiladores
- Importancia del Problema: Resuelve un problema crítico en análisis de seguridad práctica
- Contribución Teórica: Propone un marco teórico completo de transparencia TC
- Evidencia Empírica Suficiente: Verifica la teoría mediante múltiples ejemplos y pruebas de referencia
- Valor Práctico: Desarrolla herramientas utilizables y descubre defectos en herramientas existentes
- Rigor Formalizado: Proporciona pruebas mecanizadas en Coq
- Cobertura Teórica: Solo analiza tipos parciales de transformaciones de programa
- Escala Experimental: Aunque el conjunto de referencia contiene vulnerabilidades reales, la escala es relativamente limitada
- Madurez de Herramientas: CT-RetDec aún se basa en métodos empíricos para desactivar ciertos pases
- Valor Académico: Proporciona un nuevo marco teórico para análisis de seguridad de transformaciones de programas
- Significado Práctico: Impacta directamente la práctica de análisis de seguridad de software criptográfico
- Impacto de Herramientas: Los defectos de herramientas descubiertos promoverán la mejora de herramientas relacionadas
- Análisis de Software Criptográfico: Aplicable a escenarios que requieren análisis TC de implementaciones criptográficas binarias
- Desarrollo de Compiladores: Proporciona base teórica para verificación de seguridad de optimizaciones de compiladores
- Desarrollo de Herramientas de Seguridad: Proporciona orientación para desarrollar herramientas confiables de análisis de seguridad binaria
El artículo cita 61 referencias relacionadas, cubriendo múltiples campos incluyendo análisis de canal lateral, compilación segura, técnicas de descompilación y otros trabajos importantes, proporcionando una base teórica sólida para la investigación.