Show Table of Contents
6.5.3. 永続的な Audit ルールの定義と
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
6.5. Audit ルールの定義
Audit システムは、ログファイルで何を取得するかを定義する一連のルールで動作します。以下の Audit ルールのタイプを指定できます。
- 制御ルール
- Audit システムの動作と、一部の設定を修正するのを許可します。
- ファイルシステムのルール
- ファイルの監視としても知られており、特定のファイルまたはディレクトリーへのアクセスを監査できます。
- システムコールのルール
- 指定したプログラムが作成するシステムコールのログを許可します。
Audit ルールは、以下に設定できます。
- auditctl ユーティリティーを使用したコマンドライン。このルールはシステムの再起動後は永続化しません。詳細は 「auditctl で監査ルールの定義」 を参照してください。
/etc/audit/audit.rules
ファイル。詳細は 「永続的な Audit ルールの定義と/etc/audit/audit.rules
ファイルでの制御」 を参照してください。
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 は、イベントに適用するカーネルルール適合のフィルターを指定します。ルール適合フィルターは、task
、exit
、user
、exclude
のいずれかになります。これらフィルターの詳細は、「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 は、イベントに適用するカーネルルール適合のフィルターを指定します。ルール適合フィルターは、task
、exit
、user
、exclude
のいずれかになります。これらフィルターの詳細は、「Audit システムのアーキテクチャー」 の冒頭部分を参照してください。 - system_call は、名前でシステムコールを指定します。システムコールの全一覧は、
/usr/include/asm/unistd_64.h
ファイルで確認できます。複数のシステムコールをひとつのグループにまとめて、-S
オプションの後にそれらを指定することも可能です。 - path_to_executable_file は、監査する実行可能ファイルへの絶対パスに置き換えてください。
- key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。
例6.3 実行可能なファイルルール
/bin/id
プログラムのすべ手の実行をロギングするルールを定義するには、以下のコマンドを実行します。
~]# auditctl -a always,exit -F exe=/bin/id -F arch=b64 -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)
を参照してください。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。