CentOS 7
 

Auditd : 監査ルールを追加する
2016/03/07
 
デフォルトで設定されているシステムへのログインやユーザーアカウント操作、Sudo アクションなどの監査設定以外のアクション、例えば、ある特定のファイルへのアクセスを監査したい場合等は、個別にルールを追加する必要があります。
[1] 例として、/etc/hosts の書き込みアクセスと属性変更を記録する監査ルールを設定します。
# 現在のルールを表示 (デフォルトは以下のように個別ルールは未設定)

[root@dlp ~]#
auditctl -l

No rules
# -p [r|w|x|a] で監視対象アクションを指定

#     r=読み取り, w=書き込み, x=実行, a=属性変更

# -k [任意の文字列] で検索用キーを設定

[root@dlp ~]#
auditctl -w /etc/hosts -p wa -k hosts_change

[root@dlp ~]#
auditctl -l

-w /etc/hosts -p wa -k hosts_change
[2] 監査ルール設定後、監査対象のファイルに監査対象アクションを実行すると、以下のようなログが記録されます。
[root@dlp ~]#
ausearch -k hosts_change | aureport -f -i

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 03/09/2016 19:48:32 /etc/hosts open yes /usr/bin/bash root 46
2. 03/10/2016 20:37:52 /etc/hosts open yes /usr/bin/vi root 49
3. 03/10/2016 20:37:52 /etc/hosts chmod yes /usr/bin/vi root 50
4. 03/10/2016 20:38:35 /etc/hosts~ rename yes /usr/bin/vi cent 71
5. 03/10/2016 20:38:35 /etc/hosts ? yes ? cent 72
6. 03/10/2016 20:38:35 /etc/hosts ? yes ? cent 70
7. 03/10/2016 20:38:35 /etc/hosts open yes /usr/bin/vi cent 73
8. 03/10/2016 20:38:35 /etc/hosts chmod yes /usr/bin/vi cent 74
9. 03/10/2016 20:38:35 /etc/hosts setxattr yes /usr/bin/vi cent 75
[3] auditctl で設定した監査ルールはシステム再起動すると初期化されるため、永続化するには /etc/audit/rules.d 配下にルールを定義しておく必要があります。定義ファイルは、拡張子が「.rules」であればファイル名は任意の名称で OK です。
# 現在の設定を additional.rules に書き出す

[root@dlp ~]#
auditctl -l >> /etc/audit/rules.d/additional.rules

[4] 監査対象にディレクトリを指定すると、対象ディレクトリ配下が再帰的に監査対象となります。
# /home/testdir/ に読み取りアクセスの監査ルールを設定

[root@dlp ~]#
auditctl -w /home/testdir/ -p r -k testdir_audit

[root@dlp ~]#
auditctl -l

-w /home/testdir/ -p r -k testdir_audit
# 読み取りアクセスが以下のように記録される

[root@dlp ~]#
ausearch -k testdir_audit | aureport -f -i

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 03/10/2016 19:50:28 /home/testdir getxattr no /usr/bin/ls cent 77
2. 03/10/2016 19:50:28 /home/testdir lgetxattr no /usr/bin/ls cent 76
3. 03/10/2016 19:50:28 /home/testdir getxattr no /usr/bin/ls cent 78
4. 03/10/2016 19:50:32 /home/testdir getxattr no /usr/bin/ls cent 81
5. 03/10/2016 19:50:32 /home/testdir openat yes /usr/bin/ls cent 82
6. 03/10/2016 19:50:32 /home/testdir lgetxattr no /usr/bin/ls cent 79
7. 03/10/2016 19:50:32 /home/testdir getxattr no /usr/bin/ls cent 80
8. 03/10/2016 19:50:32 /home/testdir/test.txt lgetxattr no /usr/bin/ls cent 83
9. 03/10/2016 19:50:32 /home/testdir/test.txt getxattr no /usr/bin/ls cent 84
10. 03/10/2016 19:50:32 /home/testdir/test.txt getxattr no /usr/bin/ls cent 85
11. 03/10/2016 19:50:32 /home/testdir/testdir02 lgetxattr no /usr/bin/ls cent 86
12. 03/10/2016 19:50:32 /home/testdir/testdir02 getxattr no /usr/bin/ls cent 87
13. 03/10/2016 19:50:53 /home/testdir/testdir02/test2.txt open yes /usr/bin/cat cent 89
[5] 例として、UID が 1000 以上のログインユーザーが消去したファイルを監査する設定です。
なお、以下で S オプションで指定しているシステムコールの一覧は「yum install man-pages」をすると「man syscalls」で確認できます。
[root@dlp ~]#
auditctl -a always,exit -S unlink,unlinkat -F 'auid>=1000' -F 'auid!=-1' -F key=delete_audit

[root@dlp ~]#
auditctl -l

-a always,exit -S unlink,unlinkat -F auid>=1000 -F auid!=-1 -F key=delete_audit
# 以下のようなログが記録される

[root@dlp ~]#
ausearch -k delete_audit | aureport -f -i

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 03/10/2016 19:11:05 test.txt unlinkat yes /usr/bin/rm redhat 112
2. 03/10/2016 19:13:06 test3.txt unlinkat yes /usr/bin/rm cent 139
3. 03/10/2016 19:41:00 test2.txt unlinkat yes /usr/bin/rm redhat 194
 
Tweet