Solaris のシステム管理 (セキュリティサービス)

第 31 章 Solaris 監査 (参照)

この章では、Solaris 監査の重要なコンポーネントを説明します。この章の内容は次のとおりです。

Solaris 監査の概要は、第 28 章Solaris 監査 (概要)を参照してください。計画の提案については、第 29 章Solaris 監査の計画を参照してください。ご使用のシステムで監査を設定する手順については、第 30 章Solaris 監査の管理 (作業)を参照してください。

監査コマンド

この節では、次の各コマンドについての情報を提供します。

auditd デーモン

次のリストは、auditd デーモンのタスクの概要を示します。

auditd デーモンは、システムがマルチユーザーモードでブートする際に自動的に起動されますが、コマンド行から起動することもできます。auditd デーモンが起動すると、デーモンは監査ファイルに必要な空き容量を計算します。

auditd デーモンは、作成する監査ファイルの場所として audit_control ファイル内の監査ディレクトリの一覧を使用します。デーモンは、このディレクトリの一覧へのポインタを、最初のディレクトリに位置付けます。auditd デーモンは、監査ファイルを作成する必要があるたびに、一覧内の最初の使用可能ディレクトリ内に監査ファイルを格納します。一覧は、auditd デーモンの現在のポインタ位置から始まります。このポインタを一覧の最初のディレクトリに設定し直すには、audit -s コマンドを実行します。audit -n コマンドは、新しい監査ファイルに切り替えるように監査デーモンに指示します。新しいファイルは、現在のファイルと同じディレクトリ内に作成されます。

audit コマンド

audit コマンドは、auditd デーモンの動作を制御します。audit コマンドは、次の操作を実行できます。

使用可能なオプションについては、audit(1M) のマニュアルページを参照してください。

bsmrecord コマンド

bsmrecord コマンドは、/etc/security/audit_event ファイル内に定義されている監査イベントの書式を表示します。監査イベントの監査 ID、監査クラス、監査フラグ、およびレコードの監査トークンが順に出力されます。オプションを指定しなかった場合、bsmrecord 出力は端末に表示します。-h オプションを指定した場合、ブラウザでの表示に適した形式で出力します。bsmrecord コマンドの使用例については、「監査レコードの書式の表示方法」を参照してください。また、bsmrecord(1M) のマニュアルページも参照してください。

auditreduce コマンド

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 は、監査データが監査サーバー別のディレクトリ内に格納されている場合を示しています。

図 31–1 ホストごとに格納された監査トレール

トップディレクトリ名がホスト名になっているデフォルトの監査ルートディレクトリです。

図 31–2 サーバーごとに格納された監査トレール

トップディレクトリ名がサーバー名になっているデフォルトの監査ルートディレクトリです。

/etc/security/audit のパーティションが小さい場合、デフォルトのディレクトリに監査データを格納しない方法もあります。-R オプションを使用して、auditreduce コマンドを別のディレクトリに渡すことができます。


# auditreduce -R /var/audit-alt 

-S オプションを使用して、特定のサブディレクトリを指定することもできます。


# auditreduce -S /var/audit-alt/host1 

その他のオプションや例については、auditreduce(1M) のマニュアルページを参照してください。

praudit コマンド

praudit コマンドは、auditreduce コマンドのバイナリ出力をユーザーが読めるようにします。praudit コマンドは、標準入力からバイナリ形式の監査レコードを読み込み、そのレコードを表示可能な書式で表示します。auditreduce コマンドまたは 1 つの監査ファイルからの出力は、praudit コマンドの入力にパイプできます。catコマンドを使用すると、複数のファイルを連結して入力にパイプすることができます。tail コマンドを使用すると、現在の監査ファイルを入力にパイプできます。

praudit コマンドでは、次の 4 つの出力形式を生成できます。5 番目のオプション -l (長形式) では、出力の 1 行に 1 つの監査レコードが表示されます。デフォルトでは、出力の 1 行につき 1 つの監査トークンが表示されます。-d オプションを指定すると、トークンフィールドおよびトークン間で使用される区切り文字を変更できます。デフォルトの区切り文字は、コンマです。

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

