内核配置不可变审计锁定需启用强制机制、锁定审计路径、防止运行时篡改:强制SELinux/AppArmor运行于enforcing模式,锁定auditd及日志目录,禁用未签名模块加载与sysctl篡改,并监控关键路径变更及远程日志转发。

内核配置不可变审计锁定,不是把参数“设死”就完事,而是让关键安全策略在运行时无法被绕过或篡改,从而形成真正可信赖的审计基线。核心在于:启用强制机制 + 锁定审计路径 + 防止运行时篡改。
启用并强制 SELinux 或 AppArmor
这是实现内核级访问控制的基础。仅安装或启动服务不够,必须确保其处于 enforcing 模式,并加载经过验证的策略。
- 检查当前状态:
sestatus(SELinux)或aa-status(AppArmor),确认输出中包含 enforcing 或 enforce mode - 若为 permissive,临时启用:
sudo setenforce 1(SELinux)或sudo systemctl reload apparmor(AppArmor) - 永久生效需修改配置文件:
/etc/selinux/config中设置SELINUX=enforcing;AppArmor 需确保/etc/default/grub含apparmor=1 security=apparmor,更新 grub 后重启 - 策略应基于最小权限定制,避免直接使用默认宽松策略;可利用
audit2allow分析拒绝日志生成合规规则
锁定 auditd 审计子系统本身
审计日志若可被停用、清空或绕过,就失去意义。需从内核和用户态双重加固。
- 启用内核审计支持:
sudo sysctl -w kernel.audit=1,并在/etc/sysctl.conf中持久化该设置 - 禁止非特权用户干扰 auditd:
echo "-a always,exit -F arch=b64 -S execve -F uid!=0 -k privileged_exec" >> /etc/audit/rules.d/immutable.rules,再执行sudo augenrules --load - 设置 auditd 不可 kill:
sudo systemctl mask auditd(防止 systemctl stop/disable),并确认sudo ps aux | grep auditd进程 UID 为 root 且无异常父进程 - 日志存储目录(如
/var/log/audit/)设为只读(chattr +a /var/log/audit/audit.log允追加但禁删除/截断;更严格可用+i,但需卸载后修改)
禁用运行时内核模块加载与参数篡改
攻击者常通过加载恶意模块或修改 sysctl 参数绕过防护,必须关闭这些入口。
- 禁止未签名模块加载:
echo 'options kernel lockdown=confidentiality' >> /etc/modprobe.d/lockdown.conf,配合内核启动参数lockdown=confidentiality - 阻止任意模块插入:
echo "install <module_name> /bin/true" >> /etc/modprobe.d/blacklist.conf</module_name>(对非必要模块逐个屏蔽) - 冻结关键 sysctl 参数:例如禁用 IP 转发、关闭 ICMP 重定向、限制 core dump,全部写入
/etc/sysctl.conf,再执行sudo sysctl -p加载;对特别敏感项(如kernel.kptr_restrict),可设为只读:echo 2 > /proc/sys/kernel/kptr_restrict并确保重启后仍生效 - 启用内核地址空间布局随机化(ASLR)并加固:
vm.mmap_min_addr=65536、kernel.randomize_va_space=2,防止 ROP/JOP 攻击利用
固化审计事件与关键路径监控
不可变不仅指“不能改”,更要保证“改了也能立刻发现”。需将审计覆盖到自身防护机制的关键节点。
- 监控 auditd 配置文件变更:
-w /etc/audit/ -p wa -k audit_config,同时监控/etc/audit/rules.d/下所有规则文件 - 记录所有对
/proc/sys/的写操作:-a always,exit -F arch=b64 -S write,open,openat -F path=/proc/sys/ -k sysctl_mod - 审计 SELinux 策略加载行为:
-a always,exit -F arch=b64 -S setsockopt -F a2&0x800 -k selinux_policy_load - 所有审计日志启用远程转发(rsyslog 或 journald over TLS),本地日志仅作缓冲,避免被清除后无迹可查

















