Oracle® Solaris 11.2 でのユーザーとプロセスのセキュリティー保護

印刷ビューの終了

更新: 2014 年 7 月
 
 

カーネルプロセスを保護する特権

特権とは、プロセスが操作を実行するために必要とする権利です。この権利はカーネルにおいて実効性があります。特権の基本セットの範囲内で動作するプログラムは、システムセキュリティーポリシーの範囲内で動作します。setuid root プログラムは、システムセキュリティーポリシーの範囲を超えて動作するプログラムの例です。特権を使用することで、プログラムは setuid root を呼び出さなくてすみます。

特権は、システム上で行える処理をエミュレートします。プログラムは、その実行に必要な最小限の特権で実行できます。たとえば、ファイルを操作するプログラムには、file_dac_write および file_flag_set 特権が必要になることがあります。プロセス上のこれらの特権により、root としてプログラムを実行する必要がなくなります。

これまでシステムは、ユーザー権利およびプロセス権利の基本情報で導入された特権モデル、つまり権利モデルに準拠していませんでした。むしろ、システムはスーパーユーザーモデルを使用していました。スーパーユーザーモデルでは、プロセスは root またはユーザーとして実行されていました。ユーザープロセスは、ユーザーのディレクトリとファイルにだけ作用するように限定されました。root プロセスは、システム上の任意の場所にディレクトリとファイルを作成できました。ユーザーのディレクトリ以外の場所にディレクトリを作成する必要があるプロセスは、UID=0 を使用して (つまり root として) 実行されました。セキュリティーポリシーは、システムファイルを保護するのに、任意アクセス制御 (Discretionary Access Control、DAC) に依存していました。デバイスノードは、DAC によって保護されました。たとえば、グループ sys が所有しているデバイスをオープンできるのはこのグループのメンバーだけでした。

しかし、setuid プログラムやファイルアクセス権、管理アカウントなどは悪用される危険性があります。setuid プロセスに許可されているアクションは、このプロセスがその処理に必要な数を上回っています。setuid root プログラムが侵入者に攻撃された場合には、全権を有する root ユーザーとしてふるまわれてしまいます。同様に、root パスワードにアクセスできるユーザーは誰でもシステム全体に損害を与えかねません。

対照的に、特権付きポリシーを適用するシステムでは、ユーザー権利からroot 権利までの間が段階的です。あるユーザーに通常のユーザーの権利を超える動作を実行するための特権を付与したり、root の特権を root が現在所有している数より少ない数に制限したりできます。権利により、特権で実行されるコマンドを権利プロファイルとして分離し、これを 1 人のユーザーまたは 1 つの役割に割り当てることができます。Table 1–1 は、権利モデルが提供する root 特権とユーザー権利の間の段階を示しています。

権利モデルでは、スーパーユーザーモデルより高いレベルのセキュリティーが実現されます。プロセスから削除された特権が悪用される可能性はありません。プロセス特権は、弱点を突かれてアクセス権が取得される可能性がある DAC 保護だけの場合と比較して、重要なファイルとデバイスの保護を強化できます。

特権を使用することで、必要な権利しか持たないようにプログラムとプロセスを制限できます。最小特権が実装されたシステムでは、プロセスを取得した侵入者がアクセスできるのはそのプロセスに割り当てられた特権だけです。システムのほかの部分を攻撃することはできません。