EN JA
MAC(9)
MAC(9) FreeBSD Kernel Developer's Manual MAC(9)

名称

macTrustedBSD 強制的アクセス制御 (Mandatory Access Control) フレームワーク

書式

#include < sys/types.h>
#include < sys/mac.h>

カーネル設定ファイルで:
options MAC
options MAC_DEBUG

解説

はじめに

TrustedBSD の強制的アクセス制御フレームワークは、ダイナミックに導入されたシステムセキュリティモジュールがシステムセキュリティの機能性を変更することを許可します。これは、伝統的なラベル付けされた強制的アクセス制御モデルを含む、さまざまな新しいセキュリティサービスをサポートするために使用することができます。フレームワークは、制御点とオブジェクトの作成をアクセスすることが特に尊重されるので、様々なカーネルサービスをサポートするコードによって呼び出さなければならない、ひと続きのエントリポイントを提供します次に、フレームワークは、それらの MAC API エントリポイントでセキュリティの振る舞いを変更する機会をそれらに提供するためにセキュリティモジュールを呼び出します。 API (通常のカーネルサービス) のコンシューマ (消費者) とセキュリティモジュールの両方は、特に (ロックのような) 同期プリミティブを尊重する、 API の呼び出しのセマンティクスを承知していなければなりません。

生産物の使用のための妥当性での注意

FreeBSD 5.0 に含まれる TrustedBSD MAC Framework は、実験的であると見なされており、実験オペレーティングシステム機能の使用に関連しているリスクの慎重な考慮なしで生産環境に配置するべきではありません。

フレームワークによってサポートカーネルオブジェクト

MAC フレームワークは、プロセス資格証明、vnodes、devfs_dirents、マウントポイント、ソケット、mbufs、bpf 記述子、ネットワークインタフェース、IP フラグメント (断片) キュー、およびパイプを含んで、カーネル内のさまざまなタイプのオブジェクト上のラベルを管理します。 struct label によって表されるカーネルオブジェクトに関するラベルデータは、ポリシを気付きません、そしてポリシモジュールによって適していると決められた方法で使用されるかもしれません。

コンシューマのための API

MAC API は、ここに明確に文書化することができないくらい広範囲のエントリポイントの大きいセットを提供します。一般的に、これらのエントリポイントは、アクセス制御チェックか他の MAC 関連の操作、活動を許可する 1 つ以上のサブジェクト (資格証明) を受け付ける、実行される操作での 1 組のオブジェクト、と要求される操作のタイプに関する情報を提供する 1 組の操作引数を表します。

コンシューマのためのロック

MAC API のコンシューマは、それぞれの API エントリポイントのためのロック要件を承知していなければなりません。一般的に、適切なロックは、MAC モジュールがアクセス制御目的のためのオブジェクトの種々のアスペクト (形状) を利用することができるように、呼び出しに渡される各サブジェクトまたはオブジェクト上に保持されなければなりません。例えば、vnode ロックは、 MAC フレームワークとモジュールがアクセス制御の目的のために vnode からセキュリティラベルと属性を検索するために、頻繁に必要とされます。同様に、呼び出し側は参照が MAC API に渡されたどんなサブジェクトかオブジェクトの参照カウントセマンティクスを承知していなければなりません。すべての呼び出しは、オブジェクトへの有効な参照が (潜在的に長い) MAC API 呼び出しの持続時間のために保持されることを必要とします。いくつかの状況の下では、オブジェクトは、共有されるか、または排他的な方法で保持されなければなりません。

モジュールの著者のための API

各モジュールは、初期化と破壊 API エントリポイント、さまざまなオブジェクト作成と破壊の呼び出し、と大きなセットのアクセス制御チェック点を含んで、モジュールが実装することを選択する MAC API 操作を記述する構造体をエクスポートします。また、将来、監査エントリポイントも追加されるでしょう。モジュールの作者は、エントリポイントの部分集合、記述構造の API 関数ポインタを NULL に設定、フレームワークがモジュールへの呼び出しを避けることの許可を実装するだけを選ぶかもしれません、

モジュールの著者のためのロック

