实时监控ld_preload劫持需捕获操作链而非变量本身:①用auditd监控shell中export/unset等命令及execve参数;②监控/etc/ld.so.preload文件写入;③监控/tmp/、/dev/shm/下可疑so文件写入与高危命令执行关联;④结合日志分析与交叉验证实现告警响应。

要实时监控 LD_PRELOAD 环境变量的异常劫持行为,核心不是“监听变量本身”,而是捕获攻击者为设置、传播或利用该变量所必须执行的操作链。Auditd 无法直接读取进程环境变量,但能精准记录 shell 命令调用、execve 参数、文件写入等关键动作,从而还原整个劫持过程。
监控 shell 中 LD_PRELOAD 的显式设置行为
攻击者常通过 export/unset 在交互式或脚本环境中配置 LD_PRELOAD。Auditd 可跟踪这些内建命令的执行:
- 在 /etc/audit/rules.d/ld_preload.rules 中添加规则,聚焦常见 shell 路径:
-a always,exit -F arch=b64 -S execve -F path=/bin/bash -F path=/bin/sh -F path=/usr/bin/bash -F path=/usr/bin/sh -k ld_preload_env - 启用内核对 execve 参数的记录(需确保
auditctl -e 2已执行,并确认内核支持 argv 日志) - 日志中重点筛查
argv[]是否含export LD_PRELOAD=、LD_PRELOAD=.*./或env LD_PRELOAD=等模式
监控 /etc/ld.so.preload 文件的篡改
相比环境变量,该文件被篡改影响更广、更隐蔽,且 Auditd 对其写入监控极为可靠:
- 添加文件监控规则:
-w /etc/ld.so.preload -p wa -k ld_so_preload
其中-p wa表示监控写入(write)和属性修改(attribute change) - 该规则可捕获
echo、cp、sed -i等所有修改手段 - 用
ausearch -m write -f /etc/ld.so.preload -i快速定位操作时间、UID、PID 和完整命令行
监控可疑动态库的加载与执行上下文
恶意 .so 文件往往出现在临时路径,其加载行为会触发特定系统调用:
- 监控
/tmp/和/dev/shm/下的写入型 open/openat 调用:-a always,exit -F arch=b64 -S open,openat -F path=/tmp/ -F perm=w -k ld_preload_so-a always,exit -F arch=b64 -S open,openat -F path=/dev/shm/ -F perm=w -k ld_preload_so - 对高危命令(如
whoami、ps、netstat)做 execve 监控,再结合其子进程的 openat 行为,可构建“命令启动 → 加载可疑 .so”的攻击链证据 - 补充监控
ldd执行,便于后续人工排查可疑库依赖:-a always,exit -F arch=b64 -S execve -F path=/usr/bin/ldd -k ld_preload_ldd
日志分析与告警建议
单纯记录不够,需建立可操作的响应逻辑:
- 使用
aureport -k ld_preload_env --start today汇总当日相关事件 - 对匹配
LD_PRELOAD=.*\.(so|\.dll)的 execve 日志,自动提取 UID、终端、命令行并触发告警 - 将
/etc/ld.so.preload的修改事件与同一 UID 下的 bash/sh 进程 execve 日志做时间关联,识别是否为批量注入 - 定期比对
/proc/*/environ中 LD_PRELOAD 的实际值(需 root 权限),与 audit 日志交叉验证











