APP下载

基于动态资源使用策略的SMT执行端口侧信道安全防护

2022-02-11岳晓萌杨秋松李明树

计算机研究与发展 2022年2期
关键词:线程攻击者信道

岳晓萌 杨秋松 李明树

1(基础软件国家工程研究中心(中国科学院软件研究所) 北京 100190) 2(中国科学院大学 北京 100049)

随着计算机技术的发展和数据处理需求的增大,处理器厂商一直致力于提升处理器的并行处理能力.早期处理器发展重点是提升处理器内部的指令并行度,当处理器指令并行度提升到了一定瓶颈后,处理器厂商开始提升线程并行度来提升处理器的整体性能,这也推动了多核处理器的出现.

同时多线程(simultaneous multi-threading, SMT)技术是实现线程级并行的技术之一,其通过增加少量硬件资源,把1个物理核映射成2个逻辑核,同时运行的线程可共享处理器的资源.因为线程执行总有空闲或者等待的时间,SMT环境下当一个线程进入空闲或等待,另一个线程可以继续执行,从而更加合理地使用处理器资源,进而达到比单线程超标量处理器更好的指令吞吐量和资源利用率.已实现SMT技术的处理器厂商包括Intel,AMD,IBM等,其中以Intel最早于2002年的Pentium4处理器上使用的超线程(hyper-threading, HT)技术最为典型.本文中的SMT技术均以Intel提出的超线程技术作为主要参考.

从Intel公司推出的HT技术商用开始,研究人员就开始针对SMT技术进行安全问题的挖掘和研究,因为SMT技术增加了很多处理器微架构安全问题利用的场景和机会,因此有研究人员评价SMT技术是“廉价的硬件并行意味着廉价的安全性”.

在SMT技术设计下,处理器执行资源是完全被2个线程共享的,2个线程间共享一样的执行端口及端口内的执行单元,很容易构造资源的竞争,这种竞争可以被攻击者检测和利用.

2006年,Wang等人首次将执行单元的竞争应用于隐蔽信道.2016年,Covert shotgun项目提出一个自动化挖掘SMT环境下执行单元隐蔽信道的框架.在执行端口及执行单元的隐蔽信道攻击研究过程,逐步出现了基于相同技术原理的侧信道攻击技术研究.2018年,Aldaya等人在Intel Skylake和Kabylake架构上利用其SMT技术开启后执行端口竞争问题提出了PortSmash攻击.2019年,IBM的研究团队提出了一种叫SMoTherSpectre的新型“Spectre”类型攻击,其使用SMT环境下执行端口的竞争构建了投机代码重用的攻击场景,可以从受害者线程获取私密信息.

在针对上述SMT环境下共享执行端口或执行单元的时间侧信道攻击,研究人员也提出了一些防护方法.Percival等人在早期提出可以禁用SMT来防范此类攻击,其可以彻底解决执行单元或执行端口双线程共享产生的时间侧信道问题,但这种方式失去了SMT技术本身带来的收益,会导致相应的性能损失.Hu在提出通过将噪声添加到与进程相关的所有时间信息中,达到降低时序信道带宽的目的进行防护,其通过修改RDTSC或RDTSCP指令,将噪声加入到指令执行的返回值中,就可以达到降低攻击者获取时间信息精度的目的,但这种方式也会直接影响相应被修改指令的功能准确性,影响正常程序的使用.2019年,Zhang等人提出了名为DDM(demand-based dynamic mitigation)的防护方法,其使用软件的手段动态地基于需求关闭SMT技术,进而达到防护基于SMT技术执行资源共享的侧信道攻击的目的.然而DDM是通过软件手段动态关闭SMT技术来达到防护目的,尚未有从处理器微架构角度防护的案例.

本文提出了一种针对现代处理器SMT技术执行端口时间侧信道攻击的防护方法.主要贡献有2点:

1) 提出动态调整双线程共享的执行端口资源使用策略,防护SMT环境下执行端口双线程共享产生的时间侧信道攻击的方法,该方法将SMT技术对不同数据结构的处理方式应用到侧信道安全防护中,通过对数据结构共享策略的改变来达到防护效果,可以在SMT技术合理利用共享数据结构的同时达到安全防护的目的;

2) 提出并设计了一种基于记录分支预测错误刷新及执行端口冲突历史的防护方法,可以有效防护以SMotherSpectre为代表的组合使用诱导分支预测投机执行的Spectre机制及执行端口冲突时间侧信道攻击.

1 相关工作

在20世纪初期SMT技术问世之后,研究人员就开始在SMT技术上挖掘安全问题和防护方法.Koç等人在2009年总结了当时已有的基于SMT的攻击技术和应用案例,对SMT技术导致的安全问题进行了系统归纳,也汇总了当时针对SMT技术安全问题的缓解手段.2018年,Ge等人总结了2002—2018年期间各个系统层级由于资源共享导致的时间信道安全问题及缓解措施,作者提出基于SMT技术产生的硬件线程级时间信道安全问题相对于跨核、跨处理器的时间信道安全问题是更难应对和防护的.SMT环境下除缓存结构外的其他共享数据结构很难有好的防护效果,其中最突出的是SMT环境下执行端口双线程共享导致的时间侧信道安全问题.

