先运行printenv ld_preload检查是否被设置,若非空则核查文件属性、elf类型及依赖;再通过/proc/pid/maps定位加载进程,结合strings分析认证与网络行为;最后清除环境变量、配置文件及ld.so.preload并终止相关进程。

确认LD_PRELOAD是否被恶意设置
先检查当前环境是否正在使用LD_PRELOAD:
- 运行 printenv LD_PRELOAD,如果输出非空路径(如
/tmp/libauth.so、/var/run/.ld.so),需高度警惕 - 检查该路径下文件是否存在:ls -l /path/from/printenv,注意修改时间是否异常(比如最近1小时内)、属主是否为普通用户或 nobody
- 用 file /path/to/libauth.so 确认是 ELF 共享对象;再用 readelf -d /path/to/libauth.so | grep NEEDED 查看是否依赖可疑库(如 libcurl.so、libssl.so)
定位该库被哪些进程加载
伪造身份验证库通常会劫持 getpwnam、getpwuid、pam_authenticate 等函数,影响 su/sudo/login/sshd。需主动扫描:
- 列出所有已映射该库的进程:grep -l '/path/to/libauth.so' /proc/[0-9]*/maps 2>/dev/null | cut -d'/' -f3
- 对每个 PID,查看其命令行:cat /proc/PID/cmdline | tr '\0' ' ';查看执行文件:ls -l /proc/PID/exe
- 重点关注
sshd、login、su、systemd-logind等认证相关进程
分析动态库行为特征
不依赖反编译也能快速判断是否为伪造验证库:
- 提取字符串:strings /path/to/libauth.so | grep -iE 'pam|auth|passwd|user|root|sudo|login|shadow'
- 检查是否调用网络函数:strings /path/to/libauth.so | grep -iE 'connect|socket|send|recv|gethostbyname'(可疑外连行为)
- 检查是否绕过 PAM 配置:ldd /path/to/libauth.so 看是否链接了
libpam.so或刻意避开它
清理与加固措施
确认为恶意后,必须同步清除环境变量、预加载文件和残留进程:
- 临时清除:unset LD_PRELOAD(仅对当前 shell 有效)
- 检查全局配置:grep -r 'LD_PRELOAD' /etc/profile* /etc/environment /etc/bash.bashrc 2>/dev/null,删掉可疑 export 行
- 检查系统级预加载:cat /etc/ld.so.preload,若非空且含可疑路径,立即清空并加锁:sudo truncate -s 0 /etc/ld.so.preload && sudo chown root:root /etc/ld.so.preload && sudo chmod 644 /etc/ld.so.preload
- 终止所有加载该库的进程,必要时重启 sshd、systemd-logind 等服务










