APP下载

正如预测的那样 更多的分支预测处理器攻击被发现

消息来源:baojiabao.com 作者: 发布时间:2024-05-17

报价宝综合消息正如预测的那样 更多的分支预测处理器攻击被发现

从威廉和玛丽学院的研究人员,卡内基梅隆大学,加州大学河滨分校,宾厄姆顿大学所描述的安全攻击,利用现代处理器的投机执行特性泄漏敏感信息,破坏操作系统和软件的安全边界建立保护重要的数据。

这可能听起来很熟悉。

今年早些时候发布的“幽灵攻击”利用了现代处理器的投机性执行特性来泄露敏感信息。新的攻击,被研究人员命名为BranchScope,与幽灵攻击的变体2有相似之处,因为BranchScope和幽灵2都利用了处理器分支预测器的行为。

在推测执行的情况下,处理器在程序实际所在的位置运行,并且它尝试执行指令,然后才能确定这些指令是否实际运行。例如,如果一个程序测试两个数字是否相等,如果它们是相同的,如果它们不是,那么处理器将猜测结果并推测执行结果操作。如果事后证明处理器猜错了,推测的结果就会被丢弃,至少从抽象的意义上来说,这就像是从未发生过的错误猜测。处理器从它停止的地方开始,执行它应该采取的动作。

“幽灵”的攻击是一个整体,因为处理器并没有完全按照他们应该的方式把东西放回原处。虽然处理器确实恢复了它的推测执行,但如果没有,程序就会简单地停止工作——它并不是那么完美。当涉及到处理器的缓存时,这一点尤其明显:推测执行可能导致处理器将数据载入到缓存中(或者,或者,从缓存中清除数据),并且这些缓存更改仍然存在,即使进行了错误的猜测。仔细编写的软件可以检测这些缓存变化,并利用它们来推断秘密信息。

该处理器的分支预测器是其核心的推理执行机构之一。虽然最新处理器中的分支预测器很复杂,但在广义上它们的操作方式类似。处理器会跟踪分支指令的地址,不管分支是否被取走,如果分支被取走,下一条指令的地址应该是该分支的目标。分支预测器提供了两个相关的预测:分支是否被捕获,如果被捕获,目标是什么。

BranchScope和幽灵2都利用了分支预测器的不同部分。幽灵2依赖于一个称为分支目标缓冲区(BTB)的部分——处理器中记录分支目标的数据结构。相反,BranchScope使用预测的方向来泄漏信息——不管它是否可能被取走——它存储在模式历史表中(PHT)。

PHT保持了最近的一种跑步成绩来记住这些分支是否被取走。通常情况下,它是一个两比特的计数器,有四个状态:强取,弱取,弱取,强不取。每当一个分支被取走,计数器的值就被移动到“强取”;每次它没有被拿走,它就被移动到“强烈不被拿走”。这个设计意味着偶尔的错误预测不会改变预测的结果:几乎总是被采用的分支仍然会被预测,即使它偶尔不被使用。改变预测需要两个背靠背的错误判断。这个设计被证明比一个单位计数器提供了更好的结果,它仅仅根据上次发生的情况预测一个分支。

对于幽灵2,攻击者启动BTB,仔细执行分支指令,使BTB具有可预测的内容,并使用目标指令,如果推测执行,将以可检测的方式干扰处理器的缓存。受害者程序然后运行并创建一个分支。然后攻击者检查缓存是否受到干扰;干扰信息的测量。

在新的攻击中,攻击者启动PHT并运行分支指令,这样PHT就会始终假设一个特定的分支被占用或不被占用。然后,受害者代码运行并创建一个分支,这可能会干扰PHT。然后攻击者会运行更多的分支指令来检测对PHT的干扰;攻击者知道应该在特定的方向和测试中预测一些分支,看看受害者的代码是否改变了这个预测。

研究人员只查看了英特尔处理器,利用英特尔的SGX(软件保护扩展)来保护信息,这是一种在某些芯片上发现的特征,可以划分出一小段加密的代码和数据,即使是操作系统(或虚拟化软件)也无法访问它。他们还描述了攻击可以用来对付地址空间布局的随机化,以及在加密和图像库中推断数据的方法。

幽灵2已经引起了操作系统和硬件的改变,并计划了更多的硬件修复。研究人员建议,对于分支机构来说,需要类似的解决方案组合;一些软件可以被修改以消除分支,而硬件可以被修改以在处理器上划分推测的执行数据结构,这样一个进程就不能攻击另一个进程。

与幽灵2一样,目前还不清楚究竟有多少软件真正容易受到分支攻击的攻击。在这两种情况下,攻击者都需要能够在受害者系统上运行代码,因此这些攻击永远不会被用于初始进入系统。然而,他们所做的是要证明,长期以来假定存在的隔离边界在某种程度上是由对高性能处理器至关重要的投机性执行硬件所渗透的。此外,BranchScope表明,幽灵党并不是唯一可以利用这种投机行为的途径。

从根本上说,处理器包含大量的内部状态(包括寄存器、缓存、分支预测器、存储缓冲区,以及更多),推测执行可以修改。架构状态——由处理器发布的、文档化的指令直接公开和操作的部分——被投机性的硬件妥善保存。像“幽灵”和“BranchScope”这样的攻击之所以存在,是因为非体系结构的状态——代表可能由家庭转移到家庭的处理器的实现细节的部分,以及不能直接访问程序的部分——并没有得到充分的保护。推测执行(以及它所依赖的非体系结构状态)的设计是不可见的,没有显示正在运行的程序。

结果就是像“幽灵2”和“BranchScope”这样的攻击。研究人员可能需要数年时间才能确定各种各样的方法,在这些方法中,推测性的执行硬件可以通过这种方式泄露信息,而且在强大的、普遍的防御系统能够阻止攻击之前,它还会更长的时间。




2018-03-27 12:33:00

相关文章