SMT环境下执行端口时间侧信道攻击路径核心环节是冲突的构建和对时间的度量,这也是时间信道利用的2个基本要素(简称为冲突和时间).表1描述了已有针对SMT共享执行端口的时间侧信道防护方法:

Table 1 Timing Channel Defending Method Under SMT Execution Port Shared表1 SMT环境下共享执行端口的时间信道防护策略及方法

1.1 冲突要素防护

从冲突要素的防护策略角度,针对SMT技术下执行端口双线程共享产生的时间侧信道安全问题目前主要有2种防护手段:将SMT技术禁用以及动态关闭SMT(DDM).

Percival在早期提出数据缓存可以在SMT环境下被利用于构造隐蔽信道和侧信道攻击,建议可以通过禁用SMT来防范此类攻击.当前禁用SMT的方案在实践中已经得到使用,例如微软Microsoft Azure的公共云服务上就禁用SMT技术.除了直接禁用SMT技术,DDM可以基于上层软件的配合来达到防护目的.DDM是一种基于需求的动态SMT瞬态攻击防护技术,其实现了进程级的防护粒度,当安全进程在运行时,如果有防护范围内的恶意进程尝试分配到和安全进程一样的物理核时会被OS拒绝.当安全进程在一个物理核中运行时,另一个相同物理核的进程可以通过HLT指令的系统调用完成SMT状态的关闭,保证安全进程能够在等同于关闭SMT的状态下运行,从而达到防护SMT技术下共享执行端口侧信道攻击的目的.DDM的防护方式本质上也是通过关闭SMT技术达到防护效果,但是其动态开关的方式会一定程度上降低彻底关闭SMT的性能损失.DDM使用SPEC2000进行性能评估约产生8%左右的性能损失.

1.2 时间要素防护

从时间要素的防护策略角度,可以通过修改时间度量指令的方式增加时间噪声来防护针对SMT技术下执行端口共享产生的时间侧信道攻击.

增加时间噪声是指在时间度量方式和手段上进行噪声添加.Hu在1991年就提出了模糊时间(fuzzy time)技术,通过将噪声添加到与进程相关的所有时序信息中,最终达到降低时间信道带宽的目的.文章中通过修改RDTSC或RDTSCP指令在时间信息中添加噪声,此指令的功能是通过读取处理器内部的时间戳计数器(time stamp counter, TSC)来度量运行时间,通过修改指令的实现方式,将噪声加入到指令执行的返回值中,就可以达到降低攻击者获取时间精度的目的.

Vattikonda等人通过修改Xen虚拟机监控器(hypervisor),将噪声加入到RDTSC指令的返回值中.Martin等人发现如果处理器内部时间度量变得不精确,可以有效防护时间侧信道攻击.作者修改了x86体系架构下的RDTSC指令的硬件实现,使得RDTSC指令会暂停所有执行操作直到预设的时间阈值

T

满足,然后通过产生一个0到时间阈值

T

的随机数返回给指令使用者来达到模拟时间的效果.

1.3 小 结

当前除了禁用SMT技术、动态关闭SMT以及修改时间度量指令(RDTSC/RDTSCP)的方法外,还没有其他可以针对SMT环境下执行端口时间侧信道攻击的防护手段.已有的防护手段都有其明显的缺陷,禁用或动态关闭SMT技术会损失SMT技术带来的性能收益;修改指令语义会弱化指令功能,从而影响其他使用时间度量指令应用的正常使用.综合已有的防护方法,目前针对SMT环境下执行端口时间侧信道攻击效果较好的防护策略是动态关闭SMT技术(DDM),还没有公开的基于处理器微架构的防护方案.

2 背景知识

2.1 SMT微架构特征及安全挑战

处理器在开启SMT技术后,处理器内部微架构会使用相关的SMT功能特性,从而完成微架构功能的转变,进入到同时多线程模式,可以在同一时刻利用不同执行端口发射执行不同线程的指令.

如图1所示,SMT技术区别于其他的多线程技术的核心是可以在同一个流水级执行来自几个不同线程的微操作(或称Uop、微指令).普通的超标量单核处理器同时只能运行1个线程,在局部时间内流水线资源还会处于空闲状态(例如取指令阶段);对于普通的多核处理器,其会使用多个物理核来运行多个线程,是普通单核处理器的简单叠加;粗粒度和细粒度多线程技术使用时间片的方式分配资源使用,资源会在一段时间内分配给独立的1个线程使用,同一时间资源只会分配给1个线程使用;SMT技术区别于粗/细粒度的多线程技术,其可以灵活分配处理器内部资源,大部分数据结构资源被多个线程共享且同一周期可以调度多个线程的操作同时执行,最大化得提高资源利用率.

Fig. 1 SMT feature图1 SMT技术特征

Fig. 2 Intel SMT front end resource图2 Intel SMT前端资源的处理方式

SMT技术原理(以Intel的超线程技术为例)主要包含3个部分:

