上周,多个团队披露了此事来自格拉茨和宾夕法尼亚大学,兰州,Data61,纽约尔科技, 和谷歌项目零在Meltdown和Spectre这两个别名下的漏洞震惊了安全世界,促使供应商匆忙地创建补丁(如果可能的话),并暴露出几乎所有现代处理器的设计缺陷。

这些启示的后果继续塑造,因为关于漏洞的新信息和修补它们的困难每天都会出现光明。在云端和幽灵已经公开的情况下,我们跟踪了哪些设计缺陷的元素,称为投机执行,易受攻击以及不同的供应商如何处理修补过程。通过审查所应用的补丁对我们自己的一个产品的影响,我们发现它们确实导致CPU使用量增加,这可能导致由云提供商兑换的个体的成本相应地提高了云提供商。

什么是投机执行?

投机执行是一种有效的优化技术,大多数现代处理器都使用这种技术来确定代码的下一步可能走向。因此,当它遇到一个条件转移指令时,处理器会根据前一个分支的处理历史来猜测哪个分支可能被执行。然后,它大胆的执行指令,直到已知原始条件为真或假。如果是后者,则放弃挂起的指令,处理器根据它确定的正确执行路径重新加载它的状态。

这种行为的问题和它目前在许多芯片上的实现方式是,当处理器做出错误的猜测时,它已经错了大胆的执行了一些指令。它们保存在缓存中,即使它们来自无效的分支。Spectre和Meltdown利用了这种情况,通过比较两个变量的加载时间,确定在投机执行期间是否加载了一个变量,并推算出它的值。

作为解释上周在我们的帖子中,使用这些漏洞进行攻击的潜在危险包括能够读取属于某个进程的“安全”内存。这可以泄露个人身份信息、银行信息,当然还有用户名和密码。在云环境中,这些漏洞允许从主机和其他虚拟机中提取数据。

投机执行的例子

使用Project Zero的例子下面,该过程将对条件进行评估if(untrusted_offset_from_caller 长度)在稍后的时间,并开始两个分支的投机执行,导致两个不同的index2值。这个例子对应于幽灵的变种1 (CVE-2017-5753)可以在大多数英特尔、AMD、ARM和IBM的cpu上运行。