例 31–1 praudit 出力をスクリプトで処理する

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 コマンドは、監査構成パラメータを取得および設定するためのコマンド行インタフェースを提供します。auditconfig コマンドは、次の操作を実行できます。

コマンドオプションの詳細は、auditconfig(1M) のマニュアルページを参照してください。

監査サービスで使用されるファイル

監査サービスでは、次のファイルが使用されます。

system ファイル

/etc/system ファイルには、カーネルが初期設定で読み込み、システム動作をカスタマイズするためのコマンドが格納されます。bsmconv および bsmunconv シェルスクリプトは、監査機能を起動および終了するときに使用され、/etc/system ファイルを変更します。bsmconv シェルスクリプトは、/etc/system ファイルに次の行を追加します。


set c2audit:audit_load=1

set c2audit:audit_load=1 エントリは、システムのブート時に監査用のカーネルモジュールをロードします。bsmunconv シェルスクリプトは、システムのリブート時に監査を無効にします。このコマンドは、/etc/system ファイルから c2audit の行を削除します。

syslog.conf ファイル

/etc/syslog.conf ファイルは、audit_control ファイルと一緒に使用して、監査レコードをテキスト形式で格納します。syslog ユーティリティーが監査レコードを格納できるように、syslog.conf ファイルを設定できます。例は、syslog 監査ログの構成方法」を参照してください。

audit_class ファイル

/etc/security/audit_class ファイルは、監査クラスを定義します。監査クラスは、監査イベントのグループです。audit_control ファイル内のこのクラス名を使用して、監査するイベントのクラスを事前選択します。クラスには、失敗したイベントだけ、または正常なイベントだけを選択する接頭辞を使用できます。詳細は、「監査クラスの構文」を参照してください。

スーパーユーザーまたはそれと同等の役割を持つ管理者は、監査クラスの定義を変更できます。管理者は、audit_class ファイルをテキストエディタで編集することによって、新しい監査クラスを定義したり、既存クラスの名前を変更したり、既存クラスにその他のさまざまな変更を施したりすることができます。詳細は、audit_class(4) のマニュアルページを参照してください。

audit_control ファイル

各システム上の/etc/security/audit_control ファイルには、auditd デーモンの構成情報が含まれます。このファイルを使用すると、すべてのシステムが、その監査レコードを格納する遠隔監査ファイルシステムをマウントできるようになります。

audit_control ファイルには、次の 5 種類の情報を指定できます。各行の情報は、キーワードで始まります。

audit_control ファイルの詳細は、audit_control(4) のマニュアルページを参照してください。プラグインについては、「監査プラグイン」audit_binfile(5) および audit_syslog(5) のマニュアルページを参照してください。


例 31–2 audit_control ファイルの例

次の例は、システム 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

audit_event ファイル

/etc/security/audit_event ファイルには、監査イベントから監査クラスへのマッピングのデフォルト値が格納されます。このファイルを編集して、クラスのマッピングを変更できます。クラスのマッピングを変更したときは、システムをリブートするか、変更したマッピングをカーネルに読み込むために auditconfig -conf コマンドを実行する必要があります。詳細は、audit_event(4) のマニュアルページを参照してください。

audit_startup スクリプト

システムがマルチユーザーモードに移行すると、/etc/security/audit_startup スクリプトが監査サービスを自動的に構成します。auditd デーモンは、スクリプトが次のタスクを実行してから起動します。

詳細は、audit_startup(1M) のマニュアルページを参照してください。

audit_user データベース

/etc/security/audit_user データベースは、システム全体の事前選択クラスを個々のユーザーごとに変更します。audit_user データベース内のユーザーエントリに追加するクラスは、audit_control ファイルにある設定を次の 2 つの方法で変更します。

audit_user データベースの各ユーザーエントリには、次の 3 つのフィールドがあります。


username:always-audit-classes:never-audit-classes

監査フィールドは、順番に処理されます。

たとえば、ファイルシステムオブジェクトの正常な読み取り動作を除き、システム全体の監査設定を 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