1) 制定资源共享策略.SMT技术可以使用资源复制、资源分割和资源共享的方式来实现数据结构资源的分配.以图2为例,Intel SMT技术中的ITLB和IP结构采用了资源复制的处理策略,微操作队列结构采用了资源分割的处理策略,追踪缓存结构采用了资源共享的处理策略.

2) 设置线程选择点.使用SMT技术的处理器微架构需要在合适的流水线位置增加线程选择点,其作用是在共享资源的使用上进行2个线程的选择及切换.合理的线程选择点设置和选择算法使用能够有效提高双线程共享资源的利用率以及双线程的公平性.

3) 保证线程公平性.处理器微架构在实现SMT技术时需要注重线程间的公平性,线程选择点需要使用相应的公平算法,避免单一线程由于长时间得不到资源而饿死的情况出现.

SMT技术中资源复制和资源分割的处理方式使得2个线程在处理器内部会公平地使用自己的私有资源,不会对另外线程的资源产生影响,因此基于共享资源竞争的时间信道攻击方式对该类型的微架构组件无效.对于资源共享的处理方式,2个线程在处理器内部会产生竞争,容易被攻击者利用,例如针对SMT环境下执行端口双线程共享的技术原理,控制执行指令流的类型可以构建端口冲突,攻击者可以通过时间信道传递信息获取另一线程运算逻辑或指令类型的使用状态.

2.2 SMT技术的多端口调度算法

本节通过剖析SMT技术的多端口调度算法的微架构实现,来描述SMT环境下执行端口时间侧信道攻击原理,如图3所示:

Fig. 3 SMT multi-port schedule micro-architecture图3 SMT技术的多端口调度微架构

在超标量处理器微架构设计中,指令集架构中描述的宏指令会经过取指、译码的流程形成对应的微操作.微操作在进行指令执行前,会通过指令解析完成对应执行端口的绑定.在关闭SMT技术的情况下,处理器流水线内部只有1个线程,完成端口绑定的微操作会通过对应的端口进入执行单元;在开启SMT技术的情况下,处理器解码系统和乱序执行系统交互过程中,因为在重命名和分配微架构设计中约束了同一时刻只能处理来自于同一个线程的微操作,因此,同一时刻也只有1个线程的微操作可以进入调度器.在调度器微架构设计中为了更快地调度和分发微操作,其并不关心微操作的线程信息,只考虑其是否就绪(“就绪”指的是某条微操作已满足被选择并发射到执行端口的条件),如果有同时就绪的微操作则年龄更老的优先发射,因此,调度器可以同时在不同执行端口发射2个线程的微操作.

如果2个线程在调度器内的微操作指向同一个端口,那么由于分配时的先后关系,2个线程的微操作会自然携带不同的年龄信息.调度器中有2个关键数据结构,一个是年龄矩阵,另一个是就绪向量,虽然2个线程的微操作即使都处于就绪状态,依赖于年龄矩阵的先后关系,调度器会先发射更“老”的线程的微操作进入相应端口,那么已经就绪但由于较“年轻”导致无法发射到相同端口的另外线程的微操作就产生了延迟,此时就叫作出现了线程间的端口冲突.

假设线程

T

T

是1个物理核上分配的2个逻辑核,按照SMT微架构特征的描述,其按照线程公平性原理进行执行端口的分配使用,分配策略如算法1所示.

算法1.

端口分配策略

Alloc

(

T

,

P

,

C

,

A

)

.

输入:准备分配线程端口

T

x

={0,1},执行端口

P

={

p

,

p

,…,

p

-1},

i

={0,

n

},时钟周期

C

;输出:线程分配端口

A

.

① 时钟周期

C

执行:② for (0≤

i

<

n

)③ if (

T

==

p

&&

T

(1-)==

p

)④

A

=

p

;

⑤ else

A

=

p

;⑦

A

(1-)=

P

p

;

⑧ end if

⑨ end for

⑩ 时钟周期

C

+1执行:

上述分配策略会产生2种极端情况,当

T

T

都处于完全流水线执行的状态时,一种极端情况是如果

T

T

一直使用不相关的执行端口,那么

T

T

不会有任何的执行端口冲突;另一种极端情况是如果

T

T

一直使用相同的某一个执行端口,那么

T

T

需要轮流使用该执行端口,吞吐量是上一种极端情况的一半

.

因此,某线程在特定的执行端口下执行指令并且度量其执行程序的时间就可以推断同一端口或执行单元下另一线程的执行情况

.

3 防护目标

2018年的PortSmash和2019年的SMoTher-Spectre是近期利用SMT技术执行端口双线程共享产生的时间侧信道构建攻击的案例.

PortSmash针对Intel Skylake的执行微架构(如图4所示)设计了3组冲突指令流,分别适用于端口1、端口5、端口0156的冲突构建,端口1、端口5的冲突构建指令选用了长延迟指令,端口1选用整型乘法(INT MUL)执行单元执行的crc32指令,端口5选用了向量交织(VEC SHU)执行单元执行的vpermd指令,端口0156的重构构建指令选用了单周期指令,使用最常见的算术逻辑(INT ALU)执行单元执行的ADD指令.

