[論文レビュー] When Good Components Go Bad: Formally Secure Compilation Despite Dynamic Compromise
この論文は、不正な言語における安全なコンパイルのための形式的セキュリティ基準 RSCDC を導入し、定義されていない動作に遭遇した後でも、コンポonent が損傷から保護されることを保証する。RSCDC を満たすコンパイラは、動的に損傷を受けたコンポonent がターゲットレベルで引き起こせる損害が、ソースレベルでの攻撃者制御コンポonent が引き起こせる損害を超えないことを保証しており、機械検証済み Coq 証明と、ソフトウェアフォールト隔離またはリファレンスマネージャによる実用的実装を用いている。
We propose a new formal criterion for evaluating secure compilation schemes for unsafe languages, expressing end-to-end security guarantees for software components that may become compromised after encountering undefined behavior---for example, by accessing an array out of bounds. Our criterion is the first to model dynamic compromise in a system of mutually distrustful components with clearly specified privileges. It articulates how each component should be protected from all the others---in particular, from components that have encountered undefined behavior and become compromised. Each component receives secure compilation guarantees---in particular, its internal invariants are protected from compromised components---up to the point when this component itself becomes compromised, after which we assume an attacker can take complete control and use this component's privileges to attack other components. More precisely, a secure compilation chain must ensure that a dynamically compromised component cannot break the safety properties of the system at the target level any more than an arbitrary attacker-controlled component (with the same interface and privileges, but without undefined behaviors) already could at the source level. To illustrate the model, we construct a secure compilation chain for a small unsafe language with buffers, procedures, and components, targeting a simple abstract machine with built-in compartmentalization. We give a machine-checked proof in Coq that this compiler satisfies our secure compilation criterion. Finally, we show that the protection guarantees offered by the compartmentalized abstract machine can be achieved at the machine-code level using either software fault isolation or a tag-based reference monitor.
研究の動機と目的
- 相互に信頼できないコンポonent が含まれるシステムにおける安全なコンパイルのセキュリティ保証を形式化すること。特に、定義されていない動作に起因する損傷が生じる場合を想定する。
- 損傷を受けたコンポonent がターゲットレベルでソースレベルでの攻撃者権限と同等以上の損害を引き起こせないことを保証する基準を定義すること。
- 安全なコンパイルチェーンが提案された RSCDC 基準を満たすことを機械検証済み Coq 証明で正式に検証すること。
- ソフトウェアフォールト隔離またはタグベースのリファレンスマネージャを用いて、機械語レベルでコンパートメント化ベースの保護を実現できることを示すこと。
提案手法
- 不正な言語における安全なコンパイルのための形式的基準として、RSCDC(動的損傷に対する強固な安全性基準)を提案する。
- 定義されていない動作に遭遇した後、コンポonent が攻撃者に完全に制御される状態として、動的損傷をモデル化する。
- RSCDC において保持される安全性プロパティのクラス ZP = Safety ∩ Closed≺P を定義し、定義されていない動作の拡張に対しても強固であることを保証する。
- 内蔵された隔離機能を持つコンパートメント化された抽象マシンをターゲットとする、小さな不正な言語向けの安全なコンパイルチェーンを構築する。
- 機械検証済み Coq 証明を用いて、コンパイラが RSCDC を満たすことを正式に検証する。
- ソフトウェアフォールト隔離またはタグベースのリファレンスマネージャを用いて、機械語レベルでの保護モデルの実用的展開を示す。
実験結果
リサーチクエスチョン
- RQ1コンポonent が定義されていない動作に起因して損傷を受けた場合に、コンパイルチェーンのセキュリティ保証を形式的に定義する方法は何か?
- RQ2安全なコンパイルチェーンが保持すべき性質は何か? そうすることで、損傷を受けたコンポonent がターゲットレベルでソースレベルでの攻撃者権限を超えた損害を引き起こせないようにする。
- RQ3提案された RSCDC 基準は、Coq のような証明支援ツールを用いた機械検証済み証明によって正式に検証可能か?
- RQ4既存の低レベルメカニズムを用いて、コンパートメント化のセキュリティ保証を機械語レベルでどのように実装できるか?
- RQ5RSCDC において保持される安全性プロパティのクラスは何か? また、それらはソース言語でどのように表現すれば、ターゲットレベルでの強度を保証できるか?
主な発見
- RSCDC 基準は形式的に定義され、クラス ZP = Safety ∩ Closed≺P に属するすべてのプロパティを保持することと同等であることが証明された。
- 小さな不正な言語向けの安全なコンパイルチェーンが Coq で形式的に検証され、RSCDC を満たすことが確認された。これにより、動的損傷がソースレベルでの攻撃表面を超えて拡大することはない。
- 本論文は、ソフトウェアフォールト隔離またはタグベースのリファレンスマネージャを用いて、機械語レベルでコンパートメント化のセキュリティ保証を達成できることを示している。
- ZP クラスには、定義されていない動作の拡張に対して閉じた安全性プロパティが含まれており、定義されていない動作を含むトレースが許可されるならば、そのすべての拡張も許可されることを保証する。
- 安全性プロパティ S1 よりも強いバージョン SZ+P1 を定義し、それが ZP に属することを証明した。これにより、このようなプロパティが RSCDC において強固に保たれることを示した。
- ZP に属しない安全性プロパティ π に対しては、πZ+P と呼ばれるより強いバージョンを構築でき、これは ZP に属し、可能な限り許容的である。これにより、RSCDC ベースのコンパイルが望ましい安全性保証を保持できることが保証された。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。