注 –

正常終了したイベントと失敗したイベントは別々に取り扱われます。プロセスが生成する監査レコードの数は、イベントが正常終了した場合よりも失敗した場合のほうが多くなる可能性があります。


audit_warn スクリプト

auditd デーモンで監査レコードの書き込み中に異常な状態が発生すると、/etc/security/audit_warn スクリプトは電子メールエイリアスに通知します。このスクリプトをサイトに合わせてカスタマイズすることで、手動による対処が必要な状態を警告するようにしたり、そのような状態を自動的に処理するための方法を指定したりできます。エラーが発生すると、audit_warn スクリプトは、daemon.alert の重要度で syslog にメッセージを書き込みます。syslog.conf を使用すると、syslog メッセージのコンソール表示を設定できます。audit_warn スクリプトはさらに、audit_warn 電子メールエイリアスにもメッセージを送信します。このエイリアスは、監査構成の一部として設定します。

auditd デーモンは、次の条件を検出すると audit_warn スクリプトを起動し、audit_warn エイリアスに電子メールを送信します。

perzone 監査ポリシーが設定されている場合、非大域ゾーンの auditd のインスタンスがゾーンの audit_warn スクリプトを呼び出します。詳細は、audit_warn(1M) のマニュアルページを参照してください。

bsmconv スクリプト

/etc/security/bsmconv スクリプトは、監査サービスを有効にします。bsmunconv コマンドは、監査サービスを無効にします。bsmconv スクリプトを実行したあと、監査ディレクトリと監査構成ファイルを設定します。リブート時に、監査が有効になります。

詳細は、bsmconv(1M) のマニュアルページを参照してください。

監査を管理するための権利プロファイル

Solaris OS には、監査サービスを構成したり監査トレールを分析したりするための権利プロファイルが用意されています。

監査サービスを扱う役割を設定する方法については、「RBAC の構成 (作業マップ)」を参照してください。

監査と Solaris ゾーン

非大域ゾーンは、大域ゾーンの監査とまったく同様に監査することも、独自のフラグ、記憶領域、および監査ポリシーを設定することもできます。

すべてのゾーンが同様に監査される場合には、大域ゾーンの構成ファイルが、すべてのゾーンにおける監査の設定を提供します。+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

all

すべてのクラス (メタクラス) 

no

no_class

事前選択を無効にする空の値

na

non_attrib

ユーザーが原因ではないイベント 

fr

file_read

データを読み取る、読み取りのために開く 

fw

file_write

データを書き込む、書き込みのために開く 

fa

file_attr_acc

オブジェクト属性にアクセスする: statpathconf

fm

file_attr_mod

オブジェクト属性を変更する: chownflock

fc

file_creation

オブジェクトの作成 

fd

file_deletion

オブジェクトの削除 

cl

file_close

close システムコール

ap

application

アプリケーションが定義するイベント 

ad

administrative

管理上の操作 (旧 administrative メタクラス) 

am

administrative

管理上の操作 (メタクラス) 

ss

system state

システムの状態を変更 

as

system-wide administration

システム全体の管理 

ua

user administration

ユーザー管理 

aa

audit administration

監査の使用 

ps

process start

プロセスの起動、プロセスの停止 

pm

process modify

プロセスの変更 

pc

process

プロセス (メタクラス) 

ex

exec

プログラムの実行 

io

ioctl

ioctl() システムコール

ip

ipc

System V IPC 操作

lo

login_logout

ログインとログアウトのイベント 

nt

network

ネットワークイベント: bindconnectaccept

ot

other

その他、デバイス割り当てや 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 ファイル内での接頭辞の使用例については、audit_control ファイル」を参照してください。

監査プラグイン

監査プラグインでは、監査キューの監査レコードの処理方法を指定します。監査プラグインである audit_binfile.so および audit_syslog.so は、audit_control ファイル内で指定されます。このプラグインとパラメータを使って、次の内容を指定できます。

audit_binfile(5)audit_syslog(5)、および audit_control(4) のマニュアルページを参照してください。

