12.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) を記録します。この例の 3538cat プロセスの 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 として解釈されます。