17.3. 审计配置
对事件审计的用户空间支持作为基本 FreeBSD 操作系统的一部分被预装。GENERIC 内核默认提供内核支持,并且可以通过在 /etc/rc.conf
中添加以下行来启用 auditd(8):
auditd_enable="YES"
然后,启动审计守护进程:
# service auditd start
喜欢编译自定义内核的用户必须在其自定义内核配置文件中包含以下行:
options AUDIT
17.3.1. 事件选择表达式
审计配置中的许多地方都使用到了选择表达式,以确定应该审计哪些事件。表达式包含要匹配的事件类列表。选择表达式从左到右计算,两个表达式通过将一个附加到另一个来组合。
默认审计事件类 总结默认审计事件类:
表 1. 默认审计事件类
等级名称 | 描述 | 操作 |
---|---|---|
all | 全部 | 匹配所有事件类。 |
aa | 认证和授权 | |
ad | 行政的 | 对整个系统执行的管理操作。 |
ap | 应用 | 应用程序定义的操作。 |
cl | 文件关闭 | 审计对 close 系统调用的调用。 |
ex | 执行 | 审计程序执行。审计命令行参数和环境变量是通过 audit_control(5) 来控制的,使用 argv 和 envv 参数来设置 policy 。 |
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_class
和 audit_event
配置文件来定制。
每个审计事件类可以与一个前缀组合,该前缀指示是否匹配成功/失败的操作,以及条目是添加还是删除类和类型的匹配。 审计事件类 的前缀总结了可用的前缀:
表 2. 审计事件类的前缀
前缀 | 操作 |
---|---|
+ | 审核此类中的成功事件。 |
- | 审核此类中的失败事件。 |
^ | 审计此类中既不成功也不失败的事件。 |
^+ | 不要审核此类中的成功事件。 |
^- | 不要审核此类中的失败事件。 |
如果不存在前缀,则将审核事件的成功和失败实例。
以下示例选择字符串选择成功和失败的登录/注销事件,但仅选择成功的执行事件:
lo,+ex
17.3.2. 配置文件
在 /etc/security
中可以找到以下用于安全事件审计的配置文件:
audit_class
:包含审计类的定义。audit_control
:控制审计子系统的各个方面,例如默认审计类、审计日志卷上保留的最小磁盘空间以及最大审计跟踪大小。audit_event
:系统审计事件的文本名称和描述以及每个事件所在类的列表。audit_user
:用户特定的审计要求与登录时的全局默认值相结合。audit_warn
:auditd(8) 使用的可定制的 shell 脚本,用于在异常情况下生成警告消息,例如当审计记录的空间不足或审计跟踪文件已轮换时。
警告:
应仔细编辑和维护审核配置文件,因为错误配置可能导致不正确的事件记录。
在大多数情况下,管理员只需要修改 audit_control
和 audit_user
。第一个文件控制系统范围的审计属性和策略,第二个文件可用于用户的审计微调。
17.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
字段设置为 on
或 yes
,将创建指向 /var/audit/dist 中所有跟踪文件的硬链接。
该 flags
字段为归因事件设置系统范围的默认预选掩码。在上面的示例中,对所有用户的成功和失败登录/注销事件以及身份验证和授权进行审计。
该 minfree
条目定义存储审计跟踪的文件系统的最小可用空间百分比。
该 naflags
条目指定要针对非属性事件进行审计的审计类,例如登录/注销过程以及身份验证和授权。
该 policy
条目指定一个以逗号分隔的策略标志列表,用于控制审计行为的各个方面。cnt
表示尽管审计失败,系统仍应继续运行(强烈建议使用此标志)。另一个标志 , argv
导致 execve(2) 系统调用的命令行参数作为命令执行的一部分被审计。
该 filesz
条目指定在自动终止和轮换跟踪文件之前审计跟踪的最大大小。值 0 禁用自动日志轮换。如果请求的文件大小低于 512k 的最小值,它将被忽略并生成一条日志消息。
该 expire-after
字段指定审核日志文件何时到期并被删除。
17.3.2.2. audit_user
文件
管理员可以在 audit_user
中为特定用户指定进一步的审计要求。每行通过两个字段为用户配置审核:该 alwaysaudit
字段指定应始终为用户审核的 neveraudit
一组事件,该字段指定一组不应为用户审核的事件。
以下示例条目审核登录/注销事件和成功的命令执行 root
以及文件创建和成功的命令执行 www
。如果与默认的 audit_control
一起使用,则 lo
条目 root
是多余的,并且登录/注销事件也将被审计 www
。
root:lo,+ex:no
www:fc,+ex:no