审计框架

出自 ArchWiki

Linux 审计框架提供了一个符合 CAPP(受控访问保护配置文件)的审计系统,该系统可靠地收集关于系统上任何安全相关(或非安全相关)事件的信息。它可以帮助您跟踪系统上执行的操作。

Linux 审计通过为您提供详细分析系统上正在发生的事情的手段,帮助您使系统更加安全。然而,它本身并不提供额外的安全性——它不保护您的系统免受代码故障或任何类型的漏洞利用。相反,审计对于跟踪这些问题很有用,并帮助您采取额外的安全措施来预防它们。

审计框架的工作原理是监听内核报告的事件,并将它们记录到日志文件中。

注意: 容器的审计框架兼容性已在 Linux 3.15 中修复,请参阅 [1],但是解释审计记录可能很困难,因为对命名空间 ID 的支持仍在进行中,请参阅 [2]

安装

内核内建的审计支持在所有官方支持的内核中都可用。对于自定义内核,应启用 CONFIG_AUDIT。用户空间支持由 audit 软件包提供,该软件包已作为 base 软件包的依赖项安装。

可以通过将 audit=1 设置为内核参数在启动时启用审计。这将确保在审计守护进程启动之前运行的所有进程都被内核标记为可审计的。不这样做将导致一些进程无法正确审计。请参阅 auditd(8)

注意: 为了完全禁用审计并阻止审计消息出现在 journal 中,您可以将 audit=0 设置为内核参数和/或 屏蔽 systemd-journald-audit.socket

审计框架由 auditd 守护进程组成,该守护进程负责写入通过审计内核接口生成并由应用程序和系统活动触发的审计消息。启动/启用 auditd.service 以激活守护进程。

此守护进程可以通过几个命令和文件进行控制

  • auditctl(8):用于动态控制守护进程的行为,添加规则等。
  • /etc/audit/audit.rules:包含 auditd 守护进程的规则和各种参数。有关详细信息,请参阅 audit.rules(7)
  • aureport(8):生成系统活动报告
  • ausearch(8):搜索各种事件
  • auditspd:守护进程,可用于将事件通知中继到其他应用程序,而不是将它们写入审计日志中的磁盘
  • autrace:此命令可用于跟踪进程,类似于 strace。
  • /etc/audit/auditd.conf:与日志记录相关的配置文件。有关详细信息,请参阅 auditd.conf(5)

添加规则

在添加规则之前,您必须知道审计框架可能非常冗长,并且每个规则都必须在有效部署之前仔细测试。实际上,仅一个规则就可能在几分钟内淹没您的所有日志。

审计文件和目录访问

审计框架最基本的用途是记录对您想要的文件的访问。为此,您必须使用选项 -w 后跟路径在文件或目录上放置监视。要设置的最基本规则是跟踪对 passwd 文件的访问

# auditctl -w /etc/passwd -p rwxa

您可以使用以下命令跟踪对文件夹的访问

# auditctl -w /etc/security/

第一个规则跟踪对文件 /etc/passwd 的每次读取 r、写入 w、执行 x、属性更改 a。第二个规则跟踪对 /etc/security/ 文件夹的任何访问。

您可以使用以下命令列出所有活动规则

# auditctl -l

您可以使用以下命令删除所有规则

# auditctl -D

验证规则后,您可以将它们附加到 /etc/audit/audit.rules 文件中

-w /etc/passwd -p rwxa
-w /etc/security/

审计系统调用

审计框架允许您使用 -a 选项审计执行的系统调用。

一个与安全相关的规则是跟踪 chmod(2) 系统调用,以检测文件所有权更改

# auditctl -a exit,always -S chmod

有关所有系统调用的列表:syscalls(2)

有很多规则和可能性可用,请参阅 auditctl(8)audit.rules(7)

过滤不需要的消息

为了防止嘈杂的审计消息淹没系统日志,您可以添加规则来排除其中一些消息

/etc/audit/rules.d/quiet.rules
-A exclude,always -F msgtype=SERVICE_START
-A exclude,always -F msgtype=SERVICE_STOP
-A exclude,always -F msgtype=BPF
-A exclude,always -F exe=/usr/bin/sudo

请记住验证更改(必要时进行修复)并按如下方式重新生成 /etc/audit/audit.rules

# augenrules --check
# augenrules --load

搜索日志

审计框架提供了一些工具,以简化系统上发生的事件的使用和研究。

使用 pid

您可以使用 ausearch 搜索与特定 pid 相关的事件

# ausearch -p 1

此命令将显示根据您的规则记录的与 PID 1(即 systemd)相关的所有事件。

使用键

审计框架的强大功能之一是其使用 keys 管理事件的能力,建议使用这种用法。

您可以在规则中使用 -k 选项,以便轻松找到相关事件

# auditctl -w /etc/passwd -p rwxa -k KEY_pwd

然后,如果您搜索键为 KEY_pwd 的事件,ausearch 将仅显示与文件 /etc/passwd 相关的事件。

# ausearch -k KEY_pwd

查找异常

aureport 工具可用于快速报告系统上执行的任何异常事件,包括混杂模式下使用的网络接口、进程或线程崩溃或退出并显示 ENOMEM 错误等。

使用 aureport 最简单的方法是

# aureport -n

aureport 可用于生成自定义报告,请参阅 aureport(8)

哪些文件或系统调用值得审计?

请记住,添加的每个审计规则都会生成日志,因此您必须准备好处理大量信息。基本上,每个与安全相关的事件/文件都必须受到监控,例如 ids、ips、反 rootkit 等。另一方面,跟踪每个写入系统调用是完全无用的,最小的编译也会用此事件填充您的日志。

可以设置更复杂的规则集,在非常精细的基础上执行审计。如果您想这样做,请参阅 auditctl(8)

从不同主机收集日志

审计框架具有插件系统,该系统提供了将本地日志文件发送到远程 auditd 的可能性。

发送日志文件

要将日志文件发送到远程主机,您需要 audisp-remote 插件,该插件随 audit 软件包自动提供。激活插件

/etc/audisp/plugins.d/au-remote.conf
active = yes
direction = out
path = /usr/bin/audisp-remote
type = always
format = string

并设置应将日志发送到的远程主机

/etc/audisp/audisp-remote.conf
remote_server = domain.name.or.ip
port = 60
##local_port = optional
transport = tcp

接收日志文件

要使审计监听远程 audispd,您只需设置 tcp 选项

/etc/audit/auditd.conf
tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535 #optional
tcp_client_max_idle = 0

现在,您可以在接收审计守护进程的日志文件中查看所有已配置主机的日志。

轮换日志

向审计守护进程发送 SIGUSR1

# pkill -USR1 -x auditd

故障排除

审计日志涌入虚拟控制台

对于未启用 auditd 的用户,使用高于 loglevel=4 的内核调试消息可能会导致审计安全通知涌入虚拟终端顶部。

可以通过启用 auditd.service 来消除这些消息。

替代解决方案是

  • 降低您的 loglevel,
  • 使用内核参数 audit=0 禁用审计日志。

有关详细信息,请参阅 GitHub 上的 systemd issue 15324

参见