Linux v4.11 安全特性
发布日期:2017年5月2日
以下是本周发布的 Linux v4.11 内核中一些有趣的安全特性的快速总结:
refcount_t 基础设施
基于 Elena Reshetova、Hans Liljestrand 和 David Windsor 移植 PaX 的 PAX_REFCOUNT 保护功能的努力,Peter Zijlstra 实现了一个新的内核 API,用于引用计数,并添加了 refcount_t
类型。在此之前,所有引用计数器在内核中都是使用 atomic_t
类型实现的,但其 API 广泛且通用,无法提供合理的保护来防止引用计数器溢出漏洞。通过专用类型,可以设计专门的 API,以便对引用计数进行健全性检查,并提供阻止溢出的方法。仅 2016 年就出现了至少几个公开可用的引用计数漏洞(例如 CVE-2016-0728、CVE-2016-4558),这将成为内核中一个受欢迎的补充。将所有 atomic_t
引用计数器转换为 refcount_t
的艰巨任务将在未来一段时间内继续进行。
CONFIG_DEBUG_RODATA 重命名为 CONFIG_STRICT_KERNEL_RWX
Laura Abbott 提交了重命名内核内存保护功能的更改。该保护功能已经不再是“调试”功能超过十年,并且它涵盖了所有内核内存部分,而不仅仅是“rodata”。将其整合到顶级架构 Kconfig 文件下,也为原本是每个架构的配置带来了一些合理性,并表明这是一个需要在所有架构上启用的基本内核保护功能。
只读用户模式助手(read-only usermodehelper)
攻击者常用的逃脱限制的方法是通过重写用户模式助手 sysctl(例如 /proc/sys/kernel/modprobe
)来在 init 命名空间中运行他们选择的内容。为了减少内核内的攻击面,Greg KH 引入了 CONFIG_STATIC_USERMODEHELPER
,该配置将所有用户模式助手二进制文件切换为单个只读路径(默认为 /sbin/usermode-helper
)。用户空间需要通过一个新的助手工具来支持此功能,该工具可以将内核请求解复用为一组已知的二进制文件。
seccomp 核心转储(seccomp coredumps)
Mike Frysinger 注意到无法从被 seccomp 杀死的进程中获取核心转储,这可能会使调试变得令人沮丧,特别是对于自动崩溃转储分析工具。为了符合现有的 SIGSYS 文档(该文档指出应生成核心转储),他添加了对在 seccomp SECCOMP_RET_KILL
结果时转储核心的支持。
structleak 插件
从 PaX 移植而来,我提交了 structleak 插件,该插件强制任何包含 __user
注释的结构完全初始化为 0,从而完全消除内核中此类结构的堆栈内容暴露。这最初是为了阻止特定漏洞而设计的,现在将继续阻止类似的暴露。
MIPS 上的 ASLR 熵 sysctl
Matt Redfearn 为 MIPS 实现了 ASLR 熵 sysctl,允许用户空间选择增加用于内存布局的熵。
powerpc 上的 NX brk
Denys Vlasenko 修复了一个长期存在的错误,即内核对 ELF 内存布局做出假设,并默认将 powerpc 上的 brk 部分设置为可执行。现在不再是可执行的,这将防止进程堆被滥用。
以上就是本次的内容;如果我遗漏了什么,请告诉我。v4.12 合并窗口已经开放!
© 2017, Kees Cook。本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。