auditd是linux内核审计子系统的用户空间守护进程,通过-a规则精准捕获execve、bpf、init_module等高危系统调用,结合arch、key、参数过滤实现高性能安全监控,并支持ausearch/aureport进行上下文关联分析。

在Linux中,auditd 是内核审计子系统的用户空间守护进程,能捕获系统调用(syscall)级别的详细事件,是排查内核级漏洞利用(如提权、eBPF滥用、驱动漏洞触发等)的关键工具。重点不是记录所有syscall(性能爆炸),而是精准过滤高风险行为。
配置 auditd 捕获关键系统调用
直接监控 syscall 需通过 -a 规则绑定到内核审计规则链(如 exit 或 task)。常用高危 syscall 包括:execve、openat、mmap、clone、fork、ioctl、init_module、delete_module、bpf、userfaultfd 等。
操作步骤:
- 编辑规则文件:
/etc/audit/rules.d/critical-syscalls.rules - 添加典型规则(以
execve和bpf为例):-a always,exit -F arch=b64 -S execve -k execve -a always,exit -F arch=b64 -S bpf -F key!=bpf_safe -k bpf_usage -a always,exit -F arch=b64 -S init_module,delete_module -k kernel_modules
- 重启 auditd 加载规则:
sudo augenrules --load && sudo systemctl restart auditd - 验证规则是否生效:
sudo auditctl -l | grep -E "(execve|bpf|module)"
识别异常 syscall 模式(非正常行为线索)
内核漏洞利用常伴随非常规 syscall 组合或参数,需结合上下文分析日志字段(如 comm=、exe=、key=、arch=、syscall=、a0-a3= 等)。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
重点关注以下信号:
-
execve调用非常规路径(如/tmp/.X11-unix/sh、/dev/shm/ld.so)或由非 shell 进程发起(如comm=python执行/bin/sh) -
bpfsyscall 中a1=0x2(BPF_PROG_LOAD)配合a2>1000000(超大 prog_len),可能为 eBPF JIT 喷射 -
ioctl调用未公开设备节点(如major=10 minor=58对应/dev/binder或自定义驱动)且a1=0xc0000000类似非法 cmd -
mmap分配可执行内存(a3 & 0x4 != 0)且来源非 ELF 映射(comm=unknown或exe=/usr/bin/strace)
高效检索与关联分析技巧
原始 audit 日志(/var/log/audit/audit.log)文本量大,需快速定位可疑链路:
- 按时间窗口查某进程的完整 syscall 流:
sudo ausearch -m syscall -ts recent -ui $(id -u) | aureport -f -i - 查特定 key 的全部事件并排序:
sudo ausearch -k bpf_usage --start today | sort -k1,2 - 关联进程树:用
-p提取 pid 后,再查其父进程:sudo ausearch -p 12345 -m execve,bpf | aureport -f -i - 导出为 JSON 方便脚本解析:
sudo ausearch -m syscall -ts yesterday --raw | aureport -f --output json
补充建议:降低误报 + 防绕过
攻击者可能尝试禁用或规避 auditd,需加固和冗余:
- 设置 auditd 为不可杀进程:
echo 'kernel.audit_backlog_limit = 8192' >> /etc/sysctl.conf,并启用auditctl -e 2(锁定规则) - 监控 auditd 自身状态:
systemctl status auditd+ 检查/proc/sys/kernel/audit是否为 1 - 对关键目录(
/etc/audit/、/sbin/auditctl)启用 inotify 或 file integrity check(如 aide) - 在内核启动参数中加入
audit=1,防止运行时关闭
不复杂但容易忽略:syscall 日志本身不包含内存内容或寄存器状态,若需深度分析(如确认 ROP 链或 shellcode 注入),需配合 kprobe/ftrace、eBPF 工具(如 bcc)或内存取证(volatility + Linux 插件)进一步验证。










