微架构泄漏模板及其在基于缓存的侧信道中的应用
概述
现代处理器体系结构的复杂性导致了其组件之间的复杂交互,这样的交互可能出现侧信息的泄露。想要利用这些侧信息需要对目标组件有着详细的了解,然而对许多CPU来说,这些详细信息并不会公开。
因此,2022年Ahmad Ibrahim等人在CCS会议上讨论了计算机系统中基于缓存的侧信道攻击问题,并设计实现了一个框架,可以从已知会导致泄露的代码序列中派生出“微架构泄露模板”,从而去识别和分析不同的高速缓存侧信道攻击。
泄露模板
生成泄露模板的框架被命名为Plumber,其总体架构如下图所示。假设分析人员有具体应用于特定硬件架构的代码示例,这些代码在微架构上针对于不同的输入有不同的行为,从而暴露出一些可能泄露敏感信息的行为。
Plumber总体架构
根据生成式测试用例规范(GTS), Plumber将泄漏代码片段的抽象描述作为输入,分析人员的目标是利用这种行为从实际应用程序中捕捉泄漏信息。那么,为了实现这一点,分析人员需要识别目标应用程序中的代码段,这些代码段在某些可控分析条件下触发某些微架构行为。由此,我们需要从具体的代码序列中进行抽象,找到:(1)一个广义的代码序列,(2)一组相关的属性,(3)暴露特定侧信息的属性之间的关系。我们把这样的信息称为泄漏模板或LT。
我们把LT定义为一个三元组:(P(A),B,R(A,b)),其中,P(A)是一个带有一组属性的代码模板,B是一组观察到的不同行为,P(A)是A上的谓词集。
在GTS中,指令M表示内存加载,指令A表示算术或逻辑操作,指令N表示nop指令,一些常见的符号表示如下所示:
- Mt1,s1:用来自标记为t1和缓存集为s1的地址的加载
- [ ]dirattr,n,?:重复指令?次,同时将指令dir的属性attr增加?的值
- 通配符#n:扩展为?个不执行内存操作的任意指令
- 洗牌()!:生成GTS的所有可能排列
- 子集()⊂:生成GTS的所有可能子集,而忽略那些具有类似指令的子集
Plumber
在Plumber的总体结构中,输入为GTS,它直观地定义了要在(突变的)操作数上执行的指令序列,以及要监视的微架构组件(例如,缓存的内容)。我们通过描述从GTS派生LT所需的步骤来介绍每个组件:
1)预处理器解析GTS并将结果转发给Testcase实例器。
2)实例器然后根据解析过的预处理GTS系统地生成测试用例。
3)Runner在受控环境中执行每个测试用例并将行为返回给分类器。
4)分类器根据程序的行为对程序进行分类存储。
5)分析器解释分类行为,并返回触发特定微体系结构行为的属性关系。
案例研究
首先,明确两个概念:第一个是Previction,是最近发现的一种未被广泛记录的处理器行为,即在相应的缓存集满之前删除缓存;第二个是Prefetching,一种预取数据的行为,允许处理器检测常规的内存访问模式,并通过主动地继续该模式来用预期的地址填充缓存。
1、Previction
首先,针对Previction做了若干实验,来验证什么样的测试用例可以触发Previction这种行为。
比如:验证指令顺序对Previction的影响,创建GTS,生成包含所有可能指令序列的测试用例,如(Mt1,s1 Mt1,s1 Mt1,s1 Mt2,s1 Mt3,s2),在这个GTS中,前三个load(记为1、2和3)的目标是相同的缓存,但偏移量不同,其排列如下表所示,其中,PR表示发生了Previction,nPR表示没有发生,得出结论有以下:
1)标签位置:标签位置之间的关系影响previction。只有三个连续加载指令且标记相同的程序才会引起预防。
2)标签值:三个连续加载的确切标签值和位置并不重要。
3)字偏移量:根据加载地址的字节(字)偏移量, previction行为不同。在我们的示例中,多个具有相同缓存集和标记顺序的程序同时位于PR和nPR中,例如2-1-3-5-4 (PR)和2-3-1-5-4 (nPR)。
示例排列结果(带下划线表示来自相同标签地址的加载)
2、Prefetching
针对Prefetching也做了若干实验,来验证什么样的测试用例可以触发Prefetching这种行为。
比如,验证中间指令对Prefetching的影响,创建GTS,生成包含具有不同数量中间算术指令的程序的测试用例,对于0<?≤100和0<?≤30,我们创建下图所示测试用例。结果表明,在连续的加载之间添加指令可以改变Prefetching地址的数量,比如,在两个连续的加载之间添加3条算术指令可以将Prefetching地址的数量从3个增加到4个,添加4个算术指令将增加到7个,加上5个指令将它再次减少到3个。
中间指令测试用例
总结
此篇论文主要针对于计算机系统中基于缓存的侧信道分析设计了一个Plumber框架,这个框架可以从已知会导致泄漏的单个代码序列中派生出通用的泄漏模板。Plumber通过探索微架构优化的不同行为,在易受攻击的代码输入上得出充分条件,从而触发特定的行为去识别和分析不同的高速缓存侧信道分析。
参考资料
[1] IBRAHIM A, NEMATI H, SCHLÜTER T, 等. Microarchitectural Leakage Templates and Their Application to Cache-Based Side Channels[C/OL]//Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security. 2022. http://dx.doi.org/10.1145/3548606.3560613. DOI:10.1145/3548606.3560613.
