SunSHIELD 基本セキュリティモジュール

監査トークンの構造

論理上、各トークンにはトークンタイプ識別子とそれに続くトークン固有のデータが付いています。各トークンタイプには固有の形式と構造があります。表 A-1 は現在のトークンを示しています。トークンのスキーマは拡張できます。

表 A-1 基本セキュリティモジュールの監査トークン

トークン名 

記述 

acl

アクセス制御リスト情報 

arbitrary

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

arg

システムコールの引数値 

attr

V ノードトークン 

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

ソケットのタイプとアドレス 

socket-inet

ソケットのポートとアドレス 

subject

サブジェクトトークン情報 (process トークンと同じ構造)

text

ASCII 文字列 

trailer

レコードの終わりを示す 

監査レコードには、必ず header トークンが入っています。header トークンは、監査トレール内で監査レコードの始まりを示します。ユーザの動作に帰因しないイベントからの監査レコードを除き、どの監査レコードにも subject トークンが入っています。ユーザに帰因するイベントの場合、この 2 つのトークンはイベントを引き起こしたプロセスの値を参照します。非同期イベントの場合、process トークンはシステムを参照します。

acl トークン

acl トークンは ACL に関する情報を記録するもので、 4 つの固定長フィールドから成ります。このトークンが acl であることを示すトークン ID フィールド、ACL のタイプを表わすフィールド、ACL ID フィールド、およびこの ACL に関連したアクセス権を表わすフィールドです。形式は次のとおりです。

図 A-2 acl トークンの形式

Graphic

arbitrary トークン

arbitrary トークンは、監査トレール用にデータをカプセル化します。このトークンは 4 つの固定長フィールドと 1 つのデータ配列からなっています。固定長フィールドは、このトークンを arbitrary トークンとして識別するトークン ID、推奨形式フィールド (16 進など)、カプセル化されるデータのサイズを指定するサイズフィールド (短い形式など)、後続の項目数を示すカウントフィールドの 4 つです。トークンの残りの部分は、指定された型の 1 つまたは複数の項目からなっています。arbitrary トークンは次のようになっています。

図 A-3 arbitrary トークンの形式

Graphic

出力形式フィールドには、表 A-2 のような値を入れることができます。

表 A-2 arbitrary トークンの出力形式フィールドの値

値 

動作 

AUP_BINARY

日付が 2 進形式で出力される 

AUP_OCTAL

日付が 8 進形式で出力される 

AUP_DECIMAL

日付が 10 進形式で出力される 

AUP_HEX

日付が 16 進形式で出力される 

AUP_STRING

日付が 10 進形式で出力される 

項目サイズフィールドには、表 A-3 のような値を入れることができます。

表 A-3 arbitrary トークンの項目サイズフィールドの値

値 

動作 

AUR_BYTE

データはバイト数単位 (1 バイト) 

AUR_SHORT

データは短い形式の単位 (2 バイト) 

AUR_LONG

データは長い形式の単位 (4 バイト) 

arg トークン

arg トークンには、システムコールの引数の数、引数の値、省略可能な記述テキスト文字列など、システムコールの引数情報が入っています。このトークンを使用すると、監査レコード内で 32 ビット整数のシステムコール引数を指定できます。arg トークンには 5 つのフィールドがあります。このトークンを arg トークンとして識別するトークン ID、システムコールにトークンの参照先となる引数を指示する引数 ID、引数の値、記述テキスト文字列の長さ、テキスト文字列の 5 つです。図 A-4 はトークンの形式を示しています。

図 A-4 arg トークンの形式

Graphic

attr トークン

attr トークンには、ファイル v ノードからの情報が入っています。このトークンには 7 つのフィールドがあります。このトークンを attr トークンとして識別するトークン ID、ファイルのアクセスモードとタイプ、所有者ユーザ ID、所有者グループ ID、ファイルシステム ID、i ノード ID、ファイルが表すデバイス ID の 7 つです。ファイルシステム ID とデバイス ID について詳しくは、statvfs(2) のマニュアルページを参照してください。一般に、このトークンには path トークンが付いており、パスの検索中に生成されます。パス検索エラーが発生すると、必要なファイル情報を取得するために利用できる v ノードがないので、このトークンは監査レコードの一部として組み込まれません。図 A-5 は、attr トークンの形式を示しています。

図 A-5 attr トークンの形式

Graphic

exec_args トークン

