17.4. 使用审计追踪

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

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

  1. # praudit /var/audit/AUDITFILE

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

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

  1. header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec
  2. exec arg,finger,doug
  3. path,/usr/bin/finger
  4. attribute,555,root,wheel,90,24918,104944
  5. subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100
  6. return,success,0
  7. trailer,133

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

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

由于审计日志可能非常大,因此可以使用选择记录子集 auditreduce。这个例子选择了所有为存储在 AUDITFILE 中的用户trhodes 产生的审计记录:

  1. # auditreduce -u trhodes /var/audit/AUDITFILE | praudit

audit 组的成员有权读取 /var/audit 中的审计跟踪。默认情况下,该组为空,因此只有 root 用户可以读取审计跟踪。可以将用户添加到 audit 组中以委派审计审查权限。由于跟踪审计日志内容的能力提供了对用户和进程行为的重要洞察,因此建议谨慎执行审计审查权限的委派。

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

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

  1. # praudit /dev/auditpipe

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

  1. add path 'auditpipe*' mode 0440 group audit

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

警告:

审计事件反馈周期很容易产生,其中查看每个审计事件会导致生成更多审计事件。例如,如果所有网络 I/O 都经过审计,并且 praudit 从 SSH 会话运行,则会以高速率生成连续的审计事件流,因为每个被打印的事件都会生成另一个事件。出于这个原因,建议在审计管道设备上从会话运行 praudit ,而不进行细粒度的I/O审计。

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

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

  1. # audit -n

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

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

  1. 0 */12 * * * root /usr/sbin/audit -n

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

可以使用 audit_control 中的 filesz 根据文件大小自动旋转审计跟踪文件,如 The audit_control File 中所述。

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

  1. #
  2. # Compress audit trail files on close.
  3. #
  4. if [ "$1" = closefile ]; then
  5. gzip -9 $2
  6. fi

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