Show Table of Contents
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=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 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
上記のイベントは、3 つの記録 (それぞれ
type=
キーワードで開始) で構成されており、これらは同じタイムスタンプとシリアル番号を共有しています。各記録は、いくつかの name=value
のペアで構成されており、これらは空白またはコンマ区切りとなっています。以下で上記のイベントを詳しく分析します。
最初の記録
type=SYSCALL
type
フィールドには、記録のタイプが記載されます。この例では、この記録がカーネルへのシステムコールで開始されたことをSYSCALL
の値が示しています。タイプの値およびそれらの説明に関する全一覧は、「Audit 記録のタイプ」 を参照してください。msg=audit(1364481363.243:24287):
msg
フィールドでは以下を記録しています。audit(time_stamp:ID)
の形式で、記録のタイムスタンプと一意の ID。複数の記録は、それらが同一の Audit イベントの一部として生成されている場合は、同じタイムスタンプと ID を共有できます。- 各種のイベント固有の
name=value
ペア。これは、カーネルもしくはユーザースペースアプリケーションが提供します。
arch=c000003e
arch
フィールドには、システムの CPU アーキテクチャーについての情報が含まれます。c000003e
という値は、十六進法でエンコードされています。ausearch
コマンドで Audit 記録を検索する際は、-i
または--interpret
オプションを使うと自動的に十六進法の値がヒューマンリーダブルなものに変換されます。c000003e
の値は、x86_64
として解釈されます。syscall=2
syscall
フィールドは、カーネルに送信されたシステムコールのタイプを記録します。2
という値は、/usr/include/asm/unistd_64.h
ファイル内の ヒューマンリーダブルに相当するものにマッチします。このケースでは、2
はopen
システムコールになります。ausyscall ユーティリティーを使うと、システムコール番号をヒューマンリーダブルなものに変換できることに注意してください。ausyscall --dump
コマンドを実行すると、システムコールすべてとそれらの番号一覧が表示されます。詳細情報は、ausyscall(8) man ページを参照してください。success=no
success
フィールドは、その特定のイベントで記録されたシステムコールが成功したかどうかを記録します。このケースでは、コールは成功しませんでした。exit=-13
exit
フィールドには、システムコールが返した終了コードを指定する値が含まれています。この値は、システムコールによって異なります。以下のコマンドを使うと、この値をヒューマンリーダブルなものに変換できます。ausearch --interpret --exit -13
(Audit ログに終了コード-13
で失敗したイベントが含まれていることが前提)。a0=7fffd19c5592
,a1=0
,a2=7fffd19c5592
,a3=a
a0
からa3
までのフィールドは、このイベントにおけるシステムコールの最初の 4 つの引数を十六進法で記録します。これらの引数は、使用されているシステムコールによって異なります。ausearch ユーティリティーでこれらを変換できます。items=1
items
フィールドには、イベントのパス記録の数が含まれています。ppid=2686
ppid
フィールドは、親プロセス ID (PPID) を記録します。このケースでは、2686
はbash
プロセスの PPID でした。pid=3538
pid
フィールドは、プロセス ID (PID) を記録します。このケースでは、3538
は、cat
プロセスの PID でした。auid=500
auid
は、loginuid である Audit ユーザー ID を記録します。この ID は、ログイン時にユーザーに割り当てられ、ユーザーの ID が変更された後でもすべてのプロセスに引き継がれます (たとえば、su - john
コマンドでユーザーアカウントを切り替えた場合)。uid=500
uid
フィールドは、分析されているプロセスを開始したユーザーのユーザー ID を記録します。ユーザー ID は、以下のコマンドでユーザー名に変換できます。ausearch -i --uid UID
。このケースでは、500
はshadowman
のユーザー ID です。gid=500
gid
フィールドは、分析されているプロセスを開始したユーザーのグループ ID を記録します。euid=500
euid
フィールドは、分析されているプロセスを開始したユーザーの実効ユーザー ID を記録します。suid=500
suid
フィールドは、分析されているプロセスを開始したユーザーのセットユーザー ID を記録します。fsuid=500
fsuid
フィールドは、分析されているプロセスを開始したユーザーのファイルシステムユーザー ID を記録します。egid=500
egid
フィールドは、分析されているプロセスを開始したユーザーの実効グループ ID を記録します。sgid=500
sgid
フィールドは、分析されているプロセスを開始したユーザーのセットグループ ID を記録します。fsgid=500
fsgid
フィールドは、分析されているプロセスを開始したユーザーのファイルシステムグループ ID を記録します。tty=pts0
tty
フィールドは、分析されているプロセスが開始されたターミナルを記録します。ses=1
ses
フィールドは、分析されているプロセスが開始されたセッションのセッション ID を記録します。comm="cat"
comm
フィールドは、分析されているプロセスを開始するために使用されたコマンドのコマンドライン名を記録します。このケースでは、cat
コマンドを使ってこの Audit イベントが開始されました。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 の値になります。cwd="/home/shadowman"
cwd
フィールドは、システムコールが開始されたディレクトリーへのパスになります。
3 番目の記録
type=PATH
- 3 番目の記録では、
type
フィールドの値はPATH
になります。Audit イベントには、システムコールに引数として渡されたすべてのパスにPATH
タイプの記録が含まれます。この Audit イベントでは、1 つのパス (/etc/ssh/sshd_config
) のみが引数として使われています。 msg=audit(1364481363.243:24287):
msg
フィールドは、最初と 2 番目の記録と同じタイムスタンプと ID の値になります。item=0
item
フィールドは、SYSCALL
タイプの記録で参照されたアイテム総数のうち、どのアイテムが現行の記録かを示します。この数字はゼロベースで、0
は最初のアイテムであることを示します。name="/etc/ssh/sshd_config"
name
フィールドは、システムコールに引数として渡されたファイルまたはディレクトリーへの完全パスを記録します。このケースでは、/etc/ssh/sshd_config
ファイルとなります。inode=409248
inode
フィールドには、このイベントで記録されたファイルまたはディレクトリーに関連する inode 番号が含まれます。以下のコマンドを実行すると、409248
inode 番目に関連するファイルまたはディレクトリーが表示されます。~]#
find / -inum 409248 -print
/etc/ssh/sshd_configdev=fd:00
dev
フィールドは、このイベントで記録されたファイルまたはディレクトリーを含むデバイスのマイナーおよびメジャー ID を示します。このケースでは、値は/dev/fd/0
デバイスを示しています。mode=0100600
mode
フィールドは、ファイルまたはディレクトリーパーミッションを数字表記でエンコードされた形で記録します。このケースでは、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 コンテキストを記録します。
上記で分析された Audit イベントには、イベントに含まれる可能性のあるフィールドのサブセットのみが含まれています。イベントフィールドおよびそれらの説明の全一覧は、「Audit イベントフィールド」 を参照してください。イベントのタイプおよびそれらの説明の全一覧は、「Audit 記録のタイプ」 を参照してください。
例7.5 追加の 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=500 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
以下の Audit イベントでは、UID が 500 のユーザーが root ユーザーとしてログインを試み、失敗したことを記録しています。
type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=500 auid=500 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'