Solaris BSMの 監査レコードは、一連の監査トークンからなっており、各トークンでシステムの属性が記述されます。
各監査トークンについての詳細は付録 A 「監査レコードの説明」 を参照してください。この付録には、Solaris BSM の監査機能によって生成される全監査レコードのリストも掲載されます。リストはアルファベット順にソートされていて、相互参照一覧ではイベント名とその説明箇所が示されています。
監査レコードは 2 進形式で格納され処理されますが、さまざまなマシン間での互換性を保つために、データのバイトオーダーとサイズはあらかじめ決められています。
システム内の各監査対象イベントによって、特定のタイプの監査レコードが生成されます。各イベントの監査レコードには、そのイベントを記述する特定のトークンが入っています。監査レコードには、イベントが属する監査イベントクラスは記述されません。そのマッピングは外部テーブル、/etc/security/audit_event ファイルによって指定されます。
各トークンは 1 バイトのトークンタイプから始まり、タイプ別に決められた順序で 1 つまたは複数のデータ要素が続いています。監査レコードの種類は、そのレコード内のイベントタイプと各種トークンセットによって区別されます。 text トークンのようにデータ要素が 1 つしか入っていないトークンと、process トークンのように複数の要素 (監査ユーザ ID、実ユーザ ID、実効ユーザ ID など) が入っているトークンがあります。
各監査レコードは、header トークンで始まって、trailer トークン (省略可能) で終わります。ヘッダとトレーラの間にある 1 つまたは複数のトークンでイベントが記述されます。ユーザレベルのイベントとカーネルイベントの場合は、トークンでそのイベントを実行したプロセス、実行対象となったオブジェクト、所有者やモードなどのオブジェクトのトークンが記述されます。
一般に、それぞれのユーザレベルイベントとカーネルイベントには、少なくとも次のトークンが付いています。
header
subject
return
trailer トークンは多くのイベントに含まれていますが、省略可能です。
この節では、各監査レコードの書式を praudit コマンドで生成される出力どおりに示し、各監査トークンについて簡単に説明します。各トークン内のフィールドについての詳細は付録 A 「監査レコードの説明」 を参照してください。
次のトークンの例は、デフォルトで praudit によって生成される書式を示しています。また、各例は raw(-r) オプションと短縮 (-s) オプションを指定することが前提となっています。praudit によって監査トークンが表示されるときは、まずトークンタイプ、次にそのトークンからのデータが表示されます。ただし、フィールド (パス名など) にコンマが入っている場合は、それとフィールド区切りのコンマとを区別できません。別のフィールド区切り記号を使用しないと、出力にコンマが含まれることになります。デフォルトでは、トークンタイプは header のように名前として表示されるか、または 10 進数として -r 形式で表示されます。
各トークンを次の順序で説明します。
すべての監査レコードは header トークンで始まります。headerトークンは、すべての監査レコードに共通の情報を示します。次のフィールドが入っています。
トークン ID
header トークンと trailer トークンを含めたバイト単位のレコード長
監査レコード構造体のバージョン番号
監査イベントのタイプを識別するイベント ID
イベントタイプに関する記述情報が付いたイベント ID 修飾子
レコードの作成日時
header トークンが praudit によってデフォルト形式で表示されるときは、次の ioctl からの例のようになります。
header,240,1,ioctl(2),es,Tue Sept 1 16:11:44 1992, + 270000 msec |
praudit -s を使用すると 、 イベント記述 (ioctl(2)) は、次のようにイベント名 (AUE_IOCTL) に置き換えられます。
header,240,1,AUE_IOCTL,es,Tue Sept 1 16:11:44 1992, + 270000 msec |
praudit -r を使用すると、すべてのフィールドが数値として表示されます (10 進数、8 進数、または 16 進数)。この場合、158 はこのイベントのイベント番号です。
20,240,1,158,0003,699754304, + 270000 msec |
praudit では時刻がミリ秒単位で表示されるので注意してください。
このトークンは監査レコードの終わりを示し、監査トレールを逆方向から検索できるようにします。次のフィールドがあります。
トークン ID
レコードの終わりを示すパッド番号 (表示されない)
header トークンと trailer トークンを含めた監査レコードの合計文字数
praudit により、trailer トークンは次のように表示されます。
trailer,136 |
このトークンは、監査トレールのデータをカプセル化します。項目の配列には多くの項目が含まれることがあります。次のフィールドがあります。
トークン ID
10 進などの推奨形式
int など、カプセル化されたデータのサイズ
データ配列の項目数
項目の配列
praudit により、arbitrary トークンは次のように表示されます。
arbitrary,decimal,int,1 42
このトークンには、システムコールの引数情報が入っています。監査レコード内では、32 ビット整数によるシステムコール引数を使用できます。次のフィールドがあります。
トークン ID
関連するシステムコール引数の引数 ID
引数の値
省略可能な記述テキスト文字列の長さ (表示されない)
省略可能なテキスト文字列
praudit により、arg トークンは次のように表示されます。
argument,1,0x00000000,addr |
一般に、attrトークンはパスの検索中に生成され、path トークンが添付されていますが、パス検索エラーのイベントには含まれません。次のフィールドがあります。
トークン ID
ファイルのアクセスモードとタイプ
所有者のユーザ ID
所有者のグループ ID
ファイルシステム ID
i ノード ID
ファイルが示すデバイス ID
praudit により、attr トークンは次のように表示されます。
attribute,100555,root,staff,1805,13871,-4288 |
exitトークンには、プログラムの終了状態が記録されます。 次のフィールドがあります。
トークン ID
exit()システムコールに渡されるプログラムの終了状態
終了状態を記述するか、システムエラー番号を示す戻り値
praudit により、exit トークンは次のように表示されます。
exit,Error 0,0 |
このトークンは監査デーモンによって生成され、古いファイルが有効でなくなると、新しい監査トレールファイルの始めと古いファイルの終わりを示します。このトークンが入っている監査レコードは、連続する監査ファイルをまとめてリンクし、1 つの監査トレールにまとめます。次のフィールドがあります。
トークン ID
ファイルのオープンまたはクローズ日時を示すスタンプ
ファイル名のバイト数 (表示されない)
ファイル名
praudit により、file トークンは次のように表示されます。
file,Tue Sep 1 13:32:42 1992, + 79249 msec, /baudit/localhost/files/19920901202558.19920901203241.quisp
groupsトークンは、プロセスの資格からグループエントリを記録します。次のフィールドがあります。
トークン ID
サイズが NGROUPS_MAX (16) のグループエントリの配列
praudit により、groups トークンは次のように表示されます。
group,staff,wheel,daemon,kmem,bin,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 |
in_addrトークンは、マシンのインターネットプロトコルアドレスを示します。次のフィールドがあります。
トークン ID
インターネットアドレス
praudit により、in_addr トークンは次のように表示されます。
ip addr,129.150.113.7 |
ip トークンには、インターネットプロトコルヘッダのコピーが入っています。次のフィールドがあります。
トークン ID
IP ヘッダの 20 バイトのコピー
praudit により、ip トークンは次のように表示されます。
ip address,0.0.0.0 |
このトークンには、特定の IPC オブジェクトを識別するために呼び出し元に使用される System V IPC メッセージ/セマフォ/共有メモリハンドルが入っています。次のフィールドがあります。
トークン ID
IPC オブジェクトタイプ識別子
IPC オブジェクトハンドル
praudit により ipc トークンは次のように表示されます。
IPC,msg,3 |
ipc_perm トークンには、System V IPC アクセス情報のコピーが入っています。共有メモリ、セマフォ、メッセージ IPC の監査レコードには、このトークンが追加されます。次のフィールドがあります。
トークン ID
IPC 所有者のユーザ ID
IPC 所有者のグループ ID
IPC 作成者のユーザ ID
IPC 作成者のグループ ID
IPC アクセスモード
IPC シーケンス番号
IPC キー値
praudit により ipc_perm トークンは次のように表示されます。
IPC perm,root,wheel,root,wheel,0,0,0x00000000 |
このトークンには、TCP (または UDP) アドレスが入っています。次のフィールドがあります。
トークン ID
TCP/UDP アドレス
praudit により iport トークンは次のように表示されます。
ip port,0xf6d6 |
opaqueトークンには、書式化されていないデータが一連のバイトとして入っています。次のフィールドがあります。
トークン ID
データ配列のバイト数
バイトデータ配列
praudit により opaque トークンは次のように表示されます。
opaque,12,0x4f5041515545204441544100 |
path トークンには、オブジェクトに関するアクセスパス情報が入っています。次のフィールドがあります。
トークン ID
パス長のバイト数 (表示されない)
絶対パス
praudit により path トークンは次のように表示されます。
path,/an/anchored/path/name/to/test/auditwrite/AW_PATH |
process トークンには、プロセスを記述する情報が入っています。次のフィールドがあります。
トークン ID
ユーザの監査 ID
実効ユーザ ID
実効グループ ID
実ユーザ ID
実グループ ID
プロセス ID
セッション ID
次の ID からなる端末 ID
デバイス ID
マシン ID
praudit により、process トークンは次のように表示されます。
process,root,root,wheel,root,wheel,0,0,0,0.0.0.0 |
returnトークンは、システムコールの戻り状態とプロセスの戻り値を示します。このトークンは、常にシステムコールに関してカーネルで生成される監査レコードの一部として返されます。次のフィールドがあります。
トークン ID
システムコールのエラー状態
システムコールの戻り値
praudit により、return トークンは次のように表示されます。
return,success,0 |
このトークンは省略可能で、デバッグに使用される昇順のシーケンス番号が入っています。seq ポリシーがアクティブになっているときは、このトークンが各監査レコードに追加されます。次のフィールドがあります。
トークン ID
32 ビットの符号なし long 型のシーケンス番号
praudit により、seq トークンは次のように表示されます。
sequence,1292 |
socketトークンはインターネットソケットを記述します。次のフィールドがあります。
トークン ID
ソケットタイプフィールド (TCP/UDP/UNIX)
ローカルポートアドレス
ローカルのインターネットアドレス
リモートポートアドレス
リモートのインターネットアドレス
praudit により、socket トークンは次のように表示されます。
socket,0x0000,0x0000,0.0.0.0,0x0000,0.0.0.0 |
このトークンはサブジェクト (プロセス) を記述します。次のフィールドがあります。
トークン ID
ユーザの監査 ID
実効ユーザ ID
実効グループ ID
実ユーザ ID
実グループ ID
プロセス ID
セッション ID
次の ID からなる端末 ID
デバイス ID
マシン ID
praudit により、subject トークンは次のように表示されます。
subject,cjc,cjc,staff,cjc,staff,424,223,0 0 quisp |
text トークンにはテキスト文字列が入っています。次のフィールドがあります。
トークン ID
テキスト文字列の長さ (表示されない)
テキスト文字列
praudit により、text トークンは次のように表示されます。
text,aw_test_token |