監査ポリシー

監査ポリシーには、監査トレールにトークンまたは情報を追加するかどうかを指定します。

argeargvgrouppathseqtrailwindata_downwindata_up、および zonename ポリシーは、監査レコードにトークンを追加します。

その他のポリシーでは、トークンは追加されません。ahlt および cnt ポリシーはカーネル監査レコードが配信できない場合の動作を決定、public ポリシーは公開ファイルの監査を制限、perzone ポリシーは非大域ゾーンの別個の監査キューを確立します。

さまざまな監査ポリシーオプションの働きについては、「監査ポリシーの決定」を参照してください。監査ポリシーオプションについては、auditconfig(1M) のマニュアルページの -setpolicy オプションを参照してください。使用可能なポリシーオプションのリストについては、auditconfig -lspolicy コマンドを実行します。

プロセスの監査特性

最初のログイン時に次の監査特性が設定されます。

監査トレール

「監査トレール」はバイナリ監査ファイルを含み、auditd デーモンによって作成されます。bsmconv コマンドにより監査サービスが有効になると、システムの起動時に auditd デーモンが起動します。auditd デーモンは、監査トレールデータを収集し、監査レコードを書き込みます。

監査レコードは、監査ファイル専用のシステム上にバイナリ形式で格納されます。監査ディレクトリは、監査専用でないほかのファイルシステム内に物理的に配置することもできますが、予備のディレクトリを除き、この配置は行わないでください。予備のディレクトリとは、他の適切なディレクトリが使用できないときに限り、監査ファイルが書き込まれるディレクトリです。

監査ディレクトリを監査専用でないファイルシステムに配置しても構わない場合が、もう 1 つあります。つまり、ソフトウェア開発環境を使用していて、監査が任意である場合は、そうしても構いません。監査トレールを保存するよりも、ディスク容量を有効に使用するほうが重視されるからです。しかし、セキュリティーが重視される環境では、監査ディレクトリをほかのファイルシステム内に入れることは許されません。

監査ファイルシステムを管理するときは、次の要因も考慮する必要があります。

バイナリ監査ファイルの命名規則

各バイナリ監査ファイルは、自己完結したレコードの集合です。ファイル名には、レコードが生成された時間の範囲と、それを生成したシステム名が含まれます。

バイナリ監査ファイル名

完了した監査ファイルには、次の書式の名前が付いています。


start-time.end-time.system
start-time

監査ファイル内の最初の監査レコードが生成された時刻です

end-time

最後のレコードがファイルに書き込まれた時刻です

system

ファイルを生成したシステム名です

監査ファイルがアクティブである場合は、次の書式の名前が付いています。


start-time.not_terminated.system

not_terminated および閉じられた監査ファイルの名前の例については、not_terminated 監査ファイルを整理する方法」を参照してください。

バイナリ監査ファイルのタイムスタンプ

auditreduce コマンドは、ファイル名に含まれるタイムスタンプを手掛かりにして、特定期間内のレコードを検索します。1 か月あるいはそれ以上蓄積された監査ファイルがオンライン上に存在する可能性もあるため、これらのタイムスタンプは重要な意味を持ちます。24 時間以内に生成されたレコードをすべてのファイルから検索するとなると、莫大な時間がかかることがあります。

start-timeend-time は 1 秒単位のタイムスタンプです。これらのタイムスタンプは、グリニッジ標準時 (GMT) で指定されます。タイムスタンプの書式は、次のように年が 4 桁で、2 桁ずつの月、日、時、分、秒があとに続きます。


YYYYMMDDHHMMSS

タイムスタンプには GMT が使用されるため、タイムゾーンによるずれがあっても正しい順序でソートされることが保証されます。また、日時を把握しやすいように現在の時間帯に変換する必要があります。監査ファイルを auditreduce コマンドではなく標準ファイルコマンドで操作するときには、この点に注意してください。

監査レコードの構造

