Linux v4.10 中的安全特性
先前版本:v4.9
以下是上周发布的 Linux 内核 v4.10 中一些有趣的安全特性的快速总结:
ARM64 上的 PAN 模拟
Catalin Marinas 引入了 ARM64_SW_TTBR0_PAN
,其功能相当于 ARM 的 CONFIG_CPU_SW_DOMAIN_PAN
。虽然特权执行从不(PXN)在 ARM 硬件中已经可用一段时间,但特权访问从不(PAN)只有在供应商开始制造 ARMv8.1 或更高版本的 CPU 时才能在硬件中使用。目前,所有设备仍基于 ARMv8.0,这在 ARM 的安全漏洞缓解方面留下了一个空白,因为 CONFIG_CPU_SW_DOMAIN_PAN
只能在 ARMv7 系统上提供 PAN 覆盖,但在 ARMv8.0 上没有任何解决方案。这解决了这个问题,并关闭了 ARM64 系统上常见的利用方法。
ARM64 上的 thread_info 重定位
正如之前在 x86 上所做的那样,Mark Rutland 已将 ARM64 上的 thread_info
移出内核堆栈。由于 thread_info
不再位于堆栈上,攻击者更难找到它,这使得颠覆非常敏感的 addr_limit
字段变得更加困难。
链表加固
我添加了 CONFIG_BUG_ON_DATA_CORRUPTION
来恢复 v2.6.27(9 年前)之前存在的原始 CONFIG_DEBUG_LIST
行为:如果检测到列表元数据损坏,内核拒绝执行操作,而不是仅仅发出警告并继续执行损坏的操作。由于链表损坏(通常通过堆溢出)是攻击者获得“写什么在哪里”原语的常见方法,因此如果元数据明显损坏,停止列表添加/删除操作非常重要。
从 UEFI 中为内核 RNG 提供种子
许多架构面临的一个问题是找到可行的早期启动熵源来初始化内核随机数生成器。对于 x86,这主要通过 RDRAND 指令解决。然而,在 ARM 上,解决方案仍然非常依赖于供应商。事实证明,UEFI 应该通过一组通用 API 隐藏各种供应商特定的事物。EFI_RNG_PROTOCOL
调用旨在提供熵,但在内核运行时无法调用。为了将熵引入内核,Ard Biesheuvel 创建了一个 UEFI 配置表(LINUX_EFI_RANDOM_SEED_TABLE_GUID
),该表在 UEFI 启动存根期间填充,并在早期启动时馈入内核熵池。
ARM64 W^X 检测
正如之前在 x86 上所做的那样,Laura Abbott 在 ARM64 上实现了 CONFIG_DEBUG_WX
。现在,任何危险的 ARM64 内核内存保护都会在启动时大声报告。
ARM 上的 64 位 get_user() 清零修复
虽然修复本身相当小,但我喜欢这个错误是通过对 lib/test_user_copy.c
中的用户复制测试代码的联合改进发现的。Hoeun Ryu 添加了失败时清零测试,我扩展了 get_user()
/put_user()
测试以包括所有大小。单独的任何改进都不会发现 ARM 错误,但它们一起发现了一个边界情况下的拼写错误。
/proc/$pid/status 中可见的 no-new-privs
这是一个微小的变化,但我喜欢能够从外部内省进程。在此之前,我无法轻易回答“该进程是否设置了 no-new-privs 标志?”这个问题。为了解决这个问题,我在 /proc/$pid/status
中公开了该标志,作为 NoNewPrivs
。
PowerPC 上的内核用户空间执行预防
与 x86 上的 SMEP 和 ARM 上的 PXN 类似,Balbir Singh 在 CONFIG_PPC_RADIX_MMU=y
(默认情况下)下在 Power9 及更高版本的 PPC CPU 上实现了保护。这意味着如果内核的函数指针被覆盖,它不能再指向用户空间内存中的任意代码。攻击者的能力被减少到只能使用可执行的内核内存,这在他们的控制下要少得多(并且可见性更有限)。
目前就这些!如果您看到其他需要指出的内容,请告诉我。:) 我已经对 v4.11 合并窗口的开启感到兴奋了…
编辑:添加了关于 Power9 上 SMEP 的说明
© 2017 – 2019, Kees Cook。本作品根据知识共享署名-相同方式共享 4.0 许可协议授权。
评论 (1)
1 条评论
“4.10 中的安全特性”
那么我们现在不会在 4.10 中看到 grsecurity 了,对吧?4.9 是最后一个向公众开放的版本。当我第一次读到这篇文章时,我很兴奋地看到链表加固(我在这篇文章之前听说过)与 grsec 结合,因为这是期待已久的。现在我不得不接受这样一个事实:我永远不会看到它。干得好。你为安全社区服务得很好。
评论者:whatever — 2017 年 3 月 17 日 @ 1:56 am