审计系统事件
为了确保操作系统的安全性和可靠性,必须密切关注其运行状况。这包括监控、日志分析,当然还有系统事件审计。虽然审计本身并不能防止安全事件的发生,但它在发现安全违规行为并随后加以消除方面发挥着重要作用。
为此可以使用一个名为 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)或在线资源中找到,例如此处。