[論文レビュー] Execution Integrity with In-Place Encryption
Scyllaは、実行時制御フローグラフ解析を必要とせず、基本ブロックごとの暗号化とコード分散化を適用することで、コード再利用攻撃に対する防御を強化する画期的なイン-place暗号化方式を導入している。この方式により、命令セットランダマイゼーション(ISR)を拡張し、実行整合性を確保するとともに、完全なメモリ漏洩状況下でもコード配置を隠蔽可能であり、x86_64システムでは20%の実行オーバーヘッドで実現可能である。
Instruction set randomization (ISR) was initially proposed with the main goal of countering code-injection attacks. However, ISR seems to have lost its appeal since code-injection attacks became less attractive because protection mechanisms such as data execution prevention (DEP) as well as code-reuse attacks became more prevalent. In this paper, we show that ISR can be extended to also protect against code-reuse attacks while at the same time offering security guarantees similar to those of software diversity, control-flow integrity, and information hiding. We present Scylla, a scheme that deploys a new technique for in-place code encryption to hide the code layout of a randomized binary, and restricts the control flow to a benign execution path. This allows us to i) implicitly restrict control-flow targets to basic block entries without requiring the extraction of a control-flow graph, ii) achieve execution integrity within legitimate basic blocks, and iii) hide the underlying code layout under malicious read access to the program. Our analysis demonstrates that Scylla is capable of preventing state-of-the-art attacks such as just-in-time return-oriented programming (JIT-ROP) and crash-resistant oriented programming (CROP). We extensively evaluate our prototype implementation of Scylla and show feasible performance overhead. We also provide details on how this overhead can be significantly reduced with dedicated hardware support.
研究の動機と目的
- DEP や ASLR といった従来の防御では対応できない、ROP や CROP などのコード再利用攻撃(CRAs)の増加する脅威に対処すること。
- ソフトウェア多様性、制御フローガーディアンス、情報隠蔽といった既存防御の限界を克服し、それらの長所を統合した単一で整合性のあるフレームワークを構築すること。
- プログラムコードへの悪意ある読み取りアクセスを含む完全なメモリ漏洩状況下でも、配置情報や制御フローを露呈せずに安全な実行を実現すること。
- 静的または動的制御フローグラフ構築に依存せずに、正当な基本ブロック内での実行整合性を確保すること。
- 実世界のシステムにおける実現可能性とパフォーマンス効率を実証し、共有ライブラリやマルチタスク環境への対応を含めること。
提案手法
- 実行可能コードのバイナリレベルでの配置をランダマイズおよび隠蔽するために、基本ブロックごとの暗号化を適用し、正当に復号された命令のみが実行されることを保証する。
- 制御フローを基本ブロックの安全なエントリポイントに制限するハイブリッド実行モデルを導入し、CFG解析を伴わずに制御フローガーディアンスを暗黙的に強制する。
- 細粒度のコード分散化を用いて、基本ブロックの順序と構造を変更し、攻撃者がコード配置を信頼性を持って予測または再構築することが不可能になるようにする。
- 実行時における命令の復号および検証を処理する実行ラッパーを実装し、正当な制御転送のみが発生することを保証する。
- パフォーマンスオーバーヘッドを最小限に抑えるために、ハードウェア支援による復号を活用し、x86_64システムを対象としたプロトタイプ評価を実施。共有ライブラリ対応も含む。
- 実行不可読み取り(XnR)やコードポインタ分離といった情報隠蔽技術を組み合わせ、重要な制御構造の漏洩を防止する。
実験結果
リサーチクエスチョン
- RQ1命令セットランダマイゼーションを、JIT-ROP や CROP といった現代のコード再利用攻撃に対して強力な防御として拡張可能か?
- RQ2完全なメモリ読み取りアクセス下でも、基本ブロックごとの暗号化とコード分散化を組み合わせることで、コード配置の漏洩をどの程度防止できるか?
- RQ3静的または動的制御フローグラフ構築に依存せずに、基本ブロック内での実行整合性を達成することは可能か?
- RQ4Scyllaのパフォーマンスオーバーヘッドは、既存の防御と比較してどの程度か?また、ハードウェア支援によってこのオーバーヘッドを顕著に低減できるか?
- RQ5過去の攻撃で用いられた、クラッシュ耐性のあるメモリオラクルやタイミング側信道漏洩といった高度なバイパス技術に対しても、Scyllaは耐性を示せるか?
主な発見
- Scyllaは、基本ブロックごとの暗号化とコード分散化を組み合わせることで、JIT-ROP、CROP、CFB といった最先端のコード再利用攻撃を効果的に防御した。
- プロトタイプ実装では、SPEC CPU2006ベンチマークスイートで平均20%のパフォーマンスオーバーヘッドに留まり、実用的な実現可能性が示された。
- ハードウェア支援による復号を活用することで、パフォーマンスコストを顕著に低減でき、主なオーバーヘッドは復号ロジックからコード分散化に移行した。
- 完全なメモリ漏洩状況下でも、コード配置を完全に隠蔽しており、攻撃者がコードの配置を知ったとしても、元の制御フローを再構築することは不可能である。
- CPI や XnR メカニズムを標的とした過去の侵害で用いられたタイミング側信道攻撃やメモリオラクルに対しても、Scyllaは耐性を示した。
- 共有ライブラリやマルチタスクシステムを含む複雑なランタイム環境に対しても、セキュリティやパフォーマンスに影響を与えることなく対応可能である。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。