LKRG:Linux获得用于运行时完整性检查的可加载内核模块
开源社区成员正在为Linux内核开发一个以安全为重点的新项目,命名为Linux Kernel Runtime Guard(LKRG),这是一个可加载的内核模块,它负责在Linux内核运行时执行完整性检查。
它的目的是检测针对Linux内核的已知安全漏洞的利用尝试,并试图阻止其攻击。LKRG还会检测出正在运行的进程想要升级权限,并在运行利用代码之前,终止进程。
2011年开始开发,如今首个版本发布
由于该项目正处于早期开发阶段,目前版本的LKRG只会通过内核的一些信息报告内核完整性遭到破坏,而随着系统的成熟,将会部署一个完整的漏洞利用缓解系统。
这个项目的工作始于2011年,LKRG成员Alexander Peslyak描述了这个过程,LKRG已经经历了一个“二次开发”的阶段。
LKRG的公开版本 -LKRG v0.0现在可以在这个页面下载, 有关该项目的wiki和patreon 页面也都搭建完毕。
虽然LKRG仍然是一个开源项目,但是LKRG维护者也有一个LKRG Pro版本的计划,其中将包括特定的LKRG版本,并支持检测特定的漏洞,如容器转义。团队计划使用LKRG Pro的资金为项目的其余部分提供资金。
LKRG是一个内核模块, 而非补丁
项目也借鉴了Additional kernel Observer(AKO)的一些想法,但不同的一点是,它是内核加载模块,而非补丁。LKRG团队选择创建一个内核模块,因为修补内核对系统安全性、稳定性和性能有直接的影响。
修改内核核心代码,这是一个非常复杂和容易出错的过程,所以选择提供一个内核模块的方式,这也使得LKRG更容易部署在每个系统上。
LKRG内核模块目前可用于主要的Linux发行版,如RHEL7,OpenVZ 7,Virtuozzo 7和Ubuntu 16.04。
并非完美的解决方案
但是,LKRG的创造者正在警告用户不要认为他们的工具是牢不可破的、100%安全的。他们说LKRG是“可以绕过设计”的,并且只提供“通过多样性实现安全”。
虽然LKRG可以防范许多先前存在的Linux内核漏洞攻击,并且可能会防范未来的漏洞攻击--不一定是特定地用来绕过LKRG的(包括尚未知的漏洞),但它是可以绕过设计的(尽管有时以牺牲更复杂和/或不太可靠的利用为代价)。因此,可以说LKRG通过多样性提供安全性,就像运行一个不常见的操作系统内核一样,但是却没有实际运行一个不常见的操作系统的常见缺点。
LKRG类似于基于Windows的防病毒软件--在内核层面检测漏洞和恶意软件。尽管如此,LKRG团队表示,他们的产品比杀毒软件和其他终端安全软件要安全得多,因为它的代码量小得多,因此在内核级别引入新的漏洞和漏洞的范围更小。
目前的LKRG版本对系统性能有6.5%的影响
Peslyak表示,LKRG最适合那些为内核打好补丁后却无法正确重启的Linux机器。LKRG允许所有者继续使用适当的安全措施运行计算机,直到在计划的维护时段内对关键漏洞的补丁进行测试和部署。
测试显示,安装LKRG v0.0对系统有6.5%的性能影响,但Peslyak表示,随着版本迭代会大大减少。
测试还显示,LKRG检测到尝试利用 CVE-2014-9322(BadIRET),CVE-2017-5123(waitid(2)缺少access_ok)和CVE-2017-6074(在DCCP协议中的UAF漏洞)漏洞,但未能检测到CVE-2016-5195(脏牛漏洞)。该团队说,由于前面提到的“可以绕过设计”策略,因而LKRG没有发现脏牛漏洞的权限提升。
在脏牛漏洞中,绕过LKRG是由于bug的性质而发生的,这也是利用它的一种方式。同时,这也是未来的一种漏洞利用方式--类似于直接针对用户空间绕过LKRG。除非LKRG或类似的流行趋势,否则这种利用是否会变得普遍,还有待观察。对于直接针对用户空间的内核漏洞而言,对其可靠性的(负面)影响可能并不是直接的,也不重要。
来源:bleepingcomputer
本文由看雪翻译小组 fyb波 编译