ケーパビリティベース
ケーパビリティベース(Capability-based)とは、情報セキュリティやコンピュータシステムの設計において、アクセス制御を行うための一つの手法です。 この手法では、ユーザーが利用できる機能やリソースについて、そのユーザーの「能力」に基づいてアクセス権限を設定します。つまり、ユーザーの役割や資格に応じて、アクセス権限を制御することができます。 ケーパビリティベースのアクセス制御は、ユーザーが特定の資格を持っている場合にのみ、リソースにアクセスできるようにするため、安全性が高いとされています。また、この手法は、システム全体を把握してアクセス制御を設定する必要がなく、個々のリソースごとにアクセス権限を設定できるため、柔軟性が高く、セキュリティ管理が容易になります。
ケーパビリティベースのOSフレームワーク
[編集]ケーパビリティベースのOSフレームワークは、セキュリティやプライバシーなどの要求事項に応えるために設計された、オペレーティングシステム(OS)のフレームワークです。
ケーパビリティベースのOSフレームワークでは、プログラムが必要とする権限を個別に付与することができます。これは、従来のUNIXなどのOSで使われているアクセス制御リスト(ACL)の代わりに、より柔軟性の高いアクセス制御方法を提供します。例えば、特定のファイルに対する読み取り権限だけを与えたり、ネットワークへのアクセス権限を制限することができます。
このフレームワークには、様々なOSがあります。代表的なものに、CapROS、Eros、Coyotosがあります。これらのOSは、セキュリティやプライバシーに特化しており、セキュリティの脆弱性を防ぐための機能が組み込まれています。また、ケーパビリティベースのOSフレームワークは、分散システムにも適しており、複数のマシン間での安全なデータの共有が可能です。
Capsicum
[編集]Capsicumは、セキュリティに関する機能を提供するためにFreeBSDなどのUNIXとその他のUNIX互換OSに実装されたケーパビリティベースのセキュリティフレームワークです。 Capsicumは、プロセスのシステムコールへのアクセスを制限し、最小限の特権でアプリケーションを実行することができます。 Capsicumを使用することで、システムの安全性が向上し、攻撃者が悪用できる潜在的な脆弱性を減らすことができます。 Capsicumは、プロセスの権限を細かく制御できるため、プログラマーがより安全にアプリケーションを構築できるようになります。 Capsicumは、ファイルシステム、ネットワーク、プロセス、スレッドなど、様々なシステムリソースに適用できます。また、Capsicumは、セキュリティの問題を解決するために他のセキュリティフレームワークと組み合わせて使用することができます。 Capsicumは、Googleが開発したオープンソースのフレームワークであり、現在はFreeBSDとLinuxでサポートされています。
Capsicum for FreeBSD
[編集]Robert WatsonとJonathan Andersonによって開発されたCapsicumのFreeBSD実装は、FreeBSD 10.0からリリースに含まれるようになりました(FreeBSD 9.0、9.1、および9.2ではオプションでコンパイルされた機能として提供されています)。FreeBSDのCapsicumは、Capsicum APIおよびセマンティクスのリファレンス実装であり、他のプラットフォーム向けのポートのための出発点となるソースコードも提供しています(例えば、Linux向けのCapsicumおよびDragonFlyBSD向けのCapsicum)。
実装状況
[編集]Capsicum for FreeBSDは、Robert WatsonとJonathan Andersonによって実装されました。Capsicumは、最初にFreeBSD 9.0で実験的な機能として、カーネルからデフォルトでコンパイルされました。FreeBSD 10.0では、Capsicumの能力モード、機能、およびプロセス記述子がデフォルトでカーネルにコンパイルされ、ベースシステムとサードパーティのアプリケーションの両方で使用できるようになりました。
FreeBSD 10.0では、実験的なアプリケーションやFreeBSDベースシステムでCapsicumを展開した数年間の経験に基づいて、重要なKPIおよびAPIの変更が行われました。FreeBSD 10.0では、tcpdump、auditdistd、hastd、dhclient、kdump、rwhod、ctld、iscsid、さらにはuniqなどのベースシステムアプリケーションがリリース配布物の時点でCapsicumを使用しています。
POSIXケーパビリティ
[編集]POSIXケーパビリティは、従来のUNIXシステムにおけるスーパーユーザー(root)の特権を細分化し、特定の操作に必要な最小限の権限のみをプロセスに付与するための仕組みです。これにより、root権限を完全に与える必要がない場合でも、特定の操作を実行できるように設計されています。
主なPOSIXケーパビリティ
[編集]以下は、POSIXケーパビリティの一部です:
- CAP_CHOWN: ファイルの所有者を変更する権限。
- CAP_NET_BIND_SERVICE: 1024番以下のポートにバインドする権限。
- CAP_SYS_BOOT: システムを再起動する権限。
- CAP_SETUID: プロセスのUIDを変更する権限。
これらのケーパビリティを用いることで、アプリケーションやサービスに必要な最低限の権限を明確にすることができます。これにより、セキュリティリスクを軽減し、最小権限の原則を実現できます。
実装例
[編集]Linuxカーネルでは、POSIXケーパビリティがサポートされており、capabilities(7)
マニュアルで詳しく説明されています。アプリケーションに対するケーパビリティの付与は、setcap
コマンドを使用して行います。たとえば、特定のポートにバインドするための権限をバイナリに付与するには、以下のようにします:
# setcap 'cap_net_bind_service=+ep' /path/to/binary
また、getcap
コマンドを使用して、バイナリに付与されているケーパビリティを確認できます。