防止 auditd 被篡改需四层加固:锁定规则与配置文件(chattr +i)、启用内核级只读模式(-e 2)、用 systemd 隔离 auditd 进程、监控并保护日志文件及删除操作。

要防止 auditd 本身被篡改或绕过,关键不是“加固 auditd 这个服务”,而是切断攻击者从 root 权限出发破坏审计能力的全部路径——包括规则清空、进程替换、配置修改和日志删除。真正的加固是组合策略,覆盖静态文件、运行时状态、内核行为和进程防护四个层面。
锁定审计规则配置文件与主配置 攻击者拿到 root 后无法直接改内核里的规则,但能删文件、改配置、再 reload。所以源头必须防写:
- 把所有规则写进
/etc/audit/rules.d/下的.rules文件(如immutable.rules),避免用auditctl -a临时添加 - 对规则文件设不可变:
sudo chattr +i /etc/audit/rules.d/immutable.rules - 同样锁定主配置:
sudo chattr +i /etc/audit/auditd.conf,防止日志路径、缓冲区大小、网络转发等被改 - 检查 SELinux 上下文是否为
system_u:object_r:audit_rules_t:s0,不匹配就sudo restorecon -v /etc/audit/rules.d/immutable.rules
启用 auditd 的内核级锁定模式-e 2 是核心开关,它让 auditd 进入“只读锁定”状态,root 也无法调用 auditctl 修改规则:
- 在
/etc/audit/rules.d/lockdown.rules中写入:-e 2-a always,exclude -F msgtype=CONFIG_CHANGE-a always,exclude -F msgtype=SYSCALL -F arch=b64 -S execve -F a0=0x2f7573722f62696e2f617564697463746c - 第二行屏蔽冗余配置变更日志;第三行 hex 编码对应
/usr/bin/auditctl路径,阻止通过该二进制绕过(路径不同需重编码) - 执行
sudo augenrules --load加载,再用sudo auditctl -s | grep enabled确认输出为enabled 2
加固 auditd 进程自身防劫持
即使规则锁住,攻击者仍可能 kill -9 或 LD_PRELOAD 注入:
- 使用 systemd 强制隔离:创建
/etc/systemd/system/auditd.service.d/override.conf,内容为:[Service]ProtectSystem=strictProtectHome=read-onlyLockPersonality=trueMemoryDenyWriteExecute=trueRestrictRealtime=true - 重载服务:
sudo systemctl daemon-reload && sudo systemctl restart auditd
监控并保护审计日志文件本身 日志若被删,前面所有配置都失效:
- 对
/var/log/audit/目录加-w /var/log/audit/ -p wa -k audit_log规则 - 补充系统调用规则捕获删日志动作:
-a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat,truncate,ftruncate -k log_delete - 日志建议远程转发(TLS 加密),本地保留仅作应急查证
不复杂但容易忽略

















