基本セキュリティモジュール (Basic Security Module、BSM) には、2 つのセキュリティ機能があります。1 つ目の監査メカニズムには、監査データの分析を支援するツールが含まれています。2 つ目のデバイス割り当てメカニズムでは、リムーバブルデバイスまたは割り当て可能デバイスに必要なオブジェクト再利用特性を提供します。
この章では、BSM の概念について説明します。この章の内容は次のとおりです。
監査とは、マシンリソースの使用状況に関するデータを収集することです。監査データは、セキュリティに関連するシステムイベントの記録を提供します。このデータは、ホストで発生する動作の責任の割り当てに使用できます。監査を正常に機能させるには、識別と認証という 2 つのセキュリティ機能が重要です。 ログイン時にユーザーがユーザー名とパスワードを与えると、一意の監査 ID がそのユーザーのプロセスに関連付けられます。監査 ID は、ログインセッション中に起動されるすべてのプロセスに継承されます。ユーザーが ID を変更しても、実行するすべての動作は同じ監査 ID によって追跡されます。su(1M) のマニュアルページを参照してください。
監査サブシステムを使うと、次の処理が可能になります。
ホスト上で発生するセキュリティに関係するイベントの監視
ネットワーク全体の監査トレールにイベントを記録
誤った使用または権限のない動作の検出
アクセスパターンの確認と、ユーザーおよびオブジェクトのアクセス履歴の調査
保護メカニズムを迂回しようとする操作の検出
スーパーユーザー権限を使用しているユーザーの検出
システムの構成時にどの動作を監視するかを選択します。各ユーザーに行う監査の程度は、細かく調整することもできます。
監査データを収集したあと、監査ファイル縮小ツールと変換ツールによって監査トレールの注目すべき部分を調査できます。たとえば、個々のユーザーまたは特定グループの監査レコードを確認できます。特定の日に発生した特定の種類のイベントに対するすべてのレコードを調査できます。または、特定の時間帯に生成されたレコードを選択することもできます。
監査とは、指定したイベントが発生したときに監査レコードを生成することです。通常、次のイベントが発生すると監査レコードが生成されます。
システムの起動とシャットダウン
ログインとログアウト
プロセスまたはスレッドの作成と破棄
オブジェクトを開く、閉じる、削除する、または名前を変更する
スーパーユーザー権限または役割権限の使用
識別と認証動作
プロセスまたはユーザーによる任意アクセス制御 (DAC)
インストール固有の管理動作
次の 3 つが監査レコードの生成元になります。
アプリケーション
非同期イベントの結果
プロセスのシステムコールの結果
関連するイベント情報が取得されると、その情報は監査レコードの書式に変換されます。監査レコードは、監査キューと呼ばれるカーネルバッファーに格納されます。カーネルの監査キューに一時的に保管された監査レコードは、監査ファイルに書き込まれます。監査ファイルの場所は、audit_control ファイルのエントリによって決定されます。監査ファイルの配置先として、同一マシン上の複数のパーティション、異なる複数のマシン上のパーティション、またはネットワークで接続されている複数のマシン上のパーティションを選択できます。接続された監査ファイルの集合は、監査トレールと呼ばれます。
監査レコードは、発生順に監査ファイルに蓄積されます。各監査レコードには、イベントを識別する情報、イベントの発生元、イベントの時刻、およびその他の関連情報が格納されます。
コンピュータシステム、特にネットワーク上のシステムのセキュリティを確保するのは簡単ではありません。セキュリティの確保には、システムまたはユーザーのプロセスが開始する前に動作を制御するメカニズムが必要となります。セキュリティの確保には、動作の経過を監視するツールが必要となります。また、セキュリティの確保には、動作終了後に動作内容を報告することも必要です。初期設定の Solaris 監査の場合、ユーザーのログイン前かマシンのプロセスが開始する前に、パラメータが設定されている必要があります。また、ほとんどの監査には、現在のイベントを監視し、指定されたパラメータを満たすイベントを報告する機能が含まれます。Solaris 監査がこれらのイベントを監視および報告する方法については、第 21 章「監査の計画」および第 22 章「BSM サービスの管理 (手順)」を参照してください。
監査では、ハッカーによる不正な侵入を防止することはできません。ただし、監査サブシステムでは、たとえば、特定のユーザーが特定の日時に特定の動作を行なったことが報告されます。監査報告では、入力パスとユーザー名によってこのユーザーを特定できます。これらの情報は、すぐに端末に表示したり、ファイルに出力してあとで分析したりできます。このように、監査サブシステムの提供するデータから、次のことが判断できます。
どのようにシステムセキュリティが低下したか
必要なセキュリティレベルを実現するために対応が必要なセキュリティホールはどれか
BSM サービスでは、次の用語が使用されています。定義によっては、より詳細な説明への参照先も示します。
表 20–1 BSM の用語
用語 |
定義 |
---|---|
監査クラス |
監査イベントのグループ。監査クラスを使用して、イベントのグループを管理できる。詳細は、監査クラスを参照 |
監査ディレクトリ |
監査ファイルのリポジトリ。監査ディレクトリの種類については、監査ディレクトリを参照 |
監査イベント |
監査対象のセキュリティ関連のシステム動作。監査イベントの種類については、監査イベントを参照 |
監査フラグ |
クラスの短縮名。監査フラグは、監査を行うイベントクラスとタイミングを決定するために使用する。監査フラグの詳細は、監査フラグを参照 |
監査ポリシー |
特定の構成について有効または無効を指定できる監査オプションの集合。監査オプションには、特定の種類の監査データを記録するかどうかを指定する。また、監査トレールがいっぱいになった場合に監査を中断するかどうかも指定する |
監査レコード |
監査データ。監査データはバイナリ形式で格納される。1 つの監査レコードにつき 1 つの監査イベントが記述される。各監査レコードは、一連の監査トークンから構成される。監査レコードの詳細は、監査レコードと監査トークンを参照 |
監査トークン |
一連の監査データ。監査トークンはバイナリ形式で格納される。各監査トークンには、監査イベントの 1 つの属性 (プロセス、パス、その他のオブジェクトなど) が記述される。監査トークンの詳細は、監査トークンの形式を参照 |
監査トレール | |
デバイス割り当て |
デバイスの使用を制限し、デバイスが使い終わったあとに残っているデータを消去するメカニズム。デバイス割り当ての詳細は、デバイス割り当てを参照 |
公開オブジェクト |
公開オブジェクトとは、/etc や /usr/bin などのシステムディレクトリ内に格納されているファイル。システムディレクトリは、すべてのユーザーによって読み取り可能である。システムディレクトリ内のファイルは、内容の参照、または実行のために頻繁に読み取られる。Solaris 9 8/03 リリースでは、デフォルトで、公開オブジェクトの読み取り専用イベントは監査されない。たとえば、fr 監査フラグがオンになっている場合でも、公開オブジェクトの読み取り動作は監査されない。auditconfig -setpolicy コマンドの public ポリシーフラグ引数によって、ポリシーの設定が決まる |
セキュリティに関連するシステム動作について監査を行うことができます。これらの監査可能な動作を、「監査イベント」と呼びます。監査イベントは、/etc/security/audit_event ファイルに指定します。監査可能な各イベントは、このファイル内で、シンボル名、イベント番号、一連の選択済みクラス、および簡単な説明によって定義されています。audit_event(4) のマニュアルページを参照してください。
監査イベントには、いくつかのカテゴリがあります。まず、カーネルレベルのイベントとユーザーレベルのイベントに大きく分けられます。カーネルによって生成されたイベントは、カーネルレベルのイベントと呼ばれます。アプリケーションによって生成されたイベントは、ユーザーレベルのイベントと呼ばれます。次の表に示すように、カーネルレベルのイベントには、ユーザーレベルのイベントよりも小さい監査イベント番号が割り当てられています。
表 20–2 監査イベントのカテゴリ
番号の範囲 |
イベントの種類 |
|
---|---|---|
1–2047 |
カーネルレベルの監査イベント |
|
2048–65535 |
ユーザーレベルの監査イベント |
|
|
2048–32767 |
SunOS ユーザーレベルのプログラム用に予約 |
|
32768–65535 |
カーネルによって生成されるイベントは、システムコールです。システムコールには、1 から 2047 までの監査イベント番号が割り当てられます。カーネルレベルのイベントでは、イベント名は AUE_ で始まり、そのあとにイベントを表す大文字のニーモニックが続きます。たとえば、creat() システムコールのイベント番号は 4 で、イベント名は AUE_CREAT です。
アプリケーションソフトウェアによって生成されるイベントは、カーネルの外側にあります。アプリケーションソフトウェアによってユーザーレベルのイベントが生成されます。ユーザーレベルのイベントは、2048 から 65535 までの番号です。イベント名は AUE_ で始まり、そのあとにイベントを表す小文字のニーモニックが続きます。たとえば、rlogin コマンドのイベント番号は 6155 で、イベント名は AUE_rlogin です。表 20–2 にユーザーに関連するイベントの一般的なカテゴリを示します。
ほとんどのイベントは個々のユーザーの動作が原因で発生しますが、そうでないイベントも存在します。カーネル割り込みレベルでイベントが発生した場合や、ユーザーが識別および認証される前にイベントが発生した場合、それらのイベントは「ユーザーに起因しない」イベントです。ユーザーに起因しないイベントは、監査可能です。次の例は、/etc/security/audit_event ファイル内のユーザーに起因しないイベントを 2 つ示しています。
153:AUE_ENTERPROM:enter prom:na 6156:AUE_mountd_mount:mount:na |
AUE_ENTERPROM はカーネルレベルの na イベントです。AUE_mountd_mount はユーザーレベルの na イベントです。
各監査イベントは、1 つまたは複数の「監査クラス」に属するものとして定義します。監査クラスは、多数の監査イベントが入った便利な入れ物です。あるクラスを監査対象として選択した場合、そのクラスに属するすべてのイベントを監査対象として選択したことになります。監査クラスは、/etc/security/audit_class ファイルに定義されます。各エントリには、クラスの名前、監査マスク、および短縮名が含まれます。
0x00000010:fc:file create 0x00000400:na:non-attribute |
監査イベントのクラスへの割り当ては構成可能です。これらの構成の変更は audit_event ファイル内で行います。
監査可能な特定のイベントが監査トレール内に記録されるのは、その特定のイベントを含む監査クラスを監査対象として事前に選択した場合です。監査クラスは、32 クラスまで設定できます。クラスには、all および no という 2 つのグローバルクラスが含まれます。 監査クラスについては、表 23–1 を参照してください。audit_class(4) のマニュアルページも参照してください。
「監査フラグ」は監査クラスの短縮名です。マシン全体で有効な監査関連のデフォルト値は、audit_control ファイル内の監査フラグによって指定します。audit_control ファイルについては、audit_controlファイル を参照してください。
マシン全体の監査デフォルトに対する例外を、個々のユーザーごとに定義できます。audit_user ファイル内で、ユーザーのエントリに監査フラグを設定します。監査フラグは、auditconfig コマンドの引数としても使用します。auditconfig(1M) と audit_user(4) のマニュアルページを参照してください。
各「監査レコード」には、監査された 1 つのイベントの発生が記述されます。レコードには、動作を行なったユーザー、影響を受けたファイル、試みられた動作、その動作が発生した位置と時刻などの情報が含まれます。次の行は、praudit コマンドによって処理された監査レコードの一例です。
header,81,2,login - local,,Mon May 6 16:55:48 PDT 2002, + 486 msec subject,root,root,other,root,other,378,378,0 0 example_machine text,successful login return,success,0 |
監査レコードは監査ファイル内に収集されます。1 つのマシンやサイト内に存在する監査ファイルの集合は「監査トレール」と呼ばれます。監査ファイルの処理方法については、audit.log(4) のマニュアルページを参照してください。監査レコードをユーザーが読める書式に変換するには、praudit コマンドを使用します。praudit の出力例については、praudit コマンドを参照してください。praudit(1M) のマニュアルページも参照してください。
監査イベントごとに保存される情報の種類は、一連の「監査トークン」によって定義されます。 イベントの監査レコードが生成されるたびに、そのイベントに対して定義されたトークンの一部またはすべてが、そのレコードに書き込まれます。どのトークンが記録されるかは、イベントの性質によって決まります。監査レコードの説明を生成するには、bsmrecord コマンドを使用します。次の出力は、creat() システムコール使用時に生成される監査レコードの構造を示しています。header で始まる各行が監査トークンです。
creat system call creat see creat(2) event ID 4 AUE_CREAT class fc (0x00000010) header path [attribute] subject return |
詳細は、監査レコードの書式の表示方法を参照してください。各監査トークンの構造については、監査トークンの形式を参照してください。audit.log(4) のマニュアルページにも、監査トークンの情報が記載されています。
監査ディレクトリには、監査ファイルの集合を保管します。通常のインストールでは、多くの監査ディレクトリが使用されます。監査ディレクトリには、次の 3 つのタイプがあります。
「一次監査ディレクトリ」 – 通常の条件下で、システム監査ファイルが配置されるディレクトリ
「二次監査ディレクトリ」 – 一次ディレクトリがいっぱいか使用できない場合に、システム監査ファイルが配置されるディレクトリ
「最後のディレクトリ」 – 一次監査ディレクトリと二次監査ディレクトリが使用できない場合に使用されるローカル監査ディレクトリ
デバイス割り当てメカニズムを使用すれば、CD-ROM などのデバイスに対するアクセスを制限できます。デバイスクリーンスクリプトは、デバイス使用後にデバイスに残されたデータをすべて削除します。これらの動作により、デバイスのセキュリティが向上します。詳細は、デバイス割り当ての管理 (作業)または デバイス割り当て参照を参照してください。