Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.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 ペアから成り、各ペアは空白またはコンマで区切られています。以下で、上記のイベントを詳しく解析します。

最初の記録

type=SYSCALL
type フィールドには、記録のタイプが記載されます。この例では、この記録がカーネルへのシステムコールで開始されたことを SYSCALL の値が示しています。
タイプの値およびそれらの説明に関する一覧は、「Audit 記録のタイプ」 を参照してください。
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 という値は、十六進法でエンコードされています。ausearch コマンドで Audit 記録を検索する際は、-i または --interpret オプションを使うと自動的に十六進法の値がヒューマンリーダブルなものに変換されます。c000003e の値は、x86_64 として解釈されます。
syscall=2
syscall フィールドは、カーネルに送信されたシステムコールのタイプを記録します。2 という値は、/usr/include/asm/unistd_64.h ファイルにある、人間が可読可能なものに相当するものに一致します。このケースでは、2オープンな システムコールになります。ausyscall ユーティリティーを使用すると、システムコール番号を人間が可読可能なものに変換できることに注意してください。ausyscall --dump コマンドを実行すると、すべてのシステムコールとその番号一覧が表示されます。詳細情報は、man ページの ausyscall(8) を参照してください。
success=no
success フィールドは、その特定のイベントで記録されたシステムコールが成功したかどうかを記録します。このケースでは、コールは成功しませんでした。
exit=-13
exit フィールドには、システムコールが返した終了コードを指定する値が含まれています。この値は、システムコールによって異なります。以下のコマンドを使用すると、この値を人間が可読可能なものに変換できます。
~]# ausearch --interpret --exit -13
この例では、監査ログは、終了コード -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=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 フィールドは、分析されているプロセスを開始するために使用されたコマンドのコマンドライン名を記録します。このケースでは、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 の値を保持します。タイムスタンプは、Unix 時間フォーマット (1970 年 1 月 1 日 00:00:00 UTC からの秒数) を使用しています。
cwd="/home/user_name"
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_config
dev=fd:00
dev フィールドは、このイベントで記録されたファイルまたはディレクトリーを含むデバイスのマイナーおよびメジャー ID を示します。このケースでは、値は /dev/fd/0 デバイスを示しています。
mode=0100600
mode フィールドは、ファイルまたはディレクトリーのパーミッションを、st_mode フィールドの stat コマンドが返す数字表記でエンコードされた形で記録します。詳細は、man ページの stat(2) を参照してください。このケースでは、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 進数で符号化されます。このテキストは、この監査イベントを発生させるコマンドにデコードします。ausearch コマンドで監査レコードを検索する場合は、-i オプションまたは --interpret オプションを使用して、16 進数の値を人間が解読できる値に自動的に変換します。636174002F6574632F7373682F737368645F636F6E666967 値は x86_64 として解釈されます。
上記で解析した Audit イベントには、イベントに含まれる可能性のあるフィールドのサブセットのみが含まれています。イベントフィールドおよびそれらの説明の全一覧は、「Audit イベントフィールド」 を参照してください。イベントのタイプおよびその説明の一覧は、「Audit 記録のタイプ」 を参照してください。

例6.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'