Meltdown和Spectre有什么区别?

8

最近发现的硬件漏洞Meltdown和Spectre有哪些关键区别?我知道它们都依赖于推测执行,但它们之间有什么不同之处?

Meltdown是一种影响大多数Intel处理器的漏洞,它允许攻击者访问系统内存中的数据。Spectre是另一种类型的漏洞,它影响几乎所有处理器,包括Intel、AMD和ARM等。Spectre漏洞利用了CPU的分支预测功能,它使得攻击者可以访问应该被保护的数据。

3个回答

4
最近发现的硬件漏洞Meltdown和Spectre有哪些关键区别?
Spectre攻击有两种类型。最危险的一种使用分支误判和缓存副作用来读取当前进程虚拟内存中的任何字节。它适用于各种处理器,包括手机、平板电脑等。
那么,为什么我们不能在没有Spectre的情况下读取当前进程中的任何字节呢?为什么Spectre是危险的?有多种语言创建沙箱(JavaScript)或虚拟机(Java)来隔离从互联网下载的潜在危险代码与本地计算机之间的关系。
由于Spectre,再也没有这样的隔离了,因此从网站下载的JavaScript可以读取浏览器中的任何数据。可能会有一些密码、信用卡号码和其他敏感信息。
Meltdown是一种硬件问题,适用于某些处理器(英特尔、一些ARM、一些IBM POWER),可以同时读取内存并检查特权。这打开了一个可能性,即可以读取您无权访问的内存。例如,由于Meltdown,用户进程能够读取内核内存。

Meltdown为什么很危险?内核存储加密密钥、密码或其他进程的物理页面,由于Meltdown的存在,这些信息可能会被系统中的任何用户进程读取。

Spectre vs Meltdown

Spectre和Meltdown之间的主要区别在于,由于Spectre,您可以读取或欺骗同一权限级别上的其他进程泄露内存,而使用Meltdown,您可以读取没有访问权限的内存

概念证明

这是我基于Linux的Spectre-Based Meltdown(即2合1)概念证明,仅用了99行代码:

https://github.com/berestovskyy/spectre-meltdown

它允许使用边界检查绕过(即Spectre)来读取内核空间(即Meltdown)。

1
Meltdown的关键在于必须存在一个页面表项,但只映射到内核。Meltdown无法读取根本没有映射的内存。"你无权访问的内存"是一种过度简化的说法。它绕过了页面表权限检查,例如x86的U/S位(用户/监管员)。 - Peter Cordes
@PeterCordes 谢谢,我重新表述了一下以使其更正确。关于映射。两种攻击都需要映射,即使用Spectre或Meltdown都无法访问未映射的页面。原始问题是关于差异的。所以是的,这只是一个简单的答案,而不是对攻击的完整描述 ;) - Andriy Berestovskyy
1
但是使用Spectre,您可以访问内核映射的内存(在内核模式下),或者运行在同一物理核心上的另一个进程。分支预测器别名意味着您甚至不需要将内存映射到攻击分支的地址。我认为这是一个非常根本的区别。是的,我有一个未完成的答案; 它变得相当长,我没有回来完成它,所以我点赞了您更短的答案 :) - Peter Cordes
@PeterCordes 谢谢,Peter。坦白地说,Spectre的分支目标注入变体非常棘手和难以实现,所以我甚至没有考虑回答这个版本的问题。我已经更新了答案,使其更加清晰明了。 - Andriy Berestovskyy

2
为了开始这个过程...
Meltdown (Moritz Lapp等人)和Spectre (Paul Kocher等人)的论文需要校对。在1.4节中,后者将Spectre与Meltdown进行比较。这样可以"熔化"阻止内核内容不可访问的屏障,以便运行时值以每秒百KB的速度读取,而且误差很小。禁止的内存访问会引发"陷阱",但在触发陷阱之前,进一步代码的推测性预先执行已经改变了缓存状态(因为幽灵执行进行了实际内存访问),这些更改可以被检测到。
然而,Spectre则利用了微码中分支预测的误导,通过呈现多个无害的用法来欺骗IF ... THEN ...;类型语句,然后选择特定的数据使测试结果为假,但由于通常结果是真的,所以幽灵执行将继续访问一些感兴趣的位置并基于其值修改内存位置。然后,"false"结果会撤消所有更改-除了缓存状态。或者,分支目标缓冲器可能会被误导,以便执行访问应该是不可访问的内容的代码,结果被抑制,但副作用仍然存在。
似乎有100多条指令处于各种推测执行阶段,因此相对复杂的探测代码是可能的。

2

Meltdown

“熔断”攻击打破了用户应用程序和操作系统之间最基本的隔离。这种攻击允许程序访问其他程序和操作系统的内存,因此也可以获取它们的机密信息。

如果您的计算机拥有一个易受攻击的处理器并且运行一个未修补的操作系统,那么在不泄露信息的情况下使用敏感信息是不安全的。这适用于个人计算机以及云基础架构。幸运的是,针对“熔断”攻击有软件补丁。

Spectre

“幽灵”攻击打破了不同应用程序之间的隔离。它允许攻击者欺骗遵循最佳实践的无错误程序来泄漏它们的机密信息。实际上,这些最佳实践的安全检查实际上增加了攻击面,并可能使应用程序更容易受到“幽灵”攻击。

“幽灵”攻击比“熔断”攻击更难利用,但也更难以减轻。但是,通过软件补丁可以防止特定已知基于“幽灵”攻击的攻击。


来源:

https://meltdownattack.com

为了更好地理解,“计算机之音”上有一段关于“幽灵”和“熔断”的精彩视频:

https://www.youtube.com/watch?v=I5mRwzVvFGE


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接