監査レコードは、一連の監査トークンです。監査トークンには、ユーザー ID、時刻、日付などのイベント情報が入っています。監査レコードは、header トークンで始まり、オプションの trailer トークンで終わります。ほかの監査トークンには、監査イベントに関連する情報が入っています。次の図は、標準的な監査レコードを示しています。

図 31–3 標準的な監査レコードの構造

標準的な監査レコードの構造です。header トークンのあとに、arg、data、subject、return の各トークンが含まれています。

監査レコード分析

監査レコード分析には、監査トレールのレコードの事後選択が必要です。次の 2 つの方法のうちのいずれかを使用して、収集されたバイナリデータを解析できます。

監査トークンの形式

各監査トークンにはトークンの種類識別子と、そのあとにトークン固有のデータが続いています。各トークンの種類には固有の形式があります。次の表は、各トークンの名前と簡単な説明の一覧です。廃止されたトークンは、以前の Solaris リリースとの互換性のために維持されています。

表 31–4 Solaris 監査の監査トークン

トークン名 

説明 

詳細 

acl

アクセス制御リスト (ACL) 情報 

acl トークン」

arbitrary

書式情報と型情報が付いたデータ 

arbitrary トークン (廃止)」

arg

システムコールの引数値 

arg トークン」

attribute

ファイル vnode トークン 

attribute トークン」

cmd

コマンド引数と環境変数

cmd トークン」

exec_args

exec システムコールの引数 

exec_args トークン」

exec_env

exec システムコールの環境変数 

exec_env トークン」

exit

プログラム終了情報 

exit トークン (廃止)」

file

監査ファイル情報 

file トークン」

group

プロセスグループ情報 

group トークン (廃止)」

groups

プロセスグループ情報 

groups トークン」

header

監査レコードの始まりを示します 

header トークン」

ip_addr

インターネットアドレス 

ip_addr トークン」

ip

IP ヘッダー情報 

ip トークン (廃止)」

ipc

System V IPC 情報 

ipc トークン」

ipc_perm

System V IPC オブジェクトトークン 

ipc_perm トークン」

iport

インターネットポートアドレス 

iport トークン」

opaque

構造化されていないデータ (形式が未指定) 

opaque トークン (廃止)」

path

パス情報 

path トークン」

path_attr

アクセスパス情報 

path_attr トークン」

特権

特権設定情報 

privilege トークン」

process

プロセスのトークン情報 

process トークン」

return

システムコールの状態 

return トークン」

sequence

シーケンス番号トークン 

sequence トークン」

socket

ソケットの種類とアドレス 

socket トークン」

サブジェクト

サブジェクトのトークン (process トークンと同じ書式)

subject トークン」

text

ASCII 文字列 

text トークン」

trailer

監査レコードの終わりを示します 

trailer トークン」

uauth

承認の使用 

uauth トークン」

upriv

特権の使用 

upriv トークン」

zonename

ゾーンの名前 

zonename トークン」

監査レコードは常に header トークンで始まります。header トークンは、監査トレール内で監査レコードの始まりを示します。ユーザーの動作に起因するイベントの場合、subjectprocess トークンは、イベントを発生させたプロセスの値を参照します。ユーザーの動作に起因しないイベントの場合、process トークンはシステムを参照します。

acl トークン

acl トークンは、アクセス制御リスト (ACL) に関する情報を記録します。

acl トークンは、次の 4 つの固定長フィールドで構成されます。

praudit -x コマンドでは、acl トークンのフィールドは次のように表示されます。


<acl type="1" value="root" mode="6"/>

arbitrary トークン (廃止)

arbitrary トークンは、監査トレール用にデータをカプセル化します。4 つの固定長フィールドと 1 つのデータ配列からなっています。固定長フィールドは次のとおりです。

トークンの残りの部分は、指定された形式の count からなっています。praudit コマンドでは、arbitrary トークンは次のように表示されます。


arbitrary,decimal,int,1
42

次の表は、出力形式フィールドに指定できる値を示します。

表 31–5 arbitrary トークンの出力形式フィールドの値

値 

動作 

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 トークン

