auditd是最可靠排查共享库劫持的方式,需监控/etc/ld.so.conf、/etc/ld.so.conf.d/、/etc/ld.so.preload和/etc/environment的写入与属性修改,并写入永久规则文件后重载,再用ausearch和aureport精准追溯异常操作。

要排查共享库劫持攻击(如通过篡改 /etc/ld.so.conf 或其包含的配置文件实现持久化预加载),auditd 是最可靠的方式之一——因为它在内核层捕获文件变更,不依赖用户态工具,也难以被 LD_PRELOAD 类 rootkit 干扰。
以下操作聚焦精准记录所有对 /etc/ld.so.conf 及其关联配置路径的修改行为,覆盖真实攻击场景中常见的劫持入口:
监控 /etc/ld.so.conf 及其包含的所有配置文件
/etc/ld.so.conf 通常会 include 其他目录(如 /etc/ld.so.conf.d/*.conf),攻击者常向这些子配置中添加恶意路径。需一并监控:
sudo auditctl -w /etc/ld.so.conf -p wa -k ldso_conf_main sudo auditctl -w /etc/ld.so.conf.d/ -p wa -k ldso_conf_d
-
-w:监控路径(递归生效于目录) -
-p wa:记录写入(w)和属性修改(a),覆盖新增、编辑、权限变更、符号链接篡改等 -
-k ldso_conf_*:打标签,便于后续用ausearch -k快速过滤
⚠️ 注意:
/etc/ld.so.conf.d/是目录,auditd 默认递归监控其下所有文件及子目录变更(包括新建.conf文件),无需额外加-R。
补充监控关键动态链接器配置文件
共享库劫持还常利用以下两个高危文件,必须同步纳入审计:
sudo auditctl -w /etc/ld.so.preload -p wa -k ldso_preload sudo auditctl -w /etc/environment -p wa -k etc_environment # LD_LIBRARY_PATH 可能在此设置
-
/etc/ld.so.preload:系统级预加载控制,优先级最高,一旦被写入恶意.so路径,所有普通用户进程都会加载 -
/etc/environment:部分发行版(如 Ubuntu 的 lightdm)会从此读取LD_LIBRARY_PATH,是环境变量劫持的隐蔽入口
永久化规则,避免重启丢失
auditctl 添加的规则在服务重启后失效。应写入永久规则文件:
echo "-w /etc/ld.so.conf -p wa -k ldso_conf_main" | sudo tee /etc/audit/rules.d/ldso.rules echo "-w /etc/ld.so.conf.d/ -p wa -k ldso_conf_d" | sudo tee -a /etc/audit/rules.d/ldso.rules echo "-w /etc/ld.so.preload -p wa -k ldso_preload" | sudo tee -a /etc/audit/rules.d/ldso.rules echo "-w /etc/environment -p wa -k etc_environment" | sudo tee -a /etc/audit/rules.d/ldso.rules
然后重载规则:
sudo augenrules --load
✅ 验证是否生效:
sudo auditctl -l | grep ldso
快速排查可疑修改的日志方法
发现异常后,用 ausearch 提取全部相关事件:
# 查最近1小时内的所有匹配事件 sudo ausearch -k ldso_conf_main -k ldso_conf_d -k ldso_preload -k etc_environment --start recent # 查看具体谁、什么时间、执行了什么操作(含 UID、PID、命令行) sudo ausearch -m SYSCALL -k ldso_conf_d --raw | aureport -f -i # 生成按用户汇总的报告(重点关注非 root 用户的写入) sudo aureport -m -ts today | grep -E "(ldso_conf|ldso_preload|etc_environment)"
-
aureport -f -i会自动解析 UID 为用户名、还原路径,比纯ausearch更直观 - 若看到
comm=echo、comm=tee、comm=cp等低权限进程修改了/etc/ld.so.preload,基本可判定为攻击行为
关联检查建议(非 auditd 范围,但实战必需)
记录只是第一步,还需配合验证:
- 检查当前生效的预加载项:
cat /etc/ld.so.preload 2>/dev/null || echo "not set" - 列出所有已加载的全局库路径:
sudo ldconfig -v 2>/dev/null | grep -E "^/|\.so" - 扫描
/etc/ld.so.conf.d/下是否有陌生.conf文件,内容是否包含/tmp、/dev/shm、用户家目录等可疑路径
不复杂但容易忽略