exec_args トークンは、exec システムコールへの引数を記録します。exec_args レコードには、2 つの固定長フィールドがあります。一方は、これを exec_args トークンとして識別するトークン ID フィールドです。他方は、exec コールに渡される引数の数を表すカウントフィールドです。トークンの残りの部分は、0 個以上の NULL で終わる文字列からなっています。図 A-6 は、exec_args トークンを示します。

図 A-6 exec_args トークンの形式

Graphic


注 -

exec_args トークンは、監査方針 argv が有効なときにのみ出力されます。詳しくは、「監査方針の設定」を参照してください。


exec_env トークン

exec_env トークンは、exec システムコールの現在の環境変数を記録します。exec_env レコードには 2 つの固定長フィールドがあります。一方は、これを exec_env トークンとして識別するトークン ID です。他方は、exec コールに渡される引数の数を表すカウントフィールドです。トークンの残りの部分は、0 個以上の NULL で終わる文字列からなっています。図 A-7 は、exec_env トークンを示しています。

図 A-7 exec_env トークンの形式

Graphic


注 -

exec_env トークンは、監査方針 arge が有効なときにのみ出力されます。詳しくは、「監査方針の設定」を参照してください。


exit トークン

exit トークンは、プログラムの終了状態を記録します。exit トークンには、プログラムの終了状態と戻り値が入っています。状態フィールドは exit システムコールに渡されるものと同じです。戻り値フィールドは、システムのエラー番号、または終了状態を詳細に記述する戻り値を示します。図 A-8 は、exit トークンを示しています。

図 A-8 exit トークンの形式

Graphic

file トークン

file トークンは、新しい監査トレールファイルの始まりと無効になる古いファイルの終りをマークするために、監査デーモンによって生成される特殊なトークンです。監査デーモンは、このトークンが入った特殊な監査レコードを構築して、連続する監査ファイルを 1 つの監査トレールに「リンク」します。file トークンには 4 つのフィールドがあります。第 1 はこれを file トークンとして識別するトークン ID、第 2 はファイルが作成されるかクローズされた時刻を示す日時のスタンプ、第 3 は NULL で終わる文字列を含むファイル名のバイト数、第 4 は NULL で終わる名前が入ったフィールドです。 図 A-9file トークンを示しています。

図 A-9 file トークンの形式

Graphic

groups トークン (使用しません)

このトークンは、newgroups トークンに置き換えられています。newgroups トークンは同じタイプの情報をわずかな領域で提供します。ここでは完全を期すために groups トークンについて説明しますが、アプリケーション設計者は newgroups トークンを使用する必要があります。ASCII 形式の出力が表示されるときには、どちらのトークン ID にも groups というラベルが付いているため、praudit はこの 2 つのトークンを区別しないので注意してください。

groups トークンは、プロセスの資格からグループのエントリを記録します。groups トークンには 2 つの固定長フィールドがあります。一方は、これを groups トークンとして識別するトークン ID で、他方はこの監査レコードに入っているグループの数を表すカウントです。図 A-10groups トークンを示しています。

図 A-10 groups トークンの形式

Graphic


注 -

groups トークンは、監査方針 group が有効なときにのみ出力されます。詳しくは、auditconfig コマンド」を参照してください。


header トークン

header トークンは、監査レコードの始まりをマークし、trailer トークンとの組合せでレコード内の他のすべてのトークンを囲むという点で特殊です。header トークンには 6 つのフィールドがあります。これを header トークンとして識別するトークン IDフィールド、ヘッダとトレーラを含めた監査レコードの長さ合計を示すバイト数、監査レコード構造のバージョンを識別するバージョン番号、レコードが表す監査イベントのタイプを識別する監査イベント ID、イベントのタイプに関する補助記述情報が入ったイベント ID 修飾子、レコードの作成日時の 6 つです。図 A-11header トークンを示しています。

図 A-11 header トークンの形式

Graphic

イベント修飾子フィールドでは、次のフラグが定義されています。

0x4000			PAD_NOTATTR						nonattributable event
0x8000			PAD_FAILURE						fail audit event

in_addr トークン

in_addr トークンには、インターネットアドレスが入っています。この 4 バイト値はインターネットプロトコルアドレスです。このトークンには 2 つのフィールドがあります。一方はこのトークンを in_addr トークンとして識別するトークン ID で、他方はインターネットアドレスです。図 A-12in_addr トークンを示しています。

図 A-12 in_addr トークンの形式

Graphic

ip トークン

