5.5. Audit ルールの定義

Audit システムは、ログファイルにキャプチャーされるものを定義するルールセットで作動します。指定可能な Audit ルールには、以下の 3 つのタイプがあります。
  • 制御ルール — Audit システムの動作と設定のいくつかの修正が可能になります。
  • ファイルシステムルール — ファイルウォッチとも呼ばれ、特定のファイルまたはディレクトリーへのアクセスの監査が可能になります。
  • システムコールルール — 特定のプログラムが実行するシステムコールのログ記録が可能になります。
Audit ルールは、auditctl ユーティリティーのコマンドラインで指定するか (この方法で指定したルールは再起動後は維持されません)、/etc/audit/audit.rules ファイルに書き込んで指定することができます。以下の 2 つのセクションでは、Audit ルール定義における両方のアプローチをまとめています。

5.5.1. auditctl ユーティリティーを使った Audit ルールの定義

注記

Audit サービスおよび Audit ログファイルと対話するすべてのコマンドは、root 権限が必要になります。これらのコマンドは、必ず root ユーザーとして実行してください。さらに、Audit サービスの設定には CAP_AUDIT_CONTROL が、ユーザーメッセージのロギングには CAP_AUDIT_WRITE が必要です。
auditctl コマンドを使うと、Audit システムの基本的な機能を制御し、どの Audit イベントをログ記録するかを決定するルールが定義できます。

制御ルールの定義

以下の制御ルールを使うと、Audit システムの動作が修正できます。
-b
カーネルにおける 既存のAudit バッファの最大値を設定します。例を示します。
~]# auditctl -b 8192
-f
重大なエラーが検出された際に実行されるアクションを設定します。例を示します。
~]# auditctl -f 2
上記の設定では、重大なエラーが発生した際にカーネルパニックが起動されます。
-e
Audit システムを有効または無効にする、もしくは設定をロックします。例を示します。
~]# auditctl -e 2
上記のコマンドは、Audit 設定をロックします。
-r
1 秒あたりに生成されるメッセージ数を設定します。例を示します。
~]# auditctl -r 0
上記の設定では、生成されるメッセージ数は制限されません。
-s
Audit システムのステータスをレポートします。例を示します。
~]# auditctl -s
AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0
-l
読み込まれている Audit ルールすべてを一覧表示します。例を示します。
~]# auditctl -l
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux -p wa -k selinux_changes
-w /sbin/insmod -p x -k module_insertion
⋮
-D
読み込まれている Audit ルールすべてを削除します。例を示します。
~]# auditctl -D
No rules

ファイルシステムルールの定義

ファイルシステムのルールを定義するには、以下の構文を使用します。
auditctl -w path_to_file -p permissions -k key_name
ここでは、
  • path_to_file は、監査対象のファイルもしくはディレクトリーになります。
  • permissions は、ログ記録されるパーミッションになります。
    • r — ファイルまたはディレクトリーの読み取りアクセスです。
    • w — ファイルまたはディレクトリーの書き込みアクセスです。
    • x — ファイルまたはディレクトリーの実行アクセスです。
    • a — ファイルまたはディレクトリーの属性を変更します。
  • key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

例5.1 ファイルシステムルール

/etc/passwd ファイルへのすべての書き込みアクセスとこのファイルのすべての属性変更をログ記録するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
-k オプションに続く文字列は任意のものであることに注意してください。
/etc/selinux/ ディレクトリー内の全ファイルへのすべての書き込みアクセスとこれらファイルのすべての属性変更をログ記録するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
Linux カーネルにモジュールを挿入する /sbin/insmod コマンドの実行をログ記録するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -w /sbin/insmod -p x -k module_insertion

システムコールルールの定義

システムコールのルールを定義するには、以下の構文を使用します。
auditctl -a action,filter -S system_call -F field=value -k key_name
ここでは、
  • action および filter は、特定のイベントがいつログ記録されるかを指定します。action は、always または never になります。filter は、イベントにどのカーネルルール適合のフィルターを適用するかを指定します。ルール適合フィルターは、taskexituserexclude のいずれかになります。これらフィルターの詳細については、「Audit システムのアーキテクチャー」 の最初の部分を参照してください。
  • system_call は、名前でシステムコールを指定します。システムコールの全一覧は、/usr/include/asm/unistd_64.h ファイルで確認できます。複数のシステムコールをひとつのグループにまとめて、-S オプションの後にそれらを指定することも可能です。
  • field=value specifies additional options that further modify the rule to match events based on a specified architecture, group ID, process ID, and others. For a full listing of all available field types and their values, refer to the auditctl(8) man page.
  • key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

例5.2 システムコールのルール

