排查隐蔽so后门需先检查/etc/ld.so.preload是否存在异常路径,再搜临时目录下的可疑.so文件,结合file/strings分析,用grep maps定位已加载进程,最后用busybox或strace绕过劫持验证。

排查隐蔽动态链接库(SO)后门,核心是揪出“不该加载的库”和“被悄悄加载的库”。这类后门不依赖进程名或端口,而是靠劫持函数调用,在用户执行 ls、ps、netstat 等命令时就已生效,所以不能只看进程列表。
查 /etc/ld.so.preload 是否被写入
这是最直接、最高危的入口。该文件若存在且非空,系统几乎每个动态程序启动前都会强制加载它指定的 SO 文件:
- 运行
ls -l /etc/ld.so.preload—— 正常系统该文件不存在,或存在但大小为 0;若显示权限异常(如可写但属非 root)、修改时间新近,需立即检查 - 执行
cat /etc/ld.so.preload 2>/dev/null—— 输出路径如/tmp/.x.so、/var/run/.log.so或含随机字符串的路径,基本可确认被篡改 - 注意:空行、注释(#)、空格无效,
ld.so只认纯路径;但攻击者可能故意写无效路径干扰判断,要结合时间+进程行为交叉验证
找可疑的 .so 文件本身
恶意 SO 常藏在临时目录、内存文件系统或隐藏路径中,且设为可执行:
- 搜索近期创建/修改的共享库:
find /tmp /dev/shm /var/tmp -name "*.so" -type f -mtime -7 2>/dev/null | xargs ls -la - 检查正在运行但源文件不在标准路径的进程:
ls -la /proc/*/exe 2>/dev/null | grep -E '/tmp|/dev/shm|/var/tmp' | grep -v 'no such file' - 对可疑文件做基础分析:
file /tmp/.x.so(确认是 ELF 共享对象),strings /tmp/.x.so | grep -i "socket\|connect\|exec\|kill\|open"(提取网络或文件操作线索)
验进程是否已加载恶意库
即使删了 SO 文件,若进程还在运行,后门仍有效。需定位哪些 PID 已映射该库:
- 查所有进程的内存映射:
grep -l "/tmp/.x.so" /proc/[0-9]*/maps 2>/dev/null | cut -d'/' -f3 - 对返回的 PID,进一步确认:
cat /proc/PID/cmdline | tr '\0' ' '(看原始命令),ls -l /proc/PID/exe(看执行的是什么程序) - 常见被劫持进程包括
bash、sshd、crond;若发现其映射了恶意 SO,建议 kill 并重启对应服务(如systemctl restart sshd)
用替代工具绕过劫持验证
一旦 SO 后门生效,常规命令(ps、ls、netstat)输出可能已被过滤或伪造。必须用未被劫持的二进制验证:
- 用
busybox执行基础命令:busybox ps aux、busybox ls -la /etc,对比结果差异 - 用
strace跟踪真实系统调用:strace -e trace=open,read,connect /bin/ls 2>&1 | grep -E '\.so|/etc/ld\.so\.preload' - 检查环境变量:
echo $LD_PRELOAD—— 若非空,说明当前 shell 可能正受该变量控制,立即unset LD_PRELOAD











