研究员发现Spectre漏洞新分支

威廉玛丽学院,卡内基梅隆大学,加州大学河滨分校和宾厄姆顿大学的研究人员已经描述了一种安全攻击,它利用现代处理器的推测执行功能来泄漏敏感信息并破坏操作系统和软件直立的安全边界 保护重要数据。这可能听起来很熟悉。


2018年早些时候发布的Spectre攻击利用了现代处理器的推测执行功能来泄漏敏感信息。 由研究人员命名为BranchScope的新攻击与Spectre攻击的变体2有一些相似之处,因为BranchScope和Spectre 2都利用了处理器分支预测器的行为。

通过推测性执行,处理器在程序实际运行之前运行,并且在可以确定这些指令是否真正运行之前尝试执行指令。 例如,如果一个程序测试两个数字是否相等,并且如果它们是一样就做一件事,如果不是,则处理器会猜测结果并推测执行所产生的动作。 如果后来证明处理器猜测错误,那么投机结果就会被抛弃,至少在抽象意义上,就好像猜测从未发生过。 处理器从停止的地方开始,执行应该采取的操作。整体而言,幽灵攻击事件是由于处理器没有把事情回复到原来的样子。虽然处理器确实恢复了它的推测性执行 – 如果没有,程序会停止正常工作 – 它并不完美。当涉及到处理器的高速缓存时,这一点尤为明显:推测性执行可能导致处理器将数据加载到高速缓存中(或者,或者从高速缓存中逐出数据),即使进行了糟糕的推测,这些高速缓存更改也会持续存在。仔细编写的软件可以检测到这些缓存更改并使用它们来推断机密信息。

处理器的分支预测器是其投机执行机构的核心部分之一。虽然最新处理器中的分支预测器非常复杂,但从广义上讲,它们的操作方式相似。处理器跟踪分支指令的地址,分支是否被采用,以及分支是否被采用,应该执行的下一条指令的地址 – 即分支的目标。分支预测器提供了两个相关的预测:分支是否被采用,以及是否采用,目标是什么。

BranchScope和Spectre 2都利用了分支预测器的不同部分。 Spectre 2依赖于称为分支目标缓冲区(BTB)的部分 – 处理器内用于记录分支目标的数据结构。相反,BranchScope使用预测方向泄漏信息 – 无论是否可能被采用 – 存储在模式历史记录表(PHT)中。 

PHT保留最近采取的分支的一种运行得分,以记住这些分支是否被采用。通常情况下,这是一个两位计数器,有四种状态:强力拍摄,弱拍,弱拍不拍,强拍不拍。每次采取分支时,计数器的值将移向“强烈采取”。每次没有采取,它都会转向“强烈不被采取”。这种设计意味着偶然的误预测不会改变预测的结果:即使偶尔没有实际采用,几乎总是采用的分支仍然会预测为已采用。改变预测需要两次背靠背错误预测。这种设计被证明可以提供比一位计数器更好的结果,该计数器根据上次发生的情况简单预测分支。

对于Spectre 2,攻击者启动BTB,仔细执行分支指令,以便BTB具有目标指令的可预测内容,如果推测执行该指令,则会以可检测的方式干扰处理器的高速缓存。 受害者程序然后运行并分支。 然后攻击者检查缓存是否受到干扰; 该干扰的测量会泄漏信息。在新的攻击中,攻击者启动PHT并运行分支指令,以便PHT始终假定某个分支被采用或不被采用。 受害者代码然后运行并形成分支,这可能会扰乱PHT。 然后攻击者运行更多的分支指令来检测对PHT的干扰; 攻击者知道某些分支应该按照特定的方向进行预测,并测试受害者的代码是否改变了该预测。

研究人员只关注英特尔处理器,利用这些攻击泄漏用英特尔SGX(软件防护扩展)保护的信息,这是在某些芯片上发现的一项功能,用于分割小部分的加密代码和数据,从而即使是操作系统(或虚拟化软件 )无法访问它。 他们还描述了攻击可用于地址空间布局随机化的方式,并推断加密和图像库中的数据。Spectre 2引发了操作系统和硬件的变化,并计划了更多的硬件修复。 研究人员表示,BranchScope需要类似的解决方案组合; 一些软件可以修改以消除分支,并且可以改变硬件来划分处理器上的推测执行数据结构,以便一个进程不会攻击另一个进程。
与Spectre 2一样,目前还不清楚有多少软件真的容易受到BranchScope攻击。 在这两种情况下,攻击者都需要能够在受害者系统上运行代码,所以这些攻击永远不会用于初始进入系统。 然而,他们所做的事情表明,长期以来被认为存在的隔离边界被高性能处理器必不可少的推测性执行硬件所渗透。 而且,BranchScope表明,Specter不是通过这种投机性执行可以被利用的唯一途径。基本上,处理器包含许多推测执行可修改的内部状态(包括寄存器,缓存,分支预测器,存储缓冲区等)。架构状态 – 由处理器发布的文档说明直接暴露和操纵的部分 – 由推测硬件正确保存。像Spectre和BranchScope这样的攻击存在是因为非体系结构状态 – 代表处理器的实现细节的部分,这些细节可能会从家族变为家族,并且不能直接被程序访问 – 并未完全保留。推测性执行(以及它所依赖的非体系结构状态)旨在无形地发生,并且没有迹象表明正在运行的程序正在发生。

像Spectre 2和BranchScope这样的攻击是结果。研究人员可能需要数年的时间才能确定以这种方式使用投机执行硬件来泄漏信息的各种方式,而在强大的通用防御措施可用于阻止攻击之前,这种方法将持续更长的时间。

报告:BranchScope: A New Side-Channel Attack on Directional Branch Predictor(http://www.cs.ucr.edu/~nael/pubs/asplos18.pdf)
原文:https://arstechnica.com/gadgets/2018/03/its-not-just-spectre-researchers-reveal-more-branch-prediction-attacks/#p3

 

上一篇:场景创新 精•进未来:锐捷网络2018产品及解决方案战略发布会在京召开

下一篇:央视:谁说“中国人愿意用隐私换便利”?