跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 安全指南 / Linux 审计框架 / 审计规则集简介
适用范围 SUSE Linux Enterprise Server 15 SP2

36 审计规则集简介

下面的示例配置说明如何使用审计来监视系统。其中重点指出了要涵盖受控访问保护配置文件 (CAPP) 指定的可审计事件列表而需审计的最重要的事项。

示例规则集分为以下几个部分:

要将此示例转换为配置文件以在您的在线环境中使用,请执行以下操作:

  1. 根据您的环境选择相应的设置并进行调整。

  2. 通过添加以下示例中的规则或修改现有规则来调整文件 /etc/audit/audit.rules

注意
注意:调整审计日志记录级别

如未根据您的需要调整,请勿将下面的示例复制到您的审计环境中。确定审计内容和审计范围。

整个 audit.rulesauditctl 命令的集合。此文件中的每一行都将扩展为完整的 auditctl 命令行。规则集中使用的语法与 auditctl 命令的语法相同。

36.1 添加基本审计配置参数

-D1
-b 81922
-f 23

1

在开始定义新规则之前,请删除所有以前存在的规则。

2

设置用于容纳审计消息的缓冲区数目。根据系统上的审计日志记录级别增大或减小此数字。

3

设置当内核需要处理严重错误时要使用的故障标志。可能的值为 0(静默)、1(printk,列显故障消息)和 2(恐慌,暂停系统)。

使用 -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

1

设置审计日志所在目录的监测项。对任何类型访问此目录的尝试均触发事件。如果您在使用日志轮换,请另外也添加所轮换日志的监测项。

2

设置审计配置文件的监测项。记录对此文件的所有写入和属性更改尝试。

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

1

对更改文件所有权和权限相关的系统调用启用审计环境。根据系统的硬件体系结构启用或禁用 *32 规则。AMD64/Intel 64 等 64 位系统要求去除 *32 规则。

2

对文件内容修改相关的系统调用启用审计环境。根据系统的硬件体系结构启用或禁用 *64 规则。AMD64/Intel 64 等 64 位系统要求去除 *64 规则。

3

对任何目录操作(例如创建或去除目录)启用审计环境。

4

对任何链接操作(例如创建符号链接、创建链接、取消链接或重命名)启用审计环境。

5

对扩展文件系统属性相关的任何操作启用审计环境。

6

对用于创建特殊(设备)文件的 mknod 系统调用启用审计环境。

7

对任何装入或卸载操作启用审计环境。对于 x86 体系结构,请禁用 umount 规则。对于 Intel 64 体系结构,请禁用 umount2 规则。

36.4 监视安全配置文件和数据库

为确保您的系统不会出现意外的行为,请跟踪任何尝试更改 cronat 配置或已安排作业列表的操作。跟踪任何对用户、组、口令和登录数据库的写入访问有助于识别操控系统用户数据库的尝试。

跟踪对系统配置(内核、服务、时间等)的更改有助于识别他人操控系统关键功能的任何尝试。还应监视对安全环境中的 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

1

设置 atcron 配置及已安排作业的监测项,并向这些事件指派标签。

2

设置用户、组、口令、登录数据库和日志的监测项,并设置标签以更好地识别任何登录相关的事件,例如失败的登录尝试。

3

/etc/hosts 中的静态主机名配置设置监测项和标签。跟踪对系统配置目录 /etc/sysconfig 的更改。如果您要跟踪文件事件,请启用每个文件的监测项。对 /etc/init.d 目录中的引导配置发生的更改设置监测项和标签。如果您要跟踪文件事件,请启用每个文件的监测项。对 /etc/ld.so.conf 中的链接器配置发生的任何更改设置监测项和标签。对 /etc/localtime 设置监测项和标签。对内核配置文件 /etc/sysctl.conf/etc/modprobe.d//etc/modprobe.conf.local/etc/modprobe.conf 设置监测项和标签。

4

设置 PAM 配置目录的监测项。如果您要跟踪目录级别下的特定文件,还需添加这些文件的显式监测项。

5

设置 postfix 配置的监测项,以在日志中记录任何写入尝试或属性更改,并使用标签来更好地进行跟踪。

6

对 SSH、stunnelvsftpd 配置文件设置监测项和标签。

7

