一、题目
幽灵攻击于2017年发现,并于2018年1月公开披露,它利用关键漏洞进行攻击,存在于许多现代处理器中,包括Intel、AMD和ARM处理器。漏洞允许程序突破进程间和进程内的隔离,以便恶意程序可以读取来自无法访问区域的数据。硬件保护不允许这样的访问机制(用于进程间的隔离)或软件保护机制(用于进程内的隔离),但CPU设计中存在漏洞,可能会破坏保护。因为缺陷存在于硬件中,很难从根本上解决问题,除非更换CPU。幽灵和熔断漏洞代表了CPU设计中的一种特殊类型的漏洞,它们还为安全教育提供了宝贵的一课。
本实验的学习目标是让学生获得幽灵攻击的第一手经验。攻击本身非常复杂,因此我们将其分解为几个小步骤,每个步骤都是易于理解和执行。一旦学生理解了每一步,就不难理解了把所有的东西放在一起进行实际的攻击。本实验涵盖了以下内容:
•幽灵攻击
•侧通道攻击
•CPU缓存
•CPU微体系结构内的无序执行和分支预测
二、过程
一、Task 1: Reading from Cache versus from Memory
缓存内存用于以更快的速度向高速处理器提供数据。与主存相比,缓存内存非常快。让我们看看时间差。在代码CacheTime.c中,我们有一个大小为104096的数组。我们首先访问它的两个元素,数组[34096]和数组[74096]。因此,包含这两个元素的页面将被缓存。然后,我们从数组[04096]读取元素到数组[94096],并测量3在内存读取中所花费的时间。需要注意的是,缓存是在缓存块级别完成的,而不是在字节级别。一个典型的高速缓存块大小为64字节。我们使用数组[k4096],因此程序中使用的两个元素不属于同一个缓存块。
使用gcc -march=native CacheTime.c编译
实验结果表明,数组[34096]和数组[74096]的访问速度是否比其他元素更快。
二、Task 2: Using Cache as a Side Cha