arg トークンには、システムコールの引数情報 (システムコールの引数番号、引数の値、およびオプションの説明) が含まれています。このトークンを使用すると、監査レコード内で 32 ビット整数のシステムコール引数を指定できます。

arg トークンには次の 5 つのフィールドがあります。

praudit -x コマンドでは、arg トークンのフィールドは次のように表示されます。


<argument arg-num="2" value="0x0" desc="new file uid"/>

attribute トークン

attribute トークンには、ファイル vnode からの情報が含まれています。

attribute トークンには次の 7 つのフィールドがあります。

ファイルシステム 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 トークンには次のフィールドがあります。

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_args トークンは、exec() システムコールへの引数を記録します。exec_args トークンには次の 2 つの固定長フィールドがあります。

このトークンの残りの部分は、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_env トークンは、exec() システムコールの現在の環境変数を記録します。exec_env トークンには次の 2 つの固定長フィールドがあります。

このトークンの残りの部分は、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 トークンには次のフィールドがあります。

praudit コマンドでは、exit トークンは次のように表示されます。


exit,Error 0,0

file トークン

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>

group トークン (廃止)

このトークンは、groups トークンに置き換えられています。groups トークン」を参照してください。

groups トークン

groups トークンは group トークンを置き換えます。groups トークンは、プロセスの資格からグループエントリを記録します。

group トークンには次の 2 つの固定長フィールドがあります。

このトークンの残りの部分は、count グループエントリからなっています。

praudit -x コマンドでは、groups トークンのフィールドは次のように表示されます。


<group><gid>staff</gid><gid>other</gid></group>

注 –

groups トークンは、group 監査ポリシーオプションが有効なときにだけ出力されます。


header トークン

header トークンは、監査レコードの開始を示すという意味で、特殊なトークンです。trailer トークンとの組み合わせでレコード内のほかのすべてのトークンを囲む特殊なトークンです。

header トークンには次の 8 つのフィールドがあります。

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 トークン

ip_addr トークンには、インターネットプロトコルアドレスが含まれます。Solaris 8 リリースから、IPv4 形式、IPv6 形式のいずれかでインターネットアドレスを表示できるようになりました。IPv4 アドレスは 4 バイトを使用します。IPv6 アドレスは、1 バイトを使って種類を記述し、さらに 16 バイトを使ってアドレスを記述します。

in_addr トークンには次の 3 つのフィールドがあります。

praudit -x コマンドでは、ip_addr トークンの内容は次のように表示されます。


<ip_address>machine1</ip_address>

ip トークン (廃止)

ip トークンには、インターネットプロトコルのヘッダーのコピーが含まれます。ip トークンには次の 2 つのフィールドがあります。

praudit コマンドでは、ip トークンは次のように表示されます。


ip address,0.0.0.0

IP ヘッダー構造は、/usr/include/netinet/ip.h ファイル内で定義されています。

ipc トークン

ipc トークンには、呼び出し元が特定の IPC オブジェクトを識別するために使用する System V IPC メッセージハンドル、セマフォーハンドル、または共有メモリーハンドルが含まれています。

ipc トークンには次の 3 つのフィールドがあります。


注 –

IPC オブジェクト識別子は、コンテキストに依存しない Solaris 監査トークンの性質に準拠していません。IPC オブジェクトを一意に識別するグローバルな「名前」はありません。代わりに、IPC オブジェクトはハンドルで識別されます。これらのハンドルは、IPC オブジェクトの動作中にのみ有効です。しかし IPC オブジェクトの識別は問題となりません。System V の IPC メカニズムはあまり使用されず、すべてのメカニズムが同じ監査クラスを共有するからです。


次の表は、IPC オブジェクトの形式フィールドに指定できる値の一覧です。値は /usr/include/bsm/audit.h ファイル内で定義されます。

表 31–7 IPC オブジェクトの形式フィールドの値

名前 

値 

説明 

AU_IPC_MSG

IPC メッセージオブジェクト 

AU_IPC_SEM

IPC セマフォーオブジェクト 

AU_IPC_SHM

IPC 共有メモリーオブジェクト 

