この章では、Solaris 監査の重要なコンポーネントを説明します。この章の内容は次のとおりです。
Solaris 監査の概要は、第 28 章Solaris 監査 (概要)を参照してください。計画の提案については、第 29 章Solaris 監査の計画を参照してください。ご使用のシステムで監査を設定する手順については、第 30 章Solaris 監査の管理 (作業)を参照してください。
この節では、次の各コマンドについての情報を提供します。
次のリストは、auditd デーモンのタスクの概要を示します。
audit_control ファイルに指定されているディレクトリ内の監査ファイルを開いたり閉じたりします。ファイルは、記述した順序で開かれます。
1 つ以上のプラグインを読み込みます。Sun では 2 つのプラグインを提供します。audit_binfile.so プラグインは、バイナリ監査データをファイルに書き込みます。audit_syslog.so プラグインは、選択した監査レコードの概要テキストを syslog ログに渡します。
カーネルから監査データを読み取り、auditd プラグインを使用してデータを出力します。
audit_warn スクリプトを実行して、さまざまな状況を警告します。binfile.so プラグインは、audit_warn スクリプトを実行します。デフォルトでは、このスクリプトは audit_warn 電子メールエイリアスとコンソールに警告を送信します。syslog.so プラグインは、audit_warn スクリプトを実行しません。
デフォルトでは、監査ディレクトリがすべていっぱいになると、監査レコードを生成するプロセスは中断されます。また、auditd デーモンは、コンソールと audit_warn 電子メールエイリアスにメッセージを送ります。この時点では、システム管理者だけが、監査サービスの修復を行えます。管理者は、ログインして監査ファイルをオフラインメディアに書き込んだり、監査ファイルをシステムから削除したり、その他のクリーンアップ作業を実行したりできます。
この監査ポリシーは、auditconfig コマンドを使用して構成し直すことができます。
auditd デーモンは、システムがマルチユーザーモードでブートする際に自動的に起動されますが、コマンド行から起動することもできます。auditd デーモンが起動すると、デーモンは監査ファイルに必要な空き容量を計算します。
auditd デーモンは、作成する監査ファイルの場所として audit_control ファイル内の監査ディレクトリの一覧を使用します。デーモンは、このディレクトリの一覧へのポインタを、最初のディレクトリに位置付けます。auditd デーモンは、監査ファイルを作成する必要があるたびに、一覧内の最初の使用可能ディレクトリ内に監査ファイルを格納します。一覧は、auditd デーモンの現在のポインタ位置から始まります。このポインタを一覧の最初のディレクトリに設定し直すには、audit -s コマンドを実行します。audit -n コマンドは、新しい監査ファイルに切り替えるように監査デーモンに指示します。新しいファイルは、現在のファイルと同じディレクトリ内に作成されます。
audit コマンドは、auditd デーモンの動作を制御します。audit コマンドは、次の操作を実行できます。
使用可能なオプションについては、audit(1M) のマニュアルページを参照してください。
bsmrecord コマンドは、/etc/security/audit_event ファイル内に定義されている監査イベントの書式を表示します。監査イベントの監査 ID、監査クラス、監査フラグ、およびレコードの監査トークンが順に出力されます。オプションを指定しなかった場合、bsmrecord 出力は端末に表示します。-h オプションを指定した場合、ブラウザでの表示に適した形式で出力します。bsmrecord コマンドの使用例については、「監査レコードの書式の表示方法」を参照してください。また、bsmrecord(1M) のマニュアルページも参照してください。
auditreduce コマンドは、バイナリ形式で格納されている監査レコードをまとめます。コマンドを実行すると、1 つまたは複数の入力監査ファイルから監査レコードがマージできます。このコマンドでは、監査レコードの事後選択を実行することもできます。レコードはバイナリ形式のままです。監査トレール全体をマージするには、監査サーバー上でこのコマンドを実行します。監査サーバーとは、すべての監査ファイルシステムがマウントされているシステムのことです。詳細は、auditreduce(1M) のマニュアルページを参照してください。
auditreduce コマンドを使用すると、複数のシステム上のすべての監査対象動作を 1 か所から追跡できます。このコマンドは、すべての監査ファイルを論理的に結合し、単一の監査トレールとして読み取ることができます。サイト内のすべてのシステムが同一の監査構成を持つようにするとともに、サーバーと監査ファイル用のローカルディレクトリを作成しておく必要があります。auditreduce では、レコードの生成方法や格納場所は無視されます。オプションを指定しなかった場合、auditreduce コマンドは、監査ルートディレクトリのすべてのサブディレクトリ内のすべての監査ファイルの監査レコードをマージします。通常、/etc/security/audit が監査ルートディレクトリです。auditreduce コマンドは、マージ結果を標準出力に送ります。マージ結果は、時系列に並べて 1 つの出力ファイルに格納することもできます。このファイルの形式はバイナリデータです。
auditreduce コマンドを使用して、特定の種類のレコードを選択し、解析に利用することもできます。auditreduce コマンドのマージ機能と選択機能は、論理的に互いに依存しません。auditreduce コマンドは、入力ファイルのレコードを読み取ると、マージしてディスクに書き込む前に、データを抽出します。
auditreduce コマンドにオプションを指定すると、次の操作も実行できます。
指定された監査クラスによって生成された監査レコードを要求します
特定のユーザーによって作成された監査レコードを要求します
特定の日付に作成された監査レコードを要求します
auditreduce に引数を指定しなかった場合は、デフォルトの監査ルートディレクトリ /etc/security/audit 内のサブディレクトリが検査されます。このコマンドは、start-time.end-time.hostname ファイルが配置されている files ディレクトリを検査します。auditreduce コマンドは、監査データが異なるディレクトリに格納されている場合に非常に有用です。図 31–1 は、監査データがホスト別のディレクトリ内に格納されている場合を示しています。図 31–2 は、監査データが監査サーバー別のディレクトリ内に格納されている場合を示しています。
/etc/security/audit のパーティションが小さい場合、デフォルトのディレクトリに監査データを格納しない方法もあります。-R オプションを使用して、auditreduce コマンドを別のディレクトリに渡すことができます。
# auditreduce -R /var/audit-alt |
-S オプションを使用して、特定のサブディレクトリを指定することもできます。
# auditreduce -S /var/audit-alt/host1 |
その他のオプションや例については、auditreduce(1M) のマニュアルページを参照してください。
praudit コマンドは、auditreduce コマンドのバイナリ出力をユーザーが読めるようにします。praudit コマンドは、標準入力からバイナリ形式の監査レコードを読み込み、そのレコードを表示可能な書式で表示します。auditreduce コマンドまたは 1 つの監査ファイルからの出力は、praudit コマンドの入力にパイプできます。catコマンドを使用すると、複数のファイルを連結して入力にパイプすることができます。tail コマンドを使用すると、現在の監査ファイルを入力にパイプできます。
praudit コマンドでは、次の 4 つの出力形式を生成できます。5 番目のオプション -l (長形式) では、出力の 1 行に 1 つの監査レコードが表示されます。デフォルトでは、出力の 1 行につき 1 つの監査トークンが表示されます。-d オプションを指定すると、トークンフィールドおよびトークン間で使用される区切り文字を変更できます。デフォルトの区切り文字は、コンマです。
デフォルト – オプションを指定しないで praudit コマンドを実行すると、1 行につき 1 つの監査トークンが表示されます。監査イベントは ioctl(2) システムコールなどのその内容が表示されます。テキストで表示できる値はすべてテキスト形式で表示されます。たとえば、ユーザーは、ユーザー ID ではなく、ユーザー名で表示されます。
–r オプション – このオプションでは、数値で表現できる値はすべて数値として表示されます。たとえば、ユーザーはユーザー ID で、インターネットアドレスは 16 進形式で、モードは 8 進形式で表示されます。監査イベントは、イベント番号 (158 など) で表示されます。
–s オプション – このオプションでは、監査イベントがテーブル名 (AUE_IOCTL) で表示されます。その他のトークンは、デフォルトと同じ形式で表示されます。
–x オプション – このオプションでは、監査レコードが XML 形式で表示されます。このオプションは、出力結果をブラウザや XML を操作するスクリプトに入力する場合に便利です。
XML は、監査サービスが提供する DTD によって記述されます。また、Solaris ソフトウェアにはスタイルシートも付属しています。DTD とスタイルシートは /usr/share/lib/xml ディレクトリ内に格納されています。
praudit コマンドのデフォルトの出力形式では、各レコードは監査トークンの並びとして容易に識別できます。各トークンは 1 行ごとに出力されます。各監査レコードは header トークンで始まります。awk コマンドなどを使用すると、出力をさらに処理できます。
次の出力は、header トークンを praudit -l コマンドで出力したものです。
header,173,2,settppriv(2),,example1,2003-10-13 13:46:02.174 -07:00 |
次の出力は、同じ header トークンを praudit -r コマンドで出力したものです。
121,173,2,289,0x0000,192.168.86.166,1066077962,174352445 |
praudit コマンドの出力は、必要に応じてテキストとして操作できます。たとえば、auditreduce コマンドでは選択できないレコードを選択することがあります。単純なシェルスクリプトを使用すると、praudit コマンドの出力を処理できます。次の単純なスクリプトの例は、1 つの監査レコードを 1 行にまとめ、ユーザーが指定した文字列を検索し、最後に監査ファイルを元の形式に戻します。
#!/bin/sh # ## This script takes an argument of a user-specified string. # The sed command prefixes the header tokens with Control-A # The first tr command puts the audit tokens for one record # onto one line while preserving the line breaks as Control-A # praudit | sed -e '1,2d' -e '$s/^file.*$//' -e 's/^header/^aheader/' \\ | tr '\\012\\001' '\\002\\012' \\ | grep "$1" \\ Finds the user-specified string | tr '\\002' '\\012' Restores the original newline breaks |
スクリプトの ^a は、^ と a という 2 つの文字ではなく、Control-A です。この接頭辞によって、header トークンが、テキストとして表示される header という文字列と区別されます。
auditconfig コマンドは、監査構成パラメータを取得および設定するためのコマンド行インタフェースを提供します。auditconfig コマンドは、次の操作を実行できます。
監査ポリシーの表示、チェック、構成
監査状態 (オン/オフ) の確認
監査状態 (オン/オフ) の切り替え
監査ディレクトリと監査ファイルの管理
監査キューの管理
事前選択マスクの取得/設定
監査イベントの監査クラスへのマッピングの取得/設定
セッション ID や監査 ID などの構成情報の取得/設定
プロセス、シェル、セッションの監査特性の構成
監査統計情報のリセット
コマンドオプションの詳細は、auditconfig(1M) のマニュアルページを参照してください。
監査サービスでは、次のファイルが使用されます。
/etc/system ファイルには、カーネルが初期設定で読み込み、システム動作をカスタマイズするためのコマンドが格納されます。bsmconv および bsmunconv シェルスクリプトは、監査機能を起動および終了するときに使用され、/etc/system ファイルを変更します。bsmconv シェルスクリプトは、/etc/system ファイルに次の行を追加します。
set c2audit:audit_load=1 |
set c2audit:audit_load=1 エントリは、システムのブート時に監査用のカーネルモジュールをロードします。bsmunconv シェルスクリプトは、システムのリブート時に監査を無効にします。このコマンドは、/etc/system ファイルから c2audit の行を削除します。
/etc/syslog.conf ファイルは、audit_control ファイルと一緒に使用して、監査レコードをテキスト形式で格納します。syslog ユーティリティーが監査レコードを格納できるように、syslog.conf ファイルを設定できます。例は、「syslog 監査ログの構成方法」を参照してください。
/etc/security/audit_class ファイルは、監査クラスを定義します。監査クラスは、監査イベントのグループです。audit_control ファイル内のこのクラス名を使用して、監査するイベントのクラスを事前選択します。クラスには、失敗したイベントだけ、または正常なイベントだけを選択する接頭辞を使用できます。詳細は、「監査クラスの構文」を参照してください。
スーパーユーザーまたはそれと同等の役割を持つ管理者は、監査クラスの定義を変更できます。管理者は、audit_class ファイルをテキストエディタで編集することによって、新しい監査クラスを定義したり、既存クラスの名前を変更したり、既存クラスにその他のさまざまな変更を施したりすることができます。詳細は、audit_class(4) のマニュアルページを参照してください。
各システム上の/etc/security/audit_control ファイルには、auditd デーモンの構成情報が含まれます。このファイルを使用すると、すべてのシステムが、その監査レコードを格納する遠隔監査ファイルシステムをマウントできるようになります。
audit_control ファイルには、次の 5 種類の情報を指定できます。各行の情報は、キーワードで始まります。
flags キーワード – このキーワードで始まるエントリは、システム上のすべてのユーザーを対象に監査するイベントのクラスを事前選択します。ここで指定する監査クラスは、「システム全体の監査事前選択マスク」を指定します。監査クラスはコンマで区切ります。
naflags キーワード – このキーワードで始まるエントリは、特定のユーザーに起因しない動作が発生したときに監査するイベントのクラスを事前選択します。監査クラスはコンマで区切ります。na イベントクラスは、このエントリにあります。naflags エントリを使用すると、通常はユーザーに起因するがユーザーに起因できないほかのイベントクラスのログをとることができます。たとえば、ブート時に起動するプログラムがファイルを読み取ると、naflags エントリ内の fr がそのイベントのレコードを作成します。
minfree キーワード – このキーワードは非推奨です。audit_binfile.so プラグインの p_minfree 属性を使用します。
p_minfree 属性は、すべての監査ファイルシステムについて、最小空き容量レベルをパーセントで定義します。この割合は、0 以上で指定する必要があります。デフォルトは 20% です。監査ファイルシステムの使用率が 80% に達すると、次に利用可能な監査ディレクトリに監査データが格納されるようになります。詳細は、audit_warn(1M) のマニュアルページを参照してください。
dir キーワード – このキーワードは非推奨です。audit_binfile.so プラグインの p_dir 属性を使用します。
p_dir 属性は、ディレクトリの場所を一覧表示します。各行の値には、監査ファイルを格納するためにシステムが使用する、監査ファイルシステムとディレクトリを定義します。1 つまたは複数のディレクトリの場所を指定できます。値については、順番が重要になります。auditd デーモンは、ここで指定した順番でディレクトリに監査ファイルを作成します。1 番目のディレクトリがそのシステムの「1 次監査ディレクトリ」になり、2 番目のディレクトリが「2 次監査ディレクトリ」になります。1 番目のディレクトリがいっぱいになると、auditd デーモンは 2 番目以降のディレクトリに監査トレールファイルを作成します。詳細は、audit(1M) のマニュアルページを参照してください。
plugin キーワード – プラグインモジュール audit_binfile.so および audit_syslog.so のプラグインパスを指定します。audit_binfile.so モジュールは、バイナリ監査ファイルの作成を処理します。audit_syslog.so モジュールは、Solaris 監査レコードをテキスト形式にリアルタイムで変換します。audit_syslog.so プラグインの p_flags 属性に指定された監査クラスは、事前選択された監査クラスのサブセットである必要があります。
audit_control ファイルの詳細は、audit_control(4) のマニュアルページを参照してください。プラグインについては、「監査プラグイン」、audit_binfile(5) および audit_syslog(5) のマニュアルページを参照してください。
次の例は、システム noddy で使用する audit_control ファイルです。noddy では、監査サーバー blinken 上で 2 つの監査ファイルシステムを使用し、2 つ目の監査サーバー winken からマウントされる 3 つ目の監査ファイルシステムを使用します。3 つ目のファイルシステムは、blinken 上の監査ファイルシステムがいっぱいであるか使用できないときにだけ使用されます。minfree の値として 20% を指定しているため、ファイルシステムの使用率が 80% に達した時点で警告スクリプトが実行されます。次の設定では、監査対象としてログイン操作と管理操作が指定されています。これらの操作について、その成功と失敗が監査されます。ファイルシステムオブジェクト作成の失敗を除くすべての失敗が、監査対象となります。また、ユーザーに起因しないイベントも監査されています。syslog 監査ログはより少ない監査イベントを記録します。このログには、失敗したログインと失敗した管理操作のテキストサマリーが記録されます。
Solaris 10 リリースでは、dir 行および minfree 行は非推奨です。次の例では、plugin 行に改行が含まれていません。
flags:lo,am,-all,^-fc naflags:lo,nt plugin:name=audit_binfile.so; p_minfree=20; p_dir=/var/audit/blinken/files, /var/audit/blinken.1/files,/var/audit/winken plugin:name=audit_syslog.so; p_flags=-lo,-am |
/etc/security/audit_event ファイルには、監査イベントから監査クラスへのマッピングのデフォルト値が格納されます。このファイルを編集して、クラスのマッピングを変更できます。クラスのマッピングを変更したときは、システムをリブートするか、変更したマッピングをカーネルに読み込むために auditconfig -conf コマンドを実行する必要があります。詳細は、audit_event(4) のマニュアルページを参照してください。
システムがマルチユーザーモードに移行すると、/etc/security/audit_startup スクリプトが監査サービスを自動的に構成します。auditd デーモンは、スクリプトが次のタスクを実行してから起動します。
監査イベントから監査クラスへのマッピングを構成する
監査ポリシーオプションを設定する
詳細は、audit_startup(1M) のマニュアルページを参照してください。
/etc/security/audit_user データベースは、システム全体の事前選択クラスを個々のユーザーごとに変更します。audit_user データベース内のユーザーエントリに追加するクラスは、audit_control ファイルにある設定を次の 2 つの方法で変更します。
そのユーザーについて常に監査する監査クラスを指定する
そのユーザーについて監査しない監査クラスを指定する
audit_user データベースの各ユーザーエントリには、次の 3 つのフィールドがあります。
username:always-audit-classes:never-audit-classes |
always-audit-classes フィールドは、指定されたクラスの監査を有効にします。このフィールドを使用してシステム全体の設定を変更します。たとえば、always-audit-classes フィールドに all を指定すると、ユーザーのすべての動作が監査されます。
never-audit-classes フィールドは、指定されたクラスの監査を無効にします。このフィールドを使用して、システム設定を上書きします。never-audit-classes フィールドに all を指定すると、audit_control ファイルに指定された監査クラスを含め、ユーザーのすべての監査がオフになります。
たとえば、ファイルシステムオブジェクトの正常な読み取り動作を除き、システム全体の監査設定を tamiko というユーザーに適用するとします。次の audit_user エントリでの 2 番目のコロン (:) の位置に注意してください。
tamiko:^+fr:no modify system defaults for fr |
前述のエントリは、「正常なファイル読み取り動作を除くすべての動作を監査する」ことを意味しています。
ユーザー tamiko について、正常なファイル読み取り動作を除くすべての動作を監査する場合、次のエントリを使用します。
tamiko:all,^+fr:no audit everything except fr |
ユーザー tamiko の正常なファイル読み取り動作について、システムのデフォルト設定を上書きするとします。次のエントリは、「常にすべての動作を監査するが、正常なファイルの読み取り動作はまったく監査しない」ことを意味しています。
tamiko:all:+fr override system defaults for fr |
正常終了したイベントと失敗したイベントは別々に取り扱われます。プロセスが生成する監査レコードの数は、イベントが正常終了した場合よりも失敗した場合のほうが多くなる可能性があります。
auditd デーモンで監査レコードの書き込み中に異常な状態が発生すると、/etc/security/audit_warn スクリプトは電子メールエイリアスに通知します。このスクリプトをサイトに合わせてカスタマイズすることで、手動による対処が必要な状態を警告するようにしたり、そのような状態を自動的に処理するための方法を指定したりできます。エラーが発生すると、audit_warn スクリプトは、daemon.alert の重要度で syslog にメッセージを書き込みます。syslog.conf を使用すると、syslog メッセージのコンソール表示を設定できます。audit_warn スクリプトはさらに、audit_warn 電子メールエイリアスにもメッセージを送信します。このエイリアスは、監査構成の一部として設定します。
auditd デーモンは、次の条件を検出すると audit_warn スクリプトを起動し、audit_warn エイリアスに電子メールを送信します。
監査ディレクトリが minfree の許容値を超えていっぱいになった場合。minfree 値は弱い制限値で、監査ファイルシステム上で使用できる領域の割合です。
audit_warn スクリプトは、文字列 soft と、使用可能領域が下限値を下回ったディレクトリ名を使用して起動されます。auditd デーモンは、次の適切なディレクトリに自動的に切り替えます。デーモンは、新しいディレクトリが minfree 制限値に達するまで、このディレクトリに監査ファイルを書き込みます。その後、auditd デーモンは、audit_control ファイルに指定された順序で残りの各ディレクトリに順次アクセスします。デーモンは、各ディレクトリが minfree 制限値に達するまで監査レコードを書き込みます。
すべての監査ディレクトリが minfree しきい値に達した場合。
文字列 allsoft を使用して audit_warn スクリプトが起動されます。コンソールにメッセージが出力されます。さらに、audit_warn のエイリアスに電子メールが送信されます。
audit_control ファイルに指定されたすべての監査ディレクトリが minfree しきい値に達すると、auditd デーモンは最初のディレクトリに戻ります。デーモンは、そのディレクトリが完全にいっぱいになるまで監査レコードを書き込みます。
監査ディレクトリが完全にいっぱいになり、残りの容量がなくなった場合。
文字列 hard とディレクトリ名を使用して、audit_warn スクリプトが起動されます。コンソールにメッセージが出力されます。さらに、audit_warn のエイリアスに電子メールが送信されます。
auditd デーモンは、使用可能領域が残っている次の適切なディレクトリに自動的に切り替えます。その後、auditd デーモンは、audit_control ファイルに指定された順序で残りの各ディレクトリに順次アクセスします。デーモンは、各ディレクトリがいっぱいになるまで完全レコードを書き込みます。
すべての監査ディレクトリが完全にいっぱいになった場合。引数として文字列 allhard を使用して、audit_warn スクリプトが起動されます。
デフォルトでは、コンソールにメッセージが書き込まれます。さらに、audit_warn のエイリアスに電子メールが送信されます。監査レコードを生成するプロセスは中断されますが、監査レコードはカウントされます。監査レコードは生成されません。この状況に対処する方法の例については、例 30–16 と「監査トレールのオーバーフローを防ぐ方法」を参照してください。
内部エラーが発生した場合。次のような内部エラーが考えられます。
audit_control ファイルの構文に問題が検出された場合。デフォルトでは、コンソールにメッセージが書き込まれます。さらに、audit_warn のエイリアスに電子メールが送信されます。
perzone 監査ポリシーが設定されている場合、非大域ゾーンの auditd のインスタンスがゾーンの audit_warn スクリプトを呼び出します。詳細は、audit_warn(1M) のマニュアルページを参照してください。
/etc/security/bsmconv スクリプトは、監査サービスを有効にします。bsmunconv コマンドは、監査サービスを無効にします。bsmconv スクリプトを実行したあと、監査ディレクトリと監査構成ファイルを設定します。リブート時に、監査が有効になります。
詳細は、bsmconv(1M) のマニュアルページを参照してください。
Solaris OS には、監査サービスを構成したり監査トレールを分析したりするための権利プロファイルが用意されています。
Audit Control – 特定の役割が Solaris 監査をできるようにします。この権利プロファイルは、監査サービスが使用する構成ファイルを構成する権限を付与します。特定の役割が監査コマンドを実行するようにもします。Audit Control プロファイルで割り当てられた役割が実行できるコマンドは、 audit、auditd、auditconfig、bsmconv、および bsmunconv です。
Audit Review – 特定の役割が Solaris 監査レコードを分析できるようにします。この権利プロファイルは、praudit コマンドと auditreduce コマンドを使って監査レコードを読み取る権限を付与します。この権利プロファイルで割り当てられた役割は、auditstat コマンドを実行することもできます。
System Administrator – Audit Review 権利プロファイルを含みます。System Administrator 権利プロファイルで割り当てられた役割は、監査レコードを分析できます。
監査サービスを扱う役割を設定する方法については、「RBAC の構成 (作業マップ)」を参照してください。
非大域ゾーンは、大域ゾーンの監査とまったく同様に監査することも、独自のフラグ、記憶領域、および監査ポリシーを設定することもできます。
すべてのゾーンが同様に監査される場合には、大域ゾーンの構成ファイルが、すべてのゾーンにおける監査の設定を提供します。+zonename ポリシーオプションが役に立ちます。このオプションが指定されていると、すべてのゾーンからの監査レコードには、ゾーンの名前が含まれます。監査レコードをゾーン名を使用して、事後選択することができます。監査ポリシーの詳細は、「監査ポリシーの決定」を参照してください。例については、「監査ポリシーを構成する方法」を参照してください。
ゾーンを個別に監査することもできます。ポリシーオプション perzone が大域ゾーンで指定されているとき、各非大域ゾーンは、それぞれの監査デーモンの実行、監査キューの処理、および監査レコードの内容と場所の指定を行います。非大域ゾーンは、ほとんどの監査ポリシーオプションを指定できます。システム全体に影響するポリシーを設定できないため、非大域ゾーンは ahlt または perzone ポリシーを指定できません。詳細については、「ゾーンを含むシステムでの監査」および 「ゾーン内の監査の計画方法」を参照してください。
ゾーンの詳細は、『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』のパート II「ゾーン」を参照してください。
システム全体での Solaris 監査のデフォルト値は、1 つ以上のイベントのクラスを指定して事前選択されます。クラスは、システムの audit_control ファイルでシステムごとに事前選択されます。システムを使用するすべてのユーザーが、これらのイベントのクラスに対して監査されます。このファイルについては、「audit_control ファイル」を参照してください。
監査クラスを構成し、新しい監査クラスを作成できます。監査クラス名は、最長 8 文字です。クラスの説明は、72 文字に制限されています。数値と英数字以外の文字が使用できます。
audit_user データベースのユーザーのエントリに監査クラスを追加して、ユーザーごとの監査対象を変更できます。監査クラスは、auditconfig コマンドの引数としても使用します。詳細は、auditconfig(1M) のマニュアルページを参照してください。
次の表に、事前に定義されている監査クラス、監査クラスの記述名、および短い説明を示します。
表 31–1 事前に定義されている監査クラス
監査クラス |
記述名 |
説明 |
---|---|---|
all |
すべてのクラス (メタクラス) |
|
no | ||
na |
ユーザーが原因ではないイベント |
|
fr |
データを読み取る、読み取りのために開く |
|
fw |
データを書き込む、書き込みのために開く |
|
fa |
オブジェクト属性にアクセスする: stat、pathconf |
|
fm |
オブジェクト属性を変更する: chown、flock |
|
fc |
オブジェクトの作成 |
|
fd |
オブジェクトの削除 |
|
cl | ||
ap |
アプリケーションが定義するイベント |
|
ad |
管理上の操作 (旧 administrative メタクラス) |
|
am |
管理上の操作 (メタクラス) |
|
ss |
システムの状態を変更 |
|
as |
システム全体の管理 |
|
ua |
ユーザー管理 |
|
aa |
監査の使用 |
|
ps |
プロセスの起動、プロセスの停止 |
|
pm |
プロセスの変更 |
|
pc |
プロセス (メタクラス) |
|
ex |
プログラムの実行 |
|
io | ||
ip | ||
lo |
ログインとログアウトのイベント |
|
nt |
ネットワークイベント: bind、connect、 accept |
|
ot |
その他、デバイス割り当てや memcntl() など |
/etc/security/audit_class ファイルを変更して、新しいクラスを定義できます。既存クラスの名前の変更も可能です。詳細は、audit_class(4) のマニュアルページを参照してください。
成功した場合に監査されるイベント、失敗した場合に監査されるイベント、または両方の場合に監査されるイベントがあります。接頭辞を指定しなかったイベントのクラスは、成功した場合も失敗した場合も監査されます。プラス (+) 接頭辞が付いた場合、イベントのクラスは成功した場合のみが監査されます。マイナス (-) 接頭辞が付く場合、イベントのクラスは失敗した場合のみが監査されます。次の表に、監査クラスの例をいくつか示します。
表 31–2 接頭辞 (プラス記号、マイナス記号) の付いた監査クラス
[prefix] class |
意味 |
---|---|
lo |
成功したすべてのログインとログアウト、および失敗したすべてのログインを監査します。ログアウトが失敗することはありません。 |
+lo |
成功したすべてのログインとログアウトを監査します。 |
-all |
失敗したすべてのイベントを監査します。 |
+all |
成功したすべてのイベントを監査します。 |
all クラスを指定すると、大量のデータが生成され、監査ファイルシステムがすぐにいっぱいになる可能性があります。all クラスは、特別な理由ですべての活動を監査する場合にだけ使用してください。
キャレット接頭辞 ^ を使用すると、選択されている監査フラグをさらに変更できます。次の表は、キャレット接頭辞を使って選択済みの監査クラスを変更する方法を示したものです。
表 31–3 指定済みの監査クラスを変更するキャレット接頭辞
^[prefix]class |
意味 |
---|---|
-all,^-fc |
失敗したすべてのイベントを監査します。ただし、失敗したファイルシステムオブジェクト作成は監査しません |
am,^+aa | |
am,^ua |
成功または失敗したすべての管理イベントを監査します。ただし、ユーザー管理イベントは監査しません |
監査クラスとその接頭辞は、次のファイルとコマンドで使用できます。
audit_control ファイルの flags 行
audit_control ファイルの plugin:name=audit_syslog.so; p_flags= 行
audit_user データベース内のユーザーのエントリ
auditconfig コマンドオプションの引数として
audit_control ファイル内での接頭辞の使用例については、「audit_control ファイル」を参照してください。
監査プラグインでは、監査キューの監査レコードの処理方法を指定します。監査プラグインである audit_binfile.so および audit_syslog.so は、audit_control ファイル内で指定されます。このプラグインとパラメータを使って、次の内容を指定できます。
audit_binfile.so プラグイン、p_dir パラメータにより、バイナリデータの送信先
audit_binfile.so プラグイン、p_minfree パラメータにより、管理者への警告の基準となるディスクの最小空き容量
audit_binfile.so プラグイン、p_fsize パラメータにより、監査ファイルの最大サイズ
p_fsize パラメータプラグインは、Solaris 10 10/08 リリース以降使用可能
audit_syslog.so プラグイン、p_flags パラメータにより、syslog に送信する監査レコードの選択
qsize パラメータにより、そのプラグインでキューに入る監査レコードの最大数
audit_binfile(5)、audit_syslog(5)、および audit_control(4) のマニュアルページを参照してください。
監査ポリシーには、監査トレールにトークンまたは情報を追加するかどうかを指定します。
arge、argv、group、path、seq、trail、windata_down、windata_up、および zonename ポリシーは、監査レコードにトークンを追加します。
その他のポリシーでは、トークンは追加されません。ahlt および cnt ポリシーはカーネル監査レコードが配信できない場合の動作を決定、public ポリシーは公開ファイルの監査を制限、perzone ポリシーは非大域ゾーンの別個の監査キューを確立します。
さまざまな監査ポリシーオプションの働きについては、「監査ポリシーの決定」を参照してください。監査ポリシーオプションについては、auditconfig(1M) のマニュアルページの -setpolicy オプションを参照してください。使用可能なポリシーオプションのリストについては、auditconfig -lspolicy コマンドを実行します。
最初のログイン時に次の監査特性が設定されます。
「プロセス事前選択マスク」– audit_control ファイルと audit_user データベースの監査クラスを結合したもの。ユーザーがログインすると、ログインプロセスは、事前に選択されたクラスを結合し、そのユーザーのプロセスに対する「プロセス事前選択マスク」を確立します。プロセス事前選択マスクは、各監査クラス内のイベントで監査レコードを生成するかどうかを指定します。
ユーザーのプロセス事前選択マスクを取得する方法は、次のアルゴリズムで表されます。
(flags line + always-audit-classes) - never-audit-classes |
audit_control ファイル内の flags 行にある監査クラスを、audit_user データベース内のユーザーエントリの always-audit-classes フィールドにあるクラスに追加します。次に、ユーザーの never-audit-classes フィールドにあるクラスを全体のクラスから減算します。
「監査 ID」– ユーザーがログインすると、プロセスは監査 ID を取得します。監査 ID は、ユーザーの初期プロセスが起動するすべての子プロセスに継承されます。監査 ID はアカウントの追跡を強行するときにも役立ちます。ユーザーが root になったあとも、監査 ID はそのまま変わらずに残ります。各監査レコード内に保存された監査 ID を使用すると、常に動作を追跡してログインした元のユーザーまでたどることができます。
「監査セッション ID」– 監査セッション ID はログイン時に割り当てられます。このセッション ID はすべての子プロセスに継承されます。
「端末 ID (ポート ID、マシンアドレス)」 – 端末 ID は、ホスト名とインターネットアドレスで構成され、そのあとにユーザーがログインした物理デバイスを識別する一意の番号が続きます。通常、ログインはコンソールから行われ、そのコンソールデバイスに対応する番号は 0 になります。
「監査トレール」はバイナリ監査ファイルを含み、auditd デーモンによって作成されます。bsmconv コマンドにより監査サービスが有効になると、システムの起動時に auditd デーモンが起動します。auditd デーモンは、監査トレールデータを収集し、監査レコードを書き込みます。
監査レコードは、監査ファイル専用のシステム上にバイナリ形式で格納されます。監査ディレクトリは、監査専用でないほかのファイルシステム内に物理的に配置することもできますが、予備のディレクトリを除き、この配置は行わないでください。予備のディレクトリとは、他の適切なディレクトリが使用できないときに限り、監査ファイルが書き込まれるディレクトリです。
監査ディレクトリを監査専用でないファイルシステムに配置しても構わない場合が、もう 1 つあります。つまり、ソフトウェア開発環境を使用していて、監査が任意である場合は、そうしても構いません。監査トレールを保存するよりも、ディスク容量を有効に使用するほうが重視されるからです。しかし、セキュリティーが重視される環境では、監査ディレクトリをほかのファイルシステム内に入れることは許されません。
監査ファイルシステムを管理するときは、次の要因も考慮する必要があります。
各ホストには、少なくとも 1 つのローカル監査ディレクトリを用意する必要があります。このローカルディレクトリは、ホストが監査サーバーと通信できなかった場合の予備ディレクトリとして使用できます。
読み取りオプションと書き込みオプション (rw) を使用して、監査ディレクトリをマウントしてください。監査ディレクトリを遠隔マウントするときは、intr および noac オプションも使用してください。
監査ファイルシステムを、格納先の監査サーバー上で一覧してください。エクスポートリストには、サイトで監査対象のすべてのシステムが含まれるべきです。
各バイナリ監査ファイルは、自己完結したレコードの集合です。ファイル名には、レコードが生成された時間の範囲と、それを生成したシステム名が含まれます。
start-time.end-time.system |
監査ファイル内の最初の監査レコードが生成された時刻です
最後のレコードがファイルに書き込まれた時刻です
ファイルを生成したシステム名です
監査ファイルがアクティブである場合は、次の書式の名前が付いています。
start-time.not_terminated.system |
not_terminated および閉じられた監査ファイルの名前の例については、「not_terminated 監査ファイルを整理する方法」を参照してください。
auditreduce コマンドは、ファイル名に含まれるタイムスタンプを手掛かりにして、特定期間内のレコードを検索します。1 か月あるいはそれ以上蓄積された監査ファイルがオンライン上に存在する可能性もあるため、これらのタイムスタンプは重要な意味を持ちます。24 時間以内に生成されたレコードをすべてのファイルから検索するとなると、莫大な時間がかかることがあります。
start-time と end-time は 1 秒単位のタイムスタンプです。これらのタイムスタンプは、グリニッジ標準時 (GMT) で指定されます。タイムスタンプの書式は、次のように年が 4 桁で、2 桁ずつの月、日、時、分、秒があとに続きます。
YYYYMMDDHHMMSS |
タイムスタンプには GMT が使用されるため、タイムゾーンによるずれがあっても正しい順序でソートされることが保証されます。また、日時を把握しやすいように現在の時間帯に変換する必要があります。監査ファイルを auditreduce コマンドではなく標準ファイルコマンドで操作するときには、この点に注意してください。
監査レコードは、一連の監査トークンです。監査トークンには、ユーザー ID、時刻、日付などのイベント情報が入っています。監査レコードは、header トークンで始まり、オプションの trailer トークンで終わります。ほかの監査トークンには、監査イベントに関連する情報が入っています。次の図は、標準的な監査レコードを示しています。
監査レコード分析には、監査トレールのレコードの事後選択が必要です。次の 2 つの方法のうちのいずれかを使用して、収集されたバイナリデータを解析できます。
バイナリデータストリームを解析します。データストリームを解析するには、各トークン内のフィールドの順番と各レコード内のトークンの順番を知る必要があります。また、さまざまな監査レコードを知る必要もあります。たとえば、ioctl() システムコールは、「Invalid file descriptor」の監査レコードからのさまざまなトークンを含む「Bad file name」の監査レコードを作成します。
各監査トークン内のバイナリデータの順番については、audit.log(4) のマニュアルページを参照してください。
監査レコード内のトークンの順番の説明については、bsmrecord コマンドを使用してください。bsmrecord コマンドによる出力には、さまざまな条件で発生するさまざまな形式が示されます。角括弧 ([]) は、監査トークンが省略可能であることを表しています。詳細は、bsmrecord(1M) のマニュアルページを参照してください。例については、「監査レコードの書式の表示方法」を参照してください。
praudit コマンドを使用します。コマンドのオプションにより、さまざまなテキスト出力が得られます。たとえば、praudit -x コマンドを使用すると、スクリプトとブラウザへの入力のための XML が得られます。praudit 出力には、単にバイナリデータの解析に使用するためだけのフィールドは含まれません。出力は、バイナリフィールドの順番どおりではありません。また、praudit 出力の順番と形式は、Solaris リリース間で保証されているわけでもありません。
praudit 出力の例については、「バイナリ監査ファイルの内容を表示する方法」、および praudit(1M) のマニュアルページを参照してください。
監査トークンごとの praudit 出力については、「監査トークンの形式」セクションでそれぞれのトークンを参照してください。
各監査トークンにはトークンの種類識別子と、そのあとにトークン固有のデータが続いています。各トークンの種類には固有の形式があります。次の表は、各トークンの名前と簡単な説明の一覧です。廃止されたトークンは、以前の Solaris リリースとの互換性のために維持されています。
表 31–4 Solaris 監査の監査トークン
トークン名 |
説明 |
詳細 |
---|---|---|
acl |
アクセス制御リスト (ACL) 情報 | |
arbitrary |
書式情報と型情報が付いたデータ | |
arg |
システムコールの引数値 | |
attribute |
ファイル vnode トークン | |
cmd | ||
exec_args |
exec システムコールの引数 | |
exec_env |
exec システムコールの環境変数 | |
exit |
プログラム終了情報 | |
file |
監査ファイル情報 | |
group |
プロセスグループ情報 | |
groups |
プロセスグループ情報 | |
header |
監査レコードの始まりを示します | |
ip_addr |
インターネットアドレス | |
ip |
IP ヘッダー情報 | |
ipc |
System V IPC 情報 | |
ipc_perm |
System V IPC オブジェクトトークン | |
iport |
インターネットポートアドレス | |
opaque |
構造化されていないデータ (形式が未指定) | |
path |
パス情報 | |
path_attr |
アクセスパス情報 | |
特権 |
特権設定情報 | |
process |
プロセスのトークン情報 | |
return |
システムコールの状態 | |
sequence |
シーケンス番号トークン | |
socket |
ソケットの種類とアドレス | |
サブジェクト |
サブジェクトのトークン (process トークンと同じ書式) | |
text |
ASCII 文字列 | |
trailer |
監査レコードの終わりを示します | |
uauth |
承認の使用 | |
upriv |
特権の使用 | |
zonename |
ゾーンの名前 |
監査レコードは常に header トークンで始まります。header トークンは、監査トレール内で監査レコードの始まりを示します。ユーザーの動作に起因するイベントの場合、subject と process トークンは、イベントを発生させたプロセスの値を参照します。ユーザーの動作に起因しないイベントの場合、process トークンはシステムを参照します。
acl トークンは、アクセス制御リスト (ACL) に関する情報を記録します。
acl トークンは、次の 4 つの固定長フィールドで構成されます。
acl トークンであることを特定するトークン ID
ACL タイプを指定するフィールド
ACL 値フィールド
ACL に関連付けるアクセス権を一覧するフィールド
praudit -x コマンドでは、acl トークンのフィールドは次のように表示されます。
<acl type="1" value="root" mode="6"/> |
arbitrary トークンは、監査トレール用にデータをカプセル化します。4 つの固定長フィールドと 1 つのデータ配列からなっています。固定長フィールドは次のとおりです。
arbitrary トークンであることを特定するトークン ID
推奨される出力形式フィールド (16 進など)
後続の項目数を指定するカウントフィールド
トークンの残りの部分は、指定された形式の count からなっています。praudit コマンドでは、arbitrary トークンは次のように表示されます。
arbitrary,decimal,int,1 42 |
値 |
動作 |
---|---|
AUP_BINARY |
日付が 2 進形式で出力されます |
AUP_OCTAL |
日付が 8 進形式で出力されます |
AUP_DECIMAL |
日付が 10 進形式で出力されます |
AUP_HEX |
日付が 16 進形式で出力されます |
AUP_STRING |
日付が文字列で出力されます |
次の表は、項目サイズフィールドに指定できる値を示します。
表 31–6 arbitrary トークンの項目サイズフィールドの値
値 |
動作 |
---|---|
AUR_BYTE |
データはバイト単位 (1 バイト) です |
AUR_SHORT |
データは短い形式の単位 (2 バイト) です |
AUR_LONG |
データは長い形式の単位 (4 バイト) です |
arg トークンには、システムコールの引数情報 (システムコールの引数番号、引数の値、およびオプションの説明) が含まれています。このトークンを使用すると、監査レコード内で 32 ビット整数のシステムコール引数を指定できます。
arg トークンには次の 5 つのフィールドがあります。
argトークンであることを特定するトークン ID
トークンが参照するシステムコールの引数の ID
引数の値
テキスト文字列の長さ
テキスト文字列
praudit -x コマンドでは、arg トークンのフィールドは次のように表示されます。
<argument arg-num="2" value="0x0" desc="new file uid"/> |
attribute トークンには、ファイル vnode からの情報が含まれています。
attribute トークンには次の 7 つのフィールドがあります。
attribute トークンであることを特定するトークン ID
ファイルのアクセスモードと種類
所有者のユーザー ID
所有者のグループ ID
ファイルシステム ID
ノード ID
ファイルが示すデバイス ID
ファイルシステム ID とデバイス ID の詳細は、statvfs(2) のマニュアルページを参照してください。
attribute トークンには通常、path トークンが付いています。attribute トークンはパスの検索中に生成されます。パス検索エラーが発生すると、必要なファイル情報を取得するための v ノードが利用できません。このため、attribute トークンは監査レコードの一部として組み込まれません。praudit -x コマンドでは、attribute トークンのフィールドは次のように表示されます。
<attribute mode="100644" uid="adm" gid="adm" fsid="136" nodeid="2040" device="0"/> |
cmd トークンは、コマンドに割り当てられた引数のリストおよび環境変数のリストを記録します。
cmd トークンには次のフィールドがあります。
cmd トークンであることを特定するトークン ID
コマンドの引数のカウント
引数の一覧
次のフィールドの長さ
引数の内容
環境変数のカウント
環境変数の一覧
次のフィールドの長さ
環境変数の内容
praudit -x コマンドでは、cmd トークンのフィールドは次のように表示されます。次に示すのは、切り詰められた cmd トークンです。行は、表示の都合上、折り返して記載されています。
<cmd><arge>WINDOWID=6823679</arge> <arge>COLORTERM=gnome-terminal</arge> <arge>...LANG=C</arge>...<arge>HOST=machine1</arge> <arge>LPDEST=printer1</arge>...</cmd> |
exec_args トークンは、exec() システムコールへの引数を記録します。exec_args トークンには次の 2 つの固定長フィールドがあります。
exec_args トークンであることを特定するトークン ID
exec() システムコールに渡す引数の数を表すカウント
このトークンの残りの部分は、count 文字列からなっています。praudit -x コマンドでは、exec_args トークンのフィールドは次のように表示されます。
<exec_args><arg>/usr/bin/sh</arg><arg>/usr/bin/hostname</arg></exec_args> |
exec_args トークンは、argv 監査ポリシーオプションが有効なときにだけ出力されます。
exec_env トークンは、exec() システムコールの現在の環境変数を記録します。exec_env トークンには次の 2 つの固定長フィールドがあります。
exec_env トークンであることを特定するトークン ID
exec() システムコールに渡す引数の数を表すカウント
このトークンの残りの部分は、count 文字列からなっています。praudit -x コマンドでは、exec_env トークンのフィールドは次のように表示されます。行は、表示の都合上、折り返して記載されています。
<exec_env><env>_=/usr/bin/hostname</env> <env>DTXSERVERLOCATION=local</env><env>SESSIONTYPE=altDt</env> <env>LANG=C</env><env>SDT_NO_TOOLTALK=1</env><env>SDT_ALT_HELLO=/bin/true</env> <env>PATH=/usr/bin:/usr/openwin/bin:/usr/ucb</env> <env>OPENWINHOME=/usr/openwin</env><env>LOGNAME=jdoe</env><env>USER=jdoe</env> <env>DISPLAY=:0</env><env>SHELL=/bin/csh</env><env>START_SPECKEYSD=no</env> <env>SDT_ALT_SESSION=/usr/dt/config/Xsession2.jds</env><env>HOME=/home/jdoe</env> <env>SDT_NO_DTDBCACHE=1</env><env>PWD=/home/jdoe</env><env>TZ=US/Pacific</env> </exec_env> |
exec_env トークンは、argv 監査ポリシーオプションが有効なときにだけ出力されます。
exit トークンは、プログラムの終了状態を記録します。exit トークンには次のフィールドがあります。
exit トークンであることを特定するトークン ID
exit() システムコールに渡されるプログラムの終了状態
終了状態を記述するか、システムエラー番号を示す戻り値
praudit コマンドでは、exit トークンは次のように表示されます。
exit,Error 0,0 |
file トークンは、auditd デーモンによって生成される特殊なトークンです。このトークンは、古い監査ファイルが終了した時点で、新しい監査ファイルの開始と古い監査ファイルの終了をマークします。最初の file トークンは、監査証跡の前のファイルを特定します。最後の file トークンは、監査証跡の次のファイルを特定します。auditd デーモンは、このトークンを含む特殊な監査レコードを構築して、連続する監査ファイルを 1 つの監査トレールに「リンク」します。
praudit -x コマンドでは、file トークンのフィールドは次のように表示されます。このトークンは、監査証跡の次のファイルを特定します。行は、表示の都合上、折り返して記載されています。
<file iso8601="2009-04-08 14:18:26.200 -07:00"> /var/audit/machine1/files/20090408211826.not_terminated.machine1</file> |
このトークンは、groups トークンに置き換えられています。「groups トークン」を参照してください。
groups トークンは group トークンを置き換えます。groups トークンは、プロセスの資格からグループエントリを記録します。
group トークンには次の 2 つの固定長フィールドがあります。
groups トークンであることを特定するトークン ID
この監査レコードに含まれるグループ数を表すカウント
このトークンの残りの部分は、count グループエントリからなっています。
praudit -x コマンドでは、groups トークンのフィールドは次のように表示されます。
<group><gid>staff</gid><gid>other</gid></group> |
groups トークンは、group 監査ポリシーオプションが有効なときにだけ出力されます。
header トークンは、監査レコードの開始を示すという意味で、特殊なトークンです。trailer トークンとの組み合わせでレコード内のほかのすべてのトークンを囲む特殊なトークンです。
header トークンには次の 8 つのフィールドがあります。
header トークンであることを特定するトークン ID
この監査レコード全体の長さのバイト数。header トークンと trailer トークンを含みます
この監査レコード構造体のバージョンを特定するバージョン番号
このレコードが表す監査イベントを特定する監査イベント ID
この監査イベントの特殊な特性を特定する ID 修飾子
0x4000 PAD_NOTATTR nonattributable event 0x8000 PAD_FAILURE failed audit event |
アドレスの種類。IPv4 または IPv6
マシンのアドレス
レコードの作成日時
64 ビットシステムでは、header トークンは、32 ビットタイムスタンプではなく 64 ビットタイムスタンプで表示されます。
praudit コマンドでは、header トークンは次のように表示されます。
header,69,2,su,,machine1,2009-04-08 13:11:58.209 -07:00 |
praudit -x コマンドでは、header トークンのフィールドは監査レコードの先頭に表示されます。行は、表示の都合上、折り返して記載されています。
<record version="2" event="su" host="machine1" iso8601="2009-04-08 13:11:58.209 -07:00"> |
ip_addr トークンには、インターネットプロトコルアドレスが含まれます。Solaris 8 リリースから、IPv4 形式、IPv6 形式のいずれかでインターネットアドレスを表示できるようになりました。IPv4 アドレスは 4 バイトを使用します。IPv6 アドレスは、1 バイトを使って種類を記述し、さらに 16 バイトを使ってアドレスを記述します。
in_addr トークンには次の 3 つのフィールドがあります。
in_addr トークンであることを特定するトークン ID
IP アドレスの種類。IPv4 または IPv6
IP アドレス
praudit -x コマンドでは、ip_addr トークンの内容は次のように表示されます。
<ip_address>machine1</ip_address> |
ip トークンには、インターネットプロトコルのヘッダーのコピーが含まれます。ip トークンには次の 2 つのフィールドがあります。
ip トークンであることを特定するトークン ID
IP ヘッダーのコピー (全部で 20 バイト)
praudit コマンドでは、ip トークンは次のように表示されます。
ip address,0.0.0.0 |
IP ヘッダー構造は、/usr/include/netinet/ip.h ファイル内で定義されています。
ipc トークンには、呼び出し元が特定の IPC オブジェクトを識別するために使用する System V IPC メッセージハンドル、セマフォーハンドル、または共有メモリーハンドルが含まれています。
ipc トークンには次の 3 つのフィールドがあります。
ipc トークンであることを特定するトークン ID
IPC オブジェクトの形式を指定する形式フィールド
IPC オブジェクトを識別するハンドル
IPC オブジェクト識別子は、コンテキストに依存しない Solaris 監査トークンの性質に準拠していません。IPC オブジェクトを一意に識別するグローバルな「名前」はありません。代わりに、IPC オブジェクトはハンドルで識別されます。これらのハンドルは、IPC オブジェクトの動作中にのみ有効です。しかし IPC オブジェクトの識別は問題となりません。System V の IPC メカニズムはあまり使用されず、すべてのメカニズムが同じ監査クラスを共有するからです。
次の表は、IPC オブジェクトの形式フィールドに指定できる値の一覧です。値は /usr/include/bsm/audit.h ファイル内で定義されます。
表 31–7 IPC オブジェクトの形式フィールドの値
名前 |
値 |
説明 |
---|---|---|
AU_IPC_MSG |
1 |
IPC メッセージオブジェクト |
AU_IPC_SEM |
2 |
IPC セマフォーオブジェクト |
AU_IPC_SHM |
3 |
IPC 共有メモリーオブジェクト |
praudit -x コマンドでは、ipc トークンのフィールドは次のように表示されます。
<IPC ipc-type="shm" ipc-id="15"/> |
ipc_perm トークンには、System V IPC アクセス権のコピーが含まれています。このトークンは、IPC 共有メモリーイベント、IPC セマフォーイベント、および IPC メッセージイベントによって生成される監査レコードに追加されます。
ipc_perm トークンには次の 8 つのフィールドがあります。
ipc_perm トークンであることを特定するトークン ID
IPC 所有者のユーザー ID
IPC 所有者のグループ ID
IPC 作成者のユーザー ID
IPC 作成者のグループ ID
IPC のアクセスモード
IPC のシーケンス番号
IPC 鍵の値
praudit -x コマンドでは、ipc_perm トークンのフィールドは次のように表示されます。行は、表示の都合上、折り返して記載されています。
<IPC_perm uid="jdoe" gid="staff" creator-uid="jdoe" creator-gid="staff" mode="100600" seq="0" key="0x0"/> |
値は、IPC オブジェクトに関連付けられた ipc_perm 構造から取り出されます。
iport トークンには、TCP または UDP ポートアドレスが含まれています。
iport トークンには次の 2 つのフィールドがあります。
iport トークンであることを特定するトークン ID
TCP または UDP ポートのアドレス
praudit コマンドでは、iport トークンは次のように表示されます。
ip port,0xf6d6 |
opaque トークンには、フォーマットされていないデータが一連のバイトとして含まれています。opaque トークンには次の 3 つのフィールドがあります。
opaque トークンであることを特定するトークン ID
このデータのバイト数
バイトデータ配列
praudit コマンドでは、opaque トークンは次のように表示されます。
opaque,12,0x4f5041515545204441544100 |
path トークンには、オブジェクトのアクセスパス情報が含まれています。
path トークンには次のフィールドがあります。
path トークンであることを特定するトークン ID
パスの長さ
システムの実ルートを基点としたオブジェクトへの絶対パス
praudit コマンドでは、path トークンは 2 番目のフィールドなしで、次のように表示されます。
path,/etc/security/audit_user |
praudit -x コマンドでは、path トークンの内容は次のように表示されます。
<path>/etc/security/audit_user</path> |
次の図に path トークンの形式を示します。
path_attr トークンには、オブジェクトのアクセスパス情報が含まれています。アクセスパスは、path トークンオブジェクトの下の属性ファイルオブジェクトのシーケンスを指定します。openat() などのシステムコールは、属性ファイルにアクセスします。属性ファイルオブジェクトの詳細については、fsattr(5) のマニュアルページを参照してください。
path_attr トークンには次のフィールドがあります。
path_attr トークンであることを特定するトークン ID
属性ファイルパスのセクション数を表すカウント
count NULL で終わっている文字列
praudit コマンドでは、path_attr トークンは次のように表示されます。
path_attr,1,attr_file_name |
privilege トークンは、プロセス上での特権の使用を記録します。privilege トークンは、基本セットの特権に対して記録されません。特権が管理者の処理により基本セットから削除された場合、その特権の使用は記録されます。特権の詳細は、「特権 (概要)」を参照してください。
privilege トークンには次のフィールドがあります。
privilege トークンであることを特定するトークン ID
次のフィールドの長さ
特権セットの名前
次のフィールドの長さ
特権の一覧
praudit -x コマンドでは、privilege トークンのフィールドは次のように表示されます。行は、表示の都合上、折り返して記載されています。
<privilege set-type="Effective">file_chown,file_dac_read, file_dac_write,net_privaddr,proc_exec,proc_fork,proc_setid</privilege> |
process トークンには、シグナルの受信者など、プロセスに関連付けられたユーザーに関する情報が含まれています。
process トークンには次の 9 つのフィールドがあります。
process トークンであることを特定するトークン ID
監査 ID
実効ユーザー ID
実効グループ ID
実ユーザー ID
実グループ ID
プロセス ID
監査セッション ID
デバイス ID とマシンアドレスで構成される端末 ID
監査 ID、ユーザー ID、グループ ID、プロセス ID、セッション ID は、短い形式ではなく長い形式です。
セッション ID、実ユーザー ID、または実グループ ID の processトークンのフィールドを使用できないことがあります。その場合、値は -1 に設定されます。
端末 ID を含むトークンには、いくつかの種類があります。praudit コマンドは、これらの違いを吸収します。このため、端末 ID を含むすべてのトークンで、端末 ID は同じ方法で処理されます。端末 ID は、IP アドレスとポート番号の組み合わせか、デバイス ID です。モデムに接続されたシリアルポートなどのデバイス ID は、0 である可能性があります。端末 ID には、次の書式があります。
デバイス番号の場合、端末 ID は次のようになります。
「32 ビットアプリケーション」 – 4 バイトのデバイス番号、4 バイトは未使用
「64 ビットアプリケーション」 – 8 バイトのデバイス番号、4 バイトは未使用
Solaris 8 よりも前のリリースのポート番号の場合、端末 ID は次のようになります。
「32 ビットアプリケーション」 – 4 バイトのポート番号、4 バイトの IP アドレス
「64 ビットアプリケーション」 – 8 バイトのポート番号、4 バイトの IP アドレス
Solaris 8 以降のリリースのポート番号の場合、端末 ID は次のようになります。
「32 ビット IPv4」 – 4 バイトのポート番号、4 バイトの IP タイプ、4 バイトの IP アドレス
「32 ビット IPv6」 – 4 バイトのポート番号、4 バイトの IP タイプ、16 バイトの IP アドレス
「64 ビット IPv4」 – 8 バイトのポート番号、4 バイトの IP タイプ、4 バイトの IP アドレス
「64 ビット IPv6」 – 8 バイトのポート番号、4 バイトの IP タイプ、16 バイトの IP アドレス
praudit -x コマンドでは、process トークンのフィールドは次のように表示されます。行は、表示の都合上、折り返して記載されています。
<process audit-uid="-2" uid="root" gid="root" ruid="root" rgid="root" pid="9" sid="0" tid="0 0 0.0.0.0"/> |
次の図に process トークンの形式を示します。
return トークンには、システムコールの戻り状態 (u_error) とプロセスの戻り値 (u_rval1) が含まれています。
return トークンには次の 3 つのフィールドがあります。
return トークンであることを特定するトークン ID
システムコールのエラー状態
システムコールの戻り値
return トークンは、必ずシステムコールに関してカーネルによって生成される監査レコードの一部として返されます。アプリケーションの監査中、このトークンは終了状態とその他の戻り値を返します。
praudit では、システムコールの return トークンは次のように表示されます。
return,failure: Operation now in progress,-1 |
praudit -x コマンドでは、return トークンのフィールドは次のように表示されます。
<return errval="failure: Operation now in progress" retval="-1/"> |
sequence トークンには、シーケンス番号が含まれています。シーケンス番号は、監査レコードが監査トレールに組み込まれるたびに 1 ずつ増分します。このトークンはデバッグに使用されます。
sequence トークンには次の 2 つのフィールドがあります。
sequence トークンであることを特定するトークン ID
シーケンス番号が含まれる 32 ビットの符号なし長形式フィールド
praudit コマンドでは、sequence トークンのフィールドは次のように表示されます。
sequence,1292 |
praudit -x コマンドでは、sequence トークンの内容は次のように表示されます。
<sequence seq-num="1292"/> |
sequence トークンは、seq 監査ポリシーが有効なときにだけ出力されます。
socket トークンには、インターネットソケットを記述する情報が含まれています。いくつかのインスタンスで、トークンには次の 4 つのフィールドがあります。
socket トークンであることを特定するトークン ID
参照するソケットの型 (TCP、UDP、UNIX) を示すソケット形式フィールド
ローカルポート
ローカル IP アドレス
praudit コマンドでは、socket トークンのインスタンスは次のように表示されます。
socket,0x0002,0x83b1,localhost |
ほとんどのインスタンスで、トークンには次の 8 つのフィールドがあります。
socket トークンであることを特定するトークン ID
ソケットドメイン
参照するソケットの型 (TCP、UDP、UNIX) を示すソケット形式フィールド
ローカルポート
アドレスの種類。IPv4 または IPv6
ローカル IP アドレス
遠隔ポート
遠隔 IP アドレス
Solaris 8 リリースから、IPv4 形式、IPv6 形式のいずれかでインターネットアドレスを表示できるようになりました。IPv4 アドレスは 4 バイトを使用します。IPv6 アドレスは、1 バイトを使って種類を記述し、さらに 16 バイトを使ってアドレスを記述します。
praudit コマンドでは、socket トークンは次のように表示されます。
socket,0x0002,0x0002,0x83cf,example1,0x2383,server1.Subdomain.Domain.COM |
praudit -x コマンドでは、socket トークンのフィールドは次のように表示されます。行は、表示の都合上、折り返して記載されています。
<socket sock_domain="0x0002" sock_type="0x0002" lport="0x83cf" laddr="example1" fport="0x2383" faddr="server1.Subdomain.Domain.COM"/> |
subject トークンは、ある操作を実行するユーザーまたは実行を試みるユーザーを記述します。形式は process トークンと同じです。
subject トークンには次の 9 つのフィールドがあります。
subject トークンであることを特定するトークン ID
監査 ID
実効ユーザー ID
実効グループ ID
実ユーザー ID
実グループ ID
プロセス ID
監査セッション ID
デバイス ID とマシンの IP アドレスで構成される端末 ID
監査 ID、ユーザー ID、グループ ID、プロセス ID、セッション ID は、短い形式ではなく長い形式です。
セッション ID、実ユーザー ID、または実グループ ID の subject トークンのフィールドを使用できないことがあります。その場合、値は -1 に設定されます。
端末 ID を含むトークンには、いくつかの種類があります。praudit コマンドは、これらの違いを吸収します。このため、端末 ID を含むすべてのトークンで、端末 ID は同じ方法で処理されます。端末 ID は、IP アドレスとポート番号の組み合わせか、デバイス ID です。モデムに接続されたシリアルポートなどのデバイス ID は、0 である可能性があります。端末 ID には、次の書式があります。
デバイス番号の場合、端末 ID は次のようになります。
「32 ビットアプリケーション」 – 4 バイトのデバイス番号、4 バイトは未使用
「64 ビットアプリケーション」 – 8 バイトのデバイス番号、4 バイトは未使用
Solaris 8 よりも前のリリースのポート番号の場合、端末 ID は次のようになります。
「32 ビットアプリケーション」 – 4 バイトのポート番号、4 バイトの IP アドレス
「64 ビットアプリケーション」 – 8 バイトのポート番号、4 バイトの IP アドレス
Solaris 8 以降のリリースのポート番号の場合、端末 ID は次のようになります。
「32 ビット IPv4」 – 4 バイトのポート番号、4 バイトの IP タイプ、4 バイトの IP アドレス
「32 ビット IPv6」 – 4 バイトのポート番号、4 バイトの IP タイプ、16 バイトの IP アドレス
「64 ビット IPv4」 – 8 バイトのポート番号、4 バイトの IP タイプ、4 バイトの IP アドレス
「64 ビット IPv6」 – 8 バイトのポート番号、4 バイトの IP タイプ、16 バイトの IP アドレス
subjectトークンは、必ずシステムコールに関してカーネルによって生成される監査レコードの一部として返されます。praudit コマンドでは、subject トークンは次のように表示されます。
subject,jdoe,root,root,root,root,1631,1421584480,8243 65558 machine1 |
praudit -x コマンドでは、subject トークンのフィールドは次のように表示されます。行は、表示の都合上、折り返して記載されています。
<subject audit-uid="jdoe" uid="root" gid="root" ruid="root" rgid="root" pid="1631" sid="1421584480" tid="8243 65558 machine1"/> |
次の図に subject トークンの形式を示します。
text トークンには、テキスト文字列が含まれています。
text トークンには次の 3 つのフィールドがあります。
text トークンであることを特定するトークン ID
テキスト文字列の長さ
テキスト文字列
praudit -x コマンドでは、text トークンの内容は次のように表示されます。
<text>booting kernel</text> |
header と trailer の2 つのトークンは、監査レコードの終端を区別し、ほかのすべてのトークンを囲むという意味で、特殊なトークンです。header トークンは監査レコードを開始します。trailer トークンは監査レコードを終了します。trailer トークンは省略可能です。trailer トークンは、trail 監査ポリシーオプションが設定されているときにだけ、各レコードの最後のトークンとして追加されます。
trailer トークンを含む監査レコードが生成された場合、 auditreduce コマンドは、 trailer がレコードの header を正しくポイントしているかどうかを検証します。また、trailer トークンを使用すると監査トレールを逆方向に検索できます。
trailer トークンには次の 3 つのフィールドがあります。
trailer トークンであることを特定するトークン ID
レコードの終了を示すパッド番号
header トークンと trailerトークンを含む監査レコードの合計文字数
praudit コマンドでは、trailer トークンが次のように表示されます。
trailer,136 |
uauth トークンは、コマンドまたはアクションでの承認の使用を記録します。
uauth トークンには次のフィールドがあります。
uauth トークンであることを特定するトークン ID
次のフィールドのテキストの長さ
承認の一覧
praudit コマンドでは、uauth トークンは次のように表示されます。
use of authorization,solaris.admin.printer.delete |
upriv トークンは、コマンドまたはアクションでの特権の使用を記録します。
praudit -x コマンドでは、upriv トークンのフィールドは次のように表示されます。
<use_of_privilege result="successful use of priv">proc_setid</use_of_privilege> |
zonename トークンは、監査イベントが発生したゾーンを記録します。文字列「global」は、大域ゾーンで発生した監査イベントを示します。
zonename トークンには次のフィールドがあります。
zonename トークンであることを特定するトークン ID
次のフィールドのテキストの長さ
ゾーンの名前
praudit -x コマンドでは、zonename トークンの内容は次のように表示されます。
<zone name="graphzone"/> |