核心是捕获导致.so文件被替换、注入或劫持的关键操作,而非仅监控内容变化;需重点监控/etc/ld.so.preload篡改、系统库目录写入、临时路径.so加载三类行为,禁用-p r防日志爆炸,强制使用-k标签实现高效溯源,并将规则持久化至/etc/audit/rules.d/后执行augenrules --load生效。

Linux 系统中用 auditd 监控动态链接库(.so 文件)的篡改,核心不是盯住“文件内容变了”,而是捕获所有能导致库文件被替换、注入或劫持的关键操作——包括写入库文件本身、修改全局预加载配置、设置危险环境变量、加载可疑路径下的 .so。auditd 在内核系统调用层工作,能真实记录 谁、何时、用什么进程、以何种方式 触发了这些行为。
重点监控三类高危路径与动作
动态链接库篡改通常通过以下三种途径实施,需分别设防:
-
/etc/ld.so.preload:全局强制预加载文件,一旦被写入恶意路径,所有用户程序都会加载对应 .so。用
-w /etc/ld.so.preload -p wa -k ld_so_preload精准监控写和属性变更。 -
/usr/lib/、/lib64/、/usr/local/lib/ 等库目录:攻击者常直接替换合法 .so 或新增恶意库。避免全目录加
-p rwxa,应只启用-p wa(写+属性),例如:-w /usr/lib/ -p wa -k syslib_usr_lib。 -
临时路径中的 .so 加载行为:如
/tmp/xxx.so、/dev/shm/libhook.so。这类文件不会被静态监控到,需用系统调用规则捕获 openat/open 操作:-a always,exit -F arch=b64 -S open,openat -F path=/tmp/ -F perm=w -k ld_preload_so。
必须禁用读取(-p r)并使用 -k 标签
对库目录或 preload 文件加 -p r 会导致日志爆炸——glibc 初始化、ldd 扫描、甚至 ls 命令都会触发大量读事件,真正篡改会被淹没。只保留 w(覆盖、截断、重命名)和 a(chmod/chown/touch)已足够覆盖全部篡改场景。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-k 标签是后续分析的生命线。不加 -k,你只能用 ausearch -f /etc/ld.so.preload 全盘扫描,效率低且无法关联上下文;加上后,ausearch -k ld_so_preload -i 可秒级定位完整命令、执行路径、用户 ID 和工作目录。
规则必须永久落盘,不能只靠 auditctl 临时添加
运行 auditctl -w /etc/ld.so.preload -p wa -k ld_so_preload 是验证手段,但重启或服务重载后规则即失效。生产环境务必写入规则文件:
- 新建
/etc/audit/rules.d/ld-preload.rules,写入:-w /etc/ld.so.preload -p wa -k ld_so_preload - 执行
sudo augenrules --load加载规则 - 用
sudo auditctl -l | grep ld_so_preload确认生效
关键日志字段帮你锁定攻击链
当触发规则后,用 ausearch -k ld_so_preload -i 查看带语义的日志。重点关注:
-
comm="echo"或comm="cp":说明是命令行写入 -
exe="/usr/bin/perl"或exe="/bin/sh":可能是脚本植入 -
cwd="/tmp":操作发生在临时目录,高度可疑 -
success=yes且syscall=write或syscall=truncate:确认内容已被实际修改

















