应监控系统二进制文件的写入(w)和属性变更(a)行为,因替换操作如cp、mv、ln -sf均体现为对文件的写或元数据修改;需用auditd配置-w路径-p wa规则并永久生效,结合chattr +i、rpm -V等校验机制形成闭环防护。

要监控系统二进制文件(如 /bin/ls)是否被替换或修改,核心是捕获对文件本身的**写入(w)和属性变更(a)**行为,而非仅记录执行(x)。因为替换通常通过 cp、mv 或 ln -sf 完成,这些操作最终都体现为对目标文件的写或元数据修改,auditd 能在内核调用层精准捕获。
一、配置精准的 auditd 文件监控规则
使用 -w 监控文件路径,-p wa 捕获写入与属性变更(如 chmod/chown/touch/mv/cp/ln),-k 添加可检索标签:
sudo auditctl -w /bin/ls -p wa -k bin_ls_integrity- 同理可扩展至其他关键二进制:
/usr/bin/sudo、/bin/bash、/usr/bin/python3等 - 注意:路径必须存在且准确;若文件是符号链接,监控的是链接本身(非目标),如需监控真实路径,应使用
readlink -f /bin/ls获取后监控
二、确保规则永久生效
临时规则在服务重启后丢失。需写入规则文件并重载:
- 创建规则文件:
sudo tee /etc/audit/rules.d/10-bin-integrity.rules <<EOF<br>-w /bin/ls -p wa -k bin_ls_integrity<br>-w /usr/bin/sudo -p wa -k bin_sudo_integrity<br>EOF
- 重载规则:
sudo augenrules --load(或sudo auditctl -R /etc/audit/rules.d/*.rules) - 验证加载:
sudo auditctl -l | grep ls
三、识别替换行为的关键日志特征
当有人尝试替换 /bin/ls 时(例如 cp newls /bin/ls 或 mv newls /bin/ls),auditd 日志中会出现以下典型字段组合:
-
syscall=257(即openat系统调用,带O_WRONLY|O_TRUNC标志) -
path="/bin/ls"+perm=w -
comm="cp"或comm="mv"或comm="ln" -
auid(登录用户ID)与uid(实际执行用户)不一致,可能暗示提权操作
查询命令示例:sudo ausearch -k bin_ls_integrity -i | grep -E "(cp|mv|ln|openat.*w)"
四、补充校验机制,避免审计绕过
auditd 可捕获操作,但无法阻止。需结合其他手段形成闭环:
- 设置不可变属性:
sudo chattr +i /bin/ls(root 也无法覆盖,维护前需先chattr -i) - 定期完整性校验:
sudo rpm -V coreutils(RHEL/CentOS)或sudo dpkg --verify coreutils(Debian/Ubuntu),检查权限、大小、哈希是否异常 - 限制写权限:
sudo chmod 755 /bin/ls,确保非 root 用户无写权(默认已满足)
不复杂但容易忽略:监控必须覆盖 -p wa,只加 -p x 只能记录执行,完全漏掉替换动作。


















