LKRG:Linux 创建可加载内核模块用于运行时的完整性检查

开源社区正在着手为 Linux 内核准备一个新的以安全为本的项目“Linux内核运行时卫士 (LKRG)”。它是一个可加载的内核模块,对 Linux 内核执行运行环境完整性检查。

LKRG 的目的是检测针对 Linux 内核中已知安全漏洞的利用尝试并试图拦截攻击。LKRG 也将检测运行进程的权限提升,并在利用代码运行之前阻止运行进程。

项目的开发始于2011年,第一批版本已发布

LKRG 项目尚处于开发早期,因此目前的版本将仅通过内核信息报告内核完整性违规问题,随着系统的成熟,完整的利用缓解系统将得以部署。

LKRG 项目的开发始于2011年,并经历了一个“重新开发”的阶段。LKRG 的首次公开版本 LKRG v0.0 可供下载,并已提供相关情况介绍,还设置了支持该项目的一个 Patreon 页面。

虽然 LKRG 仍然是一个开源项目,但维护人员计划开发包含交付专用的 LKRG 构建和支持检测某些利用如容器逃逸的 LKRG Pro 版本。团队计划通过 LKRG Pro 版本的资金来支持项目余下的开发工作。

LKRG 是一个内核模块并非补丁

LKRG 还借用了 Additional Kernel Observer (AKO) 的一些理念,不过前者的特别之处在于它是一个内核加载模块而非补丁。LKRG 团队选择创建一个内核模块的原因是,修复内核会对安全性、系统稳定性和性能方面带来直接影响。

通过提供内核模块能让 LKRG 更加容易地部署在每个系统上,而无需修补和核心内核密码——这是一个非常复杂且容易出错的进程。

LKRG 内核模块目前可用于主要的 Linux 发行版本如 RHEL7、OpenVZ7、Virtuozzo 7 和 Ubuntu 16.04 以及最新主流版本。

并非完美的解决方案

但 LKRG 的创建人员警告用户称,不要认为他们的工具是不可遭破解且百分之百安全。他们表示 LKRG “在设计上是可绕过的”,而且仅“通过多样性提供安全性”。

创建人员指出,“虽然 LKRG 打败了很多已经存在的 Linux 内核利用漏洞,而且可能击败很多并非专门尝试绕过 LKRG 的功能利用(包括未知漏洞),但从设计上来讲它是可绕过的(尽管有时候还以更加复杂以及/或者更不稳定的利用为代价)。因此,可以说 LKRG 通过多样性提供了安全性,就像运行一个不常见的操作系统内核那样,但其中不存在真正运行不常见操作系统遇到的可用性缺点。”

LKRG 就像基于 Windows 的反病毒软件,后者也是在内核级别运行来检测利用和恶意软件。尽管如此,LKRG 团队表示产品的安全性要比反病毒和其它终端安全软件高得多,因为它的代码库更小,因此在内核级别引入新 bug 和漏洞的足迹更少。

当前的 LKRG 版本使性能下降 6.5%

研究人员表示 LKRG 最适合于出现安全漏洞后无法重启 Linux 机器修复内核的情况。LKRG 能让机主继续在关键漏洞补丁尚未测试完成以及在计划维护窗口尚未部署但拥有安全措施的情况下运行设备。

测试显示,安装 LKRG v0.0 之后导致性能下降了 6.5%,但研究人员表示随着开发的推进,性能会提升。

测试还表明,LKRG 检测到了 CVE-2014-9322 (BadIRET) 、CVE-2017-5123     (waitied(2) missing access_ok) 和 CVE-2017-6074(DCCP 协议中的使用后释放漏洞),但未能检测出 CVE-2016-5195(Dirty COW,脏牛漏洞)。该团队表示,由于之前提到的“从设计上可绕过”的策略原因,LKRG 未能检测到“脏牛漏洞”。目前还有待观察这类利用是否变得常见,它会对内核漏洞(无需直接针对用户空间且可能并不直接的漏洞)的可用性带来什么(可能是负面的)影响。

(完)