排查隐蔽动态链接库加载路径需聚焦三类高危入口:一是检查LD_LIBRARY_PATH和LD_PRELOAD环境变量是否被篡改,重点关注/tmp、/dev/shm等临时目录;二是用patchelf或readelf筛查可执行文件硬编码的RPATH/RUNPATH;三是核查/etc/ld.so.conf及包含文件是否新增非常规路径,并验证ldconfig缓存与进程实际加载的so文件。

排查被植入的隐蔽动态链接库加载路径,核心是揪出那些“不该出现却正在生效”的路径配置。新手不必从零逆向,重点盯住三类高危入口:环境变量、可执行文件嵌入路径、系统级配置文件。
检查 LD_LIBRARY_PATH 和 LD_PRELOAD 是否被恶意篡改
这两个环境变量优先级最高,也最容易被攻击者利用。先看当前会话是否被污染:
- 运行 echo $LD_LIBRARY_PATH 和 echo $LD_PRELOAD,留意输出中是否有陌生路径(如 /tmp、/dev/shm、/var/tmp 下的子目录,或非标准用户目录)
- 检查 shell 初始化文件:grep -E "(LD_LIBRARY_PATH|LD_PRELOAD)="? ~/.bashrc ~/.bash_profile ~/.profile /etc/profile /etc/bash.bashrc 2>/dev/null
- 特别注意是否用了 export 持久化设置,或通过别名、函数间接注入(例如 alias ls='LD_LIBRARY_PATH=/tmp/.x:$LD_LIBRARY_PATH ls')
扫描可执行文件是否硬编码了可疑 RPATH/RUNPATH
攻击者可能在程序编译时就埋入恶意路径,绕过环境变量和系统配置。用 patchelf 和 readelf 快速筛查:
- 对关键二进制(如 sshd、sudo、bash、你的应用主程序)运行:patchelf --print-rpath ./binary 或 readelf -d ./binary | grep -E "(RPATH|RUNPATH)"
- 若输出包含 /tmp、/dev/shm、/var/run 等临时目录,或指向用户可写但非标准的位置(如 /home/attacker/lib),高度可疑
- 批量检查:用 find /usr/bin /usr/local/bin -type f -executable -exec sh -c 'patchelf --print-rpath "$1" 2>/dev/null | grep -q "/" && echo "$1"' _ {} \;
核查系统级配置是否被悄悄加入恶意路径
/etc/ld.so.conf 及其包含的 .conf 文件是全局生效的,攻击者常在此添加后门路径:
- 列出所有生效配置:ls -l /etc/ld.so.conf /etc/ld.so.conf.d/*.conf 2>/dev/null
- 逐个查看内容:cat /etc/ld.so.conf /etc/ld.so.conf.d/*.conf 2>/dev/null | grep -v "^#" | grep -v "^$"
- 重点关注是否新增了非常规路径(如 /opt/backdoor/lib、/usr/lib/x86_64-linux-gnu/evil);注意空格、注释符 # 后拼接路径等绕过手法
- 确认缓存是否被污染:ldconfig -p | head -10 看开头几行是否含异常路径,再用 ldconfig -p | grep -i "tmp\|shm\|run" 快速过滤
验证当前进程实际加载了哪些库
光看配置不够,要确认运行中的程序到底加载了什么。对可疑进程(如异常占用 CPU、网络连接的进程)做实时检查:
- 查进程 PID:ps aux | grep -E "(your_app|suspicious_name)"
- 看它打开的 so 文件:ls -l /proc/PID/maps | grep ".so" | awk '{print $6}' | sort -u
- 更直观方式:cat /proc/PID/environ | tr '\0' '\n' | grep -E "(LD_LIBRARY_PATH|LD_PRELOAD)" —— 这里能看到该进程启动时实际继承的环境变量


















