新手排查LD_PRELOAD网络拦截后门需分四步:先检查echo $LD_PRELOAD和/etc/ld.so.preload是否被篡改;再通过grep -r“LD_PRELOAD=”定位启动文件注入;接着用cat /proc/PID/environ | tr '\0' '\n' | grep LD_PRELOAD筛查活跃进程;最后对可疑.so执行file、strings、readelf静态分析并清空环境、重启服务阻断。

新手排查 LD_PRELOAD 类型的网络拦截后门,关键在于理解它的工作机制:攻击者通过设置环境变量 LD_PRELOAD,在程序启动时强制加载一个恶意共享库(.so 文件),从而劫持如 connect()、send()、recv() 等系统调用,实现流量监听、篡改或外连。这类后门不启动新进程、不监听端口、不写入磁盘日志,隐蔽性极强,但有迹可循。
确认当前环境是否被污染
直接检查全局和用户级的 LD_PRELOAD 设置:
- 运行
echo $LD_PRELOAD—— 若输出非空(如指向/tmp/.cache.so或/dev/shm/libnet.so),立即记录路径 - 检查常见启动文件是否被注入:
grep -r "LD_PRELOAD=" /etc/profile* ~/.bashrc ~/.profile ~/.bash_profile 2>/dev/null - 特别注意
/etc/ld.so.preload文件(系统级预加载):cat /etc/ld.so.preload 2>/dev/null;若存在且内容可疑(非空或路径非常规),即为高危信号
定位被劫持的进程
LD_PRELOAD 只对动态链接的程序生效,且通常作用于 SSH、curl、wget、数据库客户端等网络工具。排查方法:
- 对正在运行的关键网络进程,检查其预加载状态:
cat /proc/<PID>/environ | tr '\0' '\n' | grep LD_PRELOAD(替换 <PID> 为实际进程号) - 重点检查 PID 对应的进程:
ps -p <PID> -o pid,ppid,comm,args,确认是否为 sshd、sshd 的子进程、或业务中频繁调用 curl/wget 的脚本 - 若发现多个不同进程(如多个 bash、多个 python)都设置了同一 LD_PRELOAD 路径,基本可判定该 so 文件是后门载体
分析可疑 .so 文件
拿到可疑 so 路径后,不要直接执行或删除,先做静态分析:
- 用
file确认类型:file /path/to/malicious.so(应为 “ELF 64-bit LSB shared object”) - 用
strings提取明文线索:strings /path/to/malicious.so | grep -E "(connect|send|recv|socket|127\.0\.0\.1|8080|c2\.example)"—— 常见后门会硬编码 C2 地址、端口或函数名 - 用
readelf -d查看依赖和初始化节:readelf -d /path/to/malicious.so | grep -E "(NEEDED|INIT|FINI)",异常 INIT 函数往往是注入入口 - 检查文件时间属性:
stat /path/to/malicious.so,若 mtime/ctime 远早于 atime,或位于/tmp、/dev/shm、/var/tmp等临时目录,高度可疑
验证与阻断
确认后门后,需快速隔离并防止扩散:
- 临时清空所有用户环境中的 LD_PRELOAD:
unset LD_PRELOAD,并从启动文件中删掉相关 export 行 - 清空
/etc/ld.so.preload(如有):echo "" > /etc/ld.so.preload(需 root) - 重启受影响服务(如 sshd、nginx、应用服务),避免继续加载
- 后续建议:禁用
/etc/ld.so.preload(设为只读)、限制非 root 用户写入临时目录、启用 SELinux/AppArmor 约束动态库加载

















