以下示例配置说明了如何使用审计来监控您的系统。它重点介绍了需要审计的最重要项目,以涵盖受控访问保护配置文件 (CAPP) 指定的可审计事件列表。
示例规则集分为以下几个部分
基本审计配置(请参阅第 42.1 节,“添加基本审计配置参数”)
监视审计日志文件和配置文件(请参阅第 42.2 节,“添加监视审计日志文件和配置文件的规则”)
监视文件系统对象的操作(请参阅第 42.3 节,“监视文件系统对象”)
监视安全数据库(请参阅第 42.4 节,“监视安全配置文件和数据库”)
监视各种系统调用(第 42.5 节,“监视各种系统调用”)
过滤系统调用参数(请参阅第 42.6 节,“过滤系统调用参数”)
要将此示例转换为在您的实时设置中使用的配置文件,请按以下步骤操作
选择适合您设置的适当设置并进行调整。
通过添加以下示例中的规则或修改现有规则来调整文件 /etc/audit/audit.rules。
不要在未根据您的需求进行调整的情况下将以下示例复制到您的审计设置中。确定要审计的内容以及审计的程度。
整个 audit.rules 是 auditctl 命令的集合。此文件中的每一行都会扩展为完整的 auditctl 命令。规则集中使用的语法与 auditctl 命令的语法相同。
-D1 -b 81922 -f 23
在开始定义新规则之前,请删除任何预先存在的规则。 | |
设置用于接收审计消息的缓冲区数量。根据系统上的审计日志记录级别,增加或减少此数字。 | |
设置内核在需要处理关键错误时使用的故障标志。可能的值为 |
通过使用 -D 选项清空规则队列,您可以确保 audit 不使用任何其他规则集,而只使用通过此文件提供的规则集。选择适当的缓冲区数量 (-b) 对于避免由于审计负载过高而导致系统故障至关重要。选择 panic 故障标志 -f 2 可确保即使系统遇到关键错误,您的审计记录也是完整的。通过在关键错误时关闭系统,audit 确保没有进程逃脱其控制,否则如果选择级别 1 (printk) 则可能会发生这种情况。
在将您的审计规则集用于实时系统之前,请确保已在测试系统上使用 最坏情况下的生产工作负载 对设置进行了彻底评估。当指定 -f 2 标志时,这一点尤其重要,因为这指示内核在超过任何阈值时进行 panic(执行立即停止,而不将待处理的数据刷新到磁盘)。仅在最注重安全性的环境中考虑使用 -f 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
审计系统调用有助于跟踪您的系统活动,远远超出应用程序级别。通过跟踪与文件系统相关的系统调用,您可以了解您的应用程序如何使用这些系统调用,并确定该使用是否适当。通过跟踪挂载和卸载操作,您可以跟踪外部资源的使用情况(可移动介质、远程文件系统等)。
审计系统调用会导致高日志记录活动。这种活动反过来会对内核施加沉重的负担。如果内核响应速度低于正常水平,系统的积压和速率限制可能会被超过。仔细评估要在审计规则集中包含哪些系统调用,并相应地调整日志设置。请参阅第 40.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 规则。64 位系统,如 AMD64/Intel 64,需要删除 *64 规则。 | |
启用与任何目录操作相关的审计上下文,例如创建或删除目录。 | |
启用与任何链接操作相关的审计上下文,例如创建符号链接、创建链接、取消链接或重命名。 | |
启用与扩展文件系统属性相关的任何操作的审计上下文。 | |
启用与 | |
启用与任何挂载或卸载操作相关的审计上下文。对于 x86 架构,禁用 |
为了确保您的系统不会被执行不需要的操作,请跟踪任何尝试更改 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、 | |
对 |
除了在第 42.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
除了在第 42.3 节,“监视文件系统对象”和第 42.5 节,“监视各种系统调用”中介绍的系统调用审计之外,您还可以跟踪应用程序行为,达到更高的程度。应用过滤器有助于您将审计重点放在您最感兴趣的领域。本节介绍非复用系统调用(如 access)和复用系统调用(如 socketcall 或 ipc)的系统调用参数过滤。系统调用是否复用取决于使用的硬件架构。在 64 位架构(如 AMD64/Intel 64)上,socketcall 和 ipc 都不复用。
审计系统调用会导致高日志记录活动,这反过来会对内核施加沉重的负担。如果内核响应速度低于正常水平,系统的积压和速率限制很可能会被超过。仔细评估要在审计规则集中包含哪些系统调用,并相应地调整日志设置。请参阅第 40.2 节,“配置审计守护程序”,了解如何调整相关设置。
access 系统调用检查进程是否允许读取、写入或测试文件或文件系统对象的存在性。使用 -F 过滤器标志,构建匹配特定 access 调用的规则,格式为 -F a1=ACCESS_MODE。请查看 /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 以获取可能的参数值和系统调用名称。audit 支持使用 -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 系统调用。过滤器标志设置为过滤 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 3 ## 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 共享内存相关的系统调用。在这种情况下, |
在配置了一些生成事件并填充日志的规则后,你需要找到一种区分不同事件的方法。使用 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"