Meltdown

Task 1: Reading from Cache versus from Memory

多次运行 CacheTime 程序,访问 Cache 的时间明显短于访问内存的时间,选择80作为阈值

1

Task 2: Using Cache as a Side Channel

2

Tasks 3-5: Preparation for the Meltdown Attack

meltdown攻击需要具有两个条件:

  1. 需要知道secret的地址
  2. secret需要存在cache当中

运行命令之后能够得到相应的地址

3

Task 4: Access Kernel Memory from User Space

4

第二行并不会被执行,发生段错误,这是由于用户级程序无权访问内核空间数据

Task 5: Handle Error/Exceptions in C

5

运行 ExceptionHandling 程序,没有报错,说明执行了我们定义的异常处理函数

Task 6: Out-of-Order Execution by CPU

逻辑过程,首先先将cache进行flush,然后在访问内存的时候触发一个中断异常,然后根据处理函数进行处理。之后回滚到之前的checkpoint,进入else分支当中。然后之后通过reload来查看对应缓存的条目

说明在等待询问数据是否合法的时候,secret已经在cache当中

6

Task 7.1: A Naive Approach

用一个数组记录缓存在 cache 中的数据下标,如果遍历结束后该数组有且只有一个下标值,那么就是 secret 值,但是运行多次,发现没有成功

7

Task 7.2: Improve the Attack by Getting the Secret Data Cached

先将内核数据缓存到 cache 后,然后进行攻击,也没有成功

8

Task 7.3: Using Assembly Code to Trigger Meltdown

结果如下,成功率比较低(循环 400 次),而当我们增减循环次数的时候,成功率会稍微提高一点,降低的时候成功率也是很低的

9

Task 8: Make the Attack More Practical

运行 MeltdownAttack,发现secret 值为 83(S),之后为了打印出所有的字符,我们只需要让他每次攻击地址的步长增加1B就好,最后会得到结果SEEDLabs

10


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

安全攻防综合实验一 上一篇
spectre_attack lab 下一篇