核心思路是借助内核层面的强制访问控制与加载限制机制,让恶意程序即使获得用户权限,也无法随意修改关键系统状态或注入非法代码;通过SELinux/AppArmor实施进程级细粒度管控,强制内核模块签名,启用内存保护机制,并结合auditd监控敏感操作。

核心思路是借助内核层面的强制访问控制与加载限制机制,让恶意程序即使获得用户权限,也无法随意修改关键系统状态或注入非法代码。
启用SELinux或AppArmor实施进程级细粒度管控
这两类安全模块通过策略定义每个进程能访问哪些文件、端口、系统调用等资源,从根本上遏制越权行为。
- SELinux适合高安全要求环境:检查
getenforce是否为Enforcing;若非强制模式,需修改/etc/selinux/config中SELINUX=enforcing并重启生效 - AppArmor更易上手:配置文件存于
/etc/apparmor.d/,用apparmor_parser -r加载后,运行aa-status确认进程已受策略约束 - 关键服务(如sshd、nginx)应处于
enforce模式,避免使用complain模式长期放行违规操作
强制内核模块签名,阻断恶意LKM加载
攻击者常通过加载未签名内核模块直接操控内存和系统调用表,绕过所有用户空间防护。开启签名验证可彻底封堵该路径。
- 确认内核已启用签名支持:
zcat /proc/config.gz | grep MODULE_SIG应显示CONFIG_MODULE_SIG=y和CONFIG_MODULE_SIG_FORCE=y - 生成密钥对:
openssl req -new -x509 -newkey rsa:4096 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=My Secure Boot Key/" - 注册密钥:
mokutil --import MOK.der,并在下次启动时进入UEFI MOK管理界面完成信任确认 - 重启后,任何未签名模块加载都会被内核拒绝,
dmesg | grep -i "signature"可查看验证日志
启用内核内存保护机制,加固运行时态完整性
防止攻击者在提权后重写内核函数指针或关键数据结构,从而篡改调度逻辑、隐藏进程或劫持系统调用。
- 确保
CONFIG_STRICT_KERNEL_RWX和CONFIG_STRICT_MODULE_RWX已启用,使内核代码段不可写、数据段不可执行 - 检查当前设置:
cat /boot/config-$(uname -r) | grep -E "(STRICT_KERNEL_RWX|STRICT_MODULE_RWX)",输出应为=y - 配合
kernel.kptr_restrict=2隐藏内核符号地址,增加利用难度;该参数可通过sysctl -w kernel.kptr_restrict=2临时启用,或写入/etc/sysctl.conf持久化
结合auditd监控敏感系统调用与状态变更
即使有前置防护,仍需记录异常行为——比如进程尝试修改自身内存映射、挂载新文件系统、或调用ptrace调试其他关键进程。
- 添加审计规则监控关键操作:
-a always,exit -F arch=b64 -S execve,mmap,mprotect,ptrace -k runtime_tamper - 将规则写入
/etc/audit/rules.d/runtime.rules,再执行augenrules --load生效 - 配合
ausearch -m avc -ts recent或aureport -f -i分析SELinux拒绝事件,定位策略缺口

