结构数组{无符号长长度;unsigned char[]的数据;};Struct array *arr1 =…;/*小数组*/ struct数组*arr2 =…;/ / >0x400 (OUT of BOUNDS!) */ unsigned long untrusted_offset_from_caller =…;/ / unsigned long untrusted_offset_from_caller =…如果(untrusted_offset_from_caller < arr1->长度){unsigned char value = arr1->data[untrusted_offset_from_caller];Unsigned long index2 = ((value&1)*0x100)+0x200;If (index2 < arr2->长度){unsigned char value2 = arr2->data[index2];}

如果处理器预测该条件为真,价值将加载:

Unsigned char value = arr1->数据[untrusted_offset_from_caller];

基于价值,可以加载索引2,0 x200型或者由于按位操作:

Unsigned long index2 = ((value&1)*0x100)+0x200;

然后执行第二个条件,并执行最后一个指令负载value2作为arr2 - >数据[0 x200型)或者ARR2->数据[0x300]

一旦初始条件被求值,处理器注意到上面的执行流是错误的,则value2留在L1缓存中。然后可以比较加载时间arr2 - >数据[0 x200型)ARR2->数据[0x300],并推断在投机执行期间已经评估了哪一个。从那里,它很容易弄清楚相关变量:这里的值arr1 - >数据(untrusted_offset_from_caller)是根据预期码流不可能检索的值,因为它允许泄漏绑定的内存。

为了利用这种行为,上面的代码模式必须存在于受害者的机器上。详细Jann角的那样一个本地安装的软件,一个JIT (Javascript是一个特别有趣的候选),或者一个解释器(他使用eBPF)符合要求。

四个变量

虽然最初报道称“幽灵”和“Meltdown”对应三个漏洞,四个变量实际上存在:

变种1和变种2影响英特尔,IBM, ARM和AMD的cpu。Meltdown似乎只存在于Intel的cpu上,允许攻击者从非特权环境中读取特权内存,仍然使用投机执行特性。其变体3是可利用的仅在几个臂上的CPU上。

这些漏洞会影响cpu本身,因此很难对其进行修补。纯软件解决方案可能会带来重要的性能问题,纯硬件解决方案也是如此。因此,在过去的几个月里,各种硬件供应商一直在合作修复问题。然而,虽然像亚马逊和微软这样的大公司可以提前访问漏洞报告,其他供应商却没有。他们在1月3日披露这些漏洞的同时发现了这些漏洞。

供应商联合起来

那些没有秘密的人成立了一个工作组与其他供应商交换信息,并向硬件制造商施压。Scaleway, OVH, Linode, Packet, Digital Ocean, Vultr, nexess和prgmr.com都是其中的一部分,后来亚马逊,塔塔通信,以及红帽和Ubuntu团队也加入其中。1月9日,部分研究人员(莫里茨Lipp丹尼尔·格鲁斯迈克尔·施瓦兹格拉茨科技大学的教授)发现了这些漏洞也加入了。

还有一些开源开发者解释他们没有收到任何信息在公开披露之前,但正在积极提供补丁。

我们收到了*否*非公开信息。我在别处见过帖子
其他* BSD人们暗示他们收到了几乎没有警告,所以
我没有理由相信这是OpenBSD和/或我们的
哲学。

在公开披露后不久,针对这些漏洞的缓解措施就开始在Linux内核的上游出现。有些需要将硬件供应商发布的微码应用到处理器上,以使软件补丁有效。然而,这些补丁中的大多数只是简单的变通方法,以避免CPU像上面解释的那样工作。我们可能预计未来几代处理器的硬件会有一些变化,但目前还没有简单、快速的解决方案。

针对硬件和操作系统的可用补丁

针对Meltdown的上游Linux补丁(变种3和3a)利用了KPTI (内核页表隔离),已经补丁到Linux 4.14、4.9和4.4。它可以在大多数发行版的官方内核中找到。Debian已经运送它在大多数版本,像红帽已经做了。Ubuntu发表几个小时前他们的是他们的一些关键问题已被发现并迅速解决。尾巴也发布了更新。ARM64的补丁还没有合并,但预计稍后会合并。

变量1(幽灵)需要改变编译器的行为和英特尔建议增加LFENCE(见3.1边界检查旁路缓解;其他供应商也有其他建议)作为阻止特定地方投机的障碍。这意味着内核和软件必须重新编译,以避免在出现问题时让处理器使用投机执行。同样,尽管我们可能会期待未来几代英特尔芯片的硬件变化,但这在很长一段时间内不会发生。

变种2(也是Spectre)需要CPU供应商提供的微码补丁和内核补丁来利用IBRS (间接分支投机特征),stibp和ibpb。另一个称为“转回”的建议已经介绍谷歌的保罗·特纳并且也在各种编译器中实现,包括海湾合作委员会LLVM,尽管有些问题仍然存在它在某些CPU模型上的效率。

漏洞 (Linux)软件缓解 硬件缓解
熔点(3&3a)
KPTI 不需要
幽灵1 N/A N/A
幽灵2 IBRS / Retpoline 微码

专有的供应商也发布了几个更新:

  • 苹果解决了两个Meltdown变种在iOS 11.2, macOS 10.13.2和tvOS 11.2。Spectre在iOS 11.2.2和macOS 10.13.2补充更新中得到了缓解,尽管只有重新编译的软件是对变种1的有效缓解。
  • 谷歌已经包括其三种变体的一些缓解Android安全公告1月5日.请注意,预计在下个月的更新中会有进一步的缓解,特别是一个带有KPTI的内核。

对于微软来说,这个过程比较坎坷。他们已经为平台发布了各种修复,但是几个要求针对Spectre和Meltdown的补丁是否有效:

  1. 如果在Windows安全中心注册防病毒解决方案,则需要设置以下注册表项:
关键字="HKEY_LOCAL_MACHINE" Subkey="SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat" Value="cadca5fe-87d3-4b96- b7fa -a231484277cc" Type="REG_DWORD " Data="0x00000000 "

只有这样,才能应用“一月补丁星期二”补丁。注意Malwareb必威平台APPytes用户补丁发布后是否能够成功收到

2.正如作者指出的凯文·博蒙特,一个特定的操作必须完成在Windows Server上应用补丁并启用该补丁。创建以下密钥并重新启动主机后,缓解措施应该到位:

reg添加“HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \会话管理器\ \控制内存管理”/ v FeatureSettingsOverride f / t REG_DWORD / d 0 /注册添加“HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \会话管理器\ \控制内存管理”/ v FeatureSettingsOverrideMask / t REG_DWORD / 3 d / f reg添加”HKLM \ SOFTWARE \ \微软Windows操作系统NT\CurrentVersion\Virtualization " /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d " 1.0 " /f

稍后几个时刻,用户开始报告使用AMD处理器运行的计算机在应用补丁后变得无法识别。微软已停止提供补丁对于使用AMD来查找解决方案的配置。

可用的软件补丁

除了硬件制造商和OS供应商之外,软件编辑也很快减轻了对幽灵的开发。浏览器供应商和虚拟化解决方案特别接触到这些漏洞,并且是最快的响应。

  • Xen发表一个顾问同时分享有关其管理程序范围中的漏洞的详细信息文档页面解释如何减轻压力。
  • Mozilla.发布的Firefox 57.0.4出版后不久一篇文章解释他们是如何使用Javascript和WebAssembly远程利用Spectre的。这个更新使得时间源不那么精确,从而使得利用更不可靠,而更深入的修复被设计出来。
  • 谷歌浏览器随后不久之后一个解释性的文章关于如何利用WebKit的JavascriptCore利用Spectre,并列出了WebKit中即将出现的缓解措施。

大量的概念证明已经出版,以证明利用不同的变体,从重建图像应用它针对一个专制的英特尔SGX飞地.还可以测试缓解措施是否到位:Microsoft发布了一个解决方案可以基于新的PowerShell远程使用SpeculationControl模块,且一些解决办法可在基于Linux的ISS上使用。

补丁会影响AdwCleaner的基础设施

免责声明以下不是基准测试,而是基于我们在硬件环境和软件堆栈中观察到的反馈。观察到的行为高度依赖于工作负载,在您的工作负载中可能没有观察到任何变化。

作为我们安全进程的一部分,我们一旦我们的发行版和托管提供商提供了应用程序就会应用修复。我们期待一些性能增加,特别是在AdWcleaner存储后端,但很难量化。

CPU负载之前和之后的KPTI补丁AdwCleaner存储后端。

CPU负载之前和之后的KPTI补丁AdwCleaner存储后端。

在将新的Linux内核与KPTI Backport应用于KPTI Backport后,我们观察到CPU使用量增加了10%至15%。(我们在1月6日00:00 UTC之前稍微施加了零件。这些服务器不会利用PCID,这可能会产生性能上的差异不太明显.随着使用量的增加似乎成为一段时间内的新基线,这可能是至少临时铅重要的是根据CPU使用率,供应商的用户计费增加,尽管一些供应商被报告与受到严重影响的客户合作。

由于情况仍然每天快速发展,因此两者都可以添加一些更新原始故事这篇博文

特别有趣的文学: