Capability-based Security:最小権限とCapabilityによるセキュアなシステム設計
Capability-based securityは、
コンピュータシステムのセキュリティを強化するための革新的なアプローチです。従来のアクセス制御リスト(ACL)ベースのシステムとは異なり、最小権限の原則(principle of least privilege)を徹底的に適用することで、より堅牢なセキュリティを実現します。本稿では、Capability-based securityの核心
概念であるCapability、その設計原理、利点、そして関連するシステムや研究について詳細に解説します。
設計原理:最小権限とCapabilityの連携
Capability-based securityは、アプリケーションに直接Capabilityを割り当てることで、アクセス権を厳密に制御します。これは、アプリケーションが利用できるリソースとその操作方法を、細かく定義したCapabilityによって制限することを意味します。 従来のACL方式では、OSがアクセス要求ごとに権限を検証するのに対し、Capability-basedシステムでは、Capabilityの所有自体がアクセス権の証明となります。
この仕組みを実現するためには、OSレベルでの効率的なCapability管理と、Capabilityの安全な伝播メカニズムが不可欠です。多くの商用OSは、性能や複雑さの理由からACL方式を採用していますが、Capability-based securityは、より厳格なセキュリティポリシーの適用を可能にします。
ファイル記述子やファイルハンドルは、Capabilityの
概念と類似していますが、通常はCapabilityの交換や、一貫性のあるセキュリティ情報の永続的な維持をサポートしていません。Capability-based OSでは、これらの機能がシステムの基礎として組み込まれ、信頼できないエンティティ間のCapabilityの安全なやり取りを可能にします。
Capability:アクセス権の証
Capabilityは、特定のオブジェクトへのアクセス権をカプセル化したデータ構造体です。Capabilityは、オブジェクトへの参照と、そのオブジェクトに対する許可された操作(読み込み、書き込み、実行など)を組み合わせたものです。 単なるオブジェクトへの参照(例えば、ファイルパス)とは異なり、Capabilityはアクセス権を明確に示すため、OSによる権限検証を必要としません。
例えば、`/etc/passwd`というファイルへの読み書きアクセス権を持つCapabilityは、単なるファイルパスとは異なり、そのファイルに対する具体的な操作権限を保持しています。Capabilityを持つプロセスだけが、そのCapabilityで定義された操作をファイルに対して実行できます。このCapabilityは、OSによって管理されており、ユーザプロセスが直接操作することはできません。
従来のシステムでは、プログラムはファイルパスなどの参照を通して通信しますが、これらの参照はCapabilityではなく、使用前にOSによる検証が必要です。これは、「Confused deputy problem」と呼ばれる
セキュリティホールにつながる可能性があります。Capability-basedシステムでは、Capability自体がプロセス間で安全にやり取りされるため、このような問題を回避できます。
Capabilityの特性と実装
Capabilityは、通常、特権を表すデータ構造体として実装されます。アクセス権とオブジェクト参照を含むこの構造体は、OS内部で管理され、ユーザプロセスからの直接操作を制限します。その挙動は、従来のファイル記述子に似ていますが、システム内のあらゆるオブジェクトにCapabilityが要求されます。
プログラムは、Capabilityに関数を適用したり、他のプログラムに渡したり、アクセス権を制限したり、破棄したりすることができます。平文の参照を使用する従来のシステムと比較して、Capabilityを使用することで、セキュリティが大幅に向上します。なぜなら、Capabilityの所有自体がアクセス権を証明するからです。ACLのような複雑なアクセス制御機構が不要になる可能性があり、セキュリティポリシーの簡素化と強化につながります。
多くのOSで実装されているファイル記述子もCapabilityに似た機能を持っていますが、純粋なCapability-basedシステムの利点をすべて享受するには、いくつかの課題があります。特に、Capabilityを保持するエンティティの実体を、セキュリティ情報の一貫性を保った形で永続的に維持することが困難です。
永続性とOrthogonally Persistent OS
Capabilityの永続的な維持という課題に対処するアプローチとして、Orthogonally Persistent OSがあります。このタイプのOSでは、オブジェクトとCapabilityが永続的に維持されるため、Capabilityの有効期限を管理する必要がなくなり、セキュリティの維持が容易になります。また、OS自体がデータのシリアル化を行うことで、ユーザプログラムによる改竄を防ぎます。
研究用および商用システム
Capability-based securityの
概念は、長年にわたって多くの研究システムや商用システムに採用されてきました。EROS、KeyKOS、CapROS、Coyotosなどの研究プロジェクト、IBM System/38やAS/400、Intel iAPX 432、Symbianなどの商用システムは、Capability-based securityの具体的な実装例です。これらのシステムは、それぞれ異なる設計を採用していますが、共通してCapabilityを用いた安全なアクセス制御を実現しています。
結論
Capability-based securityは、最小権限の原則を徹底的に適用し、Capabilityを用いた厳格なアクセス制御によって、高度なシステムセキュリティを実現するための強力なアプローチです。従来のACLベースのシステムと比較して、セキュリティの向上、シンプルさ、柔軟性の向上をもたらします。今後のシステムセキュリティにおいて、Capability-based securityはますます重要な役割を果たすことが期待されます。