FreeBSD Daily Topics

2011年8月30日Capsicumを知る - DACとMAC、双方の特徴を持つ

9月末または10月のリリースが予定されているFreeBSD 9.0-RELEASEには新しいセキュリティ機能「Capsicum」が登場します。これでFreeBSDにおける主なファイル保護機構は3種類ということになります。Capsicumはケーパビリティの実装系のひとつと分類できるもので、既存の実装と相性が良く、少量のコードでアプリケーションやツールでケーパビリティを実現できるという特徴があります。

保護ドメインやアクセス制御リストなどの保護機構に慣れていると、この「ケーパビリティ」は理解しにくいところがあります。FDTではしばらく、Capsicumを理解するための概念的な説明や、実際の実装例などを紹介して「Capsicum」の機能を紹介していきます。

Capsicum is DAC and MAC Hybrid model

FreeBSDのデフォルトのセキュリティポリシーは任意アクセス制御(DAC - Discretionary Access Control)です。FreeBSDに限らず、ほとんどのOSは任意アクセス制御をデフォルトに採用しています。これはユーザ自身が保護機構におけるアクセス設定を変更できる、というものです。chmod(1)やsetfacl(1)でパーミッションやアクセス制御リストを設定できるというのは、このDACに該当します。

一方、FreeBSDはDACとは反対のポリシーとなる強制アクセス制御(MAC - Mandatory Access Control)にも対応しています。強制アクセス制御においては、ユーザが保護に関する設定を変更することができなくなります。より高いセキュリティが求められる場合に活用される機能です。PCで作業したりサーバを運用する場合、MACは規制がきつすぎてあまり扱いやすいセキュリティポリシーとはいえないところがあります。高い機密が求められる場合などに使われる機能です。

「Capsicum」はDACとMACの双方の特徴を備えている、という面で興味深いところがあります。敢えて言ってしまうと、DACに相当するのがcap_new()、MACに相当するのがcap_enter()実行後、ということになります。

「Capsicum」ではcap_new()を使ってディスクリプタに対して操作の許可を設定することができます(注意: 設定するのではなく、実際にはその許可を持った新しい特別なファイルディスクリプタ(ケーパビリティ)を生成しているので、DACと考えるのは若干違うといえば、違うともいえます)。自由に設定できることからDACに近いポリシーにあるといえます。一方、cap_enter()を実行したあとには、さまざまなリソースへのアクセスは制限されます。MACのようにかなり厳しい状況になるというわけです。起動時はDACな状況にあるものの、必要なディスクリプタを取得し設定をしたあとは、cap_enter()を実行してMACのように変更がほとんど許可されない状況に入る。DACの扱いやすさとMACのセキュリティの高さの双方を兼ね備えたような動きをするわけです。

おすすめ記事

記事・ニュース一覧