この投稿では、監査ログの読み方と、各行とフィールドの意味について説明します。
たとえば、audit.log ファイルには次のように 4 行が記録されます:
type=SYSCALL msg=audit(1640033159.053:177988798): arch=c000003e syscall=2 success=no exit=-13 a0=7ffc736c18a0 a1=0 a2=1b6 a3=24 items=1 ppid=130071 pid=130082 auid=1001 uid=1001 gid=1002 euid=1001 suid=1001 fsuid=1001 egid=1002 sgid=1002 fsgid=1002 tty=(none) ses=318813 comm="pidstat" exe="/usr/bin/pidstat" key="access" type=PROCTITLE msg=audit(1640033159.053:177988797): proctitle=70696473746174002D727564002D6800310033 type=CWD msg=audit(1640033159.053:177988798): cwd="/u01/app/oracle/oracle.ahf/data/repository/suptools/rac01/oswbb/oracle/oswbb" type=PATH msg=audit(1640033159.053:177988798): item=0 name="/proc/674/io" inode=12022 dev=00:04 mode=0100400 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL
上記のイベントは、同じタイム スタンプとシリアル番号 ( 1640033159.053:177988797 ) を共有する 4 つのレコードで構成されます。レコードは常に type= で始まります キーワード。各レコードは、空白またはコンマで区切られた複数の名前=値のペアで構成されます。上記のイベントの詳細な分析は次のとおりです。
最初の記録
type=SYSCALL
type フィールドには、レコードのタイプが含まれます。この例では、SYSCALL 値は、このレコードがカーネルへのシステム コールによってトリガーされたことを示しています。可能なすべての型の値とその説明のリストについては、監査レコードの型を参照してください。
msg=audit(1640033159.053:177988798)
msg フィールドのレコード:レコードのタイムスタンプと一意の ID が audit(time_stamp:ID) の形式で記録されます。複数のレコードが同じ監査イベントの一部として生成された場合、同じタイム スタンプと ID を共有できます。タイム スタンプは Unix 時間形式を使用しています。1970 年 1 月 1 日の 00:00:00 UTC からの秒数です。カーネルまたはユーザー空間アプリケーションによって提供されるさまざまなイベント固有の名前=値のペアです。
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 は open システム コールです。 ausyscall ユーティリティを使用すると、システム コール番号を人間が読める形式に変換できることに注意してください。 ausyscall –dump コマンドを使用して、すべてのシステム コールとその番号のリストを表示します。詳細については、ausyscall(8) のマニュアル ページを参照してください。
成功=いいえ
success フィールドは、その特定のイベントで記録されたシステム コールが成功したか失敗したかを記録します。この場合、呼び出しは成功しませんでした。
exit=-13
exit フィールドには、システム コールによって返される終了コードを指定する値が含まれます。この値は、システム コールによって異なります。次のコマンドを使用して、値を人間が読める形式に解釈できます:
a0=7ffc736c18a0 a1=0 a2=1b6 a3=24
a0 から a3 フィールドには、このイベントのシステム コールの最初の 4 つの引数が 16 進数でエンコードされて記録されます。これらの引数は、使用されるシステム コールによって異なります。 ausearch ユーティリティで解釈できます。
アイテム=1
items フィールドには、syscall レコードに続く PATH 補助レコードの数が含まれます。
ppid=130071 pid=130082
ppid/pid フィールドは、親プロセス ID とプロセス ID を記録します。
auid=1001 uid=1001 gid=1002 euid=1001 suid=1001 fsuid=1001 egid=1002 sgid=1002 fsgid=1002
auid フィールドは、監査ユーザー ID、ユーザー ID、グループ ID、実効ユーザー ID、セット ユーザー ID、ファイル システム ユーザー ID、実効グループ ID、セット グループ ID、ファイル システム グループ ID を記録します。
tty=(なし) ses=318813
tty フィールドとセッションは、分析されたプロセスが呼び出された端末を記録します。
comm="pidstat"
comm フィールドは、分析されたプロセスを呼び出すために使用されたコマンドのコマンドライン名を記録します。この場合、この監査イベントをトリガーするために cat コマンドが使用されました。
exe=”/usr/bin/pidstat”
exe フィールドは、分析されたプロセスを呼び出すために使用された実行可能ファイルへのパスを記録します。
key="アクセス"
キー フィールドは、このイベントを生成したルールに関連付けられた管理者定義の文字列を監査ログに記録します。
2 番目のレコード
type=PROCTITLE
type フィールドには、レコードのタイプが含まれます。この例では、PROCTITLE 値は、カーネルへのシステム コールによってトリガーされた、この監査イベントをトリガーした完全なコマンドラインをこのレコードが提供することを指定します。
proctitle=70696473746174002D727564002D6800310033
proctitle フィールドは、分析されたプロセスを呼び出すために使用されたコマンドの完全なコマンドラインを記録します。このフィールドは、ユーザーが監査ログ パーサーに影響を与えないように、16 進表記でエンコードされます。テキストは、この監査イベントをトリガーしたコマンドにデコードされます。 ausearch コマンドで監査レコードを検索する場合、-i または –interpret オプションを使用して、16 進数値を人間が判読できる同等の値に自動的に変換します。
3 番目のレコード
type=CWD
2 番目のレコードでは、type フィールドの値は CWD (現在の作業ディレクトリ) です。このタイプは、最初のレコードで指定されたシステム コールを呼び出したプロセスが実行された作業ディレクトリを記録するために使用されます。このレコードの目的は、関連付けられた PATH レコードで相対パスが取得された場合に備えて、現在のプロセスの場所を記録することです。このようにして、絶対パスを再構築できます。
msg=audit(1640033159.053:177988798)
msg フィールドには、最初のレコードの値と同じタイム スタンプと ID 値が保持されます。タイム スタンプは Unix 時間形式 (1970 年 1 月 1 日の 00:00:00 UTC からの秒数) を使用しています。
cwd=”/u01/app/oracle/oracle.ahf/data/repository/suptools/rac01/oswbb/oracle/oswbb”
cwd フィールドには、システム コールが呼び出されたディレクトリへのパスが含まれます。
4番目のレコード
type=PATH
このレコードでは、type フィールドの値は PATH です。監査イベントには、引数としてシステム コールに渡されるすべてのパスの PATH タイプのレコードが含まれます。
msg=audit(1640033159.053:177988798)
msg フィールドは、最初と 2 番目のレコードの値と同じタイム スタンプと ID 値を保持します。
item=0
item フィールドは、SYSCALL タイプのレコードで参照されるアイテムの総数のうち、現在のレコードがどのアイテムであるかを示します。この数値は 0 から始まります。値 0 は、最初のアイテムであることを意味します。
name="/proc/674/io"
name フィールドには、システム コールに引数として渡されたファイルまたはディレクトリのパスが記録されます。この場合、それは /proc/674/io ファイルでした。
inode=12022
inode フィールドには、このイベントで記録されたファイルまたはディレクトリに関連付けられた inode 番号が含まれます。次のコマンドは、409248 の inode 番号に関連付けられているファイルまたはディレクトリを表示します:
dev=00:04
dev フィールドは、このイベントで記録されたファイルまたはディレクトリを含むデバイスのマイナーおよびメジャー ID を指定します。
mode=0100400
mode フィールドは、st_mode フィールドの stat コマンドによって返される数値表記でエンコードされた、ファイルまたはディレクトリのアクセス権を記録します。詳細については、stat(2) のマニュアル ページを参照してください。この場合、0100600 は -r—– と解釈できます。これは、root ユーザーのみが /proc/674/io の読み取り権限を持っていることを意味します。
ouid=0
ouid フィールドは、オブジェクト所有者のユーザー ID を記録します。
ogid=0
ogid フィールドは、オブジェクト所有者のグループ ID を記録します。
rdev=00:00
rdev フィールドには、特殊ファイルのみの記録されたデバイス ID が含まれます。この場合、記録されたファイルは通常のファイルであるため、使用されません。
nametype=NORMAL
objtype フィールドは、特定のシステム コールのコンテキストにおける各パス レコードの操作の意図を記録します。