各トークンにはトークンの種類識別子とそのあとにトークン固有のデータが続いています。各トークンの種類には固有の形式があります。次の表は、各トークンの名前と説明の一覧です。
表 25-5 基本セキュリティモジュール (BSM) の監査トークン
トークン名 |
説明 |
参照先 |
---|---|---|
acl |
アクセス制御リスト情報 | |
arbitrary |
書式情報と型情報が付いたデータ | |
arg |
システムコールの引数値 | |
attr |
ファイル vnode トークン | |
exec_args |
exec システムコールの引数 | |
exec_env |
exec システムコールの環境変数 | |
exit |
プログラム終了情報 | |
file |
監査ファイル情報 | |
groups |
プロセスグループ情報 (現在は使用しない) | |
header |
監査レコードの始まりを示す | |
in_addr |
インターネットアドレス | |
ip |
IP ヘッダー情報 | |
ipc |
System V IPC 情報 | |
ipc_perm |
System V IPC オブジェクトトークン | |
iport |
インターネットポートアドレス | |
newgroups |
プロセスグループ情報 | |
opaque |
構造化されていないデータ (形式が未指定) | |
path |
パス情報 | |
process |
プロセスのトークン情報 | |
return |
システムコールの状態 | |
seq |
シーケンス番号トークン | |
socket |
ソケットの種類とアドレス | |
subject |
サブジェクトのトークン情報 (process トークンと同じ書式) | |
text |
ASCII 文字列 | |
trailer |
監査レコードの終わりを示す |
監査レコードには、必ず header トークンが入っています。header トークンは、監査トレール内で監査レコードの始まりを示します。ユーザーの動作に起因しないイベントからの監査レコードを除き、どの監査レコードにも subject トークンが入っています。ユーザーに起因するイベントの場合、この 2 つのトークンはイベントを引き起こしたプロセスの値を参照します。非同期イベントの場合、process トークンはシステムを参照します。
acl トークンレコードには、アクセス制御リストに関する情報を記録します。次の 4 つの固定フィールドがあります。
acl トークンであることを特定するトークン ID
ACL タイプを指定するフィールド
ACL ID フィールド
ACL に関連付けるアクセス権を一覧するフィールド
praudit コマンドでは、acl トークンは次のように表示されます。
acl,tpanero,staff,0755 |
次の図に acl トークンの形式を示します。
arbitrary トークンは、監査トレール用にデータをカプセル化します。次の 4 つの固定長フィールドと 1 つのデータ配列からなっています。
arbitrary トークンであることを特定するトークン ID
推奨される形式フィールド(16 進など)
カプセル化するデータのサイズを指定する (短い形式など) サイズフィールド
後続の項目数を指定するカウントフィールド
トークンの残りの部分は、指定された形式の 1 つまたは複数の項目からなっています。praudit コマンドでは、arbitrary トークンは次のように表示されます。
arbitrary,decimal,int,1 42 |
次の図に arbitrary トークンの形式を示します。
値 |
動作 |
---|---|
AUP_BINARY |
日付が 2 進形式で出力される |
AUP_OCTAL |
日付が 8 進形式で出力される |
AUP_DECIMAL |
日付が 10 進形式で出力される |
AUP_HEX |
日付が 16 進形式で出力される |
AUP_STRING |
日付が文字列で出力される |
表 25-7 arbitrary トークンの項目サイズフィールドの値
値 |
動作 |
---|---|
AUR_BYTE |
データはバイト単位 (1 バイト) |
AUR_SHORT |
データは短い形式の単位 (2 バイト) |
AUR_LONG |
データは長い形式の単位 (4 バイト) |
arg トークンには、システムコールの引数情報 (システムコールの引数の数、引数の値、およびオプションの説明) が含まれています。このトークンを使用すると、監査レコード内で 32 ビット整数のシステムコール引数を指定できます。次の 5 つのフィールドがあります。
argトークンであることを特定するトークン ID
トークンが参照するシステムコールの引数の ID
引数の値
テキスト文字列の長さ
テキスト文字列
praudit コマンドでは、arg トークンは次のように表示されます。
argument,1,0x00000000,addr |
attr トークンには、ファイル v ノードからの情報が含まれています。次のトークンには 7 つのフィールドがあります。
attr トークンであることを特定するトークン ID
ファイルのアクセスモードと種類
所有者のユーザー ID
所有者のグループ ID
ファイルシステム ID
i ノード ID
ファイルが示すデバイス ID
ファイルシステム ID とデバイス ID の詳細は、statvfs(2) のマニュアルページを参照してください。
一般に、attrトークンには path トークンが付いており、パスの検索中に生成されます。パス検索エラーが発生すると、必要なファイル情報を取得するために利用できる v ノードがないため、attrトークンは監査レコードの一部として組み込まれません。praudit コマンドでは、attr トークンは次のように表示されます。
attribute,100555,root,staff,1805,13871,-4288 |
exec_args トークンは、 exec() システムコールへの引数を記録します。次の 2 つの固定フィールドがあります。
exec_args トークンであることを特定するトークン ID
exec() システムコールに渡す引数の数を表すカウント
このトークンの残りの部分は、0 個以上の NULL で終わる文字列からなっています。praudit コマンドでは、 exec_args トークンは次のように表示されます。
vi,/etc/security/audit_user |
exec_args トークンは、監査ポリシー argv が有効なときにだけ出力されます。
exec_envトークンは、exec() システムコールの現在の環境変数を記録します。次の 2 つの固定フィールドがあります。
exec_env トークンであることを特定するトークン ID
exec() システムコールに渡す引数の数を表すカウント
このトークンの残りの部分は、0 個以上の NULL で終わる文字列からなっています。praudit コマンドでは、exec_env トークンは次のように表示されます。
exec_env,25, GROUP=staff,HOME=/export/home/matrix,HOST=mestrix,HOSTTYPE=sun4,HZ=100, LC_COLLATE=en_US.ISO8859-1,LC_CTYPE=en_US.ISO8859-1,LC_MESSAGES=C, LC_MONETARY=en_US.ISO8859-1,LC_NUMERIC=en_US.ISO8859-1, LC_TIME=en_US.ISO8859-1,LOGNAME=matrix,MACHTYPE=sparc, MAIL=/var/mail/matrix,OSTYPE=solaris,PATH=/usr/sbin:/usr/bin,PS1=#, PWD=/var/audit,REMOTEHOST=209.198.087.208,SHELL=/usr/bin/csh,SHLVL=1, TERM=dtterm,TZ=US/Pacific,USER=matrix,VENDOR=sun |
exec_env トークンは、監査ポリシー arge が有効なときにだけ出力されます。
exit トークンは、プログラムの終了状態を記録します。次のフィールドがあります。
exit トークンであることを特定するトークン ID
exit() システムコールに渡されるプログラムの終了状態
終了状態を記述するか、システムエラー番号を示す戻り値
praudit コマンドでは、exit トークンは次のように表示されます。
exit,Error 0,0 |
次の図に exit トークンの形式を示します。
file トークンは、監査デーモンによって生成される特殊なトークンです。古い監査トレールファイルが終了すると、新しい監査トレールファイルの開始と古いファイルの終了をマークします。監査デーモンは、このトークンを含む特殊な監査レコードを構築して、連続する監査ファイルを 1 つの監査トレールに「リンク」します。次の 4 つのフィールドがあります。
file トークンであることを特定するトークン ID
ファイルが作成または閉じた日時を識別する時刻と日付のスタンプ
NULL 終了文字を含むファイル名のバイト数
NULL で終了するファイル名を保持するフィールド
praudit コマンドでは、file トークンは次のように表示されます。
file,Tue Sep 1 13:32:42 1992, + 79249 msec, /var/audit/localhost/files/19990901202558.19990901203241.quisp |
このトークンは、newgroups トークンに置き換えられています。newgroups トークンは同じ種類の情報を少ない領域で提供します。ここでは完全を期すために groups トークンについて説明しますが、アプリケーション設計者は newgroups トークンを使用してください。ASCII 出力が表示されるときには、どちらのトークン ID にも groups というラベルが付いているため、praudit はこの 2 つのトークンを区別しないことに注意します。
groups トークンは、プロセスの資格からグループのエントリを記録します。次のトークンには 2 つの固定長フィールドがあります。
groups トークンであることを特定するトークン ID
サイズが NGROUPS_MAX (16) のグループエントリの配列
このトークンの残りの部分は 0 個以上のグループエントリからなっています。praudit コマンドでは、group トークンは次のように表示されます。
group,staff,admin,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 |
次の図に groups トークンの形式を示します。
groups トークンは、監査ポリシー group が有効なときにだけ出力されます。
header トークンは、監査レコードの始まりをマークし、trailer トークンとの組み合わせでレコード内の他のすべてのトークンを囲む特殊なトークンです。次の 6 つのフィールドがあります。
header トークンであることを特定するトークン ID
この監査レコード全体の長さのバイト数。ヘッダーとトレーラを含む
この監査レコード構造体のバージョンを特定するバージョン番号
このレコードが表す監査イベントの種類を特定する監査イベント ID
この監査イベントの特殊な特性を特定する ID 修飾子
レコードの作成日時
64 ビットシステムでは、header トークンは、32 ビットタイムスタンプではなく 64 ビットタイムスタンプで表示されます。
praudit では、ioctl() システムコールの header トークンは次のように表示されます。
header,240,1,ioctl(2),es,Tue Sept 1 16:11:44 2001, + 270000 msec |
0x4000 PAD_NOTATTR nonattributable event 0x8000 PAD_FAILURE fail audit event |
in_addr トークンには、4 バイトのインターネットプロトコルアドレスが含まれます。次の 2 つのフィールドがあります。
ip address トークンであることを特定するトークン ID
インターネットアドレス
praudit コマンドでは、in_addr トークンは次のように表示されます。
ip address,129.150.113.7 |
Solaris 9 では、インターネットアドレスは、4 バイトを使用する IPv4 アドレス、または型の記述に 16 バイトとアドレスに 16 バイトを使用する IPv6 アドレスとして表示できます。次の図に in_addr トークンの形式を示します。
ip トークンには、インターネットプロトコルのヘッダーのコピーが含まれていますが、IP オプションは含まれていません。IP オプションは、トークン内の IP ヘッダー数を増やすと追加できます。次の 2 つのフィールドがあります。
ip トークンであることを特定するトークン ID
IP ヘッダーのコピー (全部で 20 バイト)
praudit コマンドでは、ip トークンは次のように表示されます。
ip address,0.0.0.0 |
IP ヘッダー構造は、/usr/include/netinet/ip.h ファイル内で定義されています。次の図に ip トークンの形式を示します。
ipc トークンには、特定のIPC オブジェクトを識別するために呼び出し元に使用される System V IPC メッセージ、セマフォ、または共有メモリーハンドルが含まれています。次の 3 つのフィールドがあります。
IPC トークンであることを特定するトークン ID
IPC オブジェクトの形式を指定する形式フィールド
IPC オブジェクトを識別するハンドル
praudit コマンドでは、ipc トークンは次のように表示されます。
IPC,msg,3 |
IPC オブジェクト識別子は、コンテキストに依存しない Solaris CMW 監査トークンに準拠していません。IPC オブジェクトを一意に識別するグローバルな「名前」はありません。代わりに、IPC オブジェクトの動作中だけ有効なハンドルで識別されます。System V の IPC メカニズムはあまり使用されず、すべてが同じ監査クラスを共有するので、識別は問題にはなりません。
次の表は、IPC オブジェクトの形式フィールドに指定できる値の一覧です。値は /usr/include/bsm/audit.h ファイル内で定義されます。
表 25-8 IPC オブジェクトの形式フィールドの値
名前 |
値 |
説明 |
---|---|---|
AU_IPC_MSG |
1 |
IPC メッセージオブジェクト |
AU_IPC_SEM |
2 |
IPC セマフォオブジェクト |
AU_IPC_SHM |
3 |
IPC 共有メモリーオブジェクト |
ipc_perm トークンには、System V の IPC アクセス情報が含まれています。このトークンは、IPC 共有メモリーイベント、IPC セマフォイベント、および IPC メッセージイベントによって生成される監査レコードに追加されます。次の 8 つのフィールドがあります。
ipc_perm トークンであることを特定するトークン ID
IPC 所有者のユーザー ID
IPC 所有者のグループ ID
IPC 作成者のユーザー ID
IPC 作成者のグループ ID
IPC のアクセスモード
IPC のシーケンス番号
IPC 鍵の値
praudit コマンドでは、ipc_perm トークンは次のように表示されます。
IPC perm,root,wheel,root,wheel,0,0,0x00000000 |
値は、IPC オブジェクトに関連付けられた ipc_perm 構造から取り出されます。次の図に ipc_perm トークンの形式を示します。
iport トークンには、TCP (または UDP) ポートアドレスが含まれています。次の 2 つのフィールドがあります。
iport トークンであることを特定するトークン ID
TCP または UDP ポートのアドレス
praudit コマンドでは、iport トークンは次のように表示されます。
ip port,0xf6d6 |
groups トークンは、このトークンによって置き換えられます。ASCII 出力が表示されるときには、どちらのトークン ID にも groups というラベルが付いているため、praudit はこの 2 つのトークンを区別しないことに注意してください。
newgroups トークンは、プロセスの資格からグループエントリを記録します。次の 2 つの固定長フィールドがあります。
newgroups トークンであることを特定するトークン ID
この監査レコードに含まれるグループ数を表すカウント
このトークンの残りの部分は 0 個以上のグループエントリからなっています。praudit コマンドでは、newgroups トークンは次のように表示されます。
group, staff, admin |
次の図に newgroups トークンの形式を示します。
newgroups トークンは、監査ポリシー group が有効なときにだけ出力されます。
opaque トークンには、フォーマットされていないデータが一連のバイトとして含まれています。次の 3 つのフィールドがあります。
opaque トークンであることを特定するトークン ID
このデータのバイト数
バイトデータ配列
praudit コマンドでは、opaque トークンは次のように表示されます。
opaque,12,0x4f5041515545204441544100 |
path トークンには、オブジェクトのアクセスパス情報が含まれています。次のフィールドがあります。
path トークンであることを特定するトークン ID
パス長のバイト数
システムの実ルートを基点としたオブジェクトへの絶対パス
praudit コマンドでは、path トークンは次のように表示されます。パス長フィールドは、表示されません。
path,/etc/security/audit_user |
process トークンには、信号の受信者など、プロセスに関連するユーザーの情報が含まれています。次の 9 つのフィールドがあります。
process トークンであることを特定するトークン 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 |
監査 ID、ユーザー ID、グループ ID、プロセス ID、セッション ID は、短い形式ではなく長い形式です。
セッション ID、実ユーザー ID、または実グループ ID の processトークンのフィールドを使用できないことがあります。その場合、値は -1 に設定されます。
端末 ID を含むトークンには、いくつかの種類があります。praudit コマンドでは、端末 ID の書式の違いを吸収して、同じ書式で出力されます。端末 ID フィールドを含むすべてのトークンでは、端末 ID フィールドは同じ方式で処理されます。端末 ID は、IP アドレスとポート番号の組み合わせか、デバイス ID です。たとえば、モデムに接続されたシリアルポートの場合は、0 になります。端末 ID には、次の書式があります。
32 ビットアプリケーション: 4 バイトのデバイス番号、4 バイトは未使用
64 ビットアプリケーション: 8 バイトのデバイス番号、4 バイトは未使用
Solaris 7 またはそれ以前のリリースのポート番号の場合は、次のようになります。
32 ビットアプリケーション: 4 バイトのポート番号、4 バイトの IP アドレス
64 ビットアプリケーション: 8 バイトのポート番号、4 バイトの IP アドレス
Solaris 8 または Solaris 9 のポート番号の場合は、次のようになります。
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 アドレス
return トークンには、システムコールの戻り状態 (u_error) とプロセスの戻り値 (u_rval1) が含まれています。次の 3 つのフィールドがあります。
return トークンであることを特定するトークン ID
システムコールのエラー状態
システムコールの戻り値
return トークンは、必ずシステムコールに関してカーネルによって生成される監査レコードの一部として返されます。このトークンは、アプリケーションを監査中の終了状態と他の戻り値を示します。
praudit コマンドにより return トークンは次のように表示されます。
return,success,0 |
seq トークン (シーケンストークン) は、シーケンス番号が含まれるオプションのトークンです。このトークンは、デバッグに使用されます。seq ポリシーが有効な場合は、このトークンが各監査レコードに追加されます。次の 2 つのフィールドがあります。
seq トークンであることを特定するトークン ID
シーケンス番号が含まれる 32 ビットの符号なし長形式フィールド
シーケンス番号は、監査レコードが生成されて監査トレールに組み込まれるたびに 1 ずつ増分します。praudit コマンドでは、seq トークンは次のように表示されます。
sequence,1292 |
seq トークンは、監査ポリシー seq が有効なときだけ出力されます。
socket トークンには、インターネットソケットを記述する情報が含まれています。次の 6 つのフィールドがあります。
socket トークンであることを特定するトークン ID
参照するソケットの型 (TCP、UDP、UNIX) を示すソケット形式フィールド
ローカルポートアドレス
ローカルのインターネットアドレス
リモートポートアドレス
リモートのインターネットアドレス
praudit コマンドでは、socket トークンは次のように表示されます。
socket,0x0000,0x0000,0.0.0.0,0x0000,0.0.0.0 |
Solaris 9 では、インターネットアドレスは、4 バイトを使用する IPv4 アドレス、または型の記述に 16 バイトとアドレスに 16 バイトを使用する IPv6 アドレスとして表示できます。次の図に socket トークンの形式を示します。
subject トークンには、操作を実行するユーザーまたは実行する予定のユーザーを記述します。形式は process トークンと同じです。次の 9 つのフィールドがあります。
subject トークンであることを特定するトークン ID
インバリアント (不変式) 監査 ID
実効ユーザー ID
実効グループ ID
実ユーザー ID
実グループ ID
プロセス ID
監査セッション ID
デバイス ID とマシン ID で構成される端末 ID
subjectトークンは、必ずシステムコールに関してカーネルによって生成される監査レコードの一部として返されます。praudit コマンドでは、subject トークンは次のように表示されます。
subject,cjc,cjc,staff,cjc,staff,424,223,0 0 quisp |
監査 ID、ユーザー ID、グループ ID、プロセス ID、セッション ID は、短い形式ではなく長い形式です。
セッション ID、実ユーザー ID、または実グループ ID の subject トークンのフィールドを使用できないことがあります。その場合、値は -1 に設定されます。
端末 ID を含むトークンには、いくつかの種類があります。praudit コマンドでは、端末 ID の書式の違いを吸収して、同じ書式で出力されます。端末 ID フィールドを含むすべてのトークンでは、端末 ID フィールドは同じ方式で処理されます。端末 ID は、IP アドレスとポート番号の組み合わせか、デバイス ID です。たとえば、モデムに接続されたシリアルポートの場合は、0 になります。端末 ID には、次の書式があります。
32 ビットアプリケーション: 4 バイトのデバイス番号、4 バイトは未使用
64 ビットアプリケーション: 8 バイトのデバイス番号、4 バイトは未使用
Solaris 7 またはそれ以前のリリースのポート番号の場合は次のようになります。
32 ビットアプリケーション: 4 バイトのポート番号、4 バイトの IP アドレス
64 ビットアプリケーション: 8 バイトのポート番号、4 バイトの IP アドレス
Solaris 8 または Solaris 9 リリースのポート番号の場合は次のようになります。
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 アドレス
text トークンにはテキスト文字列が含まれています。次の 3 つのフィールドがあります。
text トークンであることを特定するトークン ID
テキスト文字列の長さ
テキスト文字列
praudit コマンドでは、text トークンは次のように表示されます。
text,aw_test_token |
header と trailer の 2 つのトークンは、監査レコードの終端を区別し、他のすべてのトークンを囲む特殊なトークンです。header トークンは監査レコードを開始します。trailer トークンは監査レコードを終了します。 trailer トークンは、省略可能なトークンで、trail 監査ポリシーが設定されているときにだけ、各レコードの最後のトークンとして追加されます。
また、trailer トークンを使用すると監査トレールを逆方向に検索できます。3 つのフィールドがあります。
trailer トークンであることを特定するトークン ID
レコードの終了を示すパッド番号
header トークンと trailerトークンを含む監査レコードの合計文字数
praudit コマンドでは、trailer トークンは次のように表示されます。
trailer,136 |
監査トレール解析ソフトウェアでは、header および trailer トークンが常に監査レコードに追加されます。ファイルシステムがいっぱいのときなど、書き込みエラーが発生すると、監査レコードが不完全になって切り捨てられることがあります。auditsvc() システムコールは、監査トレールにデータを書き込むときに、監査レコードをすべて書き込もうとします。ファイルシステムの容量が足りなくなると、システムコールは現在の監査レコードを解放せずに終了します。システムコールが再開するときには、切り捨てたレコードを反復できます。詳細は、auditsvc(2) のマニュアルページを参照してください。