Fig. 4 Intel Skylake execution port distribution图4 Intel Skylake执行端口分布

SMoTherSpectre除了采用同PortSmash类似的冲突构造指令来构建用于受害者泄露信息的SMoTher Gadget和用于攻击者度量时间信息Time SMoTher Gadget外,其在冲突构建阶段使用了Spectre分支诱导的方式来加强冲突构建的成功率,如图5所示.受害者的BTI Gadget和攻击者的Poison BTB组件的作用是构建分支诱导场景,攻击者通过训练处理器分支预测单元的分支目标缓存(branch target buffer, BTB)结构来诱导受害者投机执行SMoTher Gadget的程序,当受害者程序被分支诱导后会进入SMoTher Gadget中,该组件通过分支跳转的形式构建了2组冲突指令,在POC示例中,分支指令后使用了popcnt指令,分支目标使用了ror指令,同时攻击者程序中的Time SMoTher Gadget使用了大量的ror指令,2个线程同时执行ror指令在Intel Skylake微架构中会造成端口6的冲突,从而达到构建冲突的目的.

Fig. 6 Modification of multi-port scheduling algorithm by protection design图6 防护设计对多端口调度算法的改动

Fig. 5 SMoTherSpectre attack gadget图5 SMoTherSpectre攻击组件示意图

PortSmash和SMoTherSpectre均使用了rdtsc/rdtscp指令来作为时间度量的手段,通过在攻击者程序冲突指令执行前后使用rdtsc/rdtscp指令可以得出冲突指令的执行时间,从而获取冲突程度或冲突次数的信息.

本文提出的基于动态资源使用策略的SMT环境下执行端口时间侧信道攻击防护方法目标是通过执行端口资源使用策略的动态调整,破坏上述2种攻击方式在端口冲突构建环节中使用的技术原理,从而切断通过改变指令类型来构建端口冲突进而通过时间信道传递信息的攻击路径,达到防护上述2种攻击方式及使用同类技术原理的其他攻击的效果.

4 防护设计与实现

4.1 设计概述

本文从微架构角度针对SMT环境下执行端口时间侧信道攻击设计了一种软件不可见的防护机制,图6描述了本文设计的防护设计对SMT技术的多端口调度算法的改进.

在SMT技术的多端口调度标准算法中,2个线程通过轮询算法交替选择线程内的微操作送入分配单元,分配单元完成微操作的端口绑定,单端口执行的微操作绑定对应执行端口,多端口执行的微操作采用循环选择算法绑定执行端口.微操作进入调度器后通过依赖矩阵建立就绪向量,通过年龄矩阵生成最终的选择向量,调度器按照当前端口上绑定的已就绪的微操作的年龄顺序依次选择微操作发射到对应端口上.

本文的防护设计对SMT技术的多端口调度算法进行了扩充,详细的微架构示意图如图7所示.

Fig. 7 The micro-architecture of protection design图7 防护设计微架构图

在年龄矩阵访问生成最终的选择向量后增加冲突检测的检查环节,本文在原有的依赖矩阵和年龄矩阵之外,新增了端口冲突矩阵的数据结构,该数据结构提取依赖矩阵的就绪向量信息、年龄矩阵的选择向量信息以及调度器的线程向量信息,通过分线程的饱和计数器阵列来记录线程间的端口冲突情况.如果检测到冲突,则将冲突信息提供给分支过滤和策略修改器进行下一步的防护算法应用;如果没有检测到冲突则不会产生额外动作,不会影响正常的调度算法.分支过滤器对分支指令产生的端口冲突信息进行过滤并记录分支刷新产生时的冲突信息,动态资源使用策略修改器(简称:策略修改器)生成策略使能向量和优先级向量进行防护算法的应用.

防护算法应用会改变标准的SMT技术的多端口调度算法,主要分2个方面:

① 防护策略类型、策略端口使能向量伴随指令操作码会提供给分配单元.分配单元接收到分割的策略类型和策略端口使能向量时,会在原端口绑定算法的基础上将多端口执行的微操作采用的循环选择算法改为端口分割算法.当匹配到微操作的操作码一致时,不同线程的微操作固定使用分开的执行端口.

② 防护策略类型、策略端口使能向量、优先级向量伴随指令操作码会提供给调度器选择逻辑.调度器选择逻辑接收到分时策略、策略端口使能向量以及优先级向量时,会改变原始完全按照年龄矩阵的选择算法,而是基于优先级向量进行优先级选择,即使高优先级线程微操作在年龄矩阵中记录的年龄比另外的线程年轻,其也会被优先选择.当匹配到微操作操作码一致时,选择逻辑按照优先级在对应端口中优先选择优先级高的线程微操作进行分发.

本文的防护设计微架构实现共包含3个子模块,分别是端口冲突矩阵、分支过滤器及策略修改器.在整个防护设计中,通过对端口冲突的连续检测形成端口冲突向量;然后通过分支过滤器过滤掉分支类型微操作并且针对SMoTherSpectre此类攻击特征进行分支刷新后的优先级调整;最后通过策略修改器进行处理器分配单元及调度器选择逻辑的算法策略修改,消除由于执行端口冲突产生的时间信道,进而防护SMT环境下利用双线程共享执行端口进行的时间侧信道攻击.

