9月末または10月のリリースが予定されているFreeBSD 9.0-RELEASEには新しいセキュリティ機能「Capsicum」が登場します。これでFreeBSDにおける主なファイル保護機構は3種類ということになります。Capsicumはケーパビリティの実装系の1つと分類できるもので、既存の実装と相性が良く、少量のコードでアプリケーションやツールでケーパビリティを実現できるという特徴があります。
保護ドメインやアクセス制御リストなどの保護機構に慣れていると、この「ケーパビリティ」は理解しにくいところがあります。FDTではしばらく、Capsicumを理解するための概念的な説明や、実際の実装例などを紹介して「Capsicum」の機能を紹介していきます。
Capsicum - system call jail?
「Capsicum」の動作をもっと簡単に考えてみます。「Capsicum」の機能を有効にするもっとも簡単な方法は、Cのソースコードに「cap_enter();」を加えることです。この関数が実行されたあと、プロセスはケーパビリティモードに入ります。ケーパビリティモードに入ると、そのプロセスは新しいファイルディスクリプタを取得することができなくなります。グローバルなファイルシステムにもアクセスできなくなります。既存のファイルディスクリプタはそのまま使い続けることができます。
「Capsicum」を活用するには、cap_enter()を実行する前に、あらかじめアクセスする必要があるリソースへのディスクリプタを作成する必要があります。操作内容を制限する場合には、それぞれをcap_new()経由でケーパビリティへ変更します。そうした上で、cap_enter()を実行し、設定された以上のアクセスができない「ケーパビリティモード」へ入ります。
つまり「Capsicum」は、アプリケーションやツールが積極的に自分から檻を作成し、その中に入って二度と開かない鍵をかけるといったような処理といえます。「保護ドメイン」や「アクセス制御リスト」がファイル側にアクセス設定をすることでファイルの保護を実現しようとするのに対し、「Capsicum」ではアプリケーションやツールが積極的に自分自身を制限することで保護を実現しようとするという違いがあります。