この章では、Trusted Solaris 環境での監査について説明します。「監査」とは、ユーザーのアクティビティや、他のシステム上のイベントを取り出し、その情報を「監査トレール」と呼ばれる一連のファイルに格納して、サイトのセキュリティポリシーにかなったシステムアクティビティレポートを作成するプロセスです。万一セキュリティ違反が発生した場合は、監査記録を見れば、違反がどのように発生し、誰が関わっているかなどを特定することができます。監査プロセスの全詳細については、『Trusted Solaris の監査管理』を参照してください。
サイトに追加するクラスやイベントなど、監査の対象となるイベントクラスを決定する
監査情報の格納先を計画する
監査構成ファイルを定義する
まず、監査の対象となるイベントを決定します。監査では、ユーザーアクションや、原因を特定できないイベント (割り込みなど、特定のユーザーが原因とは考えられないイベント) を取り出すことができます。ユーザーアクションについては、成功したトランザクションと失敗したトランザクションに分けることができます。監査イベントは、Trusted Solaris に定義されたクラスに編成されます。ファイルの監査クラスは、次のような一般領域に分類されます。
読み取り用で開く
書き込み用で開く
属性の変更
作成
削除
必要に応じて独自のクラスやイベントを作成したり、イベントとクラスの対応関係を再編成することもできます。そのほかのクラスが追跡するイベントには、プロセス操作、ネットワークイベント、ウィンドウ操作、IPC 操作、管理処理、ログイン、ログアウト、アプリケーション特有のイベント、ioctl システムコール、プログラムの実行、X サーバーの操作など、さまざまなイベントがあります。監査情報の記録には、かなりの容量が必要となるため、監査対象とするイベントは慎重に決定し、サイトのセキュリティポリシーに不可欠なイベントに対応したクラスだけを選択するようにします。
監査情報の量を減らすには、特定のファイルとディレクトリを「公開オブジェクト」として指定するのが効果的です。公開オブジェクトは一般に読み取り専用の情報を保持し、通常のユーザーでは変更できないようになっています。また、セキュリティ上の制約がないため、オブジェクトにアクセスしたユーザーを追跡する必要はありません。システムクロックなどが公開オブジェクトの良い例です。公開オブジェクトであることを示す公開オブジェクトフラグを設定すれば、そのオブジェクトを指定する監査フラグがあっても無視されます。
監査には大量のディスク容量が必要になるため、情報の収集先は慎重に考えてください。
ネットワークに接続されていない個別のワークステーションを使用しているサイトでは、ワークステーションごとに監査レコード専用のディスクを用意するのが良いでしょう。専用ディスクには、次の 2 つの領域を設定する必要があります。
主記憶領域
オーバーフローしたレコードを保持する領域
ワークステーションがネットワークに接続されている場合は、監査情報を収集する専用のサーバーを少なくとも 1 台、監査データの管理と分析専用のサーバーを 1 台設置する必要があります。
いずれの場合も、データの完全性を維持し、セキュリティ違反を防止するため、監査ファイルとディレクトリを MAC と DAC によって保護する必要があります。
サイトで実施する監査の仕様は、/etc/security サブディレクトリにある次の構成ファイルに格納されます。
audit_control(4) - 監査制御情報を格納する。監査制御情報には、監査情報を格納するディレクトリの優先順位 (ディレクトリには最低空き容量が規定されており、残量が指定した値以下になると警告が発生します。残量がしきい値に達すると、監査デーモンは次のディレクトリに監査レコードを格納します)、最低空き容量を警告するしきい値、監査対象クラスを示すシステム全体の監査フラグ、ユーザーアクションによらないイベントを示す特別な監査フラグなどがあります。このファイルに設定する監査フラグは、すべてのユーザーに適用されます。それ以外のフラグは、ユーザーごとに audit_user ファイルに設定します。
audit_user(4) - audit_control ファイルに設定した監査仕様が適用されないユーザーの監査基準を格納する。ユーザー名、常に監査されるイベント、監査されないイベントなどの情報が格納されます。
audit_class(4) - 監査クラスの定義を格納する。クラスマスク (追跡すべきクラスを判定するためのフィルタ) やクラス名などが格納されます。
イベント番号、イベント名、監査クラスを識別する監査フラグなどが格納されます。ネットワークの監査を設定する場合は、各ワークステーションで同じ audit_user、audit_class、audit_event ファイルを使用する必要があります。
この節では、監査の管理に使用する主なユーティリティプログラムとスクリプトについて説明します。監査はシステムのインストール時に有効になっていますが、/etc/init.d/audit スクリプトと /etc/system ファイルを編集することによって無効にしたり、再度有効にすることができます。監査が有効になっている場合、監査デーモンは auditd コマンドで呼び出され、audit コマンドで停止します。ただし、監査レコードの記録が中断している間も、レコードの収集は続行されます。audit コマンドには、このほかにもデーモンを制御するための各種オプションがあります。audit_startup スクリプトを実行すると、システムの始動時に監査パラメータを構成できます。audit_warn スクリプトでは、監査障害が生じたときに発信する警告メッセージや処置を指定できます。praudit コマンドは監査レコードを表示したい場合に、auditreduce コマンドは監査トレールを 1 つにまとめて監査レコードを選択しやすくしたい場合に、auditstat は監査統計を表示したい場合に使用します。
audit(1M) コマンドは、現在の監査デーモンを制御するためのインタフェースです。監査デーモン (auditd) は、audit_control ファイルの情報を使用して、監査トレールファイルの生成と配置場所を制御します。audit コマンドで、次の操作が可能です。
audit_control ファイルに指定されている監査格納ディレクトリリストの最優先ディレクトリをリセットする
audit_control ファイルに指定されている監査ディレクトリの新規監査ファイルを、監査デーモンが最後に読み取るファイルとして開く
監査デーモンにシグナルを送り、監査レコードの収集を続行したまま監査トレールを閉じて記録を停止するようにする
auditconfig(1M) コマンドは、カーネルの監査パラメータを取得、設定するためのコマンド行インタフェースを提供します。これには、監査ポリシーのさまざまな部分の設定が含まれます。
audit_startup(1M) スクリプトは、監査デーモンが起動する前に、監査サブシステムを初期化します。このスクリプトは、システムのデフォルトポリシーの設定や、イベントとクラスの対応関係の初期値をダウンロードするために使用する、一連の auditconfig コマンドで構成されています。セキュリティ管理者は、アプリケーションマネージャの「システム管理 (System_Admin)」フォルダを開いて、audit_startup を使用します。このスクリプトは、サイトでの必要に応じて構成できます。
audit_warn(1M) スクリプトは、監査デーモンから取得した警告およびエラーメッセージを処理します。問題点が検出されると、監査デーモンは適切な引数を使用して audit_warn を呼び出します。オプションの引数は、エラーの種類を指定するために使用します。audit_warn 状況が発生したときに通知を受けるユーザーのリストは、aliases(4) で audit_warn と呼ばれるメールエイリアスに定義します。
praudit(1M) コマンドは、監査トレールファイルの内容を、ユーザーが読める形式で出力します。
auditreduce(1M) コマンドを使用すると、1 台以上のコンピュータに格納された監査トレールファイルからレコードを選択したり、複数のレコードを 1 つにまとめる (併合する) ことができます。merge 機能によって、1 つ以上の入力監査トレールファイルの監査レコードが 1 つの出力ファイルに併合されます。select 機能では、レコードの内容に関連付けられた基準に沿って、監査レコードを選択できます。praudit コマンドで、merge と select 機能をスクリプト内で組み合わせることによって、サイト用にカスタマイズされたレポートを作成することもできます。
auditstat(1M) コマンドでは、処理された監査レコードの数、カーネルの監査モジュールが使用しているメモリ容量など、カーネルに関する監査統計を表示することができます。