ld.so.preload 后门是什么
/etc/ld.so.preload 指定了一批「所有程序启动前先加载」的动态库,本是合法的优化机制,却也是经典的 Linux 用户态后门:把恶意 .so 的路径写进去,就能劫持 glibc 调用,隐藏文件、进程与网络连接。清理时必须同时处理配置行与恶意库文件,并核验系统库本身是否也被替换。
基本信息
| 配置位置 | /etc/ld.so.preload |
|---|---|
| 关联目录 | /etc/ld.so.conf.d/ |
| 核验手段 | ldd 观察注入、debsums / rpm -Va 校验库完整性 |
| 清理顺序 | 先备份配置,再移除引用行与恶意 .so |
| 复验方式 | 重启受影响服务,确认注入消失 |
| 注意 | 空文件或指向不存在的库都会影响加载行为 |
典型使用场景
- 排查文件被隐藏、命令输出异常(例如 ls 看不到某个目录)
- 事件处置中清理用户态后门
- 处置后核验系统库完整性是否恢复
- 加固巡检:确认没有意外的预加载配置存在
- 与 rootkit 检查工具的结论互相印证
- 确认干净后再重启服务,进入观察期
- 给同类主机做横向排查,确认同一手法没有扩散到其他机器
检查预加载与库完整性
检查预加载与库完整性
cat /etc/ld.so.preload 2>/dev/null # 是否有预加载项
ls -la /etc/ld.so.preload 2>/dev/null # 多数发行版默认没有这个文件
ldd /bin/ls | head -n 20 # 看是否多出非系统库
sudo debsums -c 2>/dev/null | head -n 20 # Debian 系:列出被改动的文件
sudo rpm -Va 2>/dev/null | head -n 20 # RHEL 系:包内容校验
sudo cp -a /etc/ld.so.preload /evidence/ld.so.preload.bak 2>/dev/null # 清理前备份检查项与结论
| 检查项 | 命令 | 命中结论 |
|---|---|---|
| 配置存在性 | cat /etc/ld.so.preload | 有内容就需逐行解释来源 |
| 注入痕迹 | ldd <二进制> | 出现不在 /lib、/usr/lib 的库 |
| 库完整性 | debsums -c / rpm -Va | 校验失败说明文件被替换 |
| 文件时间 | ls -la | mtime 与系统安装时间不符 |
| 进程映射 | /proc/<PID>/maps | 运行中进程仍映射着恶意库 |
多数发行版默认不带 /etc/ld.so.preload:它存在本身就是需要解释的信号。但也有安全 agent 或性能工具会正常使用它,要按厂商文档核实后再定性。
移除后必须重启相关服务:已经运行的进程仍映射着恶意库,只改配置不动进程,隐藏效果会继续存在。
恶意库常被放在 /usr/lib、/lib 之外的地方(如 /usr/local/lib、/lib/x86_64-linux-gnu 旁的随机命名目录):先看 preload 指向的绝对路径,再按路径去 /proc 里找打开它的进程。