在经历了七年多的迭代之后,Linux Kernel Runtime Guard(LKRG,内核运行时防护) 终于迎来了 1.0 正式版。这个由 Openwall 项目维护的内核模块,自 2018 年首次亮相以来,一直被视为 Linux 内核的一道“保险”,如今终于走到了一个重要的里程碑。

什么是 LKRG?

如果你对它还不太熟悉,可以把 LKRG 想象成一个给 Linux 内核随时“体检”的保镖。它的作用并不是替代 SELinux、AppArmor 这样的安全框架,而是作为额外的防护层,直接在内核层面进行监控和防御。

举几个实际的例子:

  • 如果攻击者尝试通过某个漏洞篡改内核内存或凭据,LKRG 能立即发现异常。

  • 一旦检测到可疑行为,它可以根据预设策略:

    • 记录详细日志;

    • 直接终止相关进程;

    • 或采取其他防御措施,防止攻击进一步扩散。

这种机制让系统在面对零日漏洞或未知攻击时,多了一层实时保护。


1.0 版本的主要变化

相比之前的 0.9.9,LKRG 1.0 带来了不少实用的改进和优化:

  • 内核支持:适配到最新的 Linux 6.17-rc4,并改进了对 6.13+ 内核的支持。例如,去掉了对 override_creds()revert_creds() 的钩子,但在旧版内核上加强了凭据覆盖的检测能力。

  • 容器兼容性:改进了对 OverlayFS 的支持,解决了在 Linux 6.10–6.12 上运行容器时容易出现的误报。

  • 代码优化:整体代码量减少了约 2400 行,结构更精简,可维护性更高。


性能与可靠性提升

为了保证在高负载场景下的表现,LKRG 1.0 在性能和可靠性上做了深入优化:

  • 性能优化

    • 任务级的 shadow data 查找变成无锁操作,提升效率;

    • shadow data 锁机制细化,减少不必要的开销。

  • 钩子机制改进

    • kretprobes 改为 kprobes,速度更快、可靠性更高;

    • 去除了大量重复代码,逻辑更清晰。

  • 完整性检查

    • 将违规检测包裹在 unlikely() 中,避免在高频路径中对缓存造成污染。

  • 并发问题修复

    • 修复了多个竞争条件,包括 SECCOMP 过滤器命名空间校验 以及 sysctl 配置变更 带来的冲突问题。

此外,新版本还解决了在新内核上 seccomp 模式误报 的问题,并改善了对 Intel CET IBTClang 的 KCFI 的兼容性(仅限 x86_64 架构)。不过目前官方仍推荐使用 GCC 作为编译器。


其他改进与发行版支持

除了核心改进,LKRG 1.0 还在周边工具和生态支持上有所加强:

  • 提供了更安全的用户态日志工具构建;

  • 错误报告机制更加完善;

  • 持续集成(CI)测试覆盖更广,涵盖了 Fedora 最新内核Ubuntu 24.04 LTS–25.10,甚至包括已到寿命的 CentOS 7

  • 在发行版支持上,Rocky Linux SIG/Security 仓库已经率先提供了新版 LKRG 包,后续会扩展到 Rocky Linux 9.6 / 8.10,同时兼容 AlmaLinuxRHEL 8/9 等主流企业级发行版。

  • 更多详细信息,可以查看官方公告

总结

LKRG 1.0 的到来,标志着这个项目正式步入成熟阶段。它不是为了替代已有的安全框架,而是作为补充,提供了一层内核级的“最后防线”。通过性能优化、容器兼容改进以及对最新内核的支持,LKRG 1.0 让 Linux 系统在面对复杂攻击时具备了更强的防御力。

发表回复