11.5. Audit ログファイルについて
デフォルトでは、Audit システムはログエントリーを /var/log/audit/audit.log
ファイルに保存します。ログローテーションが有効になっていれば、ローテーションされた audit.log
ファイルは同じディレクトリーに保存されます。
下記の Audit ルールを追加して、/etc/ssh/sshd_config
ファイルの読み取りまたは修正の試行をすべてログに記録します。
# auditctl -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 nametype=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
値は、カーネルへのシステムコールによりこれが記録されたことを示しています。
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
からa3
までのフィールドは、このイベントにおけるシステムコールの最初の 4 つの引数を、16 進法で記録します。この引数は、使用されるシステムコールにより異なります。ausearch
ユーティリティーで解釈できます。 items=1
-
items
フィールドには、システムコールのレコードに続く 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
タイプのレコードが含まれます。この 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 コンテキストを記録します。 nametype=NORMAL
-
nametype
フィールドは、指定したシステムコールのコンテキストで各パスのレコード操作の目的を記録します。 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
値は、このレコードにより、カーネルへのシステムコールにより発生するこの監査イベントを発生させた完全なコマンドラインを提供することが指定されることを示しています。 proctitle=636174002F6574632F7373682F737368645F636F6E666967
-
proctitle
フィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドラインを記録します。このフィールドは 16 進数の表記で記録され、Audit ログパーサーに影響が及ばないようにします。このテキストは、この Audit イベントを開始したコマンドに復号します。ausearch
コマンドで Audit レコードを検索する場合は、-i
オプションまたは--interpret
オプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。636174002F6574632F7373682F737368645F636F6E666967
値は、cat /etc/ssh/sshd_config
として解釈されます。