4.2 端口冲突矩阵

为了记录SMT技术2个线程的端口冲突,本文的防护方法需要设计实现用于记录SMT技术2个线程的端口冲突矩阵.

端口冲突矩阵由2个线程独立的2维数组组成,数组内部的每一行代表1个端口,按照图7中描述,存在6个端口,分别是

P

P

,每一个端口都有一个2 b的饱和计数器,该计数器的初始值为0,当某线程因为绑定的端口同另一个线程相同但由于年龄先后的原因而导致延迟发射时,计数器加1,当某线程绑定的端口连续2次发射均没有冲突时,计数器减1.

判定某线程同另一个线程由于端口资源冲突导致延迟发射的算法如下:

算法2.

端口冲突延迟发射

ConflictCounterSet

(

T

,

S

,

P

,

C

Conf

[1:0])

.

输入:就绪线程端口

T

,选择线程端口

S

x

={0,1},执行端口

P

={

p

,

p

,…,

p

-1},

i

∈{0,

n

},时钟周期

C

;输出:冲突饱和计数器

Conf

[1:0]

.

① 时钟周期

C

执行:② for (0≤

i

<

n

)③ if (

T

==

p

&&

T

(1-)==

p

)④ if (

S

==

p

)⑤

Conf

[1-

x

]=1;⑥ else if(

S

(1-)==

p

)⑦

Conf

[

x

]=1;

⑧ end if

⑨ else

S

=

p

;

判定某线程绑定的端口连续2次发射均没有冲突的算法如下:

算法3.

端口冲突取消

ConflictCounterReset

(

T

,

S

,

P

,

C

Conf

[1:0])

.

输入:就绪线程端口

T

,选择线程端口

S

x

={0,1},执行端口

P

={

p

,

p

,…,

p

-1},

i

∈{0,

n

},时钟周期

C

;输出:冲突饱和计数器

Conf

[1:0]

.

① 时钟周期

C

执行:② for (0≤

i

<

n

)③ if (~(

T

==

p

&&

T

(1-)==

p

)&&

S

==

p

)④

Flag

[

x

]=1;⑤ else if (~(

T

==

p

&&

T

(1-)==

p

) &&

S

(1-)==

p

)⑥

Flag

[1-

x

]=1;

⑦ else

Flag

[

x

]=0;⑨

Flag

[1-

x

]=0;

⑩ end if

&&

S

==

p

&&

Flag

[

x

]==1)

p

) &&

S

(1-)==

p

&&

Flag

[1-

x

]==1)

因为SMT技术的公平性设计,冲突会在2个线程中间交替出现,当2个线程的饱和计数器全为1时,则判断该端口存在双线程的冲突.冲突端口的信息会以独热码(one-hot)的形式作为冲突向量给到分支过滤器.

4.3 分支过滤器

在SMoTherSpectre中,攻击者通过Spectre分支诱导的方式诱导受害者进入SMoTher Gadget,SMoTher Gadget包含受害者投机执行的代码片段.因为是诱导投机执行代码,后续会产生分支刷新刷掉该指令流,该指令流使用了攻击者构造的端口冲突代码,长时间执行相同端口的微操作,而这些微操作同攻击者Time SMoTher Gadget中的指令冲突与否则会产生对应的时间信道.

分支过滤器的作用是当接收到冲突向量后进行包含分支类型微操作执行单元端口的冲突信息进行过滤并针对SMoTherSpectre中使用Spectre诱导方式进行冲突构建和安全信息提取的攻击方式进行专门的防护.

分支过滤器除了接收端口冲突矩阵的冲突向量外,还接收译码过后的微操作信息.识别分支指令的目的是对分支指令进行冲突过滤,其他信息会解码后给到后面的策略修改器用于防护策略的算法应用.

对分支指令进行过滤的原因是在普通应用程序中,分支指令占比较高,且在实际攻击应用时因为分支指令执行会产生流水线刷新行为,攻击者不会使用分支指令作为执行端口冲突的构建对象.如图8所示,本文选取了常用的Linux指令(mount,cat,ls,sh,su,hostname,login,password,id,which),其分支指令类型的占比接近23%.以Intel Skylake微架构为例,其分支执行单元在端口0和端口6,如果一旦端口0和端口6检测到端口冲突,且分支过滤器获取微操作类型是分支时,过滤器将过滤掉该冲突信息.

Fig. 8 Linux typical application instruction frequency statistics图8 Linux典型应用指令频度统计

除了分支指令过滤的功能外,分支过滤器还可以通过记录分支刷新的方法来防护使用Spectre诱导方式进行冲突构建和安全信息提取的攻击.具体算法流程如下:

算法4.

分支刷新优先级设置

BranchFlush

-

PriorSet

(

F

S

P

Conf

[1:0])

.

输入:选择线程端口

S

