[論文レビュー] Fully Countering Trusting Trust through Diverse Double-Compiling
本稿では、コンパイラがコンパイルされたコードにバックドアを仕込む「信頼の信頼(trusting trust)」攻撃を検出・対抗するための技術、Diverse Double-Compiling(DDC)を提案する。異なるコンパイラを用いてコンパイラのソースコードを2度コンパイルし、ビット単位で同一の出力を得ることで、コンパイルされたバイナリがそのソースを忠実に反映していることを保証する。これにより、形式的証明と、GCC や悪意ある変種を含む複数のコンパイラにおける実証的検証が可能となる。
An Air Force evaluation of Multics, and Ken Thompson's Turing award lecture ("Reflections on Trusting Trust"), showed that compilers can be subverted to insert malicious Trojan horses into critical software, including themselves. If this "trusting trust" attack goes undetected, even complete analysis of a system's source code will not find the malicious code that is running. Previously-known countermeasures have been grossly inadequate. If this attack cannot be countered, attackers can quietly subvert entire classes of computer systems, gaining complete control over financial, infrastructure, military, and/or business systems worldwide. This dissertation's thesis is that the trusting trust attack can be detected and effectively countered using the "Diverse Double-Compiling" (DDC) technique, as demonstrated by (1) a formal proof that DDC can determine if source code and generated executable code correspond, (2) a demonstration of DDC with four compilers (a small C compiler, a small Lisp compiler, a small maliciously corrupted Lisp compiler, and a large industrial-strength C compiler, GCC), and (3) a description of approaches for applying DDC in various real-world scenarios. In the DDC technique, source code is compiled twice: the source code of the compiler's parent is compiled using a trusted compiler, and then the putative compiler source code is compiled using the result of the first compilation. If the DDC result is bit-for-bit identical with the original compiler-under-test's executable, and certain other assumptions hold, then the compiler-under-test's executable corresponds with its putative source code.
研究の動機と目的
- コンパイラがソフトウェアに静かにバックドアを仕込む可能性があるという深刻なセキュリティ脆弱性に対処すること。
- ソースコードを完全に検査しても悪意あるコンパイラを検出できない既存の対策の限界を克服すること。
- コンパイラのバイナリ出力がそのソースコードと正確に一致することを保証する、実用的で検証可能な方法を提供すること。
- DDCの実行可能性と正しさを、産業用および悪意ある改変を加えたコンパイラを含む多様なコンパイラタイプにおいて実証すること。
- コンパイラのソースやビルドプロセスに対する信頼を必要とせず、重要なソフトウェアシステムにおける信頼性を確保すること。
提案手法
- 信頼できる親コンパイラ(信頼できるコンパイラ)のソースコードを信頼できるコンパイラでコンパイルし、信頼できるバイナリを生成する。
- 信頼できるバイナリを用いて、対象のコンパイラ(悪意ある可能性がある)のソースコードをコンパイルし、2番目のバイナリを生成する。
- 2番目のコンパイルで得られたバイナリを、テスト中の対象コンパイラの元のバイナリと比較する。
- 2つのバイナリがビット単位で同一である場合、定められた仮定のもとで、対象コンパイラのバイナリはそのソースコードに暗黙的に束縛されているとされる。
- 同じバックドアが導入されないよう、2回目のコンパilationに異なる言語実装やバージョンのコンパイラを用いることで多様性を確保する。
- 形式的検証技術を用いて、DDCがソースとバイナリの不一致を検出できることを証明し、改ざんの検出を可能にする。
実験結果
リサーチクエスチョン
- RQ1コンパイラが悪意ある可能性がある場合でも、コンパイラのバイナリがそのソースコードを忠実に実装していることを形式的証明で確認できるか?
- RQ2Diverse Double-Compiling(DDC)技術は、コンパイラがコンパイルされたソフトウェアにバックドアを仕込む『信頼の信頼』攻撃を検出し、防止できるか?
- RQ3DDCは、小規模なカスタムコンパイラおよび大規模な産業用コンパイラ(例:GCC)を含む、さまざまなコンパイラタイプにおいて有効か?
- RQ4DDCが妥当であるために必要な仮定は何か? そして、これらは実際の状況でどのように検証できるか?
- RQ5DDCは実世界のシステムに実用的に適用可能であり、重要なソフトウェアおよびコンパイラツールチェインにおける信頼性を確保できるか?
主な発見
- Diverse Double-Compiling(DDC)技術は、コンパイラのソースコードとそのコンパイルバイナリの間に不一致が生じる可能性を形式的証明で検出できることを示している。
- 実証的評価により、DDCは悪意ある改変を加えたLispコンパイラがコンパイルコードにバックドアを挿入するのを正常に検出できたことが確認された。
- DDCは、小規模なCコンパイラ、小規模なLispコンパイラ、悪意ある改変を加えたLispコンパイラ、およびGCCの4つのコンパイラに成功裏に適用され、広範な適用可能性が示された。
- DDCの出力と元のコンパイラバイナリとのビット単位の比較により、改ざんがなければ正しさが確認された。
- 2番目のコンパイラが信頼できない場合でも、1番目のコンパイラが信頼されており、かつ2番目のコンパイラと多様性を持つ限り、この手法は有効である。
- このアプローチにより、コンパイラのソースコードやビルドプロセスへのアクセスや信頼を必要とせず、コンパイラの整合性を完全に検証できるようになった。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。