论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

IoT 2年前 (2022) admin
442 0 0

本次分享的论文是发表在HPCA‘19的《BRB: Mitigating Branch Predictor Side-Channels.》。在该文中,作者提出了一种新的分支预测器设计用于缓解侧信道攻击。

+

+

Introduction

现代处理器使用分支预测作为优化来提高处理器性能,分支预测器也随着处理器的发展变得越来越大,越来越复杂。然而,分支预测器也可能是侧通道利用的来源,因为一个进程可以故意更改分支预测器状态,并由此影响另一个进程的指令流。最直接的思路是通过刷新分支预测器来避免这种跨进程或跨线程的影响,但是这会带来严重的性能损失。

在本文中,作者提出了一种新的分支预测器设计,通过保持不同上下文的分支预测器信息的隔离,以及切换上下文时恢复当前进程的分支预测器信息,达到了在安全和性能两方面均不错的效果。

在没有增加额外面积的情况下,对比当前最先进的分支预测器,平均误预测率降低15%-20%,由此也带来了性能提升2%。


+

+

Background

当前已有的缓解措施,作者罗列如下:

1.     软件或固件更新:经测量会导致15%-90%的损失,并且对于spectre v1和branchscope这种是防不住的。

2.     硬件隔离:会带来巨大的性能损失。

3.     分支预测器表项标记:在最坏情况下,大部分表项会被另一个进程替换,效果类似于刷新。同时,虽然使用标记可以消除分支预测器表项毒化,但它仍然允许观察活动表项,这些条目可能被刷新,从而导致故意的误预测和数据泄漏。


当前的分支预测器设计,作者提到两种常见的,一个是TAGE分支预测器,一个是感知器分支预测器。

下图为TAGE分支预测器的原理图。预测将在TAGE tables中选取匹配最长历史的表项,如果未能找到,则使用双峰(bimodal)预测器。


论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

下图为感知器分支预测器,利用了神经网络的理论,能够达到更高的预测精度。其内部包含一组权重表并与历史位相乘,得到置信度。现在的版本则含有多组权重表,利用分支地址和历史进行索引。

论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

+

+

Threat model

1. 受害者和攻击者都位于同一核内,共享同一个分支预测器。

2. 可以将受害者执行速度放缓,以能够检测单个分支的行为。目前的攻击中已有该手段。

3. 攻击者可以强制受害者执行代码,使脆弱的代码成为攻击目标。

4. 攻击者有能力毒害受害者使用的分支预测器表项,触发误预测。

+

+

Design

在BRB中,不同上下文的切换都会导致分支预测器内容的刷新。这种方式保证了不同上下文之间绝对的隔离,但是也同样带来了严重的预测精度损失。下图是在上下文切换后,分支预测器的精度。

论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

作者定义了两个状态称为瞬态状态和稳定状态,在刚刚发生上下文切换后的一小段时间内是瞬态状态,而时间长了之后,分支预测精度会逐渐达到稳定的状态,此时称为稳定状态。

由于上下文切换可能会很快,那么分支预测器可能还在瞬态状态就切换到下一个进程,那么实际上它将无法达到峰值性能。在这样的情况下,一个保留了小部分状态的预测器能够提供更高的精度。

作者在BRB设计中为了减少这些开销,识别在预热阶段对准确性贡献最大的组件,并创建一种机制来保留每个上下文中分支预测器的状态,在每次上下文切换时,恢复出当前进程所对应的分支预测器状态,这样来保证在瞬态状态时能够有更好的预测精度。其余仅有助于长期准确性的分支预测器组件则被刷新,以防止任何状态泄漏。

作者的思路就是通过保证隔离,同时提高频繁上下文切换时的准确性,达到了性能与安全的一个平衡。


作者对之前提到的两个分支预测器的各组件进行重要性分析。因为作者分析的前提是,作者认为保留部分预测器部件状态,并在切换到下一进程时恢复预测器部件状态信息可以提高预测精度。所以作者需要找出哪些组件对预测精度影响最大。

下图是对TAGE预测器的实验结果。

论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

可以看到,如果不保留任何状态,当上下文切换越频繁,则其误预测频率会越高。在每20k指令切换上下文时,将MPKI(每千条指令的误预测数)提高了91%。

而在保留了部分组件状态后,预测精度会有降低,特别是保存TAGE table的状态。


而对于感知器预测器,作者没有给出实验结果图。总结了影响最大的三个部件为global history,path,recency。

+

+

Architecture

作者在分支预测器中引入branch retention buffer(BRB),用于分支预测器状态的保存。

下图为TAGE中的示意图。

论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

同时作者提到,利用BRB将不会导致切换上下文时状态信息的复制以及换出。因为不同进程的分支预测器状态信息将会各自保存在不同的SRAM bank中。

论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

在上下文切换时,只需要通过CAM所引导正确的BRB表项即可,而不需要每次都把状态信息写出和写入。同时,它所造成的索引开销会被掩盖在内核上下文切换之中。

BRB表项则遵循LRU算法,如果有新的进程加入,则需要将最近最少使用到的表项换出。


作者还结合TAGE预测器和感知器预测器提出了ParTAGE。如下图所示。小型的感知器作为BRB条目,以及使用相比原TAGE更小的TAGE表作为基本预测器。去除其他的贡献较小的组件,以避免这些组件的侧信道泄露。

论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

+

+

Evaluation

在瞬态状态下,误预测次数相比TAGE和感知器预测器降低了80%-90%。因此,相比于稳定状态下,ParTAGE误预测所导致的对执行速度的不良影响大幅小于TAGE等传统预测器。

论文分享 | BRB: Mitigating Branch Predictor Side-Channels.
论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

ParTAGE由于使用小尺寸的设计(其中的感知器和TAGE页表均取得很小),其尺寸不大于传统预测器如TAGE和preceptron。


原文始发于微信公众号(COMPASS Lab):论文分享 | BRB: Mitigating Branch Predictor Side-Channels.

版权声明:admin 发表于 2022年10月12日 下午8:26。
转载请注明:论文分享 | BRB: Mitigating Branch Predictor Side-Channels. | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...