,分支刷新线程

F

x

={0,1},执行端口

P

={

p

,

p

,…,

p

-1},

i

∈{0,

n

},冲突饱和计数器

Conf

[1:0];输出:线程优先级

Prior

x

={0,1}

.

① for (0≤

i

<

n

)② if(

S

==

p

&&

F

==1 && |

Conf

)③

Prior

--;④ else if(

S

(1-)==

p

&&

F

1-==1&& |

Conf

)⑤

Prior

1---;

⑥ end if

⑦ end for

线程对某端口的分时调度优先级降低后,仅当另一线程不使用该端口时才调度本线程绑定该端口的微操作,该优先级策略会覆盖策略修改器的优先级策略.

针对SMoTherSpectre攻击,分支过滤器通过对分支刷新后冲突端口的记录并降低其优先级的方式可以使得受害者投机执行的SMoTher Gadget指令流中的端口冲突指令无法同攻击者Time SMoTher Gadget的指令冲突,进而在攻击者的时间度量范围内无法观测到冲突出现,破坏其在信息提取阶段的关键信息,使得SMoTherSpectre此类攻击方式失效.

4.4 动态资源使用策略修改器

经过分支过滤器过滤后,最终的端口冲突向量及分支过滤后的刷新冲突记录向量会进入动态资源使用策略修改器,策略修改器用于生成对SMT技术的多端口调度算法的防护逻辑并完成新防护算法的应用.

策略修改器主要应用的策略有2种,端口分割策略和端口分时策略.为了保证2个线程之间的公平性,默认分时优先级选择采用Ping-Pong原则,且该默认优先级受分支过滤器的控制.策略修改器会产生策略类型、策略端口使能向量、优先级向量.策略类型、策略端口使能向量、优先级向量伴随微操作的操作码会同时提供给分配单元和调度器选择逻辑.

策略修改器接收来自于提交单元的刷新信号,当出现中断、事件、异常等单线程事件或SMT下线程唤醒、线程睡眠、线程切换等双线程事件时,策略修改器重置,恢复原始的双线程共享多端口调度算法.

以Intel Skylake微架构的多端口的执行单元INT ALU以及单端口的执行单元INT MUL为例,给出策略修改器的算法.

算法5.

资源策略修改

ResourceModify

(

T

,

Prior

,

P

,

S

)

.

输入:就绪线程端口

T

,线程优先级

Prior

x

={0,1},执行端口

P

={

p

,

p

,…,

p

-1},

i

∈{0,

n

};输出:选择线程

S

x

={0,1}

.

① 多端口执行单元(INT ALU):

② for (

i

∈{0,1,5,6})③ if (

T

==

p

&&

T

(1-)==

p

)④

S

=

p

(

m

∈{0,1});⑤

S

(1-)=

p

(

n

∈{5,6});

⑥ else

S

=

p

;⑧

S

(1-)=

P

p

;

⑨ end if

⑩ end for

Prior

>

Prior

1-)

&&

Prior

<

Prior

1-)

在分配单元,策略修改器将多端口执行的微操作采用的循环选择算法改为端口分割算法.在调度器选择逻辑,策略修改器将完全按照年龄矩阵的选择算法改为基于优先级的选择算法.如果分支过滤器的端口优先级向量使能,该使能信息会覆盖分时优先级Ping-Pong选择器结果,固定匹配线程的优先级低于另一线程.

4.5 小 结

本文提出的基于动态资源使用策略的SMT环境下执行端口时间侧信道攻击防护方法,可以将SMT技术对数据结构分割和分时处理的方式应用到SMT环境下执行端口时间侧信道安全防护中,通过对数据结构共享策略和算法的改进来达到防护效果,可以在SMT技术合理利用共享数据结构的同时达到安全防护的目的.

在破坏SMT技术下执行端口时间侧信道攻击路径上,本防护机制可以同时作用于攻击路径的冲突构建和时间度量2个环节上.

首先,防护机制从冲突要素入手,动态资源使用策略会作用于SMT技术的多端口分配和调度选择算法上,使得SMT环境下2个线程不发生同样类型的端口冲突,达到冲突要素防护中不产生冲突防护策略的硬件隔离效果.

其次,本文提出的防护机制在时间要素上同样具有作用,其对时间的干扰主要体现在针对SMoTherSpectre类型攻击上,区别于PortSmash攻击,SMoTherSpectre攻击者在进行时间信道的度量时,冲突产生的时间信息及无冲突产生的时间信息都有作用.PortSmash攻击对时间信息的度量完全基于冲突时间来完成,而SMoTherSpectre通过时间度量采集的时间即使没有冲突也可以用于私密信息的分析.通过本文的防护算法应用,从SMoTherSpectre攻击者角度,其度量到的时间信息不再准确.从时间要素防护的角度,这也是破坏时间度量精度的一种方式.

5 防护评估

5.1 评估方法概述

本文使用Gem5模拟一个高性能多执行端口的超标量处理器作为本文防护方法的防护有效性、性能开销的评估平台,其配置参数如表2.对标的防护方式是目前针对SMT环境下执行端口双线程共享的时间侧信道攻击最有效的防护策略—关闭SMT技术.

