# Capsicum
## 定義
Capsicum は [[FreeBSD]] における capability-based サンドボックス機構である。アプリケーションに対して、ファイル・ソケット等の OS 資源へのアクセス権限を改ざん不可能なファイルディスクリプタとして付与する。サンドボックス化後、アプリケーションは事前に取得した capability を通じてのみ資源にアクセスでき、新規のファイルオープンや許可されていない操作はできない。(Source: [[@2023__APSys__Reducing Attack Surface with Container Transplantation for Lightweight Sandboxing]] §4.3)
## 横断的知見
- **Capability-based Security の具象化**: Capsicum は capability-based security の原則を FreeBSD に実装したものである。Linux には標準で同等の機構がないため、Container Transplantation は Linux コンテナを FreeBSD へ移植することで Capsicum を利用している。これは、OS カーネルレベルで提供される capability 機構が、コンテナサンドボックスの攻撃面削減に直接寄与しうることを示す。(Source: [[@2023__APSys__Reducing Attack Surface with Container Transplantation for Lightweight Sandboxing]] §4.3)
- **透過適用のための補助機構**: Capsicum 単体ではアプリケーション修正が必要なため、Container Transplantation は libpreopen(事前ファイルディスクリプタ開放)と Casper(動的資源アクセスのプロキシ実行)を組み合わせて Linux バイナリへの透過適用を実現する。Capability 機構の「厳格さ」と「実用性」のギャップを、標準 C ライブラリレベルの介入で埋めようとする例である。(Source: [[@2023__APSys__Reducing Attack Surface with Container Transplantation for Lightweight Sandboxing]] §4.3)
## 未解決の問い
- libpreopen で事前開放できる資源の範囲はどこまでか。実行時に決まる動的なファイルパスやネットワーク接続先をどう扱うか。
- Casper によるプロキシ実行を増やすことで、どこまで capability 制限を緩和せずに実用アプリケーションを動作させられるか。
- Capsicum を Linux バイナリに透過適用する際、Linux と FreeBSD のファイルディスクリプタセマンティクスの差異がどのような互換性問題を生むか。
## 関連
- ソース: [[@2023__APSys__Reducing Attack Surface with Container Transplantation for Lightweight Sandboxing]]
- エンティティ: [[FreeBSD]] / [[Casper]] / [[libpreopen]] / [[Linuxulator]]
- 概念: [[Capability-based Security]] / [[Container Transplantation]] / [[Lightweight Sandboxing]] / [[コンテナ仮想化]]
## 出典
- [[@2023__APSys__Reducing Attack Surface with Container Transplantation for Lightweight Sandboxing]](§4.3)