[論文レビュー] Block Oriented Programming: Automating Data-Only Attacks
この論文では、制御フローセキュリティ(CFI)およびシャロウスタックで保護されたバイナリに対して、データオンリー攻撃を自動化するフレームワークBOPCを紹介する。BOPCは、ブロック指向プログラミング(BOP)を用いて高レベルの悪意あるペイロードを実行可能プログラムトレースにコンパイルすることで、Turing完全なSPLペイロードを基本ブロックのヒューリスティック駆動探索によって有効な実行トレースにマッピングする。10の実世界アプリケーションにおいて81%の成功率で効果的な攻撃生成に成功した。
With the widespread deployment of Control-Flow Integrity (CFI), control-flow hijacking attacks, and consequently code reuse attacks, are significantly more difficult. CFI limits control flow to well-known locations, severely restricting arbitrary code execution. Assessing the remaining attack surface of an application under advanced control-flow hijack defenses such as CFI and shadow stacks remains an open problem. We introduce BOPC, a mechanism to automatically assess whether an attacker can execute arbitrary code on a binary hardened with CFI/shadow stack defenses. BOPC computes exploits for a target program from payload specifications written in a Turing-complete, high-level language called SPL that abstracts away architecture and program-specific details. SPL payloads are compiled into a program trace that executes the desired behavior on top of the target binary. The input for BOPC is an SPL payload, a starting point (e.g., from a fuzzer crash) and an arbitrary memory write primitive that allows application state corruption. To map SPL payloads to a program trace, BOPC introduces Block Oriented Programming (BOP), a new code reuse technique that utilizes entire basic blocks as gadgets along valid execution paths in the program, i.e., without violating CFI or shadow stack policies. We find that the problem of mapping payloads to program traces is NP-hard, so BOPC first reduces the search space by pruning infeasible paths and then uses heuristics to guide the search to probable paths. BOPC encodes the BOP payload as a set of memory writes. We execute 13 SPL payloads applied to 10 popular applications. BOPC successfully finds payloads and complex execution traces -- which would likely not have been found through manual analysis -- while following the target's Control-Flow Graph under an ideal CFI policy in 81% of the cases.
研究の動機と目的
- CFIやシャロウスタックといった強力な制御フローデフレンスに対処するバイナリに対して、データオンリーのエクスプロイトを自動的に構築すること。
- CFI制約下での複雑でパス依存のエクスプロイトを記述するために必要な人的作業を低減すること。
- 高度な制御フローセキュリティメカニズムが導入された後の現代バイナリにおける残存する攻撃表面を評価すること。
- 高レベル言語抽象化を通じて、ループや条件分岐を含む複雑なエクスプロイト行動の自動合成を可能にすること。
- CFIが導入されていながらも、体系的かつ自動化されたペイロード生成によって、データオンリーのコードリユース攻撃が依然として実現可能であることを示すこと。
提案手法
- BOPCは、攻撃者指定の振る舞いを表現するための高レベルでTuring完全な言語であるSPL(SPloit Language)を用い、アーキテクチャやプログラム固有の詳細から抽象化する。
- SPLペイロードを個々の文の制約にコンパイルし、それらの制約を満たすターゲットバイナリ内の基本ブロックを探索することで、候補となる機能的ブロックを特定する。
- リソースおよびレジスタやメモリの状態マッピングに従って、ヒューリスティック駆動の探索を実行し、非現実的なパスを pruning して、確率の高い実行トレースを優先する。
- CFIやシャロウスタックポリシーに違反しない有効なCFGパスに従って、ディスパッチャーブロックを介して機能的ブロックを接続することで、エンドツーエンドの実行トレースを構築する。
- ペイロードの順列数、ブロック長、サブグラフサイズ、ディスパッチャーパス数に対する設定可能な上限値を適用することで、NP困難なマッピング問題を簡略化する。
- パスの実行可能性を検証するためにシンボリック実行を用い、ヌルポインタの間接参照など例外が検出された場合は無効なパスを破棄し、代替ルートを探索する。
実験結果
リサーチクエスチョン
- RQ1CFIおよびシャロウスタックで保護されたバイナリに対して、データオンリーのコードリユース攻撃を自動的に生成することは可能か?
- RQ2SPLのような高レベル言語は、CFI保護環境下で、ループや条件分岐といった複雑なエクスプロイト行動をどの程度表現できるか?
- RQ3ヒューリスティック駆動探索戦略は、CFI制約下でのSPLペイロードから有効なCFGトレースへのマッピングというNP困難問題をどの程度効果的に解消できるか?
- RQ4理想的なCFIポリシー下で、自動化技術を用いて、複雑なエクスプロイトペイロードの何パーセントが実際に合成され実行可能になるか?
- RQ5BOPCは、手作業でのリバース・エンジニアリングでは到達不可能なエクスプロイトチェーンを発見できるか?
主な発見
- BOPCは、10の一般的なアプリケーションにまたがる13の多様なSPLペイロードについて、理想的なCFIポリシー下で81%の成功率で有効な実行トレースを生成した。
- フレームワークは、ループや条件分岐を含む複雑なエクスプロイト構築の自動化の可能性を実証した。これは、CFI制約下で手作業で実現するのは困難である。
- 高レベルのSPL言語の使用により、低レベルのアーキテクチャやプログラム固有の詳細から抽象化され、エクスプロイトの定義が簡素化された。
- ヒューリスティックを用いて非現実的な実行パスを効果的に pruning し、確率の高いトレースを優先することで、合理的な時間制限内でスケーラブルな探索が可能になった。
- プロトタイプは、シンボリック実行中に発生する例外(例:ヌルポインタの間接参照)を検出し、無効なパスを破棄して代替ルートを探索することで、適切に処理した。
- 評価により、強力な制御フローセキュリティが導入されていながらも、データオンリー攻撃は依然として実現可能な脅威表面であることが確認された。特に、自動ペイロード合成と組み合わせると顕著である。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。