3. 审计框架介绍:Linux审计系统架构、auditd组件、内核审计子系统
Linux 审计系统是内核级安全事件采集与记录的基础设施,它不依赖第三方软件,而是由内核审计子系统、用户空间守护进程和规则管理工具三层构成。理解这一架构是进行系统调用审计日志分析的前提。
3.1 三层架构总览
Linux 审计系统采用“内核采集 — 用户态守护进程 — 规则管理”的分层设计。内核审计子系统负责捕获系统调用和内核事件;auditd 守护进程负责接收、过滤、写入日志;auditctl 等工具负责加载规则和控制行为。
架构要点: 内核审计子系统独立于 LSM(Linux Security Module),不依赖 SELinux 或 AppArmor,可单独启用。审计日志默认写入
/var/log/audit/audit.log。
3.2 内核审计子系统(kauditd)
内核审计子系统是审计能力的源头,编译进内核(CONFIG_AUDIT=y)后常驻运行。它不依赖任何用户态进程,即使 auditd 未启动,内核仍可缓存事件。
| 组件 | 功能 | 关键参数 |
|---|---|---|
| 系统调用拦截点 | 在 syscall 入口/出口处插入审计钩子 | audit_enabled(sysctl) |
| 事件上下文采集 | 记录 UID、GID、PID、SID、系统调用号、参数、返回值 | audit_backlog_limit |
| netlink 通信 | 通过 AF_NETLINK 套接字将事件发送至 auditd |
audit_rate_limit |
| 缓冲区管理 | 内核事件队列,防止丢失 | /proc/sys/kernel/audit_backlog_limit |
排查提示: 若
auditd 未运行,内核事件会堆积在 skb 队列中。当队列满时,内核会丢弃新事件并记录 audit: backlog limit exceeded 内核日志。
3.3 auditd 守护进程
auditd 是用户空间的核心组件,负责从内核接收审计事件、执行规则过滤、写入磁盘日志文件,并可触发远程日志转发或执行脚本。
3.3.1 工作流程
- 接收: 通过 netlink 套接字读取内核发送的审计事件。
- 过滤: 根据
/etc/audit/audit.rules中的规则判断是否记录。 - 格式化: 将事件转换为标准审计日志格式(type=... msg=...)。
- 写入: 追加到
/var/log/audit/audit.log。 - 分发: 可选通过
audispd插件转发至 syslog、远程服务器或执行脚本。
3.3.2 关键配置文件
| 文件路径 | 用途 | 典型内容 |
|---|---|---|
/etc/audit/auditd.conf |
守护进程行为配置 | 日志文件大小、保留轮转、磁盘空间告警 |
/etc/audit/audit.rules |
审计规则定义 | -w /etc/passwd -p wa -k passwd_change |
/etc/audit/plugins.d/ |
audispd 插件配置 | syslog 转发、远程日志服务器 |
3.4 审计规则体系
审计规则决定哪些系统调用或文件操作被记录。规则分为三类:
- 文件系统规则(-w): 监控特定文件或目录的读、写、执行、属性修改。
- 系统调用规则(-a): 监控特定系统调用及其参数,可基于 UID、PID、成功/失败等条件过滤。
- 可执行文件规则(-x): 监控特定程序的执行。
规则加载顺序:
auditctl -R /etc/audit/audit.rules 按行顺序加载。规则数量过多会增大内核审计缓冲区压力,建议控制在 200 条以内。
3.5 审计日志格式
审计日志每行以 type= 开头,包含事件类型、时间戳、序列号、系统调用信息等字段。典型格式如下:
type=SYSCALL msg=audit(1710000000.123:456): arch=c000003e syscall=59 success=yes exit=0
a0=7f8c4a0b2e00 a1=7f8c4a0b2f00 a2=7f8c4a0b3000 a3=7f8c4a0b3100
items=2 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0
egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash"
key="exec_shell"
| 字段 | 含义 | 安全分析用途 |
|---|---|---|
syscall=59 |
系统调用号(59 = execve) | 识别进程执行行为 |
success=yes |
系统调用是否成功 | 区分攻击尝试与成功利用 |
auid=1000 |
登录用户 ID(不可伪造) | 追溯真实用户身份 |
key="exec_shell" |
规则关联键值 | 快速过滤特定事件类别 |
3.6 审计系统状态检查
运维中常用以下命令确认审计系统运行状态:
# 检查 auditd 进程状态
systemctl status auditd
# 查看当前审计规则
auditctl -l
# 查看内核审计状态
auditctl -s
# 实时查看审计日志(tail 模式)
ausearch --tail
安全基线检查项: 生产环境应确保
auditd 开机自启、audit_backlog_limit 不低于 8192、日志轮转策略保留至少 90 天。
3.7 架构总结
Linux 审计系统的三层设计实现了安全事件采集与管理的解耦:内核专注高性能捕获,auditd 专注可靠记录,管理工具专注灵活查询。理解这一架构是后续章节中分析系统调用审计日志、溯源安全事件的基础。