Linux内核v4.11安全特性深度解析

本文详细介绍了Linux内核v4.11版本中的多项安全增强特性,包括refcount_t基础设施、CONFIG_STRICT_KERNEL_RWX重命名、只读用户模式助手、seccomp核心转储支持等,旨在提升内核的安全性和稳定性。

Linux内核v4.11安全特性

发布时间:2017年5月2日

分类:Chrome OS, Debian, 内核, 安全, Ubuntu, Ubuntu-Server

以下是本周发布的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”。将其整合到顶级arch Kconfig文件下,也为原本是每个架构的配置带来了一些合理性,并表明这是一个需要在所有架构上启用的基本内核保护。

只读用户模式助手

攻击者常用的逃脱限制的方法是通过重写用户模式助手sysctl(例如/proc/sys/kernel/modprobe)以在init命名空间中运行他们选择的内容。为了减少内核内的攻击面,Greg KH引入了CONFIG_STATIC_USERMODEHELPER,它将所有用户模式助手二进制文件切换为单个只读路径(默认为/sbin/usermode-helper)。用户空间需要支持一个新的助手工具,该工具可以将内核请求多路复用到一组已知的二进制文件。

seccomp核心转储

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国际许可协议授权。

评论 (2)

Clayton Craft — 2017年5月3日上午11:32
仅供参考,KSPP wiki仍然引用了旧的CONFIG_DEBUG_RODATA选项:https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project

lolo — 2017年5月7日下午12:08
我在linux 4.11.0的menuconfig中找不到DEBUG_REFCOUNT,为什么?

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计