7.6. Audit ログファイルについて
デフォルトでは、Audit システムはログエントリーを
/var/log/audit/audit.log
ファイルに保存します。ログローテーションが有効な場合は、ローテーションされた audit.log
ファイルは同じディレクトリーに保存されます。
以下の Audit ルールは、
/etc/ssh/sshd_config
ファイルの読み取りまたは変更の試行をすべてログに記録します。
-w /etc/ssh/sshd_config -p warx -k sshd_config
auditd
デーモンが実行している場合は、たとえば以下のコマンドを使用して、Audit ログファイルに新しいイベントを作成します。
~]$ cat /etc/ssh/sshd_config
このイベントは、
audit.log
ファイルでは以下のようになります。
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config" type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman" type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 objtype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
上記のイベントは 4 つのレコードで設定されており、タイムスタンプとシリアル番号を共有します。レコードは、常に
type=
キーワードで始まります。各レコードは、空白またはコンマで区切られた複数の name=value
ペアで設定されます。上記のイベントの詳細な分析は以下のようになります。
1 つ目のレコード
type=SYSCALL
type
フィールドには、レコードのタイプが含まれます。この例では、SYSCALL
値は、このレコードがカーネルへのシステムコールによってトリガーされることを指定しています。利用可能なすべてのタイプ値のリストとその説明については、Audit Record Types を参照してください。msg=audit(1364481363.243:24287):
msg
フィールドは以下を記録します。audit (time_stamp: ID)形式のレコードのタイムスタンプと一意のID
。複数のレコードが同じ Audit イベントの一部として生成されている場合は、同じタイムスタンプおよび ID を共有できます。タイムスタンプは Unix の時間形式です (1970 年 1 月 1 日 00:00:00 UTC からの秒数)。- カーネルまたはユーザー空間のアプリケーションが提供するさまざまなイベント固有の
name=value
ペア。
arch=c000003e
arch
フィールドには、システムの CPU アーキテクチャーに関する情報が含まれます。c000003e
の値は 16 進数表記でエンコードされます。ausearch コマンドで Audit レコードを検索する場合は、-i
オプションまたは--interpret
オプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。c000003e
値はx86_64
として解釈されます。syscall=2
syscall
フィールドは、カーネルに送信されたシステムコールのタイプを記録します。値2
は、/usr/include/asm/unistd_64.h
ファイルで人間が判読できる値と一致します。この場合、2
はオープン
システムコールです。ausyscall ユーティリティーを使用すると、システムコール番号を、人間が判読できるものに変換できます。ausyscall --dump コマンドを使用して、すべてのシステムコールの一覧とその数字を表示します。詳細は、ausyscall(8) の man ページを参照してください。success=no
success
フィールドは、その特定のイベントで記録されたシステムコールが成功したか失敗したかを記録します。この例では、呼び出しが成功しませんでした。exit=-13
exit
フィールドには、システムコールによって返される終了コードを指定する値が含まれます。この値は、システムコールにより異なります。次のコマンドを実行すると、この値を人間が判読可能なものに変換できます。~]# ausearch --interpret --exit -13
上記の例では、監査ログに終了コード-13
で失敗したイベントが含まれていることを前提としています。a0=7fffd19c5592
,a1=0
,a2=7fffd19c5592
,a3=a
a0
toa3
フィールドは、このイベントにおけるシステムコールの最初の 4 つの引数を 16 進数表記で記録します。これらの引数は、使用されるシステムコールによって異なります。ausearch ユーティリティーで解釈できます。items=1
items
フィールドには、syscall レコードに続く PATH 補助レコードの数が含まれます。ppid=2686
ppid
フィールドは、親プロセス ID (PPID)を記録します。この場合、2686
はbash
などの親プロセスの PPID です。pid=3538
pid
フィールドは、プロセス ID (PID)を記録します。この場合、3538
はcat
プロセスの PID です。auid=1000
auid
フィールドは、loginuid である Audit ユーザー ID を記録します。この ID は、ログイン時にユーザーに割り当てられ、ユーザーの ID が変更された場合でもすべてのプロセスに継承されます(例: su - john コマンドでユーザーアカウントの切り替え)。uid=1000
uid
フィールドは、解析しているプロセスを開始したユーザーのユーザー ID を記録します。ユーザー ID は、ausearch -i --uid UID のコマンドを使用してユーザー名に解釈できます。gid=1000
gid
フィールドは、解析しているプロセスを開始したユーザーのグループ ID を記録します。euid=1000
euid
フィールドは、解析しているプロセスを開始したユーザーの実効ユーザー ID を記録します。suid=1000
suid
フィールドは、解析しているプロセスを開始したユーザーの設定ユーザー ID を記録します。fsuid=1000
fsuid
フィールドは、解析しているプロセスを開始したユーザーのファイルシステムユーザー ID を記録します。egid=1000
egid
フィールドは、解析しているプロセスを開始したユーザーの実効グループ ID を記録します。sgid=1000
sgid
フィールドは、解析しているプロセスを開始したユーザーのセットグループ ID を記録します。fsgid=1000
fsgid
フィールドは、解析しているプロセスを開始したユーザーのファイルシステムグループ ID を記録します。tty=pts0
tty
フィールドは、解析しているプロセスが呼び出された端末を記録します。ses=1
ses
フィールドは、解析しているプロセスが呼び出されたセッションのセッション ID を記録します。comm="cat"
comm
フィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドライン名を記録します。この場合、この Audit イベントをトリガーするために cat コマンドを使用します。exe="/bin/cat"
exe
フィールドは、解析しているプロセスを呼び出すために使用された実行可能ファイルへのパスを記録します。subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
subj
フィールドは、解析しているプロセスが実行時にラベル付けされた SELinux コンテキストを記録します。key="sshd_config"
key
フィールドは、Audit ログでこのイベントを生成したルールに関連付けられた管理者定義の文字列を記録します。
2 つ目のレコード
type=CWD
- 2 つ目のレコードでは、
type
フィールドの値はCWD
- 現在の作業ディレクトリーです。このタイプは、最初のレコードで指定されたシステムコールを開始したプロセスの作業ディレクトリーを記録するために使用されます。この記録の目的は、相対パスが関連する PATH 記録に保存された場合に、現行プロセスの位置を記録することにあります。これにより、絶対パスを再構築できます。 msg=audit(1364481363.243:24287)
msg
フィールドは、最初のレコードと同じタイムスタンプと ID 値を保持します。タイムスタンプは Unix の時間形式です (1970 年 1 月 1 日 00:00:00 UTC からの秒数)。cwd="/home/user_name"
cwd
フィールドには、システムコールが呼び出されたディレクトリーへのパスが含まれます。
3 つ目のレコード
type=PATH
- 3 つ目のレコードでは、
type
フィールドの値はPATH
です。Audit イベントには、システムコールに引数として渡されるすべてのパスのPATH
-type レコードが含まれます。この Audit イベントでは、1 つのパス(/etc/ssh/sshd_config
)を引数として使用されました。 msg=audit(1364481363.243:24287):
msg
フィールドは、1 番目と 2 番目のレコードと同じタイムスタンプと ID 値を保持します。item=0
item
フィールドは、SYSCALL
タイプレコードで参照されているアイテムの合計数のうち、現在のレコードがどのアイテムであるかを示します。この数はゼロベースで、値0
は最初の項目であることを示します。name="/etc/ssh/sshd_config"
name
フィールドは、システムコールに引数として渡されたファイルまたはディレクトリーのパスを記録します。ここでは、/etc/ssh/sshd_config
ファイルです。inode=409248
inode
フィールドには、このイベントで記録されたファイルまたはディレクトリーに関連付けられた inode 番号が含まれます。以下のコマンドは、inode 番号409248
に関連するファイルまたはディレクトリーを表示します。~]# find / -inum 409248 -print /etc/ssh/sshd_config
dev=fd:00
dev
フィールドは、このイベントで記録されたファイルまたはディレクトリーを含むデバイスのマイナーおよびメジャー ID を指定します。この場合、値は/dev/fd/0
デバイスを表します。mode=0100600
mode
フィールドは、ファイルまたはディレクトリーのパーミッションを記録します。これは、st_mode
フィールドの stat コマンドで返される数値表記でエンコードされます。詳細は、stat (2)
の man ページを参照してください。この場合、0100600
は-rw-------
として解釈できます。つまり、root ユーザーのみが/etc/ssh/sshd_config
ファイルへの読み取りおよび書き込みパーミッションを持ちます。ouid=0
ouid
フィールドは、オブジェクトの所有者のユーザー ID を記録します。ogid=0
ogid
フィールドは、オブジェクトの所有者のグループ ID を記録します。rdev=00:00
rdev
フィールドには、特別なファイルに対してのみ記録されたデバイス識別子が含まれます。ここでは、記録されたファイルは通常のファイルであるため、このフィールドは使用されません。obj=system_u:object_r:etc_t:s0
obj
フィールドは、実行時に記録されたファイルまたはディレクトリーにラベル付けされた SELinux コンテキストを記録します。objtype=NORMAL
objtype
フィールドは、指定したシステムコールのコンテキストで各パスレコード操作の意図を記録します。cap_fp=none
cap_fp
フィールドは、ファイルまたはディレクトリーオブジェクトで許可されたファイルシステムベースの機能の設定に関連するデータを記録します。cap_fi=none
cap_fi
フィールドは、ファイルまたはディレクトリーオブジェクトの継承されたファイルシステムベースの機能の設定に関連するデータを記録します。cap_fe=0
cap_fe
フィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能の有効ビットの設定を記録します。cap_fver=0
cap_fver
フィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能のバージョンを記録します。
4 つ目のレコード
type=PROCTITLE
type
フィールドには、レコードのタイプが含まれます。この例では、PROCTITLE
値は、このレコードがカーネルへのシステムコールによってトリガーされたこの Audit イベントをトリガーした完全なコマンドラインを提供することを指定しています。proctitle=636174002F6574632F7373682F737368645F636F6E666967
proctitle
フィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドラインを記録します。このフィールドは 16 進数の表記で記録され、Audit ログパーサーに影響が及ばないようにします。このテキストは、この Audit イベントを開始したコマンドに復号します。ausearch コマンドで Audit レコードを検索する場合は、-i
オプションまたは--interpret
オプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。636174002F6574632F7373682F737368645F636F6E666967
値はcat /etc/ssh/sshd_config
として解釈されます。
上記で分析した Audit イベントには、イベントに含めることができるすべての可能なフィールドのサブセットのみが含まれています。すべてのイベントフィールドのリストとその説明については、Audit Event Fields を参照してください。すべてのイベントタイプのリストとその説明については、Audit Record Types を参照してください。
例7.6 追加の audit.log
イベント
以下の Audit イベントは、
auditd
デーモンが正常に起動したことを記録します。ver
フィールドは、起動した Audit デーモンのバージョンを示します。
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=1000 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
以下の Audit イベントは、UID が 1000 のユーザーが root ユーザーとしてログインしようとして失敗したことを記録します。
type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=1000 auid=1000 ses=1 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="root" exe="/bin/su" hostname=? addr=? terminal=pts/0 res=failed'