关键在于精准捕获高危ptrace调用事件并绑定完整上下文,需聚焦PTRACE_ATTACH(0x10)、PTRACE_POKETEXT(0x4)等高危操作,结合-F comm=或-F exe=锁定目标进程,-F uid!=0和-F auid>=1000区分权限,规则写入/etc/audit/rules.d/并重载生效。

要拦截并记录恶意利用 ptrace 注入核心进程的行为,关键不是“阻止”调用(auditd 本身不拦截,只审计),而是**精准捕获高风险 ptrace 调用事件,并绑定完整上下文**,让每一次可疑调试、内存读写或进程附加都可追溯、可告警。
聚焦高危 ptrace 操作类型
攻击者注入内存通常依赖特定 request 参数,仅记录全部 ptrace 会产生大量噪音。应优先捕获以下高危操作:
- PTRACE_ATTACH(0x10):最典型的入侵起点,表示尝试控制目标进程
- PTRACE_POKETEXT / PTRACE_POKEDATA(0x4 / 0x6):向目标进程内存写入指令或数据
- PTRACE_SETREGS / PTRACE_SETFPREGS(0xd / 0xe):篡改执行流,常用于 shellcode 注入
配置示例(x86_64):sudo auditctl -a always,exit -F arch=b64 -S ptrace -F a1=0x10 -k ptrace_attachsudo auditctl -a always,exit -F arch=b64 -S ptrace -F a1=0x4 -k ptrace_poketext
锁定被攻击的目标进程
仅看调用者不够,必须确认它是否针对关键服务。可用 -F comm= 或 -F exe= 过滤被调试进程(tracee):
- 监控所有对
redis-server的 attach 行为:sudo auditctl -a always,exit -F arch=b64 -S ptrace -F a1=0x10 -F comm=redis-server -k redis_ptrace - 监控对特定路径二进制(如
/usr/local/bin/paymentd)的调试:sudo auditctl -a always,exit -F arch=b64 -S ptrace -F a1=0x10 -F exe=/usr/local/bin/paymentd -k paymentd_inject
关联调用者身份与权限上下文
避免误报,也防止绕过,需结合 UID、AUID 和执行路径判断可信度:
- 排除 root 用户的合法调试(如运维使用 gdb):
-F uid!=0 - 但保留对 AUID(原始登录用户)的追踪,防止 sudo 提权后隐藏身份:
-F auid>=1000可聚焦普通用户行为 - 若发现
comm=strace或comm=gdb但exe指向非常规路径(如/tmp/.X11-unix/gdb),即属高危信号
固化规则并启用快速响应
临时规则重启即失效,生产环境必须写入持久化配置:
- 新建规则文件:
sudo vim /etc/audit/rules.d/20-ptrace-critical.rules - 写入已验证规则,例如:
-a always,exit -F arch=b64 -S ptrace -F a1=0x10 -F comm=mysqld -F uid!=0 -k mysql_attach_unpriv - 重载生效:
sudo augenrules --load && sudo systemctl restart auditd - 验证加载:
sudo auditctl -l | grep mysql_attach
后续可用 ausearch -k mysql_attach_unpriv -i 快速提取完整事件,含调用者 PID、命令名、目标进程名、时间戳和 UID,直接支撑告警或阻断联动。










