6.5. Audit ルールの定義

Audit システムは、ログファイルで何を取得するかを定義する一連のルールで動作します。以下の Audit ルールのタイプを指定できます。
制御ルール
Audit システムの動作と、一部の設定を修正するのを許可します。
ファイルシステムのルール
ファイルの監視としても知られており、特定のファイルまたはディレクトリーへのアクセスを監査できます。
システムコールのルール
指定したプログラムが作成するシステムコールのログを許可します。
Audit ルールは、以下に設定できます。

6.5.1. auditctl で監査ルールの定義

auditctl コマンドを使うと、Audit システムの基本的な機能を制御し、どの Audit イベントをログ記録するかを決定するルールが定義できます。

注記

Audit サービスおよび Audit ログファイルと対話するすべてのコマンドは、root 権限が必要になります。これらのコマンドは、必ず root ユーザーとして実行してください。さらに、Audit サービスの設定には CAP_AUDIT_CONTROL が、ユーザーメッセージのロギングには CAP_AUDIT_WRITE が必要です。

制御ルールの定義

以下の制御ルールを使うと、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 は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

例6.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 では、指定されたアーキテクチャー、グループ ID、プロセス ID などに基づいて、ルールがイベントに合致するようさらに修正する追加オプションを指定します。利用可能なフィールドのタイプおよびその値の一覧は、man ページの auditctl(8) で確認できます。
  • key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

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

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

6.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 は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

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

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

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

再起動後も持続するように Audit ルールを定義するには、/etc/audit/audit.rules ファイルにそのルールを直接追加するか、/etc/audit/rules.d/ ディレクトリーに置かれたルールを読み込む augenrules プログラムを使用します。/etc/audit/audit.rules ファイルは、そのルールを指定するコマンドと同じ auditctl 構文を使用します。空の行と、ハッシュ記号 (#) に続くテキストは無視されます。
また、auditctl コマンドは、以下のように -R オプションを使用して指定したファイルからルールを読み込むのに使用することもできます。
~]# auditctl -R /usr/share/doc/audit/rules/30-stig.rules

制御ルールの定義

ファイルに追加できるには、Audit システムの動作を修正する制御ルールのみ (-b-D-e-f-r--loginuid-immutable、および --backlog_wait_time) です。このオプションの詳細は 「制御ルールの定義」 を参照してください。

例6.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 で監査ルールの定義」 の例は、以下のルールファイルで表示されます。

例6.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) の「Information System Security」の章で指定している要件を満たす Audit ルール設定
  • 30-pci-dss-v31.rules - Payment Card Industry Data Security Standard (PCI DSS) v3.1 で指定されている要件を満たす Audit 設定です。
  • 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 ファイルを参照してください。

永続ルールを定義する augenrules の使用

augenrules スクリプトは、/etc/audit/rules.d/ ディレクトリーに置いたルールを読み込み、そのルールを audit.rules ファイルにコンパイルします。このスクリプトは、自然のソート順に基づいて特定の順番で .rules で終わるすべてのファイルを処理します。このディレクトリーのファイルは、以下の意味を持つグループにまとめられます。
  • 10 - カーネルおよび auditctl 設定
  • 20 - 一般的なルールに該当してしまう可能性もあるが、ユーザー側で独自ルールを作成することも可能
  • 30 - 主なルール
  • 40 - 任意のルール
  • 50 - サーバー固有のルール
  • 70 - システムのローカルルール
  • 90 - ファイナライズ (不変)
ルールは、一度に使用することを意味するものではありません。これらは、熟考された個々のポリシーであり、個々のファイルは /etc/audit/rules.d/ にコピーされます。たとえば、STIG 設定でシステムを設定するために、10-base-config、30-stig、31-privileged、および 99-finalize のルールをコピーします。
/etc/audit/rules.d/ ディレクトリーにルールを置いたら、--load ディレクティブに augenrules スクリプトを実行してロードします。
~]# augenrules --load
augenrules --load No rules
enabled 1
failure 1
pid 634
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
enabled 1
failure 1
pid 634
rate_limit 0
backlog_limit 8192
lost 0
backlog 1
Audit ルールおよび augenrules スクリプトの詳細は、man ページの audit.rules(8) and augenrules(8) を参照してください。