Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

7.5. Audit ルールの定義

Audit システムは、ログファイルに何を取得するかを定義する一連のルールで動作します。以下の種類の Audit ルールを指定することができます。
制御ルール
Audit システムの動作とその設定の一部を変更できるようにします。
ファイルシステムのルール
ファイルウォッチとも呼ばれ、特定のファイルやディレクトリーへのアクセスを監査することができます。
システムコールのルール
指定されたプログラムが行うシステムコールのログ記録を許可します。
Audit ルールは、以下のように設定できます。

7.5.1. auditctlを使用した Audit ルールの定義

auditctl コマンドを使用すると、Audit システムの基本機能を制御し、どの Audit イベントをログに記録するかを決定するルールを定義できます。
注記
Audit サービスおよび Audit ログファイルと対話するすべてのコマンドには、root 権限が必要です。これらのコマンドは、必ず root ユーザーで実行してください。さらに、監査サービスの設定には 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 は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

例7.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
ここでは、以下のようになります。
  • actionfilter は、特定のイベントがログに記録されるタイミングを指定します。action は、always または never のいずれかです。filter は、イベントに適用されるカーネルルールマッチングフィルターを指定します。rule-matching フィルターは、taskexitユーザー、および exclude のいずれかです。これらのフィルターの詳細については、「Audit システムのアーキテクチャー」の冒頭を参照してください。
  • system_call は、名前でシステムコールを指定します。すべてのシステムコールのリストは、/usr/include/asm/unistd_64.h ファイルにあります。複数のシステムコールを 1 つのルールにまとめることができ、それぞれを独自の -S オプションの後に指定することができます。
  • field=value は、指定されたアーキテクチャー、グループ ID、プロセス ID などに基づいてイベントに一致するようにルールをさらに変更する追加のオプションを指定します。利用可能なすべてのフィールドタイプとその値の完全なリストについては、auditctl(8) の man ページを参照してください。
  • key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

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

adjtimex または settimeofday システムコールがプログラムによって使用され、システムが 64 ビットアーキテクチャーを使用するたびにログエントリーを作成するルールを定義するには、以下のコマンドを使用します。
~]# 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

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

実行ファイルルールを定義するには、以下の構文を使用します。
auditctl  -a action,filter [ -F arch=cpu -S system_call] -F exe=path_to_executable_file -k key_name
ここでは、以下のようになります。
  • actionfilter は、特定のイベントがログに記録されるタイミングを指定します。action は、always または never のいずれかです。filter は、イベントに適用されるカーネルルールマッチングフィルターを指定します。rule-matching フィルターは、taskexitユーザー、および exclude のいずれかです。これらのフィルターの詳細については、「Audit システムのアーキテクチャー」の冒頭を参照してください。
  • system_call は、名前でシステムコールを指定します。すべてのシステムコールのリストは、/usr/include/asm/unistd_64.h ファイルにあります。複数のシステムコールを 1 つのルールにまとめることができ、それぞれを独自の -S オプションの後に指定することができます。
  • path_to_executable_file は、監査される実行可能ファイルへの絶対パスです。
  • key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。

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

/bin/id プログラムのすべての実行をログに記録するルールを定義するには、以下のコマンドを実行します。
~]# auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id

7.5.3. /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) のみを含めることができます。このオプションの詳細は 「制御ルールの定義」 を参照してください。

例7.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 ルールの定義」 の例は、以下のルールファイルで表すことができます。

例7.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 - 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)によって設定された要件を満たす 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)および augenrules (8) を参照し てください。