ip トークンには、インターネットプロトコルのヘッダのコピーが入っていますが、IP オプションは含まれていません。IP オプションは、トークン内の IP ヘッダ数を増やせば追加できます。このトークンには 2 つのフィールドがあります。一方はこれを ip トークンとして識別するトークン ID で、他方は IP ヘッダ (すべて 20 バイト) のコピーです。IP ヘッダ構造は、/usr/include/netinet/ip.h 内で定義されています。図 A-13ip トークンを示しています。

図 A-13 ip トークンの形式

Graphic

ipc トークン

ipc トークンには、呼び出し元で特定の IPC オブジェクトを識別するための System V IPC メッセージ/セマフォ/共有メモリハンドルが入っています。このトークンには 3 つのフィールドがあります。第 1 はこれを ipc トークンとして識別するトークン ID、第 2 は IPC オブジェクトのタイプを指定するタイプフィールド、第 3 は IPC オブジェクトを識別するハンドルです。図 A-14ipc トークンを示しています。

図 A-14 ipc トークンの形式

Graphic


注 -

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


IPC オブジェクトタイプフィールドには、表 A-4 のような値が入っています。値は /usr/include/bsm/audit.h 内で定義されます。

表 A-4 IPC オブジェクトタイプフィールド

名前 

値 

記述 

AU_IPC_MSG

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

AU_IPC_SEM

IPC セマフォオブジェクト 

AU_IPC_SHM

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

ipc_perm トークン

ipc_perm トークンには、System V の IPC アクセス情報が入っています。このトークンは、共有メモリ、セマフォ、メッセージの IPC イベントによって生成された監査レコードに追加されます。このトークンには 8 つのフィールドがあります。具体的には、このトークンを ipc_perm トークンとして識別するトークン ID、IPC 所有者のユーザ ID、IPC 所有者のグループ ID、IPC 作成者のユーザ ID、IPC 作成者のグループ ID、IPC のアクセスモード、IPC のシーケンス番号、IPC キー値の 8 つです。値は、IPC オブジェクトに関連付けられた ipc_perm 構造から取り出されます。図 A-15ipc_perm トークンの形式を示しています。

図 A-15 ipc_perm トークンの形式

Graphic

iport トークン

iport トークンには、TCP (または UDP) ポートアドレスが入っています。このトークンには 2 つのフィールドがあります。一方はこれを iport トークンとして識別するトークン ID で、他方は TCP/UDP ポートアドレスです。図 A-16iport トークンを示しています。

図 A-16 iport トークンの形式

Graphic

newgroups トークン

このトークンは、groups トークンに代わるものです。ASCII 出力が表示されるときには、どちらのトークン ID にも groups というラベルが付いているため、praudit はこの 2 つのトークンを区別しないので注意してください。

newgroups トークンは、プロセスの資格からグループエントリを記録します。newgroups トークンには 2 つの固定長フィールドがあります。一方はこれを newgroups トークンとして識別するトークン ID で、他方はこの監査レコードに入っているグループの数を表すカウントです。このトークンの残りの部分は 0 個以上のグループエントリからなっています。図 A-17newgroups トークンを示しています。

図 A-17 newgroups トークンの形式

Graphic


注 -

newgroups トークンは、監査方針 group が有効なときにのみ出力されます。詳しくは、auditconfig コマンド」を参照してください。


opaque トークン

opaque トークンには、フォーマットされていないデータが一連のバイトとして入っています。このトークンには 3 つのフィールドがあります。これを opaque トークンとして識別するトークン ID、データ量を表すバイト数、バイトデータの配列の 3 つです。図 A-18 は、opaque トークンを示しています。

図 A-18 opaque トークンの形式

Graphic

path トークン

path トークンには、オブジェクトのアクセスパス情報が入っています。このトークンには、トークン ID の他にシステムの実ルートに基づくオブジェクトへの絶対パスが入っています。パスは、パス長を示すバイト数とパスからなっています。図 A-19path トークンを示しています。

図 A-19 path トークンの形式

Graphic

process トークン

process トークンには、信号の受信側など、プロセスをオブジェクトとして記述する情報が入っています。このトークンには 9 つのフィールドがあります。このトークンを process トークンとして識別するトークン ID、不変の (invariant) 監査 ID、実効ユーザ ID、実効グループ ID、実ユーザ ID、実グループ ID、プロセス ID、監査セッション ID、端末 ID の 9 つです。図 A-20process トークンを示しています。

図 A-20 process トークンの形式

Graphic

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


注 -

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


return トークン

