7.5. 定义审计规则
审计系统对一组规则进行操作,这些规则定义日志文件中要捕获的内容。可以指定以下类型的审计规则:
- 控制规则
- 允许修改 Audit 系统的行为及其某些配置。
- 文件系统规则
- 也称为文件监视,允许审核对特定文件或目录的访问。
- 系统调用规则
- 允许记录任何指定程序进行的系统调用。
可以设置审计规则:
- 在命令行中使用 auditctl 工具。请注意,这些规则在重启后不会保留。详情请查看 第 7.5.1 节 “使用 auditctl定义审计规则”
- 在
/etc/audit/audit.rules
文件中。详情请查看 第 7.5.3 节 “在/etc/audit/audit.rules
文件中定义持久性审计规则和控制”
7.5.1. 使用 auditctl定义审计规则
auditctl 命令允许您控制审计系统的基本功能,并定义决定记录哪些审计事件的规则。
注意
与 Audit 服务和审计日志文件交互的所有命令都需要 root 特权。确保您以 root 用户身份执行这些命令。另外,需要
CAP_AUDIT_CONTROL
功能来设置审计服务,以及记录用户消息所需的 CAP_AUDIT_WRITE
功能。
定义控制规则
以下是允许您修改审计系统行为的一些控制规则:
-b
- 在内核中设置现有审计缓冲区的最大数量,例如:
~]# auditctl -b 8192
-f
- 设置在检测到关键错误时执行的操作,例如:
~]# auditctl -f 2
以上配置会在出现严重错误时触发内核 panic。 -e
- 启用和禁用审计系统或锁定其配置,例如:
~]# auditctl -e 2
以上命令锁定 Audit 配置。 -r
- 设置每秒生成的消息率,例如:
~]# auditctl -r 0
以上配置对生成的消息没有设置速率限制。 -s
- 报告审计系统状态,例如:
~]# auditctl -s AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0
-l
- 列出所有当前载入的审计规则,例如:
~]# 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
- 删除所有当前载入的审计规则,例如:
~]# auditctl -D No rules
定义文件系统规则
要定义文件系统规则,请使用以下语法:
auditctl -w path_to_file -p permissions -k key_name
其中:
- path_to_file 是审计的文件或目录。
- 权限 是日志记录的权限:
r
- 对文件或目录的读访问权限。w
- 对文件或目录的写入访问权限。X
- 执行对文件或目录的访问。- A - 更改文件或目录的属性。
- key_name 是一个可选字符串,可帮助您识别哪个规则或一组规则生成特定的日志条目。
例 7.1. 文件系统规则
要定义一条规则,记录对 /etc/passwd 文件的所有写访问以及
/etc/passwd
文件的每个属性,请执行以下命令:
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
请注意,
-k
选项后面的字符串是任意字符串。
要定义一条规则,记录对 /etc/selinux/ 目录中的所有文件的所有写入访问以及
/etc/selinux/
目录中的所有文件,请执行以下命令:
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
要定义一条规则,记录 /sbin/insmod 命令的执行,该命令可将模块插入到 Linux 内核中,请执行以下命令:
~]# auditctl -w /sbin/insmod -p x -k module_insertion
定义系统调用规则
要定义系统调用规则,请使用以下语法:
auditctl -a action,filter -S system_call -F field=value -k key_name
其中:
- action 和 filter 指定何时记录特定事件。操作 可以是
always
或never
。filter 指定将哪个内核规则匹配过滤器应用到事件。rule-matching 过滤器可以是以下之一:任务
、退出
、用户
,以及排除
。有关这些过滤器的详情请参考开始 第 7.1 节 “审计系统架构”。 - system_call 按名称指定系统调用。所有系统调用的列表可在
/usr/include/asm/unistd_64.h
文件中找到。多个系统调用可以分组到一个规则中,每个规则都在其自身-S
选项后指定。 - field=value 指定附加选项,进一步根据指定的架构、组 ID、进程 ID 等进一步修改规则来匹配事件。有关所有可用字段类型及其值的完整列表,请查看 auditctl(8) man page。
- 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
其中:
- action 和 filter 指定何时记录特定事件。操作 可以是
always
或never
。filter 指定将哪个内核规则匹配过滤器应用到事件。rule-matching 过滤器可以是以下之一:任务
、退出
、用户
,以及排除
。有关这些过滤器的详情请参考开始 第 7.1 节 “审计系统架构”。 - system_call 按名称指定系统调用。所有系统调用的列表可在
/usr/include/asm/unistd_64.h
文件中找到。多个系统调用可以分组到一个规则中,每个规则都在其自身-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
文件中定义持久性审计规则和控制
要定义重启后保留的审计规则,您必须直接将其包含在
/etc/audit/audit.rules
文件中,或使用 augenrules 程序读取位于 /etc/audit/rules.d/
目录中的规则。/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 语法来定义。第 7.5.1 节 “使用 auditctl定义审计规则” 中的示例可使用以下规则文件表示:
例 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
- 满足国家工业安全计划操作手册中信息系统安全章节中指定的要求的审计规则配置。30-PCI-dss-v31.rules
- 满足支付卡行业数据安全标准(PCI DSS) v3.1 要求的审计规则配置。30-STIG.rules
- 满足安全技术实施指南(STIG)设置的要求的审计规则配置。
要使用这些配置文件,请创建一个原始
/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
注意
审计规则有一个编号方案,允许排序它们。要了解更多有关命名方案的信息,请参阅
/usr/share/doc/audit/rules/README-rules
文件。
使用 augenrules 定义持久性规则
augenrules脚本读取位于
/etc/audit/rules.d/
目录下的规则,并将它们编译成audit.rures
文件。此脚本会根据它们的自然排序顺序,以特定顺序处理以 .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
有关审计规则和 augenrules 脚本的更多信息,请参阅
audit.rules (8)
和 augenrules (8)
手册页。