システムが 64 ビットアーキテクチャーを使用していて、プログラムが adjtimex または settimeofday システムコールを使用するたびにログエントリーを作成するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
ユーザー ID が 1000 以上 (-F auid!=4294967295 オプションを使用すると、ログイン UID が設定されていないユーザーが除外されます) のシステムユーザーがファイルを削除またはファイルの名前を変更するたびにログエントリーを作成するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
システムコールルールの構文を使って、ファイルシステムのルールを定義することもできます。以下のコマンドでは、-w /etc/shadow -p wa ファイルシステムルールに似たシステムコールのルールが作成されます。
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa

5.5.2. 実行可能なファイルルールの定義

実家王可能なファイルルールを定義するには、以下の構文を使用します。
auditctl  -a action,filter [ -F arch=cpu -S system_call] -F exe=path_to_executable_file -k key_name
ここでは、
  • action および filter は、特定のイベントがいつログ記録されるかを指定します。action は、always または never になります。filter は、イベントにどのカーネルルール適合のフィルターを適用するかを指定します。ルール適合フィルターは、taskexituserexclude のいずれかになります。これらフィルターの詳細については、「Audit システムのアーキテクチャー」 の最初の部分を参照してください。
  • system_call は、名前でシステムコールを指定します。システムコールの全一覧は、/usr/include/asm/unistd_64.h ファイルで確認できます。複数のシステムコールをひとつのグループにまとめて、-S オプションの後にそれらを指定することも可能です。
  • path_to_executable_file は、監査する実行可能ファイルへの絶対パスに置き換えてください。
  • key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

例5.3 実行可能なファイルルール

/bin/id プログラムのすべ手の実行をロギングするルールを定義するには、以下のコマンドを実行します。
~]# auditctl -F exe=/bin/id -S execve -k execution_bin_id

5.5.3. 永続的な Audit ルールの定義と /etc/audit/audit.rules ファイルでの制御

再起動後も維持される Audit ルールを定義するには、そのルールを /etc/audit/audit.rules ファイルに含める必要があります。このファイルは、同じ auditctl コマンドライン構文を使ってルールを指定します。空の行やハッシュ記号 (#) に続くテキストは無視されます。
auditctl コマンドで -R オプションを使うと、指定されたファイルからルールを読み取ることもできます。例を示します。
~]# auditctl -R /usr/share/doc/audit/rules/30-stig.rules

制御ルールの定義

ファイルに含めることができるのは、-b-D-e-f-r、および --loginuid-immutable の制御ルールのみで、これらは Audit の動作を修正します。これらのオプションに関する詳細は、「制御ルールの定義」を参照してください。

例5.4 audit.rules での制御ルール

# Delete all previous rules
-D

# Set buffer size
-b 8192

# Make the configuration immutable -- reboot is required to change audit rules
-e 2

# Panic when a failure occurs
-f 2

# Generate at most 100 audit messages per second
-r 100

# Make login UID immutable once it is set (may break containers)
--loginuid-immutable 1

ファイルシステムおよびシステムコールのルールの定義

ファイルシステムおよびシステムコールのルールは、auditctl 構文を使って定義します。auditctl ユーティリティーを使った Audit ルールの定義」 の例は、以下のルールファイルのようになります。

例5.5 audit.rules でのファイルシステムおよびシステムコールのルール

-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
-w /sbin/insmod -p x -k module_insertion

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete

事前設定ルールのファイル

/usr/share/doc/audit/rules/ ディレクトリーでは、audit パッケージが各種の証明書基準にしたがって事前設定ルールのファイル一式を提供しています。
  • 30-nispom.rules — NISPOM (National Industrial Security Program Operating Manual) の第 8 章で指定されている要件を満たす Audit ルール設定です。
  • 30-pci-dss-v31.rules — Payment Card Industry Data Security Standard (PCI DSS) v3.1 で指定さrている要件を満たす Audit RUEHL設定sです。
  • 30-stig.rules — セキュリティー技術実装ガイド (STIG: Security Technical Implementation Guide) で設定された要件を満たす Audit ルール設定です。
これらの設定ファイルを使用するには、オリジナルの /etc/audit/audit.rules ファイルのバックアップを作成し、選択する設定ファイルをこの /etc/audit/audit.rules にコピーします。
~]# cp /etc/audit/audit.rules /etc/audit/audit.rules_backup
~]# cp /usr/share/doc/audit/rules/30-stig.rules /etc/audit/audit.rules

注記

Audit ルールには、順序付けができるように番号指定のスキームがあります。名前付けスキームに関する詳しい情報は /usr/share/doc/audit/rules/README-rules ファイルを参照してください。