auditd不直接检测调用序列异常波动,需在其日志基础上通过打标、导出结构化日志、外部时序分析实现;聚焦execve/openat/mmap等高价值调用组合,结合频次突增、时序紧邻、路径异常等特征识别攻击行为。

聚焦高价值调用并统一打标
不追求全量 syscall,而是锁定攻击链中高频串联的几个调用,每类赋予语义明确的 key,方便后续按 key 分组统计:• execve + openat + mmap:典型 shellcode 注入前序行为(执行解释器→读取恶意脚本→映射内存)
• ptrace + mmap + mprotect:进程注入或内存马常见组合(附加调试→分配内存→改写页属性)
• bpf + clone + execve:eBPF 漏洞利用+横向移动路径
• setuid + execve:提权后立即执行敏感程序
配置示例(写入 /etc/audit/rules.d/seq-critical.rules):
-a always,exit -F arch=b64 -S execve -k seq_exec
-a always,exit -F arch=b64 -S openat -F path=/tmp/ -k seq_open_tmp
-a always,exit -F arch=b64 -S mmap -F prot=7 -k seq_mmap_rwx
-a always,exit -F arch=b64 -S ptrace -F a0=10 -k seq_ptrace_attach
-a always,exit -F arch=b64 -S bpf -F a0=12 -k seq_bpf_load
导出结构化日志供时序分析
auditd 原生日志是二进制格式,需转换为可分析的文本流:• 使用 ausearch -i -k seq_exec --raw | aureport -f -i -m SYSCALL --output csv 导出带时间戳、uid、comm、exe 的 CSV
• 或用 auditctl -s | grep "enabled" 确认审计开启后,直接 tail -f /var/log/audit/audit.log | awk '/type=SYSCALL.*key="seq_/{print $1,$2,$13,$15,$17}' 提取关键字段
• 推荐用 auditd-log-parser 或自定义 Python 脚本解析,输出含 timestamp、key、uid、comm、syscall、a0-a3 的 JSON 行格式
识别波动:基于窗口的频次与组合统计
• 单 key 频次突增:例如 1 分钟内 seq_ptrace_attach 出现 ≥5 次,远超日常基线(通常为 0 或 1)
• 多 key 时序紧邻:在 5 秒窗口内同时出现 seq_ptrace_attach → seq_mmap_rwx → seq_bpf_load,且来自同一 uid
• 异常路径组合:如 seq_open_tmp 后 3 秒内触发 seq_exec,且 exe=/bin/sh 或 /usr/bin/python3
• 工具建议:用 Logstash + Elasticsearch 做滑动窗口聚合;轻量级可用 awk + sort + uniq -c 统计每分钟 key 出现次数,配合 cron 定时比对阈值
避免误报的关键过滤
• 排除 root 用户的常规运维:加 -F uid!=0 到所有规则,或分析时过滤 uid=0 的事件
• 忽略已知可信进程:如 -F comm=systemd、-F comm=crond、-F exe=/usr/bin/ansible
• 时间段豁免:夜间批量任务可能触发高频 execve,可在分析脚本中设置 quiet_hours="22-06"

















