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- 論文ID: 2501.04183
- タイトル: Decompiling for Constant-Time Analysis
- 著者: 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)
- 分類: cs.PL (プログラミング言語)
- 発表時期: 2025年1月 (arXiv プレプリント)
- 論文リンク: https://arxiv.org/abs/2501.04183
暗号化ライブラリはタイミング側チャネル攻撃の主要な標的である。このような攻撃に対する防御の実用的な方法は、定時間(CT)戦略に従うことである。しかし、定時間コードの作成は困難であり、定時間のソースコードであっても、主流のコンパイラによって脆弱性のあるバイナリコードに変換される可能性がある。本論文は、バイナリコードが定時間要件を満たしているかどうかを検証する方法を研究する。一般的なアプローチは、逆コンパイラをフロントエンドとして使用し、バイナリコードをソースコードまたは中間表現に変換してから、既存のCT分析ツールを適用することである。残念ながら、この「逆コンパイル-分析」方法には問題がある。本論文はClangover脆弱性などの事例を通じて、5つの一般的な逆コンパイラがすべてCT違反を排除し、分析結果を信頼できなくすることを証明している。
- タイミング側チャネル攻撃の脅威: 暗号化実装はタイミング側チャネル攻撃に対して脆弱であり、攻撃者はプログラム実行時間を観察することで秘密情報を推測できる
- 定時間戦略: CT戦略は、プログラム実行時間が秘密入力に依存しないことを要求し、秘密に依存するメモリアクセスと分岐ジャンプの実行を含まない
- コンパイラセキュリティ脆弱性: 主流コンパイラの最適化により、安全なソースコードが定時間違反のあるバイナリコードにコンパイルされる可能性がある
既存の「逆コンパイル-分析」方法には根本的な欠陥がある。逆コンパイラは変換プロセス中にCT違反を排除する可能性があり、分析ツールが脆弱性のあるバイナリコードを誤って安全と判定する原因となる。
- 実際的ニーズ: バイナリコードに対するCT分析が必要だが、既存ツールは主にソースコードを対象としている
- 方法の欠陥: 逆コンパイラをフロントエンドとして使用する現在の方法は信頼できない
- 理論的欠落: プログラム変換がCT分析に適しているかどうかを評価する理論的枠組みが不足している
- 問題の発見と証明: Clangover等の事例を通じて、5つの主流逆コンパイラがすべてCT違反を排除し、分析結果を信頼できなくすることを証明
- CT透明性理論の提案: CT透明性の概念を形式的に定義。すなわち、プログラム変換がCT違反を排除も導入もしない
- 証明技術の開発: シミュレーションベースの汎用方法を提案し、プログラム変換のCT透明性を証明
- 実用ツールの構築: 修正版RetDec逆コンパイラに基づくCT-RetDecツールを開発し、信頼できるバイナリCT分析を実現
- ツール欠陥の発見: 既存のCT分析ツール(CT-VerifおよびBinSec)が内部で使用する変換も透明でなく、セキュリティ脆弱性があることを証明
入力: バイナリプログラム
出力: CT分析結果(安全/不安全)
制約: 分析結果はバイナリプログラムの実際のCT属性を正確に反映する必要がある
プログラム変換 [[⋅]]:Ls→Lt に対して、3つの属性を定義:
- 反射性(Reflection): [[P]] がφ-CTであれば、Pはφ-CT
- 保持性(Preservation): Pがφ-CTであれば、[[P]] はφ-CT
- 透明性(Transparency): 反射性と保持性の両方を満たす
ロックステップシミュレーションと緩和シミュレーションの2つの方法を採用:
ロックステップシミュレーション: 出力プログラムの各ステップが入力プログラムの1ステップに対応
- シミュレーション関係: s∼t
- 観察変換器: T:Os→Ot
- 重要条件: Tは単射である必要がある
緩和シミュレーション: 入出力プログラムが異なるステップ数で実行することを許可
- ステップ数関数: ns:PC→N>0
- サフィックス関数: sf:PC→Os∗
- PC単射性: 各プログラムポイントに対して、観察変換器は単射である
- PC単射性の概念: 既存のCT保持技術を拡張し、各プログラムポイントで観察変換器が単射であることを要求することで反射性を保証
- 統一的枠組み: 複数のプログラム変換を同一の理論的枠組みの下で分析
- 実用性指向: 理論分析を提供するだけでなく、実際に使用可能なツールも開発
- 逆コンパイラテスト: Clangover脆弱性と構築された最小反例を使用して5つの逆コンパイラをテスト
- ベンチマークセット: 160個のバイナリプログラム。10種類の既知タイミング側チャネル脆弱性を含む
- コンパイラ: Clang 10/14/18/21
- 最適化レベル: -O0、-Os
- アーキテクチャ: x86-32、x86-64
- 正確性: CT違反を正しく識別しているか
- 完全性: 実際の脆弱性を見落としていないか
- 誤検知率: 安全なコードを不安全と標記していないか
- オリジナルRetDec + CT-LLVM
- CT-RetDec (修正版)
- 手動分析をグラウンドトゥルースとして
- RetDecの10個の非透明な最適化パスを無効化
- 52個のパスを保持。そのうち7個は理論的に透明性が証明されている
- 最終的なCT分析にはCT-LLVMを使用
テストされたすべての5つの逆コンパイラが、いくつかのCT違反を排除する:
| 逆コンパイラ | Clangover | 分岐統合 | 空分岐 | 死亡ロード | 死亡ストア |
|---|
| Angr | ✗ | ✗ | - | ✗ | - |
| BinaryNinja | - | ✗ | ✗ | ✗ | ✗ |
| Ghidra | - | - | ✗ | ✗ | - |
| Hex-Rays | - | ✗ | ✗ | ✗ | - |
| RetDec | ✗ | ✗ | ✗ | ✗ | ✗ |
160個のベンチマークプログラムにおいて:
- 正確率: 100%(誤検知なし、見落としなし)
- オリジナルRetDec: ほとんどのCT違反を見落とし
- 改善効果: CT分析の信頼性を大幅に向上
10種類の一般的なプログラム変換の透明性を分析:
透明な変換(7種類):
- 式置換(定数畳み込み、展開など)
- 死亡分岐の排除
- 死亡割り当ての排除
- オーバーフロー防止最適化
- 構造化分析
- ループ回転
非透明な変換(3種類):
CT-VerifおよびBinSecツールにセキュリティ脆弱性が存在することを発見:
- CT-Verif: SMACK変換器は死亡ロードを排除し、非CT プログラムを受け入れる原因となる
- BinSec: DBA昇格プロセスは空分岐を統合し、CT違反を排除する
既存のCT分析ツールは主に以下に基づいている:
- 積プログラム構築(CT-Verif)
- 型システム(Jasmin)
- SMTソルバー(Vale)
- 抽象解釈(Blazyら)
- シンボリック実行(BinSec)
関連研究はコンパイラがセキュリティ属性をどのように保持するかに焦点を当てている:
- CTシミュレーション技術(Bartheら)
- 漏洩変換器方法
- JasminおよびCompCertコンパイラのCT保持証明
既存の研究は主に機能的正確性に焦点を当てており、セキュリティ属性の保持についてはあまり考慮していない。
- 問題の普遍性: 主流逆コンパイラにはCT透明性の問題が広く存在する
- 理論的必要性: プログラム変換の透明性を評価・保証するための形式的理論が必要
- 実用的実行可能性: 理論的指導を通じて、信頼できるバイナリCT分析ツールを構築できる
- ツール欠陥: 既存のCT分析ツール自体にも透明性の問題がある
- カバー範囲: 基本的なCT戦略のみを分析し、復号化と細粒化漏洩モデルは含まない
- 変換タイプ: 理論分析は10種類の一般的な変換のみをカバーし、RetDecは62個のパスを含む
- 実装欠陥: 理論的に透明な変換であっても、実装にはバグが存在する可能性がある
- 理論の拡張: より複雑なセキュリティ属性と漏洩モデルをサポート
- 自動化検証: 変換透明性を自動的に検証するツールを開発
- コンパイラ改善: 透明性要件をコンパイラ設計に統合
- 問題の重要性: 実際のセキュリティ分析における重要な問題を解決
- 理論的貢献: 完全なCT透明性理論的枠組みを提案
- 実証的充実: 複数の事例とベンチマークテストを通じて理論を検証
- 実用的価値: 使用可能なツールを開発し、既存ツールの脆弱性を発見
- 形式的厳密性: Coq機械化証明を提供
- 理論的カバー: プログラム変換タイプの一部のみを分析
- 実験規模: ベンチマークテストは実際の脆弱性を含むが、規模は比較的限定的
- ツール完成度: CT-RetDecは依然として経験的方法に基づいて部分的にパスを無効化
- 学術的価値: プログラム変換のセキュリティ分析に新しい理論的枠組みを提供
- 実用的意義: 暗号化ソフトウェアのセキュリティ分析実践に直接影響
- ツール影響: 発見されたツール脆弱性は関連ツールの改善を促進
- 暗号化ソフトウェア分析: バイナリ暗号化実装に対するCT分析が必要なシーンに適用
- コンパイラ開発: コンパイラ最適化のセキュリティ検証に理論的基礎を提供
- セキュリティツール開発: 信頼できるバイナリセキュリティ分析ツール開発のガイダンスを提供
論文は側チャネル分析、セキュアコンパイル、逆コンパイル技術など複数の分野の重要な研究を含む61の関連文献を引用し、研究に堅実な理論的基礎を提供している。