这硬件 bug 可以说很牛了: 英特尔处理器发现严重设计漏洞, AMD 不受影响

2018-01-03 13:10:59 +08:00
 winglight2016

英特尔处理器架构曝出了严重设计缺陷,目前漏洞细节还没有完全披露,而 AMD 已经确认它不受影响。修正这个芯片级的安全漏洞将会导致严重的性能惩罚,估计使用英特尔处理器的系统性能将会出现 5%- 30% 的下降。该漏洞影响所有使用英特尔处理器的操作系统,包括 Linux、Windows 和 macOS,并且迫使 Linux 和 Windows 重新设计内核的虚拟内存系统,而微码更新无法解决该问题,过去十年的英特尔处理器被认为都存在该 bug。Linux 的修复代码已经释出,被称为 Kernel Page Table Isolation ( KPTI )的修正完全隔离了内核内存和用户进程,Phoronix 的初步测试证实性能出现了显著的下降,不过 Linux 下的游戏性能没有受到影响。微软预计会在这个月的例行更新中释出它的补丁,beta 版本已经提供给测试者。

——来自 solidot

不理解这 bug 是什么原理,怎么从硬件层面影响到了操作系统级别?

14922 次点击
所在节点    硬件
66 条回复
u1ucky
2018-01-03 14:51:28 +08:00
AMD is the best!
kyotrue
2018-01-03 14:52:16 +08:00
CPU 在用户态的时候,只能够访问内存映射表的映射出的虚拟地址,然后再被映射到实际物理地址。这个内存映射表是由 CPU 直接访问的、操作系统在核心态管理的,利用 CPU 本身的硬件特性就实现了应用程序的可访问内存区域隔离。

而这个 bug 就是这个机制有漏洞,可以有办法绕过,更新微代码不能解决,就只能操作系统内核通过软件实现了,操作系统内核要自己再维护一层内存映射表作为中间层、通过软件来控制权限。
we000
2018-01-03 15:03:16 +08:00
PTI 这个特性我理解是 Linux Kernel 刚刚发布不久, 现在不用也就是没有了预期的性能增益而已吧? 不会让大部分用户有性能损失. 错了的话请纠正我
jimages
2018-01-03 15:13:25 +08:00
@we000 这个特性就是为了保护数据安全...代价就是性能损耗
zmj1316
2018-01-03 15:14:43 +08:00
@we000 我的理解是 Intel 发现了自己的 Bug,偷偷给内核投了个 PTI 想修了,结果被人挖出来了......
dndx
2018-01-03 15:15:00 +08:00
@we000 PTI 不是特性,是绕过 bug 的安全修复,对性能有影响。
dndx
2018-01-03 15:16:58 +08:00
@zmj1316 怎么可能,这种性能影响这么大的 patch,Linus 一声没吭火速 merge,还看不出来吗。显然是通过气的。
xia0pia0
2018-01-03 15:17:16 +08:00
据说是内核模式跟用户模式的隔离没做好,Intel 为了速度快,搞了一个推测性执行,问题就出在推测性执行上。具体细节等公布吧,反正云厂商是最头疼的。
bukip
2018-01-03 15:25:21 +08:00
"过去十年的英特尔处理器被认为都存在该 bug。"

这么久了才被发现啊,还是早就知道了。
xenme
2018-01-03 15:25:36 +08:00
所以,Intel 一直碾压 AMD 用的就是这些黑科技么?哈哈,不知道 AMD 能不能借此翻身
we000
2018-01-03 15:27:55 +08:00
@zmj1316
@jimages 你们说的对, 谢谢
shijingshijing
2018-01-03 15:28:24 +08:00
转自 wiki,中文翻译是人话版,大家凑合看。

Kernel page-table isolation
From Wikipedia, the free encyclopedia

Kernel page-table isolation (KPTI, previously called KAISER) is a hardening technique in the Linux kernel to improve security by better isolating user space and kernel space memory.[1][2] KPTI was merged into Linux kernel version 4.15,[3][4] to be released in early 2018, and backported into Linux Kernel 4.14.10. Windows implemented an identical feature in version 17035 (RS4)[5].

内核分页表隔离(KPTI,以前叫做 KAISER)是 Linux 内核中的一项加固技术,将用户空间(User Space)和内核空间(Kernel Space)的内存进行更好的隔离以增强安全。

Background[edit]
Prior to KPTI, whenever executing user space code (applications), Linux would also keep its entire kernel memory mapped in page tables, although protected from access. The advantage is that when the application makes a system call into the kernel or an interrupt is received, kernel page tables are always present, so most context switching-related overheads (TLB flush, page table swapping, etc) can be avoided.[1]

