第十九章 安全事件审计

第十九章 安全事件审计19.1. 简介19.2. 关键术语19.3. 审核配置19.3.1. 事件选择表达式19.3.2. 配置文件19.3.2.1. audit_control 文件19.3.2.2. audit_user 文件19.2. 使用审计跟踪19.4.1. 使用审计管道进行实时监控19.4.2. 旋转和压缩审计跟踪文件

19.1. 简介

FreeBSD操作系统包括对安全事件审计的支持。事件审计支持对各种与安全相关的系统事件进行可靠、细粒度和可配置的日志记录,包括登录、配置更改以及文件和网络访问。这些日志记录对于实时系统监控、入侵检测和事后分析非常有价值。FreeBSD实现Sun™已发布的基本安全模块(Basic Security Module,BSM)应用程序编程接口(Application Programming Interface,API)和文件格式,并可与Solaris™和Mac OS®X审计实现互操作。

本章重点介绍事件审计的安装和配置。它解释了审计策略,并提供了一个审计配置示例。

阅读本章后,你会知道:

• 什么是事件审计以及它是如何工作的。 • 如何在FreeBSD上为用户和进程配置事件审计。 • 如何使用审计缩减和审查工具审查审计跟踪。

在阅读本章之前,您应该:

• 了解UNIX®和FreeBSD基础知识(【3. FreeBSD基础知识】)。 • 熟悉内核配置/编译的基础知识(【10. 配置FreeBSD内核】)。 • 熟悉安全性以及它与FreeBSD(【16. 安全】)的关系。

19.2. 关键术语

以下术语与安全事件审计有关:

19.3. 审核配置

事件审计的用户空间支持作为基本FreeBSD操作系统的一部分安装。默认情况下,GENERIC内核中提供内核支持,可以通过在 /etc/rc.conf 中添加以下行来启用 audit(8)

然后启动audit守护进程:

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

19.3.1. 事件选择表达式

选择表达式用于审核配置中的多个位置,以确定应审核哪些事件。表达式包含要匹配的事件类列表。从左到右计算选择表达式,并通过将一个表达式附加到另一个表达式上来组合两个表达式。

下表默认审核事件类总结了默认审核事件类别:

表32. 默认审核事件类

类名描述行动
allall匹配所有活动类别。
aa认证与授权
authentication
authorization
 
ad管理的对整个系统执行的管理操作。
ap应用应用程序定义的操作。
cl文件关闭审计调用 close 系统调用。
ex运行审计程序执行。
命令行参数和环境变量的审核是通过 audit_control(5) 使用 policy 设置的 argvenvv 参数来控制的。
fa文件属性访问审核 stat(1)pathconf(2) 等对象属性的访问。
fc文件创建作为结果创建文件的审核事件。
fd文件删除发生文件删除的审核事件。
fm文件属性修改发生文件属性修改的审核事件,如 chown(8)chflags(1)flock(2)
fr文件读取读取数据或打开文件进行读取的审核事件。
fw文件写写入数据或写入或修改文件的审核事件。
ioioctl审核 ioctl 系统调用的使用情况。
ipipc审核各种形式的进程间通信(Inter-Process Communication),包括POSIX管道和System V IPC操作。
lologin_logout审计 login(1)logout(1) 事件
na不可归属的审计不可归属事件。
no无效类不匹配审核事件。
nt网络审核与 connect(2)accept(2) 等网络操作相关的事件。
ot其他审核杂项事件。
pc进程审计进程操作,如 exec(3)exit(3)

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

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

表33. 审核事件类的前缀

前缀动作
+审核此类中的成功事件。
-审核此类中的失败事件。
^审核此类中既不成功也不失败的事件。
^+不要审核此类中的成功事件。
^-不要审核此类中的失败事件。

如果没有前缀,则将审核事件的成功和失败实例。

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

19.3.2. 配置文件

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

audit_class:包含审计类的定义。 audit_control:控制审计子系统的各个方面,如默认审计类、审计日志卷上留下的最小磁盘空间和最大审计跟踪大小。 audit_event:系统审计事件的文本名称和描述,以及每个事件所属类的列表。 audit_user:用户特定的审计要求,与登录时的全局默认值相结合。 audit_warn:audit(8)使用的一个可定制的shell脚本,用于在特殊情况下生成警告消息,例如当审计记录的空间不足或审计跟踪文件已轮换时。

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

19.3.2.1. audit_control 文件

