如何看待 2018 年 1 月 2 日爆出的 Intel CPU 设计漏洞?

关注者
8,931
被浏览
2,394,583

269 个回答

目前已知的消息(我不完全确定是这样)

  1. 此漏洞会导致低权限应用访问到内核内存
  2. 此漏洞是硬件设计导致的,无法使用microcode修复,只能进行OS级的修复
  3. OS级的修复会导致严重的性能问题,将会导致5%-30%的性能下降
  4. 目前phoronix已对此进行了测试,IO性能几乎下降了50%,编译性能下降了接近30%,postgresql和redis也有差不多20%的性能下跌,详细地址:
Initial Benchmarks Of The Performance Impact Resulting From Linux's x86 Security Changeswww.phoronix.com图标
  1. AMD不受此漏洞影响
Report: Intel CPUs suffer from major security flaw, fix could bring notable performance hit to macOS9to5mac.com图标

-- 英文版的详细信息

Intel: Details und Benchmarks zur Sicherheitslücke in allen CPUswww.computerbase.de图标

-- 最早的新闻来源


@vczh 顺便让轮子哥来作答………………

===========================

2018年1月4日的更新:

根据某发行版Linux的内核组基友的说明,目前推测的性能影响大部分可以取5%的下限,影响最大的是IO频繁的应用环境,所以最大的影响应该是各大公司的数据库服务器。

===========================

继续更新:

这一次由Intel服务器CPU产品诱发的安全事故现在规模正式扩大,确认波及到ARM和AMD,也就是说,近二十年来生产的几乎一切手机、电脑、云计算产品都在风险之列。

安全人员将两个新的漏洞命名为Meltdown(熔断)和Spectre(幽灵),前者允许低权限、用户级别的应用程序“越界”访问系统级的内存,从而造成数据泄露。

听说是由Google Zero团队发现的,目前这个规模就真的很大了……

Spectre affects Intel, AMD, and ARM processors, broadening its reach to include mobile phones, embedded devices, and pretty much anything with a chip in it. Which, of course, is everything from thermostats to baby monitors now.

It works differently from Meltdown; Spectre essentially tricks applications into accidentally disclosing information that would normally be inaccessible, safe inside their protected memory area. This is a trickier one to pull off, but because it’s based on an established practice in multiple chip architectures, it’s going to be even trickier to fix.


主要麻烦的是幽灵这个漏洞………………影响全部CPU………………不单止可以从内核态泄露,虚拟化的也可以………………而且目前没有有效的可行性修复方法………………

参考新闻来源:

Kernel panic! What are Meltdown and Spectre, the bugs affecting nearly every computer and device?techcrunch.com
“Meltdown” and “Spectre”: Every modern processor has unfixable security flawsarstechnica.com图标

有新消息会继续更新。

===================================

from Google Zero:

Testing also showed that an attack running on one virtual machine was able to access the physical memory of the host machine, and through that, gain read-access to the memory of a different virtual machine on the same host.

These vulnerabilities affect many CPUs, including those from AMD, ARM, and Intel, as well as the devices and operating systems running on them.

There is no single fix for all three attack variants; each requires protection independently. Many vendors have patches available for one or more of these attacks.

We will continue our work to mitigate these vulnerabilities and will update both our product support page and this blog post as we release further fixes. More broadly, we appreciate the support and involvement of all the partners and Google engineers who worked tirelessly over the last few months to make our users and customers safe.

==================================

贴一下目前最终的结论

Google Project Zero 和奥地利格拉茨技术大学等机构的研究人员正式披露了三个处理器高危漏洞,分别编号为 CVE-2017-5753(Variant 1)、CVE-2017-5715(Variant 2)和 CVE-2017-5754(Variant 3),前两个漏洞被称为 Spectre,后一个漏洞被称为 Meltdown,Spectre Variant 1 影响 AMD,英特尔和 ARM 处理器,而所有三个漏洞都影响英特尔处理器,研究人员已经开发出了概念验证的漏洞利用。AMDARM 已经发表声明称漏洞可以通过软件修正,对性能影响不大。而英特尔处理器的软件修正则被认为存在显著的性能影响。

目前具体的实例演示是这样的:

总结一下,最后是AMD和ARM都受到Spectre V1影响,就是上边说的全CPU受影响的漏洞,这个漏洞不是硬件级的所以可以比较容易处理,最终AMD和ARM可以通过系统更新来填补漏洞而且不会对性能有重大影响。而Intel目前受到所有三个漏洞影响,最终如何解决不明。

来源:

处理器漏洞 Meltdown 和 Spectrewww.solidot.org

再次更新:Google Project Zero 今天发布这篇文章,基本可以确定文章描述的就是这次引发讨论的漏洞。文章中描述了 SpectreMeltdown 两种攻击方式,都是利用之前被怀疑的“预测执行”机制实现的,且这两种方法需要用不同的方式来分别防御。


