strace可直接跟踪可疑进程系统调用以暴露异常行为,需用-f -y -e trace=openat,execve,connect,sendto -T -o live.log动态附加并聚焦高危调用,再结合失败返回、耗时及交叉验证精准研判。

直接用 strace 跟踪可疑进程的系统调用,能快速暴露被劫持二进制文件的异常行为——它不判断“非法”,但会如实记录所有动作,关键靠你识别那些违背进程身份、权限或上下文的调用。
聚焦高危系统调用类型
被劫持的二进制常绕过常规检测,优先捕获以下几类调用,它们是恶意行为最常暴露的入口:
-
文件探测与访问:必须包含
open、openat、openat2(内核 5.6+)、stat、fstatat。漏掉openat2或不加-f,容易错过容器或 sandbox 环境下的绕过行为 -
执行跳转:重点盯
execve,尤其路径含/tmp、/dev/shm、/var/tmp或非常规后缀(如.so、.elf、无扩展名) -
网络外连:跟踪
connect、sendto、socket,特别注意目标 IP 是否属于已知 C2 域名解析结果、端口是否非常规(如 443 上跑非 TLS 流量) -
进程控制与隐藏:关注
ptrace(反调试)、prctl(PR_SET_NAME)(改进程名伪装)、unshare或clone(创建隔离环境)
动态附加并保留完整上下文
对已在运行的可疑进程(如 PID 为 1234),不能只看主进程,必须覆盖子进程和文件描述符映射:
- 用
strace -p 1234 -f -y -e trace=openat,execve,connect,sendto -T -o live.log启动跟踪。-f防止 fork 出的子进程逃逸监控;-y把write(3, ...)中的 fd=3 直接展开成路径(如write(3/.shell>, ...)),避免手动反查出错 - 中断后立刻检查日志中是否出现:
openat(AT_FDCWD, "/proc/self/fd", ...)(探测重定向)、execve("/tmp/...", ...)、connect(..., "192.168.1.200:443")、或大量read(4, "", 1024) = 0(空轮询隐蔽信道) - 若进程 UID 非 root 却频繁访问
/etc/shadow、/root/.ssh/id_rsa、/proc/*/mem、/sys/kernel/security/,基本可判定异常
离线分析时抓关键线索
全量日志噪音大,需结合返回值、耗时和调用序列人工研判:
- 用
grep " = -1 " trace.log提取全部失败调用,再过滤权限类错误:grep -E "(EACCES|EPERM|EACCES)" trace.log。例如open("/etc/shadow", O_RDONLY) = -1 EACCES对普通用户进程就是高危信号 - 留意“探路-执行”组合:
stat("/etc/shadow", ...) = -1 ENOENT后紧跟openat(..., "/etc/shadow", O_RDONLY) = 3,说明在试探敏感路径 - 检查耗时异常:
openat(..., "/slow-mount/config.yaml", ...) = 3(耗时超 3 秒),可能挂载点卡死或被恶意延迟;poll(..., POLLIN, 0) = 0频繁出现,可能是心跳或指令等待逻辑 - 路径含
.env、secrets.yaml、config.json且位于/tmp或他人家目录,也需重点核验
交叉验证避免误判
单看 strace 容易误报,务必结合其他信息确认:
- 用
ls -l /proc/1234/exe查真实二进制路径,对比ps aux | grep 1234显示的命令行,若不一致(如显示/usr/bin/python但实际 exe 指向/tmp/pyloader),极可能被劫持 - 运行
lsof -p 1234或ls -la /proc/1234/fd/,查看当前打开的文件和 socket,与 strace 日志中openat和connect记录比对是否吻合 - 检查进程所属 cgroup、namespace 和 SELinux/AppArmor 标签:
cat /proc/1234/cgroup、ls -la /proc/1234/ns/,若本该受限却在访问宿主机敏感路径,说明策略已被绕过