praudit -x コマンドでは、ipc トークンのフィールドは次のように表示されます。


<IPC ipc-type="shm" ipc-id="15"/>

ipc_perm トークン

ipc_perm トークンには、System V IPC アクセス権のコピーが含まれています。このトークンは、IPC 共有メモリーイベント、IPC セマフォーイベント、および IPC メッセージイベントによって生成される監査レコードに追加されます。

ipc_perm トークンには次の 8 つのフィールドがあります。

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 トークン

iport トークンには、TCP または UDP ポートアドレスが含まれています。

iport トークンには次の 2 つのフィールドがあります。

praudit コマンドでは、iport トークンは次のように表示されます。


ip port,0xf6d6

opaque トークン (廃止)

opaque トークンには、フォーマットされていないデータが一連のバイトとして含まれています。opaque トークンには次の 3 つのフィールドがあります。

praudit コマンドでは、opaque トークンは次のように表示されます。


opaque,12,0x4f5041515545204441544100

path トークン

path トークンには、オブジェクトのアクセスパス情報が含まれています。

path トークンには次のフィールドがあります。

praudit コマンドでは、path トークンは 2 番目のフィールドなしで、次のように表示されます。


path,/etc/security/audit_user

praudit -x コマンドでは、path トークンの内容は次のように表示されます。


<path>/etc/security/audit_user</path>

次の図に path トークンの形式を示します。

図 31–4 path トークンの形式

この図については、前の本文中で説明しています。

path_attr トークン

path_attr トークンには、オブジェクトのアクセスパス情報が含まれています。アクセスパスは、path トークンオブジェクトの下の属性ファイルオブジェクトのシーケンスを指定します。openat() などのシステムコールは、属性ファイルにアクセスします。属性ファイルオブジェクトの詳細については、fsattr(5) のマニュアルページを参照してください。

path_attr トークンには次のフィールドがあります。

praudit コマンドでは、path_attr トークンは次のように表示されます。


path_attr,1,attr_file_name

privilege トークン

privilege トークンは、プロセス上での特権の使用を記録します。privilege トークンは、基本セットの特権に対して記録されません。特権が管理者の処理により基本セットから削除された場合、その特権の使用は記録されます。特権の詳細は、「特権 (概要)」を参照してください。

privilege トークンには次のフィールドがあります。

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 トークンには、シグナルの受信者など、プロセスに関連付けられたユーザーに関する情報が含まれています。

process トークンには次の 9 つのフィールドがあります。

監査 ID、ユーザー ID、グループ ID、プロセス ID、セッション ID は、短い形式ではなく長い形式です。


注 –

セッション ID、実ユーザー ID、または実グループ ID の processトークンのフィールドを使用できないことがあります。その場合、値は -1 に設定されます。


端末 ID を含むトークンには、いくつかの種類があります。praudit コマンドは、これらの違いを吸収します。このため、端末 ID を含むすべてのトークンで、端末 ID は同じ方法で処理されます。端末 ID は、IP アドレスとポート番号の組み合わせか、デバイス ID です。モデムに接続されたシリアルポートなどのデバイス ID は、0 である可能性があります。端末 ID には、次の書式があります。

デバイス番号の場合、端末 ID は次のようになります。

Solaris 8 よりも前のリリースのポート番号の場合、端末 ID は次のようになります。

Solaris 8 以降のリリースのポート番号の場合、端末 ID は次のようになります。

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 トークンの形式を示します。

図 31–5 process トークンの形式

この図については、前の本文中で説明しています。

return トークン

return トークンには、システムコールの戻り状態 (u_error) とプロセスの戻り値 (u_rval1) が含まれています。

return トークンには次の 3 つのフィールドがあります。

return トークンは、必ずシステムコールに関してカーネルによって生成される監査レコードの一部として返されます。アプリケーションの監査中、このトークンは終了状態とその他の戻り値を返します。

praudit では、システムコールの return トークンは次のように表示されます。


return,failure: Operation now in progress,-1

praudit -x コマンドでは、return トークンのフィールドは次のように表示されます。


