ld_preload注入后门隐蔽性强、权限高,不修改系统文件,通过环境变量在程序启动时强制加载恶意共享库;排查需检查环境变量、shell配置、pam设置、关键进程environ与maps、可疑.so文件及函数劫持行为。

LD_PRELOAD注入后门隐蔽性强、权限高,不修改系统文件,也不依赖进程持久化,而是通过环境变量在程序启动时强制加载恶意共享库。排查关键在于识别异常的预加载行为、可疑动态库及被劫持的认证或关键服务。
检查全局和用户级LD_PRELOAD设置
攻击者常通过shell配置文件或系统级环境配置注入LD_PRELOAD。需逐层排查:
- 检查当前会话环境:echo $LD_PRELOAD —— 若非空且指向非常规路径(如/tmp、/dev/shm、/var/tmp下的.so),高度可疑
- 搜索用户shell初始化文件:grep -r "LD_PRELOAD=" /home/*/.bashrc /home/*/.profile /root/.bashrc 2>/dev/null
- 检查系统级配置:grep -r "LD_PRELOAD" /etc/profile* /etc/environment /etc/security/pam_env.conf 2>/dev/null
- 注意PAM环境模块:若/etc/security/pam_env.conf中存在LD_PRELOAD DEFAULT=@{HOME}/.mal.so类规则,即为典型手法
定位被劫持的关键进程及其预加载行为
LD_PRELOAD只对动态链接的程序生效,重点盯防sshd、sudo、login等认证相关进程:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 查看sshd主进程是否被预加载:cat /proc/$(pidof sshd)/environ | xargs -0 -n1 | grep LD_PRELOAD
- 检查所有运行中的sshd子进程(每个连接一个):for pid in $(pgrep sshd); do echo "PID $pid:"; cat /proc/$pid/environ 2>/dev/null | xargs -0 -n1 | grep LD_PRELOAD; done | grep -v "^PID.*:$"
- 对sudo、su等提权命令同样检查其调用进程的environ,例如:ps auxf | grep -E "(sudo|su)" | awk '{print $2}' | xargs -I{} sh -c 'cat /proc/{}/environ 2>/dev/null | xargs -0 -n1 | grep LD_PRELOAD'
扫描可疑动态库与异常内存映射
恶意.so往往驻留在临时目录或隐藏路径,且可能无文件名特征:
- 查找非常规位置的共享库:find /tmp /var/tmp /dev/shm /opt /usr/local/lib -name "*.so*" -type f -mtime -30 2>/dev/null
- 检查正在运行进程的内存映射中是否加载了可疑库:for pid in $(pgrep -f "sshd\|login\|sudo"); do echo "== PID $pid =="; cat /proc/$pid/maps 2>/dev/null | grep "\.so" | grep -v "/lib\|/usr/lib"; done | grep -v "=="
- 特别关注映射路径含/tmp/.*\.so、/dev/shm/.*\.so或无文件名([anon])但含可执行段的条目
验证核心命令是否被绕过(辅助确认)
LD_PRELOAD可劫持getpwuid、getpwnam、pam_authenticate等函数,导致常规检测失效:
- 运行strace -e trace=getpwuid,getpwnam,pam_authenticate /usr/bin/id,观察是否出现非预期的库调用或返回异常值
- 用静态编译工具验证:ldd /bin/ls确认其依赖正常;再用/lib64/ld-linux-x86-64.so.2 --preload /path/to/suspicious.so /bin/ls模拟加载,看是否触发异常行为
- 若发现/usr/bin/whoami返回root但/usr/bin/id显示普通用户,极可能已被LD_PRELOAD劫持身份校验逻辑










