Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# プログラミング言語# 暗号とセキュリティ

命令セットアーキテクチャにおけるセキュリティの公式化

新しい方法が、形式仕様を通じてコンピュータアーキテクチャのセキュリティを向上させる。

― 1 分で読む


ユニバーサルコントラクトでユニバーサルコントラクトでISAを確保することリティを強化する。新しい戦略が正式化を通じてISAのセキュ
目次

コンピュータの世界では、命令セットアーキテクチャ(ISA)がソフトウェアとハードウェアがどのようにコミュニケーションをとるかのルールセットみたいなもんだ。このルールは、どの命令が実行できるか、どんなふうに動作するか、どのメモリにアクセスできるかを定義してる。従来、これらのルールは書面で説明されることが多かったけど、時々不明瞭だったり不完全だったりすることもあった。最近では、研究者たちがこれらのルールをもっと形式的に書くようになってきていて、コンピュータが実行できる論理システムを使ってるんだ。

この形式的アプローチのおかげで明確になった部分もあるけど、主に命令が何をするか(機能的側面)に焦点が当たっていて、どれだけ安全なのかにはあまり関心が向けられていない。セキュリティを確保することは重要で、特にコンピュータがますます相互接続され、悪意のあるソフトウェアから多くの脅威にさらされる中ではなおさらだ。この記事では、これらのセキュリティルールを定義するだけでなく、それが真実であることを検証し、効果的に適用できる方法について探っていくよ。

背景

ISAはソフトウェア(アプリケーションやオペレーティングシステムを含む)とハードウェア(コンピュータの物理コンポーネント、プロセッサなど)の間の契約みたいなもんだ。従来、ISAはテキストが詰まったマニュアルで説明されてきたけど、この方法はあいまいなことがあるんだ。必要な詳細が抜けてたり、セキュリティ機能についての主張を確認するための手段がなかったりすることがある。

最近では、ISAを明確で実行可能な形で定義する動きが出てきた。つまり、コンピュータが理解してチェックできる形でルールを書くってこと。たとえば、いくつかのプログラミング言語やツールは、ISAを形式的に指定するために設計されている。これらの形式的仕様は、ハードウェアとソフトウェアの動作をテストしたり確認したりするのに役立つんだ。

ISAにおけるセキュリティの重要性

ISAのセキュリティ保証は重要だ。特定の動作が常に成立することを保証して、メモリへの不正アクセスを防ぐみたいなことだ。この保証はただの「あるといいな」じゃなくて、ISAの契約の重要な部分なんだ。新しい機能が追加されたり、既存の機能が変更されたりしても有効であり続けなきゃいけない。

ISAのセキュリティの側面を形式化することは、セキュリティにとって重要なソフトウェアに関して理論的に考えるために必要だ。ちゃんと定義されたセキュリティルールセットは、ソフトウェア作者がハードウェアと正しく相互作用する安全なコードを書く方法を理解するのに役立つ。

セキュリティ保証を形式化することの課題

セキュリティ保証を設定する主な課題の一つは、関与する異なるグループの利害をバランスさせる必要があることだ。ISAの設計者やCPUメーカーは、簡単に検証できるような抽象的な仕様がほしいと思っている。一方で、ソフトウェア開発者は、自分のコードが安全に動作するための正確な詳細を必要としている。

これに対処するために、ユニバーサルコントラクト(UC)という新しい技術が提案された。これは、ISAがどんなコードに対しても強制するセキュリティ制限を示す形式的な契約なんだ。UCが特別なのは、特定のプログラムだけじゃなく、あらゆるプログラムに適用できるところだ。この特徴により、ISAが進化しても関連性を保ちながら、広範なセキュリティ保証を表現することができる。

ユニバーサルコントラクトの仕組み

UCの背後にある考え方は、セキュリティ対策がソフトウェアを不信なコードから守る必要があるという基本原則から始まる。要するに、UCは不信なプログラムができることとできないことを定義する境界線みたいなものだ。ISAの公式仕様にこれらの契約を含めることで、開発者は信頼できるコードと信頼できないコードの相互作用について効果的に考えることができる。

ISA仕様にUCとしてセキュリティ保証が含まれている場合、それは不信なコードが実行されるたびに、契約で定義されたセキュリティ特性が守られなきゃいけないことを意味する。これにより、ソフトウェア開発者はISAのセキュリティ保証と自分のコードが安全であるという証明を組み合わせることができる。

セキュリティ保証の検証

ISAの機能的およびセキュリティ仕様が一貫しているかを検証するのは複雑な作業だ。ISAが更新されたり拡張されたりするたびに、セキュリティ保証が損なわれていないかを確認することが重要だ。この検証プロセスは、変更がセキュリティを損なっていないかを継続的にチェックすることを含む。

このアプローチでは、広範なISAをカバーするのに十分な表現力を持つプログラム論理を使用している。また、これらの契約とISAの公式定義を半自動的にチェックできる検証方法論も含まれている。ツールも開発されており、大部分の繰り返し作業は自動化されているんだ。

ケーススタディ:異なるISA

この方法の効果を示すために、研究者たちは異なるセキュリティ機能を持つ2つのISAに適用した。一つはカスタム設計された能力マシンで、メモリへのアクセスをユニークな方法で管理している。もう一つは、物理メモリ保護(PMP)機能を含む簡略化されたRISC-Vのバージョンだ。