<return errval="failure: Operation now in progress" retval="-1/">

sequence トークン

sequence トークンには、シーケンス番号が含まれています。シーケンス番号は、監査レコードが監査トレールに組み込まれるたびに 1 ずつ増分します。このトークンはデバッグに使用されます。

sequence トークンには次の 2 つのフィールドがあります。

praudit コマンドでは、sequence トークンのフィールドは次のように表示されます。


sequence,1292

praudit -x コマンドでは、sequence トークンの内容は次のように表示されます。


<sequence seq-num="1292"/>

注 –

sequence トークンは、seq 監査ポリシーが有効なときにだけ出力されます。


socket トークン

socket トークンには、インターネットソケットを記述する情報が含まれています。いくつかのインスタンスで、トークンには次の 4 つのフィールドがあります。

praudit コマンドでは、socket トークンのインスタンスは次のように表示されます。


socket,0x0002,0x83b1,localhost

ほとんどのインスタンスで、トークンには次の 8 つのフィールドがあります。

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 トークン

subject トークンは、ある操作を実行するユーザーまたは実行を試みるユーザーを記述します。形式は process トークンと同じです。

subject トークンには次の 9 つのフィールドがあります。

監査 ID、ユーザー ID、グループ ID、プロセス ID、セッション ID は、短い形式ではなく長い形式です。


注 –

セッション ID、実ユーザー ID、または実グループ ID の subject トークンのフィールドを使用できないことがあります。その場合、値は -1 に設定されます。


端末 ID を含むトークンには、いくつかの種類があります。praudit コマンドは、これらの違いを吸収します。このため、端末 ID を含むすべてのトークンで、端末 ID は同じ方法で処理されます。端末 ID は、IP アドレスとポート番号の組み合わせか、デバイス ID です。モデムに接続されたシリアルポートなどのデバイス ID は、0 である可能性があります。端末 ID には、次の書式があります。

デバイス番号の場合、端末 ID は次のようになります。

Solaris 8 よりも前のリリースのポート番号の場合、端末 ID は次のようになります。

Solaris 8 以降のリリースのポート番号の場合、端末 ID は次のようになります。

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 トークンの形式を示します。

図 31–6 subject トークンの形式

この図については、前の本文中で説明しています。

text トークン

text トークンには、テキスト文字列が含まれています。

text トークンには次の 3 つのフィールドがあります。

praudit -x コマンドでは、text トークンの内容は次のように表示されます。


<text>booting kernel</text>

trailer トークン

headertrailer の2 つのトークンは、監査レコードの終端を区別し、ほかのすべてのトークンを囲むという意味で、特殊なトークンです。header トークンは監査レコードを開始します。trailer トークンは監査レコードを終了します。trailer トークンは省略可能です。trailer トークンは、trail 監査ポリシーオプションが設定されているときにだけ、各レコードの最後のトークンとして追加されます。

trailer トークンを含む監査レコードが生成された場合、 auditreduce コマンドは、 trailer がレコードの header を正しくポイントしているかどうかを検証します。また、trailer トークンを使用すると監査トレールを逆方向に検索できます。

trailer トークンには次の 3 つのフィールドがあります。

praudit コマンドでは、trailer トークンが次のように表示されます。


trailer,136

uauth トークン

uauth トークンは、コマンドまたはアクションでの承認の使用を記録します。

uauth トークンには次のフィールドがあります。

praudit コマンドでは、uauth トークンは次のように表示されます。


use of authorization,solaris.admin.printer.delete

upriv トークン

upriv トークンは、コマンドまたはアクションでの特権の使用を記録します。

praudit -x コマンドでは、upriv トークンのフィールドは次のように表示されます。


<use_of_privilege result="successful use of priv">proc_setid</use_of_privilege>

zonename トークン

zonename トークンは、監査イベントが発生したゾーンを記録します。文字列「global」は、大域ゾーンで発生した監査イベントを示します。

zonename トークンには次のフィールドがあります。

praudit -x コマンドでは、zonename トークンの内容は次のように表示されます。


<zone name="graphzone"/>