サイバーセキュリティ

CHERIはソフトウェアのきめ細かな分離を構築するためにポインターセキュリティを再定義する

David Chisnallは、CHERIアーキテクチャがハードウェアの能力をどのように利用してポインターを保護し、メモリの境界と権限を強制するかを説明する。これにより、CおよびC++で記述されたソフトウェアに対し、大規模な書き換えなしで空間的・時間的安全性を提供できる。また、この発表では、従来のRPCメカニズムに全面的に依存する代わりに、データ構造を直接共有しながら、システムコンポーネント間にきめ細かな分離を構築できる可能性についても論じている。

2026-08-16
1 分で読めます
12 閲覧数
فريق تحرير certi.news
CHERIはソフトウェアのきめ細かな分離を構築するためにポインターセキュリティを再定義する

David Chisnallは、ソフトウェア分離における最も難しい課題は、2つのワークロードを完全に分離することではなく、通信とデータ共有を必要とするコンポーネントを分離することにあると考えている。InfoQで公開された発表の中で、Chisnallは、CHERIアーキテクチャがセキュリティ機能としての能力と拡張ポインターの概念を組み合わせ、ポインターにハードウェア保護を提供するとともに、同一のアドレス空間内でメモリ安全性ときめ細かな分離を実現する方法を説明している。

ChisnallはSCI Semiconductorの共同創業者兼システムエンジニアリング部門責任者であり、ケンブリッジ大学の客員研究員でもある。この発表は、CHERIの研究成果とそのソフトウェアおよびハードウェアへの応用に基づいている。対象にはCheriBSD、ARM Morello拡張、マイクロコントローラー向けのCHERIoT、さらにRVYと呼ばれるRISC-V基盤が含まれる。Chisnallによれば、RVYの標準化作業は最終段階にあった。

ポインターがハードウェアで保護されたエンティティになる

CHERIは、従来の意味で独立した命令セットを提供するものではない。むしろ、複数の拡張においてSIMDの概念が実装される方法と同様に、異なるアーキテクチャに適合させられる一連の考え方である。この考え方では、ポインターはもはやメモリ上のアドレスを表す単なる数値ではなく、アドレス、オブジェクトの境界、権限の集合に加え、その値が有効なポインターかどうかを示すハードウェアタグを持つ能力となる。

これらの能力は一方向性の性質を強制する。境界を狭めたり権限を削除したりすることはできるが、同じポインターからそれらを拡張したり復元したりすることはできない。また、ロード、ストア、ジャンプの操作で使用される前に、ハードウェアがポインターの有効性とタグ付けの有無を検証する。プログラムがデータとして扱われた値や、アドレスを生成するために改ざんされた値を使用しようとした場合、その操作は自動的に使用可能なポインターへ変換されるのではなく、失敗する。

この設計により、発表によれば、攻撃者が制御する値でポインターを上書きするなど、メモリ悪用攻撃で一般的ないくつかの段階から直接保護できる。また、ポインターの位置をあらかじめ知る必要なく、memcpyのような汎用コピー操作も可能になる。これは、ポインターのタグが値とともに移動するか、能力の領域の一部が上書きされた際に消去されるためである。

縮小可能な境界と権限

CHERIの能力には、読み取りと書き込みの権限に加え、データ内に存在するポインターを扱うための個別の権限が含まれる。Chisnallは、この精度により、例えば複雑な構造体内のデータを読み取る権限をプログラムに与えながら、その中に新しいポインターを書き込む能力は与えない、と説明している。これにより、単一のオブジェクトを表面的に保護するのではなく、データツリー全体に及ぶ読み取り専用のビューを提供できる。

また、sealingメカニズムにより、ハンドルやファイルディスクリプターに似た安全なopaqueポインターを作成できる。しかも、必ずしもカーネルが管理する変換テーブルを必要としない。能力は型コードを用いて封印され、封印中は変更、参照解除、ジャンプ、ロード、ストアに使用することができない。所有者に返却された際も、型コードが一致しなければ封印を解除する操作は成功しない。

メモリの空間的・時間的安全性

境界外アクセスのエラーが発生した場合、CHERIはC言語における未定義動作を決定的なハードウェア停止へ変換できる。Chisnallは、14個の要素を持つ配列で要素14にアクセスする例を示している。従来のシステムでは、そのアクセスによって復帰アドレスが上書きされる可能性がある一方、CHERIシステムでは、ポインターが配列の境界に制限されているため、操作が例外として処理される。

この提案は空間的安全性だけに限定されない。CHERIoTでは、ポインタータグと、各割り当て単位につき1ビットを持つシャドーメモリを使用し、解放されたメモリに関連付けられたポインターを無効化できる。能力をレジスターにロードする際、ロードフィルターはブロックの状態を検証し、メモリが解放済みであればタグを消去できる。また、ハードウェアの定期的なメカニズムがメモリを検査し、もはや生存していないオブジェクトを指すポインターからタグを取り除く。これにより、無効化のサイクルが完了した後にメモリを再利用できる。

メモリ安全性からきめ細かな分離へ

Chisnallが述べるCHERIプロジェクトの当初の目的は、従来のプロセス分離の限界を超えるきめ細かな分離を構築することだった。各コンポーネントを別々のプロセスに分離すると、ページテーブル、RPCメカニズム、データのシリアライズとコピーに関連するコストが発生する。数十の分離ドメインであれば受け入れられる可能性があるが、例えばブラウザーが画像・音声のデコーダーやJavaScript JITなどのコンポーネント向けに数千、あるいは数万のサンドボックスを実行する必要がある場合には、適合しにくくなる。

CHERIのモデルでは、実行レジスターに存在する能力から到達できるメモリの集合を保護ドメインとみなすことができる。同一のアドレス空間内にある2つのドメインは、一部のデータを共有しながら他の部分を分離できる。共有は特定の能力から始まり、複雑なデータ構造と、そこから到達可能なすべてのものにまで広がる可能性があるためである。

より大規模なシステムでは、発表はcoexecve呼び出しを通じた段階的な方法を説明している。この呼び出しは、新しいアドレス空間を作成せずに新しいプロセスを生成し、その後、新しいプロセスがアクセスできる対象を定義するルート能力の集合を固定する。一方、CHERIoTはリアルタイムOS内で権限を厳格に分離する。コンパートメント間のコンテキスト切り替えと呼び出しを担う切り替えコンポーネントを備え、そのサイズは発表によれば約350命令である。

Chisnallが示す結論は、メモリ保護と分離は、コードのルールを全面的に書き換えたり、すべてのコンポーネントを独立したプロセスに分離したりすることに依存すべきではないということである。Cのモデルを通常の形に近いまま維持しつつ、ポインターとアクセス能力をハードウェアで理解・管理可能にすることで、メモリエラーを削減し、監査しやすい共有を構築する段階的な道筋を提供できる可能性がある。大規模システムとマイクロコントローラーでは実装の詳細が異なり、またこの発表は発表者の見解とCHERIにおける直接的な経験を反映したものであって、すべてのセキュリティ問題の自動的な排除を保証する一般規格ではない。

ニュースの出典
InfoQ - Architecture Articles
原文を開く ↗
ف
著者

فريق تحرير certi.news

同じカテゴリー

おすすめ記事

すべてのニュースを見る