linux动态库加载路径由/etc/ld.so.conf、/etc/ld.so.conf.d/*.conf及二进制缓存/etc/ld.so.cache共同决定,攻击者常篡改.conf文件或缓存注入恶意路径;应使用绝对路径基础命令(如/usr/bin/cat、/sbin/ldconfig)交叉验证配置与实际生效行为,重点筛查非标路径、异常权限及近期修改文件,并通过diff比对或strings辅助识别隐藏篡改。

新手排查Linux中被篡改的库加载配置文件,核心是盯住/etc/ld.so.conf及其包含路径、动态链接器缓存和实际生效行为——不依赖被污染的命令,用最小可信工具交叉验证。
先确认哪些文件真正控制库加载
Linux程序运行时从哪里找共享库,由以下三部分共同决定:
-
/etc/ld.so.conf:主配置文件,通常只有一行
include /etc/ld.so.conf.d/*.conf -
/etc/ld.so.conf.d/*.conf:各软件包或管理员添加的片段,如
cuda.conf、mysql.conf -
/etc/ld.so.cache:二进制缓存文件,由
ldconfig根据上述配置生成,程序实际读取它
攻击者常篡改.conf文件插入恶意路径(如/usr/local/lib/backdoor),或直接替换/etc/ld.so.cache指向后门库。所以这三处都要查。
用绝对路径+基础命令安全检查
别用cat /etc/ld.so.conf——如果cat已被替换,输出可能被过滤或伪造。改用:
- 查看主配置:
/usr/bin/cat /etc/ld.so.conf(强制走系统原始cat) - 列出所有包含的conf:
/usr/bin/find /etc/ld.so.conf.d -name "*.conf" -type f -ls - 逐个检查内容:
/usr/bin/grep -v "^#" /etc/ld.so.conf.d/*.conf 2>/dev/null(跳过注释,看真实路径) - 检查缓存生成时间:
/usr/bin/stat /etc/ld.so.cache,对比mtime是否异常(比如凌晨2点更新,但无人操作)
验证缓存内容是否可信
/etc/ld.so.cache是二进制格式,不能直接cat。用系统自带的ldconfig解析:
- 显示当前生效的所有库路径:
/sbin/ldconfig -p | head -20(注意用绝对路径调用) - 若输出里出现
/tmp、/dev/shm、/usr/local/lib/xxx等非常规路径,高度可疑 - 对比正常系统的输出(如另一台同版本干净机器):把两边
ldconfig -p结果分别保存,用diff比对
如果ldconfig本身被替换,可临时用strings /etc/ld.so.cache | grep "/lib\|/usr/lib"粗略看路径列表(strings极难被完全隐藏)。
快速定位被注入的恶意路径
攻击者加的路径往往有共性,可用以下命令筛查:
- 查非标准目录:
/usr/bin/grep -rE "(tmp|shm|local|home|opt)" /etc/ld.so.conf.d/ 2>/dev/null - 查权限异常的conf文件:
/usr/bin/find /etc/ld.so.conf.d -type f ! -perm 644 -ls(正常应为644) - 查最近修改的conf:
/usr/bin/find /etc/ld.so.conf.d -type f -mtime -7 -ls,再结合stat看详细时间戳
发现可疑conf后,先mv重命名隔离,再运行/sbin/ldconfig -v观察警告(如“can't stat”说明路径不存在),确认是否真被引用。
恢复与加固
确认问题后,修复要基于可信源:
- 删掉恶意conf文件,保留系统默认的(如
libc.conf) - 手动重建缓存:
/sbin/ldconfig(确保ldconfig未被篡改,可用rpm -Vf /sbin/ldconfig验证) - 验证效果:
/sbin/ldconfig -p | grep "your_lib_name"看是否还加载旧路径 - 长期防护:把
/etc/ld.so.conf.d/设为只读(chattr +i),或用AIDE监控该目录变化
不复杂但容易忽略