return トークンには、システムコールの戻り状態 (u_error) とプロセスの戻り値 (u_rval1) が入っています。このトークンには 3 つのフィールドがあります。第 1 はこのトークンを return トークンとして識別するトークン ID、第 2 はシステムコールのエラー状態、第 3 はシステムコールの戻り値です。このトークンは、必ずシステムコールに関してカーネルによって生成される監査レコードの一部として返されます。このトークンは、アプリケーションを監査中の終了状態と他の戻り値を示します。図 A-21return トークンを示しています。

図 A-21 return トークンの形式

Graphic

seq トークン

seq トークン (シーケンストークン) は、昇順のシーケンス番号が入った省略可能なトークンです。このトークンはデバッグ用です。AUDIT_SEQ 方針が有効になっているときは、各監査レコードにこのトークンが追加されます。seq トークンには 2 つのフィールドがあります。一方はこのトークンを seq トークンとして識別するトークン ID で、他方はシーケンス番号が入った 32 ビットの無符号長形式フィールドです。シーケンス番号は、監査レコードが生成されて監査レコードに組み込まれるたびに 1 ずつ増やされます。図 A-22 は、seq トークンを示しています。

図 A-22 seq トークンの形式

Graphic

socket トークン

socket トークンには、インターネットソケットを記述する情報が入っています。socket トークンには 6 つのフィールドがあります。つまり、このトークンを socket トークンとして識別するトークン ID、参照されるソケットのタイプ (TCP/UDP/UNIX) を示すソケットタイプフィールド、ローカルポートアドレス、ローカルインターネットアドレス、リモートポートアドレス、リモートインターネットアドレスです。図 A-23 は、socket トークンを示しています。

図 A-23 socket トークンの形式

Graphic

socket-inet トークン

socket-inet トークンは、ローカルポートへのソケット接続を記述します。これは、インターネットの名前空間内でソケット情報を表すために使用されます。socket-inet トークンには 4 つのフィールドがあります。つまり、このトークンを socket-inet トークンとして識別するトークン ID、インターネットファミリー (AF_INETAF_OSI など) を示すソケットファミリーフィールド、ローカルポートのアドレス、ソケットのアドレスです。図 A-24socket-inet トークンを示しています。

図 A-24 socket-inet トークンの形式

Graphic

subject トークン

subject トークンは、サブジェクト (プロセス) を記述します。構造は process トークンと同じです。このトークンには 9 つのフィールドがあります。つまり、これを subject トークンとして識別する ID、不変の監査 ID、実効ユーザ ID、実効グループ ID、実ユーザ ID、実グループ ID、プロセス ID、監査セッション ID、端末 ID です。このトークンは、必ずシステムコールに関してカーネルによって生成される監査レコードの一部として返されます。図 A-25subject トークンを示しています。

図 A-25 subject トークンの形式

Graphic

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


注 -

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


text トークン

text トークンにはテキスト文字列が入っています。このトークンには 3 つのフィールドがあります。つまり、このトークンを text トークンとして識別するトークン ID、テキスト文字列の長さ、テキスト文字列そのものです。図 A-26text トークンを示しています。

図 A-26 text トークンの形式

Graphic

trailer トークン

headertrailer という 2 つのトークンは、監査レコードの終端を区別し、他のすべてのトークンを囲むという点で特殊です。trailer トークンは監査レコードを終了させます。これは省略可能なトークンであり、AUDIT_TRAIL 監査方針が設定されているときにのみ、各レコードの最後のトークンとして追加されます。

trailer トークンは、監査レコードの終端をマークするという点で特殊です。 trailer トークンは header トークンとの組合せによって監査レコードを区切ります。また、trailer トークンを使用すると監査トレールを逆方向に検索できます。trailer トークンには、3 つのフィールドがあります。つまり、このトークンを trailer トークンとして識別するトークン ID、レコードの終わりをマークしやすくするパッド番号、header トークンと trailer トークンを含めた監査レコード内の合計文字数です。図 A-27trailer トークンを示しています。

図 A-27 trailer トークンの形式

Graphic

監査トレール分析ソフトウェアによって、各レコードに headertrailer の両方が入ることが保証されます。ファイルシステムがいっぱいのときなど、書き込みエラーが発生すると、監査レコードが不完全になって切り捨てられることがあります。auditsvc は監査トレールへのデータ書き込みを受け持つシステムコールであり、完全な監査レコードを取り出そうとします。auditsvc(2) のマニュアルページを参照してください。ファイルシステムの領域が足りなくなると、コールは現在の監査レコードを解放せずに終了します。コールが再開するときには、切り捨てたレコードを反復できます。