両方のケースで、研究者たちはセキュリティ保証を形式化した後、ISAの仕様の正当性を検証できることを示した。より複雑な動作を実装しても、セキュリティ特性が維持されることを証明できたんだ。

能力マシン

能力マシンは、リソースへのアクセスを管理するために能力を使用するコンピュータアーキテクチャの一種だ。能力は、特定のメモリ部分にアクセスする権限を持つトークンのようなものだ。プログラムに能力が与えられると、その能力が許可する範囲内でしか行動できない。

たとえば、プログラムが許可されていないメモリにアクセスしようとしたら、システムはその動作をブロックする。この機能は、潜在的に有害なコードをコアシステム機能から隔離するのに役立つから便利なんだ。

能力を組み込んだ最近のアーキテクチャには、CHERI(Capability Hardware Enhanced RISC Instructions)があって、研究や業界でも注目を集めてる。能力マシンは、メモリを安全に管理するための強力な方法を提供しつつ、ソフトウェアの操作に柔軟性を持たせることを目指している。

RISC-Vと物理メモリ保護

もう一つの人気のあるISA、RISC-Vは、物理メモリ保護(PMP)という機能を提供している。これにより、どのプログラムが特定のメモリ領域にアクセスできるかをより詳細に制御できる。権限レベルに基づいてアクセスを制限できるから、異なる種類のソフトウェアがその信頼度に応じてアクセスを許可されたり拒否されたりすることができる。

たとえば、RISC-Vの設定では、PMPが特定のメモリ領域を信頼できるコードだけがアクセスできるように指定し、ユーザーアプリケーションは別のメモリ領域に制限される。このことで、不信なプログラムが実行されていても、システムの重要な部分に干渉できないようにしている。

検証プロセス

ユニバーサルコントラクトの検証プロセスは、いくつかのステップを含んでいる。まず、ISAは検証ツールが理解できる形式的仕様言語で実装しなきゃいけない。これは、ISAをコアな計算フォーマットに翻訳することを含んでいて、複雑な命令を簡素化するんだ。

次に、ユニバーサルコントラクトが定義されたら、検証ツールがISAの動作セマンティクスが契約で定義された保証と一致するかをチェックする。この過程では、すべての命令がUCで定義されたセキュリティ境界を遵守しているかを確認する。

最後に、この方法を示すために、実際の例を通して作業が行われた。小さなオペレーティングシステムカーネルがRISC-V PMP契約を使って検証された。このカーネルは、不信なコードが内部状態を変更できないように設計されており、システムの整合性を維持することを目的にしている。

結論

ISAのセキュリティ側面をユニバーサルコントラクトを使って形式化する動きは、コンピュータアーキテクチャにおける重要な進展を示している。セキュリティを確保するための明確なフレームワークを提供することで、メーカーとソフトウェア開発者がより効果的に協力して、機能的でありながら悪用から安全なシステムを作り上げることができるんだ。

能力マシンやRISC-Vの例は、この新しい方法が複雑な実際のシステムにどのように適用でき、進化するソフトウェアのニーズに対してセキュリティを維持できるかを示している。技術への依存が増す中で、こうしたセキュリティ保証が信頼できるコンピューティング環境を確保するためにますます不可欠になっていく。

今後は、これらの形式的仕様の翻訳を自動化し、検証ツールを強化する努力が、このアプローチをスケールアップするために重要になるだろう。ISAレベルでセキュリティに取り組むことで、新たな脅威や脆弱性からコンピューティングエコシステム全体をより良く守れるようになるんだ。

オリジナルソース

タイトル: Formalizing, Verifying and Applying ISA Security Guarantees as Universal Contracts

概要: Progress has recently been made on specifying instruction set architectures (ISAs) in executable formalisms rather than through prose. However, to date, those formal specifications are limited to the functional aspects of the ISA and do not cover its security guarantees. We present a novel, general method for formally specifying an ISAs security guarantees to (1) balance the needs of ISA implementations (hardware) and clients (software), (2) can be semi-automatically verified to hold for the ISA operational semantics, producing a high-assurance mechanically-verifiable proof, and (3) support informal and formal reasoning about security-critical software in the presence of adversarial code. Our method leverages universal contracts: software contracts that express bounds on the authority of arbitrary untrusted code. Universal contracts can be kept agnostic of software abstractions, and strike the right balance between requiring sufficient detail for reasoning about software and preserving implementation freedom of ISA designers and CPU implementers. We semi-automatically verify universal contracts against Sail implementations of ISA semantics using our Katamaran tool; a semi-automatic separation logic verifier for Sail which produces machine-checked proofs for successfully verified contracts. We demonstrate the generality of our method by applying it to two ISAs that offer very different security primitives: (1) MinimalCaps: a custom-built capability machine ISA and (2) a (somewhat simplified) version of RISC-V with PMP. We verify a femtokernel using the security guarantee we have formalized for RISC-V with PMP.

著者: Sander Huyghebaert, Steven Keuchel, Coen De Roover, Dominique Devriese

最終更新: 2024-01-08 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2306.05128

ソースPDF: https://arxiv.org/pdf/2306.05128

ライセンス: https://creativecommons.org/licenses/by/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事