执行对 sethostname 系统调用的审计,并对 /etc/issue/etc/issue.net 中的系统标识配置设置监测项和标签。

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

1

跟踪任务创建。

2

添加 umask 系统调用的审计环境。

3

跟踪尝试更改系统时间的操作。可以使用 adjtimex 来调整时间。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

1

审计 access 系统调用,但仅当该系统调用的第二个参数 (mode) 为 4 (R_OK) 时会进行审计。此规则过滤所有用于测试对用户或进程所访问的文件或文件系统是否拥有足够读取权限的 access 调用。

2

审计 access 系统调用,但仅当该系统调用的第二个参数 (mode) 为 6(表示 4 OR 2,相当于 R_OK OR W_OK)时会进行审计。此规则过滤用于测试是否拥有足够读取和写入权限的 access 调用。

3

审计 access 系统调用,但仅当该系统调用的第二个参数 (mode) 为 7(表示 4 OR 2 OR 1,相当于 R_OK OR W_OK OR X_OK)时会进行审计。此规则过滤用于测试是否拥有足够读取、写入和执行权限的 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

1

审计 socket(PF_INET6) 系统调用。-F a0=1 过滤器会匹配所有 socket 系统调用,-F a1=10 过滤器可将匹配范围缩小为传递 IPv6 协议系列域参数 (PF_INET6) 的 socket 系统调用。有关第一个参数 (a0),请查看 /usr/include/linux/net.h;有关第二个参数 (a1),请查看 /usr/src/linux/include/linux/socket.h。AMD64/Intel 64 等 64 位平台不会对 socketcall 系统调用使用多路转换。对于这些平台,请将规则注释掉,并添加对 PF_INET6 进行过滤的普通系统调用规则。

2

审计 socketcall 系统调用。过滤标志设置为过滤 a0=5(socketcall 的第一个参数),如果您检查 /usr/include/linux/net.h,会发现此设置转换为 accept 系统调用。AMD64/Intel 64 等 64 位平台不会对 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

1

审计与 IPC SYSV 消息队列相关的系统调用。在本例中,a0 值指定要针对 msgctl 和 msgget 系统调用(1413)添加审计。AMD64/Intel 64 等 64 位平台不会对 ipc 系统调用使用多路转换。对于这些平台,请将前两条规则注释掉,并添加不含参数过滤的普通系统调用规则。

2

审计与 IPC SYSV 消息信号相关的系统调用。在本例中,a0 值指定要针对 semctl、semget、semop 和 semtimedop 系统调用(3214)添加审计。AMD64/Intel 64 等 64 位平台不会对 ipc 系统调用使用多路转换。对于这些平台,请将前四条规则注释掉,并添加不含参数过滤的普通系统调用规则。

3

审计与 IPC SYSV 共享内存相关的系统调用。在本例中,a0 值指定要针对 shmctl 和 shmget 系统调用(2423)添加审计。AMD64/Intel 64 等 64 位平台不会对 ipc 系统调用使用多路转换。对于这些平台,请将前两条规则注释掉,并添加不含参数过滤的普通系统调用规则。

36.7 使用键管理审计事件记录

配置了一些会生成事件的规则并填充日志后,您需要找到一种方法来辨别不同的事件。使用 ausearch 命令可以根据不同的准则过滤日志。通过使用 ausearch -m MESSAGE_TYPE,您至少可以过滤特定类型的事件。但是,要过滤与特定规则相关的事件,需要在 /etc/audit/audit.rules 文件中将一个键添加到此规则。然后,每次该规则记录一个事件时,此键就会添加到相应事件记录。要检索这些日志项,只需运行 ausearch -k YOUR_KEY 获取与该规则相关且带有此特定键的记录列表。

例如,假设您已将下面的规则添加到规则文件:

-w /etc/audit/audit.rules -p wa

如果未向该规则指派键,您可能需要过滤 SYSCALLPATH 事件,然后使用 grep 或类似工具来隔离与上述规则相关的所有事件。现在,使用 -k 选项将一个键添加到上述规则:

-w /etc/audit/audit.rules -p wa -k CFG_audit.rules

您可以指定任何文本字符串作为键。使用不同的键前缀(CFGLOG 等)后接文件名来区分与不同文件类型(配置文件或日志文件)相关的各监测项。现在,可按如下所示查找与上述规则相关的所有记录:

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"