audit_control中指定了审核子系统的许多默认值:

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中为特定用户指定进一步的审核要求。每一行都通过两个字段为用户配置审计: alwayaudit 字段指定了一组应该始终为用户审计的事件, neveraudit 字段则指定了一系列不应该为用户审计。

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

19.2. 使用审计跟踪

由于审计跟踪以BSM二进制格式存储,因此有几个内置工具可用于修改这些跟踪或将其转换为文本。要将轨迹文件转换为简单的文本格式,请使用 praudit 。要减少用于分析、归档或打印目的的审计跟踪文件,请使用 auditreduce 。此实用程序支持各种选择参数,包括事件类型、事件类、用户、事件的日期或时间以及所作用的文件路径或对象。

例如,要以纯文本形式转储指定审核日志的全部内容:

其中AUDITFILE是要转储的审核日志。

审计跟踪由一系列由令牌组成的审计记录组成,praudit 按顺序打印,每行一个。每个令牌都是特定类型的,例如 header (审计记录标头)或路径(来自名称查找的文件路径)。以下是一个 execve 事件的示例:

此审计表示执行调用成功,其中运行了命令 finger dougexec arg 令牌包含shell向内核呈现的已处理命令行。 path 标记保存内核查找的可执行文件的路径。 attribute 标记描述二进制文件并包括文件模式。 subject 令牌存储审计用户ID、有效用户ID和组ID、真实用户ID和组ID、进程ID、会话ID、端口ID和登录地址。请注意,审计用户ID和真实用户ID不同,因为用户 robert 在运行此命令之前切换到了 root 帐户,但它是使用原始经过身份验证的用户进行审计的。 return 令牌表示执行成功, trailer 结束记录。

还支持XML输出格式,可以通过包含 -x 来选择。

由于审计日志可能非常大,因此可以使用 auditreduce 选择一部分记录。此示例选择为存储在AUDITFILE中的用户 trhodes 生成的所有审核记录:

audit 组的成员有权读取/var/audit中的审核跟踪。默认情况下,此组为空,因此只有root用户可以读取审核跟踪。可以将用户添加到 audit 组中,以委派审核审查权限。由于跟踪审计日志内容的能力可以深入了解用户和流程的行为,因此建议谨慎执行审计审查权的委托。

19.4.1. 使用审计管道进行实时监控

审计管道是克隆伪设备,允许应用程序访问实时审计记录流。这主要是入侵检测和系统监控应用程序的作者感兴趣的。然而,审计管道设备是管理员允许实时监控的一种方便方式,而不会遇到审计跟踪文件所有权或日志轮换中断事件流的问题。要跟踪实时审核事件流,请执行以下操作:

默认情况下,审核管道设备节点只能由root用户访问。要使audit 组的成员可以访问它们,请在 /etc/devfs.rules 中添加一个 devfs 规则:

有关配置devfs文件系统的更多信息,请参阅 devfs.rules(5)

19.4.2. 旋转和压缩审计跟踪文件

审计跟踪由内核写入,并由审计守护进程 auditd(8) 管理。管理员不应尝试使用 newsyslog.conf(5) 或其他工具直接轮换审计日志。相反, audit 应用于关闭审计、重新配置审计系统和执行日志轮换。以下命令使审核守护进程创建一个新的审核日志,并向内核发出信号,要求其切换到使用新日志。旧日志将被终止并重命名,此时管理员可以对其进行操作:

如果 audit(8) 当前未运行,则此命令将失败并生成错误消息。

将以下行添加到 /etc/crontab 将每十二小时安排一次轮换:

保存 /etc/crontab 后,更改将生效。

使用 audit_control 中的 filesz ,可以根据文件大小自动旋转审计跟踪文件,如【19.3.2.1. audit_conntrol文件】中所述。

由于审计跟踪文件可能会变得非常大,因此通常希望在审计守护进程关闭跟踪后压缩或以其他方式存档跟踪。audit_warn脚本可用于对各种与审计相关的事件执行自定义操作,包括在轮换审计跟踪时彻底终止审计跟踪。例如,可以将以下内容添加到 /etc/security/audit_warn 中,以压缩关闭时的审计跟踪:

其他归档活动可能包括将跟踪文件复制到集中式服务器、删除旧跟踪文件或减少审计跟踪以删除不需要的记录。仅当审计跟踪文件完全终止时,才会运行此脚本。它不会在不当关闭后未端接的轨道上运行。