toplogo
Sign In

C言語のコンパートメント化プログラムの形式的に安全なコンパイル


Core Concepts
コンパートメント化されたC言語プログラムのコンパイルにより、未定義動作の影響範囲を動的に侵害されたコンパートメントに制限することができる。
Abstract

本論文では、SECOMP と呼ばれる、コンパートメント化されたC言語コードのコンパイラを紹介する。SECOMPには、未定義動作の影響範囲が動的に侵害されたコンパートメントに制限されることを保証する機械検証済みの証明がある。これは、メインストリームのプログラミング言語に対して初めて実現された強い保証である。

SECOMPは、CompCertの検証済みCコンパイラを拡張したものである。コンパートメントは相互に不信頼であり、手続き呼び出しとリターンを介してのみ相互作用できる。SECOMPは、CompCertのパスと最適化を、このコンパートメント対応の設定に適応させている。

SECOMPの安全なコンパイルの証明では、いくつかの新しい証明工学の工夫が必要とされた。これには、メモリ注入を活用した詳細な模倣関係の定義、システムコールの正しさを示すための情報豊富なトレースイベントの導入、再構成のための一般的な3方向の模倣関係の定義などが含まれる。

edit_icon

Customize Summary

edit_icon

Rewrite with AI

edit_icon

Generate Citations

translate_icon

Translate Source

visual_icon

Generate MindMap

visit_icon

Visit Source

Stats
Clight言語からRISC-Vアセンブリまでの形式的に安全なコンパイルを実現した CompCertコンパイラの19のパスと最適化を、コンパートメント対応に適応させた 新しい証明工学の手法を導入し、スケールアップした安全なコンパイルの証明を実現した
Quotes
"コンパートメント化は、大規模プログラムを相互に不信頼なコンパートメントに構造化し、明確に指定された特権と相互作用を持つことで、未定義動作による深刻なセキュリティ脆弱性を軽減する実用的な緩和策である。" "SECOMPは、未定義動作の影響範囲を動的に侵害されたコンパートメントに制限することを保証する、機械検証済みの証明を持つコンパイラである。これは、メインストリームのプログラミング言語に対して初めて実現された強い保証である。"

Deeper Inquiries

コンパートメント化の概念は、他のプログラミング言語やソフトウェアアーキテクチャにどのように適用できるか?

コンパートメント化の概念は、他のプログラミング言語やソフトウェアアーキテクチャにも適用可能です。例えば、ソフトウェアシステム全体を複数の独立したコンポーネントに分割し、それぞれのコンポーネントが異なるコンパートメントとして機能するように設計することが考えられます。これにより、各コンポーネントは他のコンポーネントと疎結合になり、それぞれが独自の機能やデータにアクセスできるようになります。さらに、異なるプログラミング言語間でのインタフェースを定義し、コンパートメント間の通信を制御することで、セキュリティや信頼性を向上させることができます。
0
star