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

本文详细介绍了Linux内核v4.12版本中的多项安全增强特性,包括x86 GDT只读化、用户拷贝加固、ASLR熵控制、LSM结构保护、KASLR默认启用、64位栈保护金丝雀扩展及堆栈间隙防护等关键技术改进。

Linux内核v4.12中的安全特性

发布日期:2017年7月10日
分类: Chrome OS, Debian, 内核, 安全, Ubuntu, Ubuntu-Server
作者: kees @ 1:24 am

上一篇:v4.11

以下是Linux内核上周发布的v4.12版本中一些有趣安全特性的简要总结:

x86只读与固定位置GDT

通过内核内存基地址随机化,攻击者仍可通过"sgdt"指令获取每CPU基地址,因为它会暴露每CPU GDT的位置。为解决这一问题,Thomas Garnier将GDT移至固定位置。为消除攻击者利用内核漏洞直接针对GDT的风险,他还将其设置为只读。

用户拷贝整合

在强化用户拷贝功能上线后,Al Viro决定仔细研究所有用户拷贝例程,并将每架构的用户访问代码整合为单一实现。各架构代码功能非常相似,因此消除冗余是有意义的。在此过程中,他发现了多个架构中未处理的边缘情况(通过整合得到修复),并使强化用户拷贝在所有剩余架构上可用。

PowerPC上的ASLR熵系统控制

Michael Ellerman继续扩展ASLR熵系统控制的架构支持,实现了PowerPC所需的计算。这使得用户空间可以选择增加用于内存布局的熵值。

LSM结构只读化

James Morris使用__ro_after_init使LSM结构在启动后变为只读。这消除了它们作为攻击者理想目标的可能性。由于钩子从内核各处调用,这曾是攻击者劫持内核执行的首选方法。(类似目标曾是系统调用表,但早已设置为只读。)注意CONFIG_SECURITY_SELINUX_DISABLE会移除此保护,因此请确保该配置保持禁用状态。

x86默认启用KASLR

许多发行版已通过CONFIG_RANDOMIZE_BASECONFIG_RANDOMIZE_MEMORY在x86上启用KASLR,Ingo Molnar认为该功能已足够成熟,可以默认启用。

64位系统上扩展栈保护金丝雀至64位

CONFIG_CC_STACKPROTECTOR使用的栈保护金丝雀值在x86上最强大,因为它在每个任务中不同。(其他架构对所有任务使用单一金丝雀。)虽然x86(和其他架构)上选择的第一个金丝雀是完整的无符号长整型,但随后为x86每个任务选择的金丝雀被截断为32位。Daniel Micay修复了此问题,现在x86(以及未来获得每任务金丝雀支持的架构)显著增加了栈保护器的熵值。

扩展堆栈间隙

Hugh Dickens在多人协助下改进了内核对堆栈冲突的缓解措施。这是一项临时措施,有助于防御Stack Clash攻击。额外的强化需要编译器在大型堆栈扩展时生成"堆栈探测"。堆栈上的任何可变长度数组或alloca()使用都需要生成机器代码来触及这些区域中的每个内存页,以让内核知道堆栈正在扩展,但以单页粒度进行。

以上就是全部内容;如果我遗漏了什么,请告诉我。v4.13合并窗口已开启!

编辑: Brad Spengler指出我未提及只读LSM结构与CONFIG_SECURITY_SELINUX_DISABLE的问题。现已添加。

© 2017, Kees Cook。本作品采用知识共享署名-相同方式共享4.0国际许可协议进行许可。


评论 (3)

  1. Thorsten Leemhuis — 2017年7月10日 @ 3:48 am
    随着最近KASLR的改进,它与OpenBSD最近宣布的KARL(https://marc.info/?l=openbsd-tech&m=149732026405941&w=2)相比如何?为Linux实现类似功能是否有意义?或者随机化模块加载地址和/或内核映像已经部分实现了?

  2. Pax Fan — 2017年7月11日 @ 2:39 am
    他不得不找了很长时间……
    #ifdef CONFIG_CC_STACKPROTECTOR
    /* tsk->stack_canary = pax_get_random_long(); */
    tsk->stack_canary = get_random_long();
    #endif

  3. adilson avila — 2017年8月22日 @ 6:16 am
    v4.12


分类
博客 (152) | Chrome OS (49) | Debian (117) | 嵌入式 (8) | 通用 (33) | 健康 (3) | Inkscape (8) | 内核 (37) | kernel.org (6) | 多媒体 (33) | 网络 (27) | 逆向工程 (15) | 安全 (130) | Ubuntu (179) | Ubuntu-Server (109) | 车辆 (2) | 漏洞 (12) | Web (14)

搜索:

链接
Outflux | #fediverse

归档
[选择月份] 2005年10月 - 2023年10月

元数据
登录 | 文章RSS | 评论RSS | WordPress.org

由WordPress提供技术支持

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