Table 2 Gem5 Simulator Configuration Parameters表2 Gem5模拟器配置参数

对于硬件开销的评估,本文使用华力HLMC 40 GP工艺进行防护方法的硬件开销评估,主要包含面积及时序.

对于防护有效性评估,本文选用了PortSmash和SMoTherSpectre两篇文章中的POC(proof of code)代码作为实验目标,分析本文提出的防护设计对这2种攻击方式的防护效果.

对于性能评估,本文选用SPEC CPU 2006测试集作为性能评估的参考,主要评估防护方法对性能的影响以及同关闭SMT技术产生的性能影响进行对比.本文将采用12组SPEC CPU 2006 INT测试集.通过在Gem5上运行测试程序,分别统计关闭SMT技术、正常开启SMT技术、开启SMT技术并且使用本文的防护方法3个场景的执行周期数值,然后进行SPEC CPU 2006 INT程序的整体性能对比,执行周期数越大,性能越差,周期数越小,性能越好.

本文SPEC CPU 2006 INT程序在Gem5 ALPHA架构下12个测试程序可成功运行7个,错误原因均为Gem5模拟器对系统调用支持情况的缺陷导致.表3是SPEC CPU2006整型计算基准程序在本实验下的运行情况:

Table 3 Running Condition of SPEC CPU2006 Integer Base Programs

对于硬件开销评估,本文提出的防护机制使用RTL(register-transfer level)进行代码实现.完成设计实现后的防护设计代码在HLMC 40 GP工艺下使用新思科技的ASIC设计流程和工具进行面积和时序的评估.

5.2 防护有效性评估

本节防护有效性评估针对PortSmash和SMoTherSpectre两个攻击案例进行,在禁用或动态关闭SMT技术后,2个攻击案例均无法实现,因此,禁用或关闭SMT的防护效果为最佳,本文的防护设计目的是尽量接近禁用或关闭SMT技术的防护效果.

PortSmash参考其针对Intel Skylake微架构的POC代码片段,攻击者循环执行某端口指令,受害者同样会使用该端口指令,也会使用其他端口指令.为了使攻击效果明显,设计受害者循环进行相同操作,攻击者也循环进行相同操作且攻击者和受害者同时在开启SMT技术的2个逻辑核上执行.SMo-TherSpectre选用其攻击模型中使用的POC代码片段类型,受害者运行程序中包含了攻击者植入的一个SMOTHER代码片段,正常运行过程中,受害者不会运行SMOTHER代码片段,其在加载完核心参数后会跳走,但由于攻击者使用了Spectre的分支预测诱导机制将受害者跳转指令的目标地址诱导进SMOTHER代码片段中,进而实施执行端口冲突的时间侧信道攻击,其技术原理同PortSmash一致.

将攻击者和受害者的运行代码使用gcc编译器编译成可执行二进制文件,其中攻击者可以使用同受害者端口一致的指令类型,也可以使用同受害者端口不同的指令类型.首先使用原始Gem5模拟器,开启SMT选项,且同时加载PortSmash攻击的攻击者和受害者POC代码的二进制可执行文件,配置不同冲突次数和频度,通过原始Gem5模拟攻击者通过端口冲突获取受害者信息的攻击路径,并统计运行时间来提取端口冲突时间信息;然后使用增加防护设计后的Gem5模拟器,进行同样的操作.在本实验过程中,为了测试不同冲突频度产生的冲突效果,选取了60~30 720共10组不同量级的指令冲突频度进行测量.

图9为防护效果评估对比,SMTwC表示SMT下端口冲突的攻击者执行周期;SMTwoC表示SMT下端口无冲突的攻击者执行周期;SMTwDwC表示SMT下增加防护设计后有端口冲突的攻击者执行周期;SMTwDwoC表示SMT下增加防护设计后端口无冲突的攻击者执行周期.表4详细给出了Gem5输出的时钟周期数据.

Fig. 9 Evaluation of protective effect图9 防护效果评估

从图9中的SMTwC和SMTwoC的对比可以看出,在SMT技术下PortSmash和SMoTherSpectre攻击中攻击者使用的攻击指令同受害者同端口指令出现冲突时其冲突造成的时间延迟和冲突规模呈线性关系,而不产生冲突时,其指令延迟信息也呈现明显的线性关系,这样通过时间延迟的不同可以提取出受害者程序执行的指令类型和次数.

Table 4 Effect of Defending Method表4 防护效果数据

从图9中的SMTwDwC和SMTwDwoC的对比可以看出,增加防护设计后,由于冲突端口随着冲突指令量级增大会使能分割或分时的动态资源使用策略,攻击者程序即使存在同受害者的指令冲突且冲突造成的时间延迟和冲突规模呈明显的线性关系,但是使用同受害者不产生冲突的指令类型其造成的时间延迟和冲突规模也呈明显的线性关系且同有冲突时趋于一致.通过该实验数据表明,攻击者使用PortSmash和SMoTherSpectre类型的攻击方式通过度量冲突时间来采集时间信道过程中会有明显的误差和干扰存在,无法判断受害者使用的指令类型和频度,可以达到禁用或动态关闭SMT技术的防护效果,进而防止受害者指令执行端口、指令执行次数及指令类型信息的泄露.

