/ etc/ld.so.preload 被篡改导致所有进程加载恶意 so 的检测清理

13次阅读

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

/ etc/ld.so.preload 被篡改导致所有进程加载恶意 so 的检测清理

/etc/ld.so.preload 是一个特殊的系统文件,用于指定在所有动态链接程序启动时**强制预加载**的共享库(.so 文件)。攻击者一旦写入恶意路径(如 /tmp/.x.so),即可实现对所有普通用户进程(包括 bash、ls、curlssh 等)的全局劫持,隐蔽性极强、危害极大。

如何快速检测是否被篡改

该文件本应为空或根本不存在。只要它存在且非空,就高度可疑:

  • 执行 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),检查其创建时间、属主、大小,并用 filestrings 初步分析行为特征
  • 检查 crontab、systemd timers、.bashrc/.profile、/etc/cron.* 中是否藏有下载/写入该文件的命令
  • 运行 ps auxf --forestlsof -nP +L1,查找可疑进程或已删除但仍被占用的 so 文件

长期防护建议

防止再次被利用,不能只靠删文件:

  • 启用文件完整性监控(如 aide、samhain)定期校验 /etc/ld.so.preload 及关键系统文件
  • 在 SElinuxappArmor 启用环境下,限制非特权进程对 /etc/ 目录的写入能力
  • 禁止 root 用户直接 SSH 登录,使用 sudo 代替;最小化 sudo 权限,禁用 NOPASSWD 全能权限
  • 定期审计 find /etc -type f -name "ld.so.preload" -lsfind /tmp /var/tmp /dev/shm -name "*.so" -ls 2>/dev/null
text=ZqhQzanResources