Binsec/Rel: Efficient Relational Symbolic Execution for Constant-Time at Binary-Level
arXiv:1912.08788
Abstract
The constant-time programming discipline (CT) is an efficient countermeasure against timing side-channel attacks, requiring the control flow and the memory accesses to be independent from the secrets. Yet, writing CT code is challenging as it demands to reason about pairs of execution traces (2- hypersafety property) and it is generally not preserved by the compiler, requiring binary-level analysis. Unfortunately, current verification tools for CT either reason at higher level (C or LLVM), or sacrifice bug-finding or bounded-verification, or do not scale. We tackle the problem of designing an efficient binary-level verification tool for CT providing both bug-finding and bounded-verification. The technique builds on relational symbolic execution enhanced with new optimizations dedicated to information flow and binary-level analysis, yielding a dramatic improvement over prior work based on symbolic execution. We implement a prototype, Binsec/Rel, and perform extensive experiments on a set of 338 cryptographic implementations, demonstrating the benefits of our approach in both bug-finding and bounded-verification. Using Binsec/Rel, we also automate a previous manual study of CT preservation by compilers. Interestingly, we discovered that gcc -O0 and backend passes of clang introduce violations of CT in implementations that were previously deemed secure by a state-of-the-art CT verification tool operating at LLVM level, showing the importance of reasoning at binary-level.
18 pages, 7 figures, accepted at IEEE Symposium on Security and Privacy 2020
References in corpus (1)
Cited by in corpus (11)
- Constantine: Automatic Side-Channel Resistance Using Efficient Control and Data Flow Linearization
- Microwalk-CI: Practical Side-Channel Analysis for JavaScript Applications
- Cache Refinement Type for Side-Channel Detection of Cryptographic Software
- Forward Symbolic Execution for Trustworthy Automation of Binary Code Verification
- Breaking Bad: How Compilers Break Constant-Time Implementations
- Sound Symbolic Execution via Abstract Interpretation and its Application to Security
- Towards Automated Detection of Single-Trace Side-Channel Vulnerabilities in Constant-Time Cryptographic Code
- ProSpeCT: Provably Secure Speculation for the Constant-Time Policy (Extended version)
- Protecting Cryptographic Libraries against Side-Channel and Code-Reuse Attacks
- Foundations of Hardware-Software Leakage Contracts
- Solver-Aided Constant-Time Circuit Verification