[論文レビュー] How a simple bug in ML compiler could be exploited for backdoors?
この論文は、マイクロソフトのMASMコンパイラに存在するゼロデイバグを暴露しており、NOT演算子を含む条件分岐論理が静かに誤ってコンパイルされ、ソースコードを変更せずにコンパイル済みバイナリに隠しドアを挿入できるようにする。この欠険は、通常の状況では正しく動作するが、特定の条件下でのみ悪意あるコードが実行されるようにすることで、従来のコードレビューでは検出できない、長期間にわたる隠しドアを可能にする。
Whenever a bug occurs in a program, software developers assume that the code is flawed, not the compiler. In fact, if compilers should be correct, they are just normal software with their own bugs. Hard to find, errors in them have significant impact, since it could result to vulnerabilities, especially when they silently miscompile a critical application. Using assembly language to write such software is quite common, especially when time constraint is involved in such program. This paper exposes a bug found in Microsoft Macro Assembler (ml for short) compiler, developed by Microsoft since 1981. This assembly has the characteristics to get high level-like constructs and high level-like records which help the developer to write assembly code. It is in the management of one of this level-like construct the bug has been found. This study aims to show how a compiler-bug can be audited and possibly corrected. For application developers, it shows that even old and mature compilers can present bugs. For security researcher, it shows possibilities to hide some unexpected behavior in software with a clear and officially non-bogus code. It highlights opportunities for including stealth backdoors even in open-source software.
研究の動機と目的
- マイクロソフトのMASM(ml)コンパイラに存在する、以前に未知であった静的コンパイラバグを露呈すること。このバグは、条件分岐論理を誤ってコンパイルする。
- 攻撃者がソースコードを変更せずにコンパイル済みソフトウェアに隠しドアを挿入できるように、このバグがどのように悪用可能かを示すこと。
- 特に成熟したが欠陥のあるコンパイラでコンパイルされる重要なシステムにおいて、単にソースコードのレビューに依存するリスクを強調すること。
- セキュリティコミュニティにコンパイラ自体を攻撃面と見なすよう呼びかけ、ソースコードだけでなくコンパイラの挙動のレビューも行うべきだと提言すること。
- ケン・トマプソンの有名なコンパイラトロイの類似例として、コンパイラレベルの脆弱性を活用して検出不能かつ長期にわたるバックドアを構築する可能性を示すこと。
提案手法
- MASMのマクロアセンブリ処理におけるNOT演算子の条件式処理に、構文レベルのバグを特定した。
- 論理否定を意図するが、実際には誤ったx86マシンコードにコンパイルされるMASM構文を用いたテストケースを構築した。
- WinDbgなどのツールを用いてコンパイル出力を逆アセンブルし、生成されたアセンブリコードが意図した論理と一致しないことを確認した。
- 誤ってコンパイルされたコードが、予期しない制御フロー(例えば、予定されたジャンプをスキップしたり、意図しない分岐を実行したりする)を引き起こすことを示した。
- 問題をマイクロソフトに報告し、今後はこのような構文に対して構文エラー(A2154)を発行することで、静的誤コンパイルを防ぐ修正が行われた。
- 逆アセンブルとバイナリ解析を用いて、実際のコンパイル済みバイナリにおいても論理エラーが存在し、攻撃可能であることを確認した。
実験結果
リサーチクエスチョン
- RQ1広く使われ、長年にわたり使用されているアセンブラ(MASM)にコンパイラバグが存在する場合、どのようにして条件分岐論理が静かに誤ってコンパイルされるのか?
- RQ2このような誤コンパイルが、どのようにしてソースコードを変更せずに、検出不能な隠しドアをコンパイル済みソフトウェアに挿入できるのか?
- RQ3ソースコードが正しく、オープンソースであるにもかかわらず、なぜ開発者やレビュー担当者がこのようなバックドアを検出するのが難しいのか?
- RQ4特にファームウェare やシステムレベルのコードにおいて、コンパイラの正しさに依存する場合、そのセキュリティ評価にどのような影響を与えるのか?
- RQ5コンパイラバグをどのように活用することで、ソースコードを変更せずにソフトウェアの更新に対しても永続性を保つことができるのか?
主な発見
- マイクロソフトのMASMコンパイラでは、複雑な条件構文でNOT演算子を使用する際、静かに誤ってコンパイルされ、生成バイナリでの制御フローが不正になる。
- このバグにより、構文は正当だが、意図した論理的挙動とは一致しないx86アセンブリ命令が生成される。
- 静的ソースコード解析では検出できない。コードは正しく、標準的なMASM表記に従っているため。
- この脆弱性により、攻撃者は特定の制御された条件下でのみ実行されるバックドアを挿入でき、非常に隠しやすく、検出が困難である。
- マイクロソフトは、このような構文に対して構文エラー(A2154)を導入することで、この問題を修正。これにより、後方互換性を損なわず、静的誤コンパイルを防げるようになった。
- 特にファームウェア、カーネル、セキュリティツールなど、ソースコードは頻繁にレビューされるがコンパイラの挙動は見過ごされがちな重要なシステムでは、攻撃面が極めて危険である。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。