/etc/ld.so.preload若存在且非空即高度可疑,需立即用绝对路径删除、清除隐藏属性、重建空文件并设644权限,再重启服务;其被篡改通常标志已提权,须同步溯源恶意so及持久化后门。

/etc/ld.so.preload 是一个特殊的系统文件,用于指定在所有动态链接程序启动时**强制预加载**的共享库(.so 文件)。攻击者一旦写入恶意路径(如 /tmp/.x.so),即可实现对所有普通用户进程(包括 bash、ls、curl、ssh 等)的全局劫持,隐蔽性极强、危害极大。
如何快速检测是否被篡改
该文件本应为空或根本不存在。只要它存在且非空,就高度可疑:
- 执行
ls -l /etc/ld.so.preload—— 查看是否存在、权限是否异常(如属主为 root 但可写) - 执行
cat /etc/ld.so.preload 2>/dev/null—— 若输出非空行(尤其含 /tmp、/dev/shm、/var/tmp 等临时目录路径),基本确认被植入 - 执行
strace -e trace=openat,open,openat64 /bin/true 2>&1 | grep preload(需 strace)—— 可验证运行时是否真在读取该文件
立即清理与加固步骤
发现异常后,按顺序操作,避免清理过程中恶意 so 被再次加载:
- 先用绝对路径执行清理:
/bin/rm -f /etc/ld.so.preload(避免调用被劫持的 shell 内置或 alias) - 检查文件是否被硬链接或隐藏属性:
lsattr /etc/ld.so.preload;若输出含i(不可修改)或a(仅追加),说明已被加锁,需先chattr -ia /etc/ld.so.preload再删 - 确认删除后,用
touch /etc/ld.so.preload && chmod 644 /etc/ld.so.preload && chown root:root /etc/ld.so.preload创建空文件并设最小权限(部分发行版要求存在且为空) - 重启关键服务(如 sshd、cron)或重启系统,确保所有进程脱离旧预加载上下文
溯源与关联排查要点
该文件被写入通常是提权后的结果,需同步排查:
- 检查最近修改时间:
stat /etc/ld.so.preload,比对系统日志(journalctl --since "2 hours ago" | grep -i "ld\.so\.preload\|chmod\|chattr") - 定位恶意 so 文件:根据 preload 中的路径(如
/tmp/.x.so),检查其创建时间、属主、大小,并用file和strings初步分析行为特征 - 检查 crontab、systemd timers、.bashrc/.profile、/etc/cron.* 中是否藏有下载/写入该文件的命令
- 运行
ps auxf --forest和lsof -nP +L1,查找可疑进程或已删除但仍被占用的 so 文件
长期防护建议
防止再次被利用,不能只靠删文件:
- 启用文件完整性监控(如 aide、samhain)定期校验 /etc/ld.so.preload 及关键系统文件
- 在 SELinux 或 AppArmor 启用环境下,限制非特权进程对 /etc/ 目录的写入能力
- 禁止 root 用户直接 SSH 登录,使用 sudo 代替;最小化 sudo 权限,禁用 NOPASSWD 全能权限
- 定期审计
find /etc -type f -name "ld.so.preload" -ls和find /tmp /var/tmp /dev/shm -name "*.so" -ls 2>/dev/null










