auditd有效审计不靠全量记录,而是精准筛选ptrace、execve、openat等高风险系统调用,并结合arch、uid、path等上下文细粒度控制;盲目启用-s all会导致日志爆炸与性能崩溃。

auditd 记录所有敏感系统调用不是靠“全量开启”,而是靠精准筛选高风险系统调用并绑定关键上下文。盲目记录所有系统调用(如 -a always,entry -S all)会导致日志爆炸、磁盘写满、CPU负载陡增,实际生产中不可行。真正有效的做法是聚焦攻击链中最常被滥用的调用,结合架构(arch)、操作类型(syscall)、目标进程(comm/pid)、用户权限(uid/euid)等维度做细粒度控制。
明确哪些系统调用属于“敏感”
以下调用在入侵链中高频出现,且难以绕过审计(除非内核级提权):
-
ptrace:用于调试、注入、读写内存(PTRACE_ATTACH/PTRACE_PEEKDATA/PTRACE_POKEDATA) -
execve:执行新程序,是横向移动和恶意载荷落地的关键入口 -
openat/open:打开文件,尤其配合/etc/shadow、/proc/*/mem等路径时极可疑 -
setuid/setgid/setreuid:权限提升操作,常出现在提权利用中 -
mmap/mprotect:内存映射与权限变更,常见于 shellcode 注入或 bypass DEP -
socket/connect/bind:异常网络行为,特别是非标准用户发起的监听或外连
分步配置实战(以 64 位主流系统为例)
1. 先确认环境并清空临时规则
sudo systemctl is-active auditd && echo "running" || sudo systemctl start auditd sudo auditctl -e 0 # 临时禁用审计(便于重载规则) sudo auditctl -D # 清除所有已有临时规则
2. 添加核心敏感系统调用规则(带标签、过滤架构、聚焦上下文)
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
# 记录所有 ptrace 调用(含 attach/peek/poke),仅限 64 位 sudo auditctl -a always,exit -F arch=b64 -S ptrace -k suspicious_ptrace # 记录非 root 用户执行 execve(重点关注普通用户启用了特权程序) sudo auditctl -a always,exit -F arch=b64 -S execve -F uid!=0 -k user_execve # 记录对 /etc/shadow、/etc/passwd 的 open/openat(无论读写) sudo auditctl -a always,exit -F arch=b64 -S open,openat -F path=/etc/shadow -k auth_shadow_access sudo auditctl -a always,exit -F arch=b64 -S open,openat -F path=/etc/passwd -k auth_passwd_access # 记录 setuid/setgid 调用(排除 root 自身的合法调用,聚焦异常提升) sudo auditctl -a always,exit -F arch=b64 -S setuid,setgid,setreuid,setregid -F uid!=0 -k suspicious_setuid # 记录对 /proc/*/mem 的 open/openat(典型内存注入信号) sudo auditctl -a always,exit -F arch=b64 -S open,openat -F path=/proc/*/mem -k proc_mem_access
3. 让规则永久生效
把上述命令写入 /etc/audit/rules.d/sensitive-syscalls.rules:
# /etc/audit/rules.d/sensitive-syscalls.rules -a always,exit -F arch=b64 -S ptrace -k suspicious_ptrace -a always,exit -F arch=b64 -S execve -F uid!=0 -k user_execve -a always,exit -F arch=b64 -S open,openat -F path=/etc/shadow -k auth_shadow_access -a always,exit -F arch=b64 -S open,openat -F path=/etc/passwd -k auth_passwd_access -a always,exit -F arch=b64 -S setuid,setgid,setreuid,setregid -F uid!=0 -k suspicious_setuid -a always,exit -F arch=b64 -S open,openat -F path=/proc/*/mem -k proc_mem_access
然后重载:
sudo augenrules --load sudo systemctl restart auditd
4. 验证与快速排查
- 查看是否加载成功:
sudo auditctl -l | grep -E "(ptrace|execve|shadow|setuid)" - 模拟测试(如用
strace -p $(pgrep sshd)触发 ptrace)后查日志:sudo ausearch -k suspicious_ptrace -i | head -15
- 过滤失败调用(
success=no)可发现暴力提权尝试:sudo ausearch -m avc -i | grep "denied.*ptrace" # SELinux 拒绝也可辅助判断
关键细节提醒
-
-a always,exit比-a always,entry更可靠:它在系统调用返回后记录,能拿到完整的success=和exit=值,便于区分成功/失败行为。 -
-F arch=b64必须显式指定:x86_64 系统上若不加此过滤,32 位兼容调用可能漏捕。 -
/proc/*/mem使用通配符需确保 auditd 版本 ≥ 3.0(CentOS 7.6+/RHEL 8+ 默认支持)。 - 标签(
-k)务必语义清晰:后续用ausearch -k xxx可秒级定位,比全文 grep 快 10 倍以上。
不复杂但容易忽略。