モジュールの作家は、それらが実装するエントリポイントのロックセマンティクスを承知していなければなりません。 MAC API エントリポイントには、各引数のための特別ロックか、または、参照カウントセマンティクスがあり、モジュールは、ロックと参照カウントプロトコルに従わなければならないか、または (競合条件、不適切なポインタ非参照などを含んで) さまざまな故障モードの危険にさらさなければなりません。

また、MAC モジュールの作家は、よりグローバルなロック要件に違反するのを避けるために慎重でなければならないように、グローバルなロック順序要件などのように、MAC API エントリポイントがカーネルスタックの深部から頻繁に呼び出されることを承知していなければなりません。例えば、それは、ポリシモジュールによって明確に維持して、順序付けられない追加オブジェクトをロックするために不適当であるかもしれません、またはポリシモジュールはそれらの追加オブジェクトに関連するグローバルな順序要件に違反するかもしれません。

最後に、MAC API モジュールの実装者は、MAC フレームワークを不適当に呼び戻すことを避けるのに慎重でなければなりません: フレームワークは、ポリシモジュールのアタッチとデタッチの間の矛盾を防ぐためにロックを利用します。 MAC API モジュールは、デッドロックか矛盾が起こるかもしれないシナリオを生成することを避けるべきです。

新しい MAC エントリポイントの追加

MAC API は、新しいサービスがカーネルに加えられように容易に拡張可能であることを目的としています。ポリシが、システムのサブジェクトとオブジェクトを普遍的に保護するための機会を保証する目的で、カーネル開発者がセキュリティチェック、または関連サブジェクトかオブジェクト操作が新たに書かれたか、または変更されたカーネルコードで生じるときの認識を維持することは重要です。新しいエントリポイントは、ロックの順序とセマンティクスに関してどんな混乱も防ぐために慎重に文書化されなければなりません。新しいエントリポイントを導入するのは次の 4 つの異なった要素を必要とします: 操作引数を反映する新しい MAC API エントリを導入します。それらの MAC API エントリポイントを新しいか変更されたカーネルサービスの到るところに点在させます。 MAC API フレームワークのフロントエンド実装を拡張します。そして、それらのポリシを一貫して実施することができるように、新しいエントリをうまく利用するために適切なモジュールを変更します。

エントリポイント

システムサービスとモジュールの作者は、MAC Framework API に関する情報のために FreeBSD Architecture Handbook を参照するべきです。

歴史

TrustedBSD MAC Frameworkは FreeBSD 5.0 ではじめて登場しました。

作者

このマニュアルページは Robert Watson によって書かれました。このソフトウェアは DARPA CHATS 研究プログラムの一環として、 DARPA/SPAWAR 契約 N66001-01-C-8035 (“CBOSS”) の下で Network Associates Laboratories, the Security Research Division of Network Associates, Inc. によって FreeBSD プロジェクトに寄贈されました。

TrustedBSD MAC Framework は、 Robert Watson によって設計され、 Network Associates Laboratories Network Security (NETSEC), Secure Execution Environment (SEE) と Adaptive Network Defense 研究グループによって実装されました。 CBOSS Project に貢献する Network Associates Laboratory スタッフは次に挙げられます (アルファベット順で): Lee Badger, Brian Feldman, Hrishikesh Dandekar, Tim Fraser, Doug Kilpatrick, Suresh Krishnaswamy, Adam Migus, Wayne Morrison, Andrew Reisse, Chris VanceRobert Watson

下請け契約のスタッフは次に挙げられます: Chris Costello, Poul-Henning Kamp, Jonathan Lemon, Kirk McKusick, Dag-Erling Smørgrav

追加の貢献者は次に挙げられます: Pawel Dawidek, Chris Faulhaber, Ilmar Habibulin, Mike Halderman, Bosko Milekic, Thomas Moestl, Andrew ReiterTim Robbins

バグ

適切な生産使用に関しては、この文書のはじめのセクションを参照してください。 TrustedBSD MAC Framework は、 FreeBSD で実験的であると見なされています。

MAC Framework の設計はルートユーザの封じ込めをサポートることを目的としていますが、現在、すべての攻撃チャネルはエントリポイントチェックによって保護されるというわけではありません。そのようなものとして、悪意がある特権ユーザに対して保護するために、分離して MAC Framework ポリシを当てにするべきではありません。

July 10, 2006 FreeBSD