5.3 性能开销评估

本文防护设计的性能评估选用SPEC CPU 2006测试集作为性能评估的参考,主要评估防护方法对性能的影响以及同禁用或动态关闭SMT技术(DDM)产生的性能影响进行对比.

1) 评估样本.7个SPEC CPU 2006 INT测试程序.

2) 评估方式.使用总执行周期数据指标作为性能优劣的核心评估参数.

3) 评估目标.对比禁用SMT技术、正常开启SMT技术、开启SMT技术并且使用本文的防护方法3个场景的程序总执行周期数据(其中401和471的程序规模较大,其统计的时钟周期数进行等比例缩减,缩减比例100∶1),分析本文的防护方法对性能的影响程度.

4) 对比数据(如图10所示).

① NOSMT——关闭SMT技术后Gem5运行7组SPEC CPU 2006 INT测试程序的执行周期数;

② SMT——正常开启SMT技术后Gem5运行7组SPEC CPU 2006 INT测试程序的执行周期数;

③ DEFENCE——开启SMT技术并且使用本文的防护方法下Gem5运行7组SPEC CPU 2006 INT测试程序的执行周期数.

Fig. 10 Performance comparison图10 性能对比

5) 评估结论.使用本文的防护设计后SPEC CPU 2006 INT测试集测试出的执行性能平均下降2.98%,性能下降最明显的是471,下降比例为7.77%,也优于DDM动态关闭SMT的性能表现(SPEC2000评测约8%的性能损失),且以473为代表的测试程序在增加防护设计后性能没有下降,且有0.5%的性能提升.

综上可以得出,本文防护方法对性能的影响整体可控,且相比于禁用或动态关闭SMT技术有明显的性能优势.

5.4 硬件开销评估

本文描述的防护机制使用Verilog语言进行RTL实现.然后使用HLMC 40 GP工艺和新思科技的ASIC设计流程和工具进行面积和时序的评估.

本文防护机制设计为1个独立的单元,命名为smt_defend,该单元支持针对6个执行端口,64个调度器项的处理器微架构设计.

本文使用新思科技DC-Compiler工具,设置时钟约束为2 GHz,clk_uncertainty参数值为100 ps.本文防护设计的时序和面积数据如表5所示:

Table 5 Hardware Overhead Evaluation表5 硬件开销评估

经过综合工具实现,smt_defend单元总面积为4 877 μm,在时序方面,3类时序数据的最差路径分别为reg2reg(寄存器到寄存器)时序最差路径为357 ps;in2reg(输入到寄存器)时序最差路径为381 ps;reg2out(寄存器到输出)时序最差路径为300 ps.在2 GHz的时钟约束下无任何时序违例.

3个子模块conflict_matrix,branch_filter,policy_modifier的面积数据分别为4 607 μm,135 μm,132 μm.

为了进行面积和时序的对比,本文使用DC-Compiler工具在相同的设置和约束下分析了6个执行端口整型执行单元的整体面积约为302 979 μm,本防护设计单元的面积为其1.6%,硬件开销可控.

相比于处理器内部的基本单元,本文描述的防护机制实现在硬件开销上可控,且该防护机制在流水线设计上,并不影响直接影响SMT技术的多端口调度算法时序,在时序角度上不存在设计负担.

6 结 论

本文针对SMT环境下执行端口时间侧信道攻击防护的一些相关工作进行了系统的分析、归纳.同时,本文提出了一种基于动态资源使用策略的SMT环境下执行端口时间侧信道攻击防护方法,在SMT技术对共享数据结构的处理算法上进行改进,将不同的资源处理策略应用到SMT环境下执行端口时间侧信道安全防护中,通过对数据结构共享策略和算法的改进来达到防护效果,可以在SMT技术合理利用共享数据结构的同时达到安全防护的目的.经过充分评估,本文方法从防护有效性上针对已有的攻击方式有很好的防护效果,基本和关闭SMT技术的防护方式等效;在性能开销上远远好于关闭SMT技术的防护方法;在硬件开销角度,本文防护方法的设计简洁,面积和时序影响小,具有一定的实用价值.

作者贡献声明

:岳晓萌提出可动态调整双线程共享的执行端口资源使用策略的防护方法,并进行了实验;杨秋松指导并优化动态资源使用防护策略的算法,审阅文章内容,提出改进建议;李明树指导研究方向和技术方法,审阅文章内容,提出改进建议.

猜你喜欢

线程攻击者信道
基于贝叶斯博弈的防御资源调配模型研究
实时操作系统RT⁃Thread启动流程剖析
上行MIMO-OFDM系统中基于改进GAIC算法的稀疏信道估计
正面迎接批判
一种基于向量回归的无人机通信信道选择方法
关于Wifi机顶盒在高密集区域中信道部署的研究
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
WLAN和LTE交通规则
Java的多线程技术探讨