Multi-Level Security
Multi-Level Security
Trusted OSにはどのような強制アクセス制御機能が実装されているのかを解説します。通常、データを保存するサーバには情報の機密度が異なるデータがたくさん保存 されています。そのため、データにアクセスできるユーザを制限しなければなりません。そこでTrusted OSでは、情報の機密度、重要度の高さを表す「機密レベル」というセキュリティ属性をすべてのプロセス、ファイルに付与しています。
この機密レベルには上下関係があり、極秘情報(TopSecret)や、公開情報(Public)など、いくつかの階層が用意されています(図 1)。この階層の上下関係には動作の規則があり、上位の機密レベルから下位の機密レベルには読み出しと実行しか許可しません。また、下位の機密レベルから 上位の機密レベルへは追記のみ許可します。書き込みの動作は、プロセスとファイルが同一の機密レベルのときのみ許可されます。

図1:Multi-Level Securityを使用した強制アクセス制御
(情報の機密度を使用したアクセス動作)
(画像をクリックすると別ウィンドウに拡大図を表示します)
このように、それぞれの情報に機密度の格付けを行ってアクセス制御を行う方式をMLS(Multi-Level Security)と呼びます。
BINDの動作で説明すると、namedデーモンを「Confidential」、ゾーンファイルを「Public」、ログファイルを 「TopSecret」と機密レベルを定義しましょう(図1)。すると、namedデーモンは自身より下位の機密レベルのみ参照できるので、ゾーンファイ ルのみ確認できます。もしBINDにセキュリティホールがあって、悪意あるユーザに権限が奪取されたとしても、MLSの構造に合わせた動作しか許可されま せんので、ログファイルの内容を改竄されることはありません。
また、機密レベルの他に、区画情報を定義することもできます(図2)。区画情報を定義すると、異なる区画へのアクセスは禁止されます。同じく BINDにセキュリティホールがあったとして、悪意あるユーザに権限が奪取されたとしても、異なる区画へのアクセスはできませんので、Apacheが被害 を受けることはありません。

図2:Multi-Level Securityを使用した強制アクセス制御
(情報の機密度+区画を使用したアクセス動作)
(画像をクリックすると別ウィンドウに拡大図を表示します)
このように、Trusted OSでは機密レベルと区画情報を使用して、強制アクセス制御を実現しています。SELinuxにもオプションとしてMLSの機能が用意されています。まだ 検証段階であるため実用レベルでの実装にはほど遠いですが、将来的には利用できるようになるでしょう。