新的幽灵攻击再次发送英特尔和AMD争抢进行修复

2021-05-05 21:45:22

自2018年以来,广泛称为幽灵的几乎无穷无尽的攻击令人留下了英特尔和AMD争先恐后的争夺,以制定防御,以减轻漏洞,以减轻允许恶意软件直接从硅中拔出密码和其他敏感信息的漏洞。现在,研究人员说他们已经设计了一个新的攻击,即不是全能的那些片上的防御。

幽灵获取其滥用投机执行的名称,几乎所有现代CPU的功能都预测了CPU可能接收的未来指令,然后遵循指令可能遵循的路径。通过使用迫使CPU沿错误路径执行指令的代码,幽灵可以提取已访问的机密数据,使CPU继续下行该路径。这些漏洞被称为瞬态执行。自2018年首次描述以来,新的变体几乎每个月都浮出水面。在许多情况下,新的变体都有需要芯片制造商来开发新的或增强防御,以减轻攻击。

例如,称为LFENCE的密钥英特尔保护,可将更新的指令停止调度到之前的指令。广泛称为&#34的其他基于硬件和软件的解决方案;击剑"构建秘密数据周围的数字栅栏,以防止允许未经授权访问的瞬态执行攻击。

弗吉尼亚大学的研究人员上周表示,他们发现了一种新的瞬态执行变量,几乎可以破坏英特尔和AMD迄今为止的所有片上防御。新技术通过针对片上缓冲区来实现缓存的“微ops”,这是源自复杂指令的简化命令。通过允许CPU在推测执行过程中快速和早期获取命令,微型操作缓存提高了处理器速度。

研究人员是首先利用微量OPS高速缓存作为侧通道的介质,或者作为对存储在易受攻击的计算系统内的机密数据的观察的介质。通过测量目标系统的定时,功耗或其他物理性质,攻击者可以使用侧视通道来推导否则将被禁止限制的数据。

“微调缓存作为侧面通道具有几个危险的含义,”研究人员在学术纸中写道。 “首先,它绕过将缓存作为侧通道减轻缓存的所有技术。其次,任何现有攻击或恶意软件配置文件都不会检测到这些攻击。第三,因为微型op缓存位于管道前面,良好在执行之前,通过限制推测缓存更新来缓解幽灵和其他瞬态执行攻击的某些防御仍然容易受到微型缓存攻击的影响。"

大多数现有的隐形猜测和基于围栏的解决方案侧重于隐藏在处理器管道后端发生的推测执行的意外弱势副作用,而不是抑制前端的猜测源。这使得它们容易受到我们描述的攻击,该攻击揭示了通过前端侧通道推出的秘密,在瞬态指令有机会被派遣以便执行之前。这阐述了一系列现有的防御。此外,由于微型op缓存的尺寸相对较小,我们的攻击明显比现有的幽灵变体更快,依赖于启动和探测几个缓存集来传输秘密信息,并且相当多的隐身,因为它使用了微观 - op缓存作为其唯一披露原语,介绍了较少的数据/指令缓存访问,更不用说未命中。

自从研究人员发表论文以来已经有一些推送。英特尔不同意新技术破坏已经放置的防御,以防止瞬态执行。在一份声明中,公司官员写道:

英特尔审查了报告和通知研究人员,即未被绕过现有的缓解,并且在我们的安全编码指导下解决了这种情况。我们的指导之后的软件已经对包括UOP缓存附带渠道的附带渠道进行了保护。不需要新的缓解或指导。

瞬态执行使用恶意代码来利用推测执行。反过来,剥离界限检查,授权检查以及应用于应用程序中的其他安全措施。遵循英特尔安全编码指南的软件对此类攻击抵抗,包括上周引入的变体。

英特尔指导的关键是使用恒定时间编程,一种代码被写入秘密无关的方法。研究人员上周推出的技术使用将秘密嵌入CPU分支预测因素的代码,因此,它不遵循英特尔' S发言人在背景上表示。

AMD没有及时提供响应,以便包含在这篇文章中。

另一个击败博客帖子由Jon Masters,一个独立的研究员撰写的计算机架构。他说这篇论文,特别是跨域攻击它描述的,是“有趣的阅读”和“潜在的关注”,但有些方法可以解决漏洞,可能是通过在交叉特权屏障时使微型操作缓存失效。

“这个行业的手在幽灵上有一个巨大的问题,并且作为直接后果,投入了大量的努力,分离特权,隔离工作量和使用不同的背景,”大师写道。 “根据这份最新的纸张,可能需要一些清洁剂,但有可用的减轻,虽然总是以某种性能成本。”

Ashish Venkat,弗吉尼亚大学计算机科学系教授和上周论文的共同作者,同意恒定时间编程是编写对侧渠攻击的应用程序的有效手段,包括所描述的应用程序最后一周的论文。但他说,漏洞正在被利用驻留在CPU中,因此应该接收微码补丁。

他还说,今天的大部分软件仍然易受攻击,因为它不使用常规时间编程,并且没有什么时候会改变。他还回应了大师的观察,即代码方法减慢了应用程序。

他告诉我,“在实际的程序员努力方面,不仅是非常难的,而且还需要与曾经写的所有敏感软件进行修补的重大部署挑战。由于性能开销,它通常仅用于小型专用的安全惯例。“

Venkat表示,新技术对自2011年以来设计的所有英特尔芯片有效。他告诉我,除了容易受相同跨域利用的影响外,AMD CPU也易于单独的攻击。它利用了同时多线程设计,因为AMD处理器中的微型操作缓存竞争性共享。因此,攻击者可以创建一个跨线程隐蔽信道,可以传输带宽为250 kbps的秘密,错误率为5.6%。

瞬态执行造成严重的风险,但目前他们主要是理论,因为他们很少是积极剥削的。另一方面,软件工程师有更多的担忧的理由,这种新技术应该只会增加他们的担忧。

对于那些不熟悉的持续时间编程的人:Crypto图书馆中的必要邪恶是必要的。在内存比较上不快失败,可以与在第一次故障之前通过的内存位置进行相关。当需要时,它意味着使用自定义代码来处理基本的东西,它适用于大量的编程习惯:don' t使用图书馆,不要尽可能快地做事,确保一切都相同!例如,MBedTLS使用MBedTLS_CONSTANT_TIME_MEMCMP以恒定时间中的缓冲区进行比较:/ *在恒定的时间内比较两个缓冲区的内容。 *如果内容是位相同的,则返回0,否则返回*非零值。 *此目前仅由GCM和Chacha20 + Poly1305使用。 * / static int mbedtls_constant_time_memcmp(const void * v1,const void * v2,size_t len){const unsigned char * p1 =(const unsigned char *)v1; const unsigned char * p2 =(const unsigned char *)v2; size_t i; unsigned char diff; for(diff = 0,i = 0; i< len; i ++)diff | = p1 [i] ^ p2 [i];返回((int)差异); }

同一repo中的其他地方是mbedtls_nist_kw_safer_memcmp,它似乎做同样的事情。但它是不同的。如果运行时库需要新的变体,它求出问题,这些变体是'侧通道'默认情况下安全。 🤔参考:https://github.com/armmbed/mbedtls/blob ... y / cipher.c