監査ファイルは、 監査トレール不要の監査レコードで構成されます。つまり、別のファイルやレコードを参照しなくても、監査対象としてセキュリティ管理者が事前に選択したユーザーレベルおよびカーネルレベルのイベントを記録することができるわけです。監査レコードは一連の監査トークンで構成され、監査トークンには監査するイベントの属性が記述されています。システム内の監査イベントは、それぞれ特定の種類の監査レコードを生成します。そして、この監査レコードそれぞれが、イベントを説明する特定のトークンを備えています。監査レコードにはイベントが属する監査イベントクラスは記述されません。イベントとクラスの対応関係は、監査レコードではなく、 /etc/security/audit_event ファイルで決まります。
各監査トークンは 1 バイトで表されるトークンタイプで始まり、これに 1 つまたは複数のデータ要素が続きます。データ要素の順番はトークンタイプによって異なります。監査レコードの違いはイベントタイプとレコード内のトークンセットの違いで判別されます。text トークンのようにデータ要素を 1 つしか持たないトークンがある一方、process トークンのように複数のデータ要素 (監査ユーザー ID、実ユーザー ID、実効ユーザー ID を含む) を持つトークンもあります。
監査レコードはバイナリ形式で保存され、処理されますが、バイトの順序とデータのサイズはあらかじめ決められており、ワークステーション間で簡単に互換性が得られるようになっています。
「監査トークンの構造」では、各トークンのデータ要素の詳しい説明と、出力例を示します。「監査レコード」では、Trusted Solaris 7 の監査で生成される全監査レコードを一覧します。レコードはカーネルイベント別、ユーザーイベント別にアルファベット順で記載されています。付録 A 「イベントとクラスの対応関係」では、監査レコードの相互参照表を提示します。
各レコードは、header (ヘッダー) トークンで始まり、trailer (トレーラ) トークン (省略可能) で終わります。header トークンと trailer トークンの間にある 1 つ以上のトークンはイベントを説明するものです。ユーザーレベルのイベントやカーネルイベントの場合、トークンはオブジェクトの属性を説明します。オブジェクトの属性には、イベントを実行したプロセス、イベントが実行されたオブジェクト、所有者、モードなどがあります。
たとえば、AUE_LSTAT カーネルイベントには次のトークンがあります。なお、AUE_LSTAT の監査レコードの書式は 表 B-70 にあります。
header (ヘッダー) トークン
path (パス) トークン
attr (属性) トークン (省略可能)
subject (サブジェクト) トークン
return (リターン) トークン
auditconfig コマンドで trail (トレール) ポリシーが有効になっている場合には、監査レコードの中で return トークンの後に trailer トークンが続きます。
ここでは、監査レコードの例をテキスト形式で紹介します。監査レコードはバイナリ形式で保存されていますが、praudit コマンドでバイナリのレコードを実行するとテキスト形式のレコードが作成されます。テキスト形式のレコードは、標準出力やプリンタ、レポートを作成するスクリプトプログラムへ送ることができます。praudit の詳細については、praudit(1M) のマニュアルページを参照してください。スクリプトプログラムの例については、「praudit スクリプトを使って選択を実行する方法」を参照してください。
次の header トークンの例は、praudit がデフォルトで作成する書式です。raw データ (-r) と短縮 (-s) のオプションの例も示します。
監査レコードは、header トークンで始まります。header トークンは、監査レコードすべてに共通する情報を示します。praudit がデフォルトで表示する header トークンは、次の ioctl() の例のようになります。
header,240,1,ioctl(2),,Tue Sept 1 16:11:44 1992, + 270000 msec
次のフィールドがあります。
トークン ID。ここでは header
バイトで表したレコード長。header トークンと trailer トークンを含む。ここでは 240
監査レコード構造のバージョン番号。ここではバージョン 1
監査イベントの種類を示すイベント ID。ここでは ioctl(2)
イベントの種類に関する情報を記述するイベント ID 修飾子。ここでは記述フィールドは空欄
レコードが作成された日付と時間。ここでは次のとおり Tue Sept 1 16:11:44 1992, + 270000 msec
praudit -s を使うと、イベントの記述 (上記の praudit のデフォルトの例では ioctl(2)) をイベント名 (AUE_IOCTL) に置き換えることができます。
header,240,1,AUE_IOCTL,,Tue Sept 1 16:11:44 1992, + 270000 msec
praudit -r を使うと、すべてのフィールドが数字で表示されます (10 進数、8 進数、16 進数の場合がある)。ここでは 20 はヘッダートークン ID、158 はこのイベントのイベント番号を表しています。
20,240,1,158,,699754304, + 270000 msec
どの監査レコードも必ず、header トークンとそれ以外のトークン 1 つを備えています。たとえば、監査イベント AUE_login の監査レコードには 5 つのトークンがあります。AUE_login の監査レコード書式の詳細については、表 B-247 を参照してください。
praudit がデフォルトで表示する AUE_login の監査レコードは次のようになります。1 行につきトークンが 1 つ記述されます。
header,90,3,login - local,,Tue Jul 8 15:12:01 1997, +520002000 msec, text,emily text,successful login subject,emily,emily,staff,emily,staff,14094,14094,0 0 willet, return,success,0 sequence,17 trailer,90
次のトークンがあります。
header トークン
text トークン (ログイン名)
text トークン (成功または失敗)
subject トークン
return トークン
この監査ファイルがレコードを集め終わると、監査ポリシートークンのシーケンス (sequence) とトレーラ (trailer) が有効になり、すべての監査レコードに次のトークンが含まれるようになります。
sequence (シーケンス) トークン
trailer (トレーラ) トークン
各監査レコードには、イベントを発生させたユーザーを識別する監査 ID があります。また、監査レコードは他のファイルを参照する必要がありません。このため、監査レコードを個別に閲覧し、監査トレールをさかのぼらないで有意味な情報を得ることができます。
Trusted Solaris 7 の監査レコードには、あるイベントに関連した情報がすべて含まれているので、発生した事象の情報を得るために別の監査レコードを参照する必要はありません。たとえば、ファイルイベントを記述した監査レコードには、ルートディレクトリを起点とするファイルのフルパス名、ファイルを開いたり閉じたりした日付と時刻が記載されています。
システム管理ファイルは、監査ファイルのアーカイブで保存してください。監査トレールの情報は、ユーザーやその UID の変更など、サイトの担当者や設備の変更によって変化し、レコードを解釈する能力に影響を及ぼします。
praudit -l を使うと、監査レコードを 1 行で表示できます。
header,90,3,login - local,,Tue Jul 8 15:12:01 1997, +520002000 msec,text,emily,text,successful login,subject,emily,emily, staff,emily,staff,14094,14094,0 0 willet,return,success,0, sequence,17,trailer,90
praudit -r を使うと、監査レコードは次のように表示されます。
20,90,3,6152,0x0000,872028721,520002000 40,emily 40,successful login 36,6001,6001,10,6001,10,14094,14094,0 0 129.150.110.2 39,0,0 47,17 19,90