19.3.审计配置

对事件审计的用户空间支持作为 FreeBSD 基本系统的一部分被预置。GENERIC 内核默认提供了内核的支持,并且可以通过在 /etc/rc.conf 中添加以下行来启用 auditd(8)

auditd_enable="YES"

然后,启动审计守护进程:

# service auditd start

喜欢编译定制内核的用户必须在其定制内核配置文件中包含以下行:

options AUDIT

19.3.1.事件选择表达式

审计配置中的许多地方都使用到了选择表达式,以确定应该审计哪些事件。表达式包含要匹配的事件类列表。选择表达式从左到右计算,两个表达式通过将一个附加到另一个来组合。

默认审计事件类 总结了默认审计事件类:

表 1. 默认审计事件类

类型名称

说明

操作

all

全部

匹配所有事件类。

aa

认证和授权

ad

管理

对整个系统执行的管理操作。

ap

应用

应用程序定义的操作。

cl

文件关闭

审计对 close 系统调用的调用。

ex

执行

审计程序的执行。审计命令行参数和环境变量是通过使用 audit_control(5)policyargvenvv 参数来控制的。

fa

文件属性访问

审计对象属性的访问,如 stat(1)pathconf(2)

fc

文件创建

审计创建文件的事件。

fd

文件删除

审计文件删除的事件。

fm

文件属性修改

审计文件属性被修改的事件,例如 chown(8)chflags(1)flock(2)

fr

文件读取

对读取数据或打开文件进行读取的审计事件。

fw

文件写入

对写入数据、写入文件或修改文件的事件进行审计。

io

ioctl

审计 ioctl 系统调用的使用。

ip

ipc

审计各种形式的进程间通信,包括 POSIX 管道和 System V IPC 操作。

lo

登录_注销

审计 login(1)logout(1) 事件。

na

无归属

审计无归属的事件。

no

无效的类

不匹配审计事件。

nt

网络

审计与网络操作相关的事件,例如 connect(2)accept(2)

ot

其他

审计杂项事件。

pc

过程

审计进程操作,例如 exec(3)exit(3)

这些审计事件类可以通过修改 audit_classaudit_event 配置文件来定制。

每个审计事件类可以与一个前缀组合,该前缀指示是否匹配成功/失败的操作,以及条目是添加还是删除类和类型的匹配。审计事件类的前缀总结了可用的前缀:

表 2. 审计事件类的前缀

前缀

操作

审计此类中的成功事件。

审计此类中的失败事件。

^

审计此类中既不成功也不失败的事件。

^+

不要审计此类中的成功事件。

^-

不要审计此类中的失败事件。

如果不存在前缀,则将审计事件的成功和失败实例。

以下示例选择字符串选择成功和失败的登录/注销事件,但仅选择成功的执行事件:

lo,+ex

19.3.2.配置文件

/etc/security 中可以找到以下用于安全事件审计的配置文件:

  • audit_class :包含审计类的定义。

  • audit_control :控制审计子系统的各个方面,例如默认审计类、审计日志卷上保留的最小磁盘空间以及最大审计跟踪大小。

  • audit_event :系统审计事件的文本名称和描述以及每个事件所在类的列表。

  • audit_user :用户特定的审计要求与登录时的全局默认值相结合。

  • audit_warnauditd(8) 使用的可定制的 shell 脚本,用于在异常情况下生成警告消息,例如当审计记录的空间不足或审计跟踪文件已轮替时。

警告

应仔细编辑和维护审计配置文件,因为错误配置可能导致不正确的事件记录。

在大多数情况下,管理员只需修改 audit_controlaudit_user。第一个文件控制系统范围的审计属性和策略,第二个文件可用于用户的审计微调。

19.3.2.1. audit_control 文件

audit_control 中指定了一些审计子系统的默认值:

dist:off
flags:lo,aa
minfree:5
naflags:lo,aa
policy:cnt,argv
filesz:2M
expire-after:10M

dir 条目用于设置将存储审计日志的一个或多个目录。如果出现多个目录条目,它们将在存储时按顺序使用。通常配置审计,以便审计日志存储在专用文件系统上,以防止在文件系统用完时引起审计子系统与其他子系统之间的干扰。

如果将 dist 字段设置为 onyes,将创建指向 /var/audit/dist 中所有跟踪文件的硬链接。

flags 字段为归属事件设置系统范围的默认预选掩码。在上面的示例中,对所有用户的成功和失败登录/注销事件以及身份验证和授权进行审计。

minfree 条目定义了存储审计跟踪的文件系统的最小可用空间百分比。

naflags 条目指定了要针对无归属事件进行审计的审计类,例如登录/注销过程以及身份验证和授权。

policy 条目指定了一个以逗号分隔的策略标志列表,用于控制审计行为的各个方面。cnt 表示尽管审计失败,系统仍应继续运行(强烈建议使用此标志)。另一个标志 , argv 会让 execve(2) 系统调用的命令行参数作为命令执行的一部分被审计。

filesz 条目指定了在自动终止和轮替跟踪文件之前审计跟踪的最大大小。0 值禁用自动日志轮替。如果请求的文件大小低于 512k 的最小值,它将被忽略并生成一条日志消息。

expire-after 字段指定审计日志文件何时到期并被删除。

19.3.2.2. audit_user 文件

管理员可以在 audit_user 中为特定用户进一步指定审计要求。每行通过两个字段为用户配置审计:alwaysaudit 字段指定应始终为用户审计的 neveraudit 一组事件,该字段指定一组不应为用户审计的事件。

以下示例条目审计登录/注销事件和成功的命令执行—— root 以及文件创建和成功执行的 www 命令。如果与默认的 audit_control 一起使用,则 lo 条目 root 是多余的,并且对 www 的登录/注销事件也将被审计。

root:lo,+ex:no
www:fc,+ex:no