【问题标题】:What are the differences between Meltdown and Spectre?Meltdown 和 Spectre 有什么区别?
【发布时间】:2018-06-20 09:50:48
【问题描述】:

最近发现的硬件漏洞 Meltdown 和 Spectre 之间的主要区别是什么?我知道它们都依赖于投机执行,但是它们之间有什么不同呢?

【问题讨论】:

    标签: caching intel processor speculative-execution spectre


    【解决方案1】:

    要开始这个...

    关于 Meltdown (Moritz Lapp, et al) 和 Spectre (Paul Kocher et al) 的论文将通过校对得到改进...... 1.4 节中的后者将 Spectre 与 Meltdown 进行了比较。这“融化”了保持内核内容不可访问的障碍,因此运行时值可以以每秒 100 KB 的速度读取,并且错误率很低。禁止的内存访问会导致“陷阱”,但是,在触发陷阱之前,进一步代码的推测性提前执行已经改变了缓存状态(因为实际的内存访问是由幽灵进行的),该状态在其他影响的取消后仍然存在鬼处决。可以检测到这些变化。

    然而,Spectre 依赖于通过向 IF ... THEN ... 呈现多个无害的用法来误导微码中的分支预测; type 语句,然后特别选择的数据使得测试结果为假,但是,通常的结果为真,ghost 执行将继续访问某个感兴趣的位置并根据其值修改内存位置。然后“假”结果会导致所有更改的撤消 - 除了缓存状态。 或者,分支目标缓冲区可能会被误导,这样就会出现代码的幽灵执行,这些代码将访问应该无法访问的感兴趣的东西,结果再次被抑制,但副作用仍然存在。

    似乎有超过一百条指令可以处于推测执行的各个阶段,因此可以使用相对复杂的探测代码。

    【讨论】:

      【解决方案2】:

      崩溃

      Meltdown 打破了用户应用程序和操作系统之间最基本的隔离。这种攻击允许程序访问内存,从而访问其他程序和操作系统的秘密。

      如果您的计算机具有易受攻击的处理器并运行未打补丁的操作系统,则在不泄露信息的情况下处理敏感信息是不安全的。这既适用于个人计算机,也适用于云基础设施。幸运的是,有针对 Meltdown 的软件补丁。

      幽灵

      Spectre 打破了不同应用程序之间的隔离。它允许攻击者欺骗遵循最佳实践的无错误程序泄露其秘密。事实上,上述最佳实践的安全检查实际上增加了攻击面,并可能使应用程序更容易受到 Spectre 的影响

      Spectre 比 Meltdown 更难利用,但也更难缓解。但是,可以通过软件补丁阻止基于 Spectre 的特定已知漏洞。


      来源:

      https://meltdownattack.com

      为了更好地理解,您还想观看 Computerphile 关于 Spectre & Meltdown 的精彩视频:

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

      【讨论】:

        【解决方案3】:

        最近发现的硬件漏洞 Meltdown 和 Spectre 之间的主要区别是什么?

        幽灵

        Spectre 攻击有两种形式。最危险的味道 Spectre 使用分支错误预测和缓存副作用来读取当前进程中的任何字节 虚拟内存。它适用于各种处理器,包括手机、桌子等。

        那么,为什么我们不能只读取当前进程中的任何字节,而不使用任何 Spectre?为什么 Spectre 很危险?有多种语言可以创建沙箱 (JavaScript) 或虚拟机 (Java),以将本地机器与您从 Internet 下载的潜在危险代码隔离开来。

        由于 Spectre,不再有这种隔离,因此从网站下载的 JavaScript 可以读取浏览器中的任何数据。可能存在一些密码、信用卡号和其他敏感信息。

        崩溃

        Meltdown 是某些处理器(Intel、某些 ARM、某些 IBM POWER)上的硬件问题,这些处理器并行读取内存和检查权限。这开启了读取您无权访问的内存的可能性。例如,由于 Meltdown,用户进程能够读取内核内存。

        为什么 Meltdown 很危险? 内核存储加密密钥、密码甚至其他进程的物理页面,由于 Meltdown,它们可能会从系统中的任何用户进程中读取。

        幽灵与熔毁

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

        概念证明

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

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

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

        【讨论】:

        • 崩溃的关键是页表条目必须存在,但只映射内核。 Meltdown 无法读取根本没有映射的内存。 “你无权访问的内存”过于简单化了。它绕过了页表权限检查,例如 x86 的 U/S 位(用户/主管)。
        • @PeterCordes 谢谢,我改写了它以使其更正确。关于映射。两种攻击都需要映射,即您无法使用 Spectre 或 Meltdown 访问未映射的页面。最初的问题是关于差异。所以是的,这只是一个简单的答案,而不是对攻击的完整描述;)
        • 但是使用 Spectre,您可以访问内核已映射的内存(在内核模式下),或在同一物理内核上运行的 另一个 进程。分支预测器别名意味着您甚至不需要将内存映射到您正在攻击的分支的地址。我认为这是一个非常根本的区别。是的,我对这个问题有一个半写的答案;它很长,我没有回去完成它,所以我赞成你更简短的答案:)
        • @PeterCordes 谢谢,彼得。坦率地说,Spectre 的分支目标注入变体非常棘手且难以实现,所以我什至不是说这个版本回答了这个问题。我已经更新了答案以使其清楚。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 2018-06-20
        • 2018-10-11
        • 2019-01-04
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        相关资源
        最近更新 更多