帮助

审计系统事件

为了确保操作系统的安全性和可靠性,必须密切关注其运行状况。这包括监控、日志分析,当然还有系统事件审计。虽然审计本身并不能防止安全事件的发生,但它在发现安全违规行为并随后加以消除方面发挥着重要作用。

为此可以使用一个名为 auditd 的专用工具,它可以监控并分析系统操作。审计系统会在处理系统调用(系统内核中的基本操作)的函数上设置触发器。这些触发器会根据管理员设定的规则被触发。所有这些操作的信息都会被记录到日志中,供之后分析。

使用 auditd 可以监控各种事件,例如系统的启动和关闭、应用程序的执行、文件的访问及其权限的更改、用户和组数据的更改、网络连接的建立、网络设置的更改等等。

安装

在大多数情况下,CentOS 系统已默认安装了 audit 软件包。

在 Debian / Ubuntu 上,可以执行以下命令进行安装:

sudo apt-get install auditd

安装的软件包包含以下几个工具:

  • auditctl — 管理审计系统、获取当前状态信息、添加和删除规则;
  • autrace — 审计进程引发的事件,类似于 strace 工具;
  • ausearch — 在日志中搜索事件;
  • aureport — 生成审计运行报告。

auditd 守护进程的主要配置参数(如日志格式、刷新频率、最大大小等)在配置文件 /etc/audit/auditd.conf 中设置。通常默认设置已足以完成审计,但如有需要,您也可以根据自己的需求进行额外修改。参数的详细说明可以参阅此处,或查看 man auditd.conf 手册。

创建规则

规则通过 auditctl 工具及以下选项进行配置:

  • -l — 列出已创建的规则(安装 auditd 后,规则列表为空);
  • -a — 添加新规则;
  • -d — 从列表中删除规则;
  • -D — 删除所有规则。

使用以下命令创建新规则:

sudo auditctl -a list,action -S syscall_name -F filter

列表 (list) 是规则所适用的事件集合。可以把列表理解为一种过滤器,它能让规则更加精确。

列表共有五种:

  • task — 与创建进程相关的事件;
  • entry — 进入系统调用时发生的事件;
  • exit — 系统调用结束时发生的事件;
  • user — 与用户空间参数(uid、pid 和 gid)相关的事件;
  • exclude — 用于将事件排除在监控之外。

在实践中,最常用的是 entry 和 exit。

动作 (action) 决定事件发生后要执行的操作:将其写入日志 (always) 或不写入 (never)。

系统调用名称指定触发器针对哪个系统调用触发并捕获事件(例如 open、close、exit 等)。

过滤器 (filter) 是可选项,用于设置附加参数。例如,要监控对 /etc 目录中文件的访问,可以在此参数中指定该目录:

sudo auditctl -a exit,always -S open -F path=/etc/

可以同时使用多个过滤器,以更精确地定义需要关注的事件,例如具有 w(写入)和 a(属性更改)权限的文件更改:

sudo auditctl -a exit,always -S open -F path=/etc/ -F perm=wa

在配置文件监控规则时,可以不指定系统调用名称(-S 选项):

sudo auditctl -a exit,always -F path=/etc/ -F perm=wa

要监控某个特定文件,可以使用更简短的形式(-p 选项替代 perm):

sudo auditctl -w /etc/passwd -p wa

audit.rules 文件

规则也可以写入 /etc/audit/audit.rules 文件中保存。这样规则将永久生效。

这种情况下规则的语法相同,只需省略 auditctl 命令,例如:

-w /etc/passwd -p wa

文件开头通常定义元规则,用于设置基本参数:

# 清除之前的所有规则
-D 

# 设置用于存储消息的缓冲区数量 
-b 320 

# 缓冲区溢出时的操作:0 — 不执行任何操作;1 — 向 dmesg 发送消息;2 — 触发内核崩溃 (kernel panic) 
-f 1

接下来是用户自定义规则。

以下是监控各类事件的规则示例:

# 监控审计系统的配置文件 
-w /etc/audit/auditd.conf -p wa 
-w /etc/audit/audit.rules -p wa

# 监控日志文件 
-w /var/log/audit/ 
-w /var/log/audit/audit.log 

# 监控 at 的设置和任务 
-w /var/spool/at 
-w /etc/at.allow 
-w /etc/at.deny 

# 监控密码和组文件 
-w /etc/group -p wa 
-w /etc/passwd -p wa 
-w /etc/shadow 

# 监控登录相关的配置文件和日志文件 
-w /etc/login.defs -p wa 
-w /etc/securetty 
-w /var/log/faillog 
-w /var/log/lastlog 

# 监控主机列表和主机名 
-w /etc/hosts -p wa 

# 监控守护进程的启动脚本 
-w /etc/init.d/ 
-w /etc/init.d/auditd -p wa 

# 监控 SSH 服务器设置 
-w /etc/ssh/sshd_config 

# 跟踪文件访问权限的更改 
-a entry,always -S chmod -S fchmod -S chown -S chown32 -S fchown -S fchown32 -S lchown -S lchown32 

# 跟踪文件的创建、打开和大小更改 
-a entry,always -S creat -S open -S truncate -S truncate64 -S ftruncate -S ftruncate64 

# 跟踪目录的创建和删除 
-a entry,always -S mkdir -S rmdir 

# 跟踪链接的删除和创建 
-a entry,always -S unlink -S rename -S link -S symlink 

# 监控文件系统的挂载操作 
-a entry,always -S mount -S umount -S umount2

修改配置文件后,需要重启 auditd 使更改生效:

sudo service auditd restart

分析审计日志

审计系统的日志文件保存在 /var/log/audit 路径下。分析这些文件可以使用 ausearch 和 aureport 工具,它们功能丰富,能够根据指定条件基于日志数据生成详细的报告。

这些工具的更多参数和选项可以在文档(man aureport 和 man ausearch)或在线资源中找到,例如此处。

要生成文件相关的报告,可以使用带 -f 选项的 aureport:

sudo aureport -f

您还可以将报告限定在特定的时间段内:

sudo aureport --start MM/DD/YY HH:MM:SS --end MM/DD/YY HH:MM:SS

# 例如:

sudo aureport -f --start 08/20/20 12:00 --end 08/20/20 13:00

指定时间段时还可以使用以下关键字:

  • now(当前时间),
  • recent(最近十分钟),
  • today(今天,从午夜开始),
  • yesterday(昨天),
  • this-week(本周),
  • this-month(本月),
  • this-year(今年)。

命令输出包含大量信息,为了简化分析,可以使用 --summary 选项,获取每个文件被访问情况的简要概览。

sudo aureport -f -i --start recent --summary

如果发现可疑的访问尝试,可以找出引发该事件的进程:

sudo aureport -f -i --start today | grep /etc/passwd

然后使用 ausearch 工具对每个事件进行更详细的分析:

sudo ausearch -a event_id

Ausearch 还可以根据多种参数查找事件,例如:

用户 ID(使用 -ui 选项):

sudo ausearch -ui 1111 --interpret

(--interpret 或 -i 选项可以将数据以易读的格式输出。)

可执行文件名(使用 -x 选项):

sudo ausearch -x /path/to/file

守护进程名称(使用 -tm 选项):

sudo ausearch -tm cron

系统调用(使用 -sc 选项):

sudo ausearch -sc ptrace

按时间限制结果时,可以使用与 aureport 相同的语法。

ausearch 所有可用选项的完整列表可以在文档(man ausearch)或在线资源中找到,例如此处。

如有任何疑问,请联系我们