In 2005, the Linux kernel adopted address space layout randomization (KASLR), which makes it more difficult to exploit kernel vulnerabilities,[6][7] which relies on kernel addresses remaining hidden from user space. Despite prohibiting access to these kernel mappings, it turns out there are several side-channel attacks in current Intel x86 processors (as of December 2017) that can leak the location of this memory, making it possible to work around KASLR.[2][8][9][10] AMD processors are not affected by these attacks and don't need KPTI to mitigate them.[11]

背景
在 KPTI 引入之前,每次执行用户空间代码(应用)时,Linux 虽然(对内核存储区域( Kernel Memory ))进行了访问保护,但还是会继续将整个内核存储区域( Kernel Memory )映射在分页表( page table )中。这样做的好处是,应用程序( Application )在请求内核系统调用( make a system call )或者触发一个中断( interrupt )时,内核的分页表一直处于可用状态,这样绝大多数上下文切换相关的开销( TLB Flush,page table swapping,等)可以避免。

在 2005 年,Linux 内核引入了地址空间随机排布技术( KASLR ),让内核地址对用户空间不可见,从而增加了发现内核漏洞的难度。虽然(已经)禁止了对这些内核映射的访问,但最后发现在现有的 Intel X86 处理器(到 2017 年 12 月为止)上可能会泄漏这些内存的位置,有一些旁路攻击( side-channel attacks )可以绕过 KASLR (这里是指通过 Kernel Page Table 里面的映射关系,能获取到 Kernel 内存区域的地址)。AMD 的处理器则不会受到这些攻击的影响因此无需使用 KPTI 进行改善。

Implementation[edit]
KPTI fixes these leaks by separating user space and kernel space page tables entirely. On recent x86 processors, a TLB flush can be avoided using the process context identifiers (PCID) feature, but even then it comes at a significant performance cost particularly in syscall-heavy and interrupt-heavy workloads. The overhead[clarification needed] was measured to be 0.28% according to KAISER's original authors,[2] but roughly 5% for most workloads by a Linux developer.[1]

KPTI can be disabled with the "nopti" kernel boot option. Also provisions were created to disable KPTI if newer processors fix the information leaks.[3]

实现
KPTI 通过对用户空间和内核空间的分页表进行完全隔离来修复这项漏洞。在最新的 X86 处理器中,使用 PCID (进程上下文标识符)来避免产生 TLB flush,即使这样,仍然会带来显著降低性能,特别是频繁使用系统调用和频繁使用中断的应用程序。由此带来的开销根据 KAISER 的原作者测量约 0.28%;一位 Linux 开发人员的测量结果是大多数工况下有 5%。

KPTI 可以通过 nopti 内核启动选项进行关闭。此外也做了未来如果新的处理器修复了此项漏洞,对 KPTI 进行关闭的准备。

--------------------------------------------------------

个人理解,问题可能是出在 Intel 处理器的 MMU 上,page table 的映射以及 address translation 是通过硬件实现的,可能是这一块出了问题,不得不用软件进行一些预处理。
hadoop
2018-01-03 15:29:15 +08:00
amd is the best!
zmj1316
2018-01-03 15:30:12 +08:00
@dndx 内核开发的肯定知道啊,偷偷说的是不公开说

https://www.reddit.com/r/sysadmin/comments/7nl8r0/intel_bug_incoming/?sort=confidence

这里写了,
People have noticed a recent development in the Linux kernel: a rather massive, important redesign (page table isolation) is being introduced very fast for kernel standards... and being backported! The "official" reason is to incorporate a mitigation called KASLR... which most security experts consider almost useless

根本没对外提 PTI 是拿来修硬件 Bug 的,估计是想先把 Patch 推了再公布漏洞
VYSE
2018-01-03 15:33:59 +08:00
评论误区太多
KPTI 概念来自于 KAISER https://gruss.cc/files/kaiser.pdf
KAISER 目的是因为历史上一票针对 CPU 的边信道攻击, 导致 KASLR 变得没什么卵用
边信道攻击是个大难题,KPTI 只能解决某些问题
AMD 并非不受边信道攻击,例如 <amp-youtube data-videoid="ewe3-mUku94" layout="responsive" width="480" height="270"></amp-youtube>
tyfyc
2018-01-03 15:45:18 +08:00
我早发那么久就一回复。。。估计确实被降权了。。。

https://lkml.org/lkml/2017/12/4/709

Linux 的 Patch 12 月 4 号就已经在 mailing list 了
原来开源社区早就被大厂商吃定了,孤陋寡闻了
Microi
2018-01-03 16:14:54 +08:00
什么?我已经 49 入国军了,还要被捅一刀?
pq
2018-01-03 16:21:22 +08:00
最近,Intel 被连曝负面新闻,难道是要被做空了么?
realpg
2018-01-03 17:00:41 +08:00
是否给用户一个选项不修复这个漏洞?
winglight2016
2018-01-03 17:23:46 +08:00
@kyotrue 原来是这样,那我明白了,只是这个补丁居然会导致 20%的性能损失,还过了十年多才发现,这也太~~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/419683

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX