崩溃和幽灵:以下是英特尔,苹果,微软和其他人正在做的事情

英特尔,微软,ARM等都有回应。我们深入挖掘

“熔毁”和“幽灵”的缺陷 - 两个相关的漏洞,使得来自每个主流处理器的信息泄露广泛,特别是英特尔和一些ARM芯片的严重缺陷 - 最初是私下向芯片公司,操作系统开发商和云计算提供商披露的。这个私人信息披露计划于下周公布一段时间,使这些公司得以发展(以及在云公司的情况下,部署)适当的补丁,解决方法和缓解措施。

由于研究人员在计划揭露前发现了一个漏洞,突然提出了这个计划,这两个漏洞在星期三公开披露,引发了相关公司的一系列反应。

有三家公司正在应对“崩溃”和“幽灵”这对:处理器公司,操作系统公司和云提供商。他们的反应很不一样。

什么崩溃和幽灵做

现代处理器进行推测性执行的简要回顾。为了最大限度地提高性能,他们甚至在确定需要执行这些指令之前就试图执行指令。例如,处理器将猜测分支将以何种方式被采用并根据该猜测执行指令。如果猜测是正确的,那么很好; 处理器完成了一些工作,而不必等待分支是否被占用。如果猜测是错的,没什么大不了的; 结果被丢弃,处理器继续执行分支的正确的一面。

尽管这种推测性的执行完全不会改变程序的行为,但“幽灵”和“崩溃”的研究表明,它以可检测的方式扰乱了处理器的状态。这种扰动可以通过仔细测量执行某些操作需要多长时间来检测。使用这些时序,一个进程可能推断属于另一个进程的数据属性 - 甚至是操作系统内核或虚拟机管理程序。

这种信息泄露可以直接使用; 例如,浏览器中的恶意JavaScript可以窃取存储在浏览器中的密码。它也可以与其他安全缺陷一起使用,以增加其影响。信息泄漏往往会破坏ASLR(地址空间布局随机化)等保护措施,所以这些缺陷可以有效利用缓冲区溢出。

几乎适用于所有多年制造的英特尔芯片的熔断,以及某些高性能的ARM设计,更容易被利用,并使任何用户程序能够读取大量的内核数据。好消息就是,熔毁也似乎更容易强有力的防范。这个缺陷取决于操作系统在用户程序和内核之间共享内存的方式,解决方案(尽管是一种性能受损的解决方案)是结束共享。

Spectre适用于Intel,AMD和ARM的芯片,也可能是市场上所有提供推测执行的处理器,都比较微妙。它包含一个技巧测试数组,它可以在单个进程中读取内存,这个数组可以用来攻击虚拟机和沙箱的完整性,使用处理器的分支预测器(可以猜测分支的哪一侧是硬件采取并因此控制投机执行)。针对Specter某些方面的系统性修复似乎已经开发完成,但是要防范所有修补程序,则需要修改(或至少重新编译)有风险的程序。

英特尔

所以,在回应。英特尔是受到这些问题最严重影响的公司。幽灵击中每个人,但熔毁仅击中了英特尔和ARM。而且,它只能达到最高性能的ARM设计。对于英特尔来说,几乎所有在过去的五年,十年,甚至二十年的芯片都容易受到崩溃的影响。

该公司周三发表的初步声明是混淆的杰作。它包含许多技术上属实的陈述,例如“这些漏洞利用不具有破坏,修改或删除数据的潜力” - 但完全是这一点。没有人声称否则!该声明没有区分英特尔最大的竞争对手,AMD似乎已经躲避的一个漏洞,而且也没有对不同公司的产品表现出不平等的影响。

来自英特尔的后续材料相当好。特别是,本白皮书描述了缓解技术和未来的处理器变化,以引入反幽灵功能似乎是明智和准确的。

对于Spectre阵列边界问题,Intel建议lfence测试阵列边界和访问阵列之间插入序列化指令(是英特尔的选择,尽管有其他选择)。序列化指令可防止猜测:序列化指令之前出现的每条指令都必须在序列化指令开始执行之前完成。在这种情况下,这意味着在数组访问之前,数组边界的测试必须被确定地计算出来; 对假设测试成功的数组没有任何猜测性访问是允许的。

不太清楚的是应该添加这些序列化指令的位置。英特尔表示,可以开发启发式算法来找出程序中包含它们的最佳位置,但警告说,它们可能不应该用于每一个数组边界测试; 投机性执行的损失会造成太高的惩罚。我们可以想象,可能来自用户数据的数组边界应该是序列化的,而其他的则不会改变。这个困难强调了幽灵的复杂性。

对于Spectre分支预测攻击,英特尔将为其处理器添加新功能,以改变分支预测的行为。有趣的是,一些已经在客户系统中的现有处理器将通过微代码更新来改进这些功能。未来一代处理器还将包含这些功能,而英特尔承诺对性能的影响较低。总共有三种新功能:一种是“限制”某种分支预测,一种是防止一个HyperThread影响另一个HyperThread的分支预测器在同一个内核上,另一个作为一种分支预测“障碍“阻止”障碍“之前的树枝影响障碍之后的树枝。

这些新的限制将需要操作系统的支持和使用。他们将不会提供给个人的申请。有些系统似乎已经有微码更新; 其他人将不得不等待系统供应商一起行动。

用微码更新来增加这个功能的能力是有趣的,它表明处理器已经有能力以某种方式限制或者使分支预测器无效 - 这从来没有公开记录或启用。该功能可能用于测试目的。

英特尔还建议用“返回”指令代表某些代码分支。修补程序来启用它已经被贡献给gcc编译器。返回指令不会以相同的方式得到分支预测,所以不容易出现相同的信息泄漏。但是,它似乎并不完全免疫分支预测的影响; Broadwell处理器或更新版本的微代码更新需要使此转换成为强有力的保护。

这种方法将要求重新编译每个易受攻击的应用程序,操作系统和管理程序。

对于Meltdown而言,英特尔正在推荐操作系统级修补程序,去年年底首先引发了兴趣和兴趣。该公司还表示,未来的处理器将包含一些未明确的缓解的问题。

AMD

AMD的回应有很多细节。AMD的芯片根本不被认为容易受到崩溃的影响。该公司还(含糊地)说,它应该不太受分支预测攻击的影响。

然而,阵列边界问题已经在AMD系统上得到了证明,为此AMD公司提出了与英特尔完全不同的解决方案:特别是操作系统补丁。目前还不清楚这些可能是什么 - 而英特尔发布了糟糕的PR,它也产生了一个很好的白皮书,而AMD迄今为止提供了PR - 而且它与英特尔(和我们稍后将看到的ARM)反应非常奇特。

之前 AMD公司的行为也是相当可疑的。与其他这一领域的重要公司一样,AMD与研究人员进行了私下联系,其目的是保留所有的细节,直到下周协调发布为止,以便在揭示问题之前最大限度地发布补丁。一般来说,私人联系是在任何禁运或保密协议得到履行的情况下作出的。

事实上,在封锁之前,AMD并没有真正披露这个缺陷的细节,但公司的一名开发人员走近了。就在圣诞节之后,一位AMD开发者提供了一个  Linux补丁,将AMD芯片排除在崩溃之外。在该补丁的说明中,开发人员写道:“AMD微架构不允许内存引用(包括推测性引用)在访问会导致页面错误时以较低的特​​权模式访问较高特权的数据。

正是这个具体的信息 - 这个漏洞涉及到从用户程序访问内核数据的推测性尝试 - 这可以说是让研究人员搞清楚问题所在。消息大大缩小了搜索范围,概述了触发这一漏洞所需的确切条件。

对于封锁运营的公司,有许多不同的玩家试图同步和协调他们的更新,补丁,白皮书和其他信息,这是一个非常无益的行为。尽管安全界当然有人反对这种信息封锁,并且倾向于尽早透露任何信息,但由于业内其他方面存在这些缺陷,AMD的行动似乎至少是鲁莽的。

ExoKey内部使用基于Atmel ARM的CPU。

ARM的回应是黄金标准。在白皮书中有大量的技术细节,但是ARM选择了独立,没有英特尔的误导或AMD的模糊不清。对于数组边界攻击,ARM正在引入一个新的指令,提供一个猜测障碍; 类似于Intel的序列化指令,新的ARM指令应该在数组边界测试和数组访问本身之间插入。ARM甚至提供了示例代码来展示这一点。

ARM没有解决分支预测攻击的通用方法,而且与英特尔不同的是,它似乎没有形成任何直接的解决方案。然而,该公司指出,它的许多芯片已经具有用于使分支预测器失效或暂时禁用的系统,并且操作系统应该使用该系统。

ARM最新的高性能设计Cortex A-75也容易受到Meltdown攻击。所提出的解决方案与英特尔所建议的相同,与已知的 Linux,Windows和MacOS相同:更改内存映射,以便内核映射不再与用户进程共享。ARM的工程师已经为Linux提供了补丁来实现ARM芯片。

苹果

苹果的反应时间比别人多一点,周四晚才到。苹果的立场有些不同,它设计自己的芯片并销售包含它们的设备,并且设计和开发自己的操作系统。苹果公司的反应是高水平的,但事实上并不存在市场松动。苹果的芯片应该容易受到斯派特的影响,这并不令人吃惊; 推测执行的任何芯片都是一个相当普遍的问题。苹果公司并没有详细讨论缓解技术,也没有区分阵列边界攻击和分支预测攻击,但表示它正在更新Safari以防止出现问题。

苹果公司的回应更有趣的部分是公司承认其处理器也容易受到崩溃。作为“英特尔问题”,这对于减少崩溃有很大的帮助。大部分的苹果芯片也受到影响(尽管苹果手表使用的处理器较为简单,不易受到攻击),这就意味着有非常多的非英特尔芯片可以用这种方式进行攻击。

作为操作系统供应商,Apple已经更新了iOS和MacOS,以便使用这里推荐的解决方案的双页面映射。对于苹果来说,这可能不是那么大的改变; macOS的32位x86版本已经使用了类似的方案。这是因为苹果想让32位应用程序访问全部4GB的虚拟内存,而不是在程序和内核之间分割4GB。虽然这增加了性能成本,但它提供了与PowerPC macOS的更好的兼容性,这也给了应用程序全部4GB。

苹果在操作系统上的工作也不完整,虽然双页表工作已经完成,但公司还有进一步的(不披露协议保护)保护工作正在进行中。

微软

微软去年11月份开始测试其熔毁保护。它测试了Windows 10的内部版本中的双页表系统,虽然当时这个工作的原因是未知的。据我们所知,微软的实施不适用于AMD系统(也不适用于2013年前的英特尔原子,因为它们没有任何推测性执行),并且在底层硬件可用的情况下,微软的实施也将使用某些硬件功能减少双页表的性能影响。有几个皱纹。在测试过程中,微软发现一些反病毒软件试图用内核内存来做未经证实的,不受支持的事情,而当使用双页表时,这些事情就会中断。因此,安装第三方防病毒软件时,双页表格将不会被使用,除非该防病毒软件设置了特定的注册表键来表明它支持双页表格。

此外,Windows Server 默认情况下不启用双页表。尽管大多数工作负载使用双页表几乎没有影响性能,但是某些工作负载(特别是服务器)可能会对性能产生较大的影响。特别是I / O密集型(磁盘和网络)的工作负载往往会看到最大的影响。系统管理员将不得不通过注册表项更改打开双页表。

雷德蒙德还建立了新的英特尔芯片功能的支持,以帮助防止幽灵分支预测攻击。一旦微码更新点亮新功能,Windows应该能够利用它们。虽然有一些额外的细微差别,但基本的方法是每次操作系统执行上下文切换(从一个进程切换到另一个进程,或从一个进程切换到内核),它也会重置分支预测缓冲区。这将防止一个进程能够启动另一个进程使用的分支预测器,如果不是彻底消除的话,应该减少对该分支进行预测攻击。

对于没有硬件支持的系统,似乎微软正在研究一些暴力方法,以在某些情况下尝试重置分支预测器。

这个系统没有合适的微码更新可用,所以不包括分支预测攻击缓解。
此系统没有合适的微码更新可用,因此不包括分支预测攻击缓解。

有趣的是,微软还发布了一个PowerShell脚本,描述当前系统对Meltdown和Spectre的保护。

对于Specter的数组边界变体,微软的主要操作是修改Edge和Internet Explorer。浏览器代表了这种攻击的一个特殊风险,因为编写JavaScript来设置执行攻击所需的条件相对简单。根据浏览器的不同,基于浏览器的攻击可以执行诸如窃取密码之类的操作,而且在所有浏览器中,攻击提供的数据对于破解沙盒非常有用。

因此,微软正在禁止访问JavaScript SharedArrayBuffer--一种仅在几个月前才在Edge中启用的高性能阵列,并降低了JavaScript可用的定时器的精度。对Meltdown和Spectre的成功利用需要仔细计算可能仅有几百个处理器周期的动作。为了使这个时间更难以在JavaScript中实现,高精度的JavaScript定时器(主要用于基准测试和性能分析等)的精度已经降低了,精度从5微秒到20微秒不等,精度也降低了其结果引入了20微秒的随机抖动。

Mozilla在Firefox中复制了同样的方法,  并且已经在Firefox的最新版本中发布。谷歌也将这些变化应用到Chrome上,他们应该在1月下旬发布给最终用户。Mozilla和Google都表示,他们也在开发更精确的缓解措施,可能是为了防止在某些地方进行推测性执行的序列化指令的明智插入来解决问题。

最后,微软已经更新了Azure云计算平台,以防止崩溃。微软已经在管理程序级别实施了一个修复程序 这意味着在Azure上运行的虚拟机不需要进行修补以防止熔断。当然,修补你的虚拟机当然强烈建议作为一般原则,对于在Azure上运行的系统来说,并不是一蹴而就的。

防御幽灵仍然需要操作系统和应用程序级别的变化。

该公司声称,即使对于大多数I / O密集型工作负载,对Azure的性能影响可以忽略不计。这使得在Windows Server上默认不启用双页面表的决定有点令人惊讶 - 如果它足够满足Azure上广泛的客户和工作负载,那么其他人可能已经够用了。但也许该公司认为,对于某些不幸的客户,当客户使用云服务时运行错误类型的工作负载,而不是内部部署服务器时,15%的性能影响会更加可以接受。

亚马逊

亚马逊云的故事和Azure非常相似。亚马逊已经推出了针对Meltdown的补丁,保护共享系统(和亚马逊自己的基础设施)免受Meltdown攻击。该公司表示,客户操作系统仍然需要更新,以防止在单个虚拟机内的妥协。更新以澄清亚马逊的地位 ..

亚马逊也表示,对于“压倒多数”的工作负载,还没有看到“有意义”的性能影响。

谷歌

Google的两个消费者操作系统Android和Chrome OS都依赖于Linux内核。当然,谷歌正在采取Linux的保护,当这是有道理的。针对x86处理器的Chrome操作系统已更新为包含双页表保护,Google将在稍后更新用于ARM处理器的Chrome操作系统。大多数Android硬件不容易崩溃,至少,它还没有。当Cortex A-75设计上市时,Android也可能变得脆弱; 我们不会感到惊讶的是Google当时在Linux中使用ARM双页面支持。为了防范幽灵,最新的Android版本降低了Android应用程序可用的定时器的精度,使得恶意代码难以进行精确的测量。

如前所述,Chrome浏览器已被类似修改,以防止精确的时间。

谷歌已经更新了其云基础设施来解决崩溃问题,尽管与亚马逊和微软不同,谷歌的指导意见表明客户虚拟机仍然需要进行补丁以获得全面的保护。

一个有效的,如果不协调的反应

虽然对“熔毁”和“幽灵”的回应并不如原先所希望的那么顺利,但供应商似乎做了一个彻底的工作。熔毁虽然容易被利用,但也更容易防范; 操作系统的变化似乎是成功的,并且应该为英特尔,苹果和将来的ARM芯片做好稳定的工作,这些芯片很容易受到攻击。

但是,幽灵将是一个棘手的客户。它没有任何干净,简单的修复。操作系统的变化,理想情况下与分支预测的更强大的硬件控制相结合,将在某些情况下提供保护,但是数组边界版本的Specter将要求仔细检查和修复易受攻击的应用程序。与其他攻击不同,似乎没有任何方法可以实现操作系统级别的修复,而适当的应用程序级别修复的应用很可能需要开发人员进行大量的手动工作。

从更长远的角度来看,熔毁似乎有可能会退到远方 - 也许是一个烦恼,但是完全被修补和保护,但是相当微妙的幽灵会和我们在一起。

发表评论

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