1.6.4 审计框架auditd与规则编写

审计框架auditd与规则编写#

审计框架(auditd)用于记录关键安全事件与系统行为,满足合规、追责与安全监控需求。它通过内核审计子系统采集事件,由审计守护进程持久化到日志文件(通常为/var/log/audit/audit.log),并支持规则驱动的细粒度审计与过滤。

原理与架构草图#

文章图片

组件与工作流程#

  • 内核审计子系统:捕获系统调用、文件访问、权限变更等事件。
  • auditd守护进程:接收内核事件并写入日志。
  • 审计规则:定义监控范围、条件与动作。
  • 管理工具:auditctl用于临时规则;augenrules/auditctl -R用于加载持久规则;ausearchaureport用于检索与报表。

安装与基础配置(含命令解释)#

# RHEL/CentOS
yum install -y audit

# Debian/Ubuntu
apt update && apt install -y auditd

# 启用并立即启动
systemctl enable --now auditd

# 解释:
# enable --now:写入开机自启并立刻启动服务

关键配置文件与示例:
- /etc/audit/auditd.conf:日志位置、最大文件大小、保留策略、磁盘满行为等
- /etc/audit/rules.d/*.rules:持久规则文件,建议按功能拆分

示例配置片段(/etc/audit/auditd.conf):

log_file = /var/log/audit/audit.log
max_log_file = 50
num_logs = 10
space_left = 200
space_left_action = SYSLOG
admin_space_left_action = HALT

规则编写基础(含可执行示例)#

规则核心类型:
- 文件监控(watch规则):监控文件/目录访问与变更
- 系统调用规则(syscall规则):监控进程对系统调用的使用

常用语法要点:
- -w 监控路径;-p 权限掩码(r读/w写/x执行/a属性变更);-k 关键字
- -a 规则列表与动作(常用:-a always,exit
- -S 指定系统调用
- -F 过滤条件(如用户、UID、架构、路径、权限、进程名等)

示例一:监控关键配置文件变更(watch规则)#

创建持久规则文件:

cat >/etc/audit/rules.d/10-identity.rules <<'EOF'
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k privilege
EOF

加载并验证:

augenrules --load
auditctl -l | grep identity

示例二:监控执行提权命令(syscall规则)#

cat >/etc/audit/rules.d/20-privilege.rules <<'EOF'
# 仅审计 64 位架构的 execve,且 euid=0(以root身份执行)
-a always,exit -F arch=b64 -S execve -F euid=0 -k rootcmd
EOF

augenrules --load
auditctl -l | grep rootcmd

日志查询与报表(命令解释 + 预期效果)#

# 按关键字搜索
ausearch -k identity

# 今日时间范围内搜索
ausearch -ts today -k ssh

# 汇总命令执行统计
aureport -x --summary

预期效果:
- ausearch 输出匹配的事件记录(含 pid、uid、路径、系统调用结果)
- aureport 输出命令执行统计(命令名与次数)

验证与联动示例(前后衔接)#

  1. 修改 /etc/sudoers 触发审计:
cp /etc/sudoers /etc/sudoers.bak
echo "# audit test" >> /etc/sudoers
  1. 查询审计日志:
ausearch -k privilege -ts recent
  1. 清理现场:
mv /etc/sudoers.bak /etc/sudoers

规则加载与持久化说明#

  • 临时加载(重启后失效):
auditctl -w /etc/ssh/sshd_config -p wa -k ssh
  • 持久化规则(推荐):
cat >/etc/audit/rules.d/30-ssh.rules <<'EOF'
-w /etc/ssh/sshd_config -p wa -k ssh
-w /root/.ssh/ -p wa -k sshkey
EOF
augenrules --load

常见问题排查(含命令)#

  1. 规则未生效
systemctl status auditd
augenrules --load
auditctl -l
  • 解释:确认服务运行、规则已加载、当前规则可见
  1. 日志不更新
ls -l /var/log/audit/audit.log
df -h /var/log
grep -E 'log_file|max_log_file|space_left' /etc/audit/auditd.conf
  1. 事件重复(b32/b64重复)
auditctl -l | grep arch
  • 解释:仅保留必要架构规则,避免重复记录
  1. 性能下降(规则过泛)
auditctl -l | wc -l
  • 解释:减少通配 syscall 规则,缩小目录监控范围

练习与实践任务#

  1. 练习1:审计用户管理命令
    - 目标:审计 useradd/usermod
    - 要求:写入 /etc/audit/rules.d/40-user.rules 并加载
    - 预期:执行 useradd 后可通过 ausearch -k user_mgmt 查到记录

  2. 练习2:审计文件删除
    - 目标:审计 unlink/rename
    - 要求:添加 syscall 规则并验证
    - 预期:删除任意测试文件后,ausearch -k delete 有记录

  3. 练习3:日志保留策略验证
    - 目标:设置 max_log_file=1 并生成日志
    - 要求:验证日志滚动是否生效
    - 预期:/var/log/audit 目录出现多个 audit.log.* 文件