防范内核级rootkit驻留的核心是切断其加载与运行条件:启用kernel.modules_disabled=1禁用模块加载,强制模块签名验证,启用strict_kernel_rwx内存保护,收缩攻击面并加固启动链。

防范内核级 ROOTKIT 驻留,核心不是“事后查杀”,而是从系统启动起就切断其加载和运行条件。内核加固技术正是围绕这个逻辑构建的主动防御体系——它不依赖签名或行为识别,而是通过限制内核自身被篡改的可能性,让绝大多数内核级 rootkit 失去立足基础。
关闭未授权内核模块加载
绝大多数 Linux 内核 rootkit(如 kdevtmpfsi、SkidMap)依赖动态加载恶意 .ko 模块实现驻留。只要禁止非白名单模块加载,就能阻断其最常用入口。
- 启用 kernel.modules_disabled=1(写入 /etc/sysctl.conf 并 sysctl -p),彻底禁用 insmod/modprobe;生产环境建议在启动参数中加 module_blacklist=xxx 屏蔽已知恶意模块名
- 设置 CONFIG_MODULE_SIG 和 CONFIG_MODULE_SIG_FORCE=y,强制所有模块必须带可信签名;配合私钥离线管理,杜绝攻击者伪造签名加载
- 检查当前已加载模块:lsmod | grep -E "(malware|unknown|tmp)",重点关注无对应磁盘文件(/lib/modules/$(uname -r)/)的模块
启用严格的内核内存保护
内核级 rootkit 常靠覆写内核代码段(如 sys_call_table)、修改函数指针(如 do_fork)来劫持控制流。RWX 保护能直接让这类操作失败。
本文档主要讲述的是Android 操作系统的介绍;Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 确认内核编译时启用了 CONFIG_STRICT_KERNEL_RWX=y 和 CONFIG_STRICT_MODULE_RWX=y;可通过 zcat /proc/config.gz | grep STRICT 验证
- 运行 cat /sys/kernel/debug/x86/pti_enabled(x86_64)或检查 dmesg 中 “W+X mapping” 报告,确认页表级写保护生效
- 避免使用 ksymtab 或 kallsyms 泄露符号——生产内核应设 kernel.kptr_restrict=2,防止攻击者定位关键函数地址
收缩内核攻击面与运行时监控
减少内核暴露的可利用接口,并对关键结构做运行时校验,是防御持久化钩子(如 SSDT/HookMap 类劫持)的有效手段。
- 禁用高危接口:echo 1 > /proc/sys/kernel/kptr_restrict、echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled(若无需 bpf)、移除 debugfs 挂载
- 定期比对内核内存关键区域哈希:用 crash 工具或 volatility(配合 vmcore)检查 sys_call_table、idt、中断描述符表是否被篡改
- 部署轻量级内核完整性监控工具,如 integrity-checker 或基于 eBPF 的 tracee,实时捕获模块加载、kprobe 注册、回调注册等敏感事件
加固启动链与固件层信任
部分高级 rootkit(如 UEFI rootkit)会绕过操作系统层直接污染启动过程。仅加固运行时内核远远不够。
- 启用 UEFI 安全启动(Secure Boot),并确保发行版内核与 initramfs 均带微软或自签有效签名;禁用 MokManager 或设置强密码防绕过
- 检查启动日志:dmesg | grep -i "secure boot\|efi\|ima",确认 IMA(Integrity Measurement Architecture)已启用且策略为 appraise
- 对物理服务器,禁用 BIOS/UEFI 中的“Legacy Boot”、“CSM”选项;定期用 fwts 或厂商工具校验固件完整性