我现在只读了 Meltdown 那篇文章,梗概大概是这样的:

  • Meltdown 技术可以读取 Linux、Mac OS 的整个物理内存和 Windows 的大部分物理内存。Linux 内核 2.6.32 ~ 4.13.0 的版本以及最新的 Windows 10 均受到影响。
  • 可以读取其他进程的物理内存。即使在使用内核共享技术(例如 Docker, LXC)或者用 Xen 芯片的 paravirtualization 功能制作的沙箱中,也可以读取内核或 hypervisor 内存。
  • 影响了大部分从 2010 年开始生产的 Intel 芯片。在 ARM 和 AMD 芯片上的实验没有成功。
  • 漏洞根本原因是“预测执行”技术的设计缺陷。
  • 实验中破译数据的速度可达 503 KB/s,错误率低至万分之二。实验中已经可以读取 Firefox 56 的内存,并从中找到网页请求的头数据和浏览器储存的密码。
  • KAISER 技术可以阻止 Meltdown。目前 Windows Build 17035, Linux Kernel 4.15, OS X 10.13.2 和 iOS 均添加了 KAISER 技术或其变种。


Meltdown 的过程大概是:

  1. 构造一段代码,使得一句需要访问受保护内存的指令本来永远无法达到,但是可能因为“预测执行”而提前执行。
  2. 那句提前执行的代码会根据受保护的数据内容不同而访问内存中的不同位置(例如如果 data 是想破译的数据,那么 prob_array[data*4096] 会根据 data 的不同而访问不同的内存页)。
  3. 芯片发现权限不足,因此回滚之前的操作,将状态恢复到那条指令执行之前的情况。然而,CPU 中的内存缓存没有回滚。
  4. 攻击程序检测 prob_array 中的每个内存页取回数据的时间。如果某内存页的取回时间很短,说明该页在缓存中,是之前刚刚访问过的页面。从这个页面的下标就可以推断出 data 是什么。


以下是原答案:


更新:根据 @冯博群 提供的链接修正了一些原文中描述比较模糊的细节。


帮大家翻译一下文章梗概:

  • 英特尔的芯片级设计漏洞导致 Linux 和 Windows 内核的关键部分必须重新设计

======= 关于修复进展 =======

  • 开源程序员们已经修改了 Linux 的虚拟内存系统,但是代码注释被缩减,人们猜测是为了隐藏漏洞的详细信息。
  • Windows 预计在本周四正式发布相关补丁,且补丁已经在去年十一月、十二月的 Windows Insider 版本中发布给了测试用户。
  • macOS 也需要进行升级。

======= 关于修复方法 =======

  • 芯片微码更新不足以修复漏洞,必须修改系统或者购买新设计的 CPU。
  • 目前 Linux 内核的解决方案是重新设计页表(KPTI 技术,前身为 KAISER)。之前普通程序和内核程序共用页表,靠 CPU 来阻止普通程序的越权访问。新方案让内核使用另外一个页表,而普通程序的页表中只保留一些必要的内核信息(例如调用内核的地址)。这个方案会导致每次普通程序和内核程序之间的切换(例如系统内核调用或者硬件中断)都需要切换页表,引起 CPU 的 TLB 缓存刷新。TLB 缓存刷新相对来说是非常耗时的,因此会降低系统的效率。
  • KAISER 技术对系统性能的影响一般是 5%,最高可达 30%。一些高级的芯片功能(例如 PCID)可以支持其他技术,从而减少性能影响。Linux 已经在 4.14 版本的开发过程中添加了对 PCID 的支持。
  • 在 Linux 系统中,KPTI 只有在英特尔芯片上才会启用,因此 AMD 芯片不受影响,且用户可以通过手动修改开关的方式关闭 KPTI 。

======= 关于漏洞影响 =======

  • 根据 AMD 在 Linux 内核邮件列表里发送的邮件,AMD 芯片没有发现这样的漏洞。
  • 人们推测,漏洞会导致普通程序可以获得受保护的内核页表信息,进而导致一些内核保护技术(例如 KASLR,即内核地址空间布局随机化)可能被攻破。
  • 微软 Azure 云服务将在 1 月 10 日进行维护并重启,人们推测可能是为了修复这个漏洞。
  • Amazon Web Services 通过邮件警告客户,本周五会有一次重要的安全更新。

======= 其他信息 =======

  • 还是根据 AMD 的那封邮件,人们推测出现问题的根源是“预测执行”(Speculative execution)机制。这个技术让 CPU 可以预测即将执行的代码,从而加快运行速度。人们猜测,可能芯片在完成权限检查之前,就会因为这个机制而执行本来不该执行的代码。
  • 也有人推测这个漏洞就是去年年末传言的虚拟机器监视器(hypervisor )的重大 bug。
  • KPTI 的前身 KAISER 本来是用来预防 time-based attack 的,但是因为性能损失较高而一直没有并入主流 Linux 版本中。
  • Linux 内核中阻止 KPTI 在 AMD 芯片上自动启用的代码是 AMD 自己提交的。