Red Hat Training

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

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 ペアで構成されます。上記のイベントの詳細な分析は以下のようになります。

1 つ目のレコード

type=SYSCALL
type フィールドには、レコードのタイプが含まれます。この例では、SYSCALL 値は、カーネルへのシステムコールによりこのレコードがトリガーされたことを示しています。
可能なすべてのタイプ値とその説明は、を参照してください 「監査レコードタイプ」
msg=audit(1364481363.243:24287):
msg フィールドは以下を記録します。
  • フォーム内のレコードのタイムスタンプと一意の ID audit(time_stamp:ID)。複数のレコードが同じ Audit イベントの一部として生成されている場合は、同じタイムスタンプおよび ID を共有できます。
  • カーネルまたはユーザー空間アプリケーションが提供するさまざまなイベント固有の name=value ペア。
arch=c000003e
arch フィールドには、システムの CPU アーキテクチャーに関する情報が含まれます。値は 16 進数表記 c000003eでエンコードされます。ausearch コマンドで Audit レコードを検索する場合は、-i または --interpret オプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。この c000003e 値はとして解釈され x86_64ます。
syscall=2
syscall フィールドは、カーネルに送信されたシステムコールのタイプを記録します。の値は 2/usr/include/asm/unistd_64.h ファイルで人間が判読できる値と一致します。この場合、2open システムコールです。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 to a3 フィールドは、このイベントにおけるシステムコールの最初の 4 つの引数(16 進数表記でエンコード)を記録します。この引数は、使用されるシステムコールにより異なります。ausearch ユーティリティーで解釈できます。
items=1
items フィールドには、イベント内のパスレコードの数が含まれます。
ppid=2686
この ppid フィールドは、親プロセス ID(PPID)を記録します。この場合、2686bash プロセスの PPID です。
pid=3538
この pid フィールドは、プロセス ID(PID)を記録します。この例で 3538 は、は cat プロセスの PID です。
auid=500
この auid フィールドは、loginuid である Audit ユーザー ID を記録します。この ID は、ログイン時にユーザーに割り当てられ、ユーザーのアイデンティティーが変更される場合でも(たとえば、su - john コマンドでユーザーアカウントを切り替えることで)すべてのプロセスによって継承されます。
uid=500
uid フィールドは、解析しているプロセスを開始したユーザーのユーザー ID を記録します。ユーザー ID は、次のコマンドでユーザー名に変換できます ausearch -i --uid UID。ここでは、500 はユーザーのユーザー ID です shadowman
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 フィールドは、1 番目と 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 とメジャー 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 イベントには、イベントに含まれる可能性のあるすべてのフィールドのサブセットのみが含まれます。すべてのイベントフィールドとその説明は、を参照してください 「監査イベントフィールド」。すべてのイベントタイプとその説明は、を参照してください 「監査レコードタイプ」

例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 イベントは、root ユーザーとしてログインするために UID が 500 のユーザーの失敗を記録します。
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'