Shawn: 2015年11月,华盛顿邮报发布了一篇关于Linux内核安全性的报道(LCTT 注:昨天发表的《内核自防护项目(KSPP, Kernel Self-Protection Project)应运而生,目标是为了让 Linux 内核本身具有对漏洞利用的防御能力,主要工作是参考 PaX/Grsecurity 的实现来移植或者重新实现类似的功能然后推进到 Linux 内核主线。随着 Linux 4.6 的发布,第一个加固 patch 合并到了主线,而 Kees Cook 也编写了这篇 KSPP 介绍的文档以让更多的人能了解和参与到 KSPP 中。
内核自防护
内核自防护是针对 Linux 内核对抗自身的安全缺陷的设计与实现。这个领域涉足广泛的问题,包括干掉一整个类型的 bug,阻止漏洞利用的方法和积极的检测攻击行为。这篇文档不讨论所有的议题,但这篇文档是整个内核自防护项目的一个起点和回答一些常见的问题。(欢迎提交补丁)
在最糟糕的场景下,我们假设一名没有权限的本地攻击者拥有对内核内存任意读写访问的能力。在很多情况下,被利用的 bug 不会提供这个层面的访问能力,但在防御最糟糕的情况的同时我们也会讨论更多限制的攻击场景。root 用户大大的增加了攻击平面,而我们应该注意防御具有权限的本地攻击者则是更高的门槛(特别是当攻击者具有加载任意内核模块的场景)。
自防护系统的目标应该是让安全防护成为默认配置,不影响性能和调试以及经过严格的测试。要达到所有的目标可能不太容易,但值得我们都把这些问题罗列出来,再去解决或者接受。
降低攻击平面
针对安全漏洞利用的最基础的防御是降低内核可被重定向执行的区域。这包含限制暴露给用户空间的 API,让内核自身的 API 更难以不正确的使用,可写内核内存区域的最小化,等等。
限制内核内存