“崩溃”和“幽灵”:每个现代处理器都有不可修复的安全缺陷

英特尔芯片即时关注,但每个人都有风险。

幽灵

Windows,Linux和macOS都收到了安全补丁,这些安全补丁显着改变了操作系统处理虚拟内存的方式,以防止迄今未公开的缺陷。这不仅仅是一个小小的亮点,很明显,微软和Linux内核开发者已经被告知了一些非公共安全问题,并且一直在急着修复它。但是没有人知道问题是什么,导致基于补丁预发行的大量猜测和实验。

现在我们知道这个缺陷了。这不是一个好消息,因为实际上有两个相关的缺陷类似的影响,只有其中一个有一个简单的修复。

这个缺陷被命名为“崩溃”和“幽灵”。Meltdown是由来自奥地利格拉茨技术大学,德国安全公司Cerberus Security和Google Project Zero的三个研究小组独立发现的。Specter是由Zero Project和独立研究员Paul Kocher独立发现的。

在他们的心中,两种攻击都利用了处理器推测性地执行指令的事实。所有现代处理器或多或少地执行推测性执行; 他们会假设,例如,一个给定的条件将是真实的,并相应地执行指令。如果后来证明条件是错误的,推测性地执行的指令就被丢弃,就好像它们没有效果一样。

然而,虽然这种推测性执行的废弃效果不会改变程序的结果,但是它们确实改变了处理器的最低级架构特征。例如,推测执行可以将数据加载到缓存中,即使事实证明数据不应该首先被加载。然后可以检测到缓存中数据的存在,因为访问它比没有缓存更快一些。处理器中的其他数据结构(例如分支预测器)也可以被探测并且测量其性能,其可以类似地用于揭示敏感信息。

崩溃

第一个问题,即崩溃,是刺激操作系统补丁乱七八糟的一个。它使用推测执行将内核数据泄露给常规用户程序。

崩溃

我们原来的介绍给出了操作系统如何虚拟化系统内存,使用页表从虚拟内存地址映射到物理地址,处理器如何缓存这些映射以及如何在内核之间共享内核的页表映射为了最大限度地发挥这个特殊缓存的价值。

虽然所有现代处理器(包括来自英特尔,AMD和ARM的处理器)都会围绕内存访问进行推测,但英特尔的处理器却以一种非常激进的方式来实现这一点。操作系统内存具有相关的元数据,这些元数据决定了是否可以从用户程序访问,还是仅限于从内核访问(同样:我们的原始覆盖范围有关于此点的更多详细信息)。英特尔芯片允许用户程序推测性地使用内核数据,并且在指令开始执行的一段时间进行访问检查(以查看内核内存是否可以被用户程序访问)。推测执行适当的阻止,但是可以衡量投机对处理器缓存的影响。仔细计时,这可以用来推断存储在内核内存中的值。

研究人员表示,他们还没有能够对AMD或ARM处理器进行基于内核的基于内存的猜测,尽管他们抱有某种希望在进攻中使用这种推测的一些方式将会被开发出来。尽管AMD已经明确表示,其芯片不会以这种方式推测内核地址,但ARM已经表示,它的一些设计可能是易受攻击的,而且ARM员工已经向Linux提供了补丁以防止崩溃。

对于采用英特尔芯片的系统,其影响相当严重,因为用户程序可能会读取任何内核内存。这是操作系统补丁旨在解决的这种攻击。它通过去除共享内核映射来工作,这是一种操作系统设计,自从20世纪90年代早期以来,由于其提供的效率,它一直是主流。如果没有共享映射,用户程序就无法激发内核内存的推测性读取,从而无法泄漏内核信息。但是这样做的代价是:每次调用内核的速度都比较慢,因为每次切换到内核都需要重新加载内核页面。

这种变化的影响将取决于工作量。严重依赖于用户程序的应用程序通常不会调用内核,所以影响很小; 例如,游戏应该看到很少的变化。但是广泛调用操作系统的应用程序(通常用于执行磁盘或网络操作)可能会看到更大的影响。在合成基准测试中,除了进行内核调用之外别无他法,差别可能是相当大的,从每秒五百万次内核调用降到两三百万次。

幽灵

AMD和ARM系统的拥有者不应该安心,这要归功于Spectre。幽灵是一个更广泛的攻击,基于更广泛的投机执行功能。本文描述了如何使用猜测,例如数组边界检查和分支指令来泄漏信息,在AMD,ARM和Intel系统上证明概念攻击成功。Spectre攻击既可以将信息从内核泄漏到用户程序,也可以从虚拟化管理程序泄漏到访客系统。

而且,Specter不提供任何简单的解决方案。对于高性能处理器来说,推测是必不可少的,尽管阻止某些类型的推测性执行的方法可能有限,但是防止由于推测性执行导致的任何信息泄露的一般技术还不清楚。

敏感的代码段可以修改为包含“序列化指令” - 强制处理器等待所有未完成的存储器读取和写入完成(从而防止基于这些读取和写入的任何推测)的指令 - 防止大多数猜测从发生。ARM 针对Spectre 推出了这样一个指令,Intel和AMD的x86处理器已经有几个了。但是这些说明必须非常小心,没有简单的方法来确定正确的位置。

就眼前而言,看起来大多数系统很快就会出现针对Meltdown的补丁。至少在Linux和Windows上,这些补丁允许最终用户选择是否愿意。最脆弱的用户可能是云服务提供商; Meltdown和Spectre原则上都可以用来进一步攻击虚拟机管理程序,从而使恶意用户更容易摆脱虚拟机。

对于典型的桌面用户来说,风险可以说不太重要。尽管“熔毁”和“幽灵”在扩大现有漏洞的范围方面都有价值,但是没有一个能够独立于Web浏览器。

从长远来看,我们期望未来的英特尔架构能够提供某种解决方案,或者避免围绕这种有问题的内存访问进行猜测,或者更快地进行内存访问权限检查,以便在读取内核内存和检查内核之间的时间间隔该进程有权读取内核内存,被淘汰。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: