36 审计规则集简介 #
下面的示例配置说明如何使用审计来监视系统。其中重点指出了要涵盖受控访问保护配置文件 (CAPP) 指定的可审计事件列表而需审计的最重要的事项。
示例规则集分为以下几个部分:
基本审计配置(参见第 36.1 节 “添加基本审计配置参数”)
审计日志文件和配置文件监测项(参见第 36.2 节 “添加审计日志文件和配置文件监测项”)
监视对文件系统对象的操作(参见第 36.3 节 “监视文件系统对象”)
监视安全数据库(参见第 36.4 节 “监视安全配置文件和数据库”)
监视其他系统调用(第 36.5 节 “监视其他系统调用”)
过滤系统调用参数(参见第 36.6 节 “过滤系统调用参数”)
要将此示例转换为配置文件以在您的在线环境中使用,请执行以下操作:
根据您的环境选择相应的设置并进行调整。
通过添加以下示例中的规则或修改现有规则来调整文件
/etc/audit/audit.rules
。
如未根据您的需要调整,请勿将下面的示例复制到您的审计环境中。确定审计内容和审计范围。
整个 audit.rules
是 auditctl
命令的集合。此文件中的每一行都将扩展为完整的 auditctl
命令行。规则集中使用的语法与 auditctl
命令的语法相同。
36.1 添加基本审计配置参数 #
-D1 -b 81922 -f 23
在开始定义新规则之前,请删除所有以前存在的规则。 | |
设置用于容纳审计消息的缓冲区数目。根据系统上的审计日志记录级别增大或减小此数字。 | |
设置当内核需要处理严重错误时要使用的故障标志。可能的值为 |
使用 -D
选项清空规则队列可以确保审计只使用您通过此文件向其提供的规则集,而不使用任何其他规则集。要避免系统由于审计负载过高而发生故障,选择适当的缓冲区数目 (-b
) 至关重要。选择恐慌故障标志 -f 2
可确保即使系统遇到严重错误也能保持审计记录的完整。审计会在出现严重错误时关闭系统,确保不会有任何进程脱离审计的控制,而如果选择级别 1 (printk
),则可能会发生脱离控制的情况。
在在线系统上使用审计规则集之前,请确保在测试系统上使用最差状况的生产工作负载全面评估设置。如果指定了 -f 2
标志,那么这种做法将更加重要,因为这会指示内核在超过任何阈值时进入恐慌状态(不将等待中数据刷写到磁盘即执行立即暂停)。请仅对最注重安全的环境考虑使用 -f 2
标志。
36.2 添加审计日志文件和配置文件监测项 #
添加审计配置文件和日志文件本身的监测项可确保您能够跟踪任何尝试篡改配置文件的操作,或检测任何尝试访问日志文件的操作。
如果您需要有关文件访问的事件,创建目录监测项不一定足够实现此目的。仅当保存元数据更改以更新目录的 inode 时,才会触发有关目录访问的事件。要触发有关文件访问的事件,请添加要监视的每个文件的监测项。
-w /var/log/audit/ 1 -w /var/log/audit/audit.log -w /var/log/audit/audit_log.1 -w /var/log/audit/audit_log.2 -w /var/log/audit/audit_log.3 -w /var/log/audit/audit_log.4 -w /etc/audit/auditd.conf -p wa2 -w /etc/audit/audit.rules -p wa -w /etc/libaudit.conf -p wa
36.3 监视文件系统对象 #
审计系统调用有助于您跟踪高于应用程序级别的系统活动。通过跟踪文件系统相关的系统调用,可大致了解应用程序是如何使用这些系统调用的,并确定这种用法是否适当。通过跟踪装入和卸载操作来跟踪外部资源(可移动媒体、远程文件系统等)的使用。
审计系统调用会产生高负载日志记录活动,而此活动又会给内核带来繁重的负载。如果内核的响应能力低于正常水平,可能会超出系统的积压和速率上限。请仔细评估要在审计规则集中包含哪些系统调用,并相应地调整日志设置。有关如何优化相关设置的细节,请参见第 34.2 节 “配置审计守护程序”。
-a entry,always -S chmod -S fchmod -S chown -S chown32 -S fchown -S fchown32 -S lchown -S lchown321 -a entry,always -S creat -S open -S truncate -S truncate64 -S ftruncate -S ftruncate642 -a entry,always -S mkdir -S rmdir3 -a entry,always -S unlink -S rename -S link -S symlink4 -a entry,always -S setxattr5 -a entry,always -S lsetxattr -a entry,always -S fsetxattr -a entry,always -S removexattr -a entry,always -S lremovexattr -a entry,always -S fremovexattr -a entry,always -S mknod6 -a entry,always -S mount -S umount -S umount27
对更改文件所有权和权限相关的系统调用启用审计环境。根据系统的硬件体系结构启用或禁用 | |
对文件内容修改相关的系统调用启用审计环境。根据系统的硬件体系结构启用或禁用 *64 规则。AMD64/Intel 64 等 64 位系统要求去除 *64 规则。 | |
对任何目录操作(例如创建或去除目录)启用审计环境。 | |
对任何链接操作(例如创建符号链接、创建链接、取消链接或重命名)启用审计环境。 | |
对扩展文件系统属性相关的任何操作启用审计环境。 | |
对用于创建特殊(设备)文件的 | |
对任何装入或卸载操作启用审计环境。对于 x86 体系结构,请禁用 |
36.4 监视安全配置文件和数据库 #
为确保您的系统不会出现意外的行为,请跟踪任何尝试更改 cron
和 at
配置或已安排作业列表的操作。跟踪任何对用户、组、口令和登录数据库的写入访问有助于识别操控系统用户数据库的尝试。
跟踪对系统配置(内核、服务、时间等)的更改有助于识别他人操控系统关键功能的任何尝试。还应监视对安全环境中的 PAM 配置的更改,因为身份验证堆栈中的更改只能由管理员做出,并且应该记录哪些应用程序正在使用 PAM 及其使用方式。上面所述同样适用于与安全身份验证和通讯相关的任何其他配置文件。
1 -w /var/spool/atspool -w /etc/at.allow -w /etc/at.deny -w /etc/cron.allow -p wa -w /etc/cron.deny -p wa -w /etc/cron.d/ -p wa -w /etc/cron.daily/ -p wa -w /etc/cron.hourly/ -p wa -w /etc/cron.monthly/ -p wa -w /etc/cron.weekly/ -p wa -w /etc/crontab -p wa -w /var/spool/cron/root 2 -w /etc/group -p wa -w /etc/passwd -p wa -w /etc/shadow -w /etc/login.defs -p wa -w /etc/securetty -w /var/log/lastlog 3 -w /etc/hosts -p wa -w /etc/sysconfig/ w /etc/init.d/ w /etc/ld.so.conf -p wa w /etc/localtime -p wa w /etc/sysctl.conf -p wa w /etc/modprobe.d/ w /etc/modprobe.conf.local -p wa w /etc/modprobe.conf -p wa 4 w /etc/pam.d/ 5 -w /etc/aliases -p wa -w /etc/postfix/ -p wa 6 -w /etc/ssh/sshd_config -w /etc/stunnel/stunnel.conf -w /etc/stunnel/stunnel.pem -w /etc/vsftpd.ftpusers -w /etc/vsftpd.conf 7 -a exit,always -S sethostname -w /etc/issue -p wa -w /etc/issue.net -p wa
设置 | |
设置用户、组、口令、登录数据库和日志的监测项,并设置标签以更好地识别任何登录相关的事件,例如失败的登录尝试。 | |
对 | |
设置 PAM 配置目录的监测项。如果您要跟踪目录级别下的特定文件,还需添加这些文件的显式监测项。 | |
设置 postfix 配置的监测项,以在日志中记录任何写入尝试或属性更改,并使用标签来更好地进行跟踪。 | |
对 SSH、 | |
执行对 |
36.5 监视其他系统调用 #
除了根据第 36.3 节 “监视文件系统对象”中所述审计文件系统相关的系统调用以外,您还可以跟踪其他各种系统调用。跟踪任务创建有助于了解应用程序的行为。审计 umask
系统调用可以跟踪进程是如何修改创建掩码的。跟踪任何尝试更改系统时间的操作有助于识别尝试操控系统时间的任何人或进程。
1 -a entry,always -S clone -S fork -S vfork 2 -a entry,always -S umask 3 -a entry,always -S adjtimex -S settimeofday
36.6 过滤系统调用参数 #
除了第 36.3 节 “监视文件系统对象”和第 36.5 节 “监视其他系统调用”中介绍的系统调用审计以外,您还可以更深入地跟踪应用程序行为。应用过滤器有助于将审计重点放在您主要关注的方面。本节介绍如何过滤非多路转换系统调用(例如 access)和多路转换系统调用(例如 socketcall 或 ipc)的系统调用参数。系统调用是否会进行多路转换取决于所用的硬件体系结构。socketcall 和 ipc 在 AMD64/Intel 64 等 64 位体系结构上均不会进行多路转。
审计系统调用会产生高负载的日志记录活动,而后者又会给内核带来繁重的负载。如果内核的响应能力低于正常水平,可能会远远超出系统的积压和速率上限。请仔细评估要在审计规则集中包含哪些系统调用,并相应地调整日志设置。有关如何优化相关设置的细节,请参见第 34.2 节 “配置审计守护程序”。
access 系统调用会检查是否允许某个进程读取、写入文件或文件系统对象或者测试该对象是否存在。请使用 -F
过滤标志以 -F a1=ACCESS_MODE
格式构建与特定 access 调用匹配的规则。在 /usr/include/fcntl.h
中检查 access 系统调用的可能参数列表。
-a entry,always -S access -F a1=41 -a entry,always -S access -F a1=62 -a entry,always -S access -F a1=73
审计 access 系统调用,但仅当该系统调用的第二个参数 ( | |
审计 access 系统调用,但仅当该系统调用的第二个参数 ( | |
审计 access 系统调用,但仅当该系统调用的第二个参数 ( |
socketcall 系统调用是多路转换系统调用。多路转换是指在所有可能的调用中只存在一个系统调用,并且 libc 会传递实际的系统调用作为第一个参数 (a0
)。有关可能的系统调用,请查看 socketcall 的手册页;有关可能的参数值和系统调用名称的列表,请参见 /usr/src/linux/include/linux/net.h
。审计支持使用 -F a0=SYSCALL_NUMBER
过滤特定的系统调用。
-a entry,always -S socketcall -F a0=1 -F a1=101 ## Use this line on x86_64, ia64 instead #-a entry,always -S socket -F a0=10 -a entry,always -S socketcall -F a0=52 ## Use this line on x86_64, ia64 instead #-a entry, always -S accept
审计 socket(PF_INET6) 系统调用。 | |
审计 socketcall 系统调用。过滤标志设置为过滤 |
ipc 系统调用是多路转换系统调用的另一个示例。要调用的实际调用由传递给 ipc 系统调用的第一个参数决定。过滤这些参数有助于您将重点放在要关注的 IPC 调用上。在 /usr/include/linux/ipc.h
中查看可能的参数值。
1 ## msgctl -a entry,always -S ipc -F a0=14 ## msgget -a entry,always -S ipc -F a0=13 ## Use these lines on x86_64, ia64 instead #-a entry,always -S msgctl #-a entry,always -S msgget 2 ## semctl -a entry,always -S ipc -F a0=3 ## semget -a entry,always -S ipc -F a0=2 ## semop -a entry,always -S ipc -F a0=1 ## semtimedop -a entry,always -S ipc -F a0=4 ## Use these lines on x86_64, ia64 instead #-a entry,always -S semctl #-a entry,always -S semget #-a entry,always -S semop #-a entry,always -S semtimedop ## shmctl -a entry,always -S ipc -F a0=24 ## shmget -a entry,always -S ipc -F a0=23 ## Use these lines on x86_64, ia64 instead #-a entry,always -S shmctl #-a entry,always -S shmget
审计与 IPC SYSV 消息队列相关的系统调用。在本例中, | |
审计与 IPC SYSV 消息信号相关的系统调用。在本例中, | |
审计与 IPC SYSV 共享内存相关的系统调用。在本例中, |
36.7 使用键管理审计事件记录 #
配置了一些会生成事件的规则并填充日志后,您需要找到一种方法来辨别不同的事件。使用 ausearch
命令可以根据不同的准则过滤日志。通过使用 ausearch
-m MESSAGE_TYPE
,您至少可以过滤特定类型的事件。但是,要过滤与特定规则相关的事件,需要在 /etc/audit/audit.rules
文件中将一个键添加到此规则。然后,每次该规则记录一个事件时,此键就会添加到相应事件记录。要检索这些日志项,只需运行 ausearch
-k YOUR_KEY
获取与该规则相关且带有此特定键的记录列表。
例如,假设您已将下面的规则添加到规则文件:
-w /etc/audit/audit.rules -p wa
如果未向该规则指派键,您可能需要过滤 SYSCALL
或 PATH
事件,然后使用 grep 或类似工具来隔离与上述规则相关的所有事件。现在,使用 -k
选项将一个键添加到上述规则:
-w /etc/audit/audit.rules -p wa -k CFG_audit.rules
您可以指定任何文本字符串作为键。使用不同的键前缀(CFG
、LOG
等)后接文件名来区分与不同文件类型(配置文件或日志文件)相关的各监测项。现在,可按如下所示查找与上述规则相关的所有记录:
ausearch -k CFG_audit.rules
----
time->Thu Feb 19 09:09:54 2009
type=PATH msg=audit(1235030994.032:8649): item=3 name="audit.rules~" inode=370603 dev=08:06 mode=0100640 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1235030994.032:8649): item=2 name="audit.rules" inode=370603 dev=08:06 mode=0100640 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1235030994.032:8649): item=1 name="/etc/audit" inode=368599 dev=08:06 mode=040750 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1235030994.032:8649): item=0 name="/etc/audit" inode=368599 dev=08:06 mode=040750 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1235030994.032:8649): cwd="/etc/audit"
type=SYSCALL msg=audit(1235030994.032:8649): arch=c000003e syscall=82 success=yes exit=0 a0=7deeb0 a1=883b30 a2=2 a3=ffffffffffffffff items=4 ppid=25400 pid=32619 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1164 comm="vim" exe="/bin/vim-normal" key="CFG_audit.rules"