Meltdown
Task 1: Reading from Cache versus from Memory
多次运行 CacheTime 程序,访问 Cache 的时间明显短于访问内存的时间,选择80作为阈值
Task 2: Using Cache as a Side Channel
Tasks 3-5: Preparation for the Meltdown Attack
meltdown攻击需要具有两个条件:
- 需要知道secret的地址
- secret需要存在cache当中
运行命令之后能够得到相应的地址
Task 4: Access Kernel Memory from User Space
第二行并不会被执行,发生段错误,这是由于用户级程序无权访问内核空间数据
Task 5: Handle Error/Exceptions in C
运行 ExceptionHandling 程序,没有报错,说明执行了我们定义的异常处理函数
Task 6: Out-of-Order Execution by CPU
逻辑过程,首先先将cache进行flush,然后在访问内存的时候触发一个中断异常,然后根据处理函数进行处理。之后回滚到之前的checkpoint,进入else分支当中。然后之后通过reload来查看对应缓存的条目
说明在等待询问数据是否合法的时候,secret已经在cache当中
Task 7.1: A Naive Approach
用一个数组记录缓存在 cache 中的数据下标,如果遍历结束后该数组有且只有一个下标值,那么就是 secret 值,但是运行多次,发现没有成功
Task 7.2: Improve the Attack by Getting the Secret Data Cached
先将内核数据缓存到 cache 后,然后进行攻击,也没有成功
Task 7.3: Using Assembly Code to Trigger Meltdown
结果如下,成功率比较低(循环 400 次),而当我们增减循环次数的时候,成功率会稍微提高一点,降低的时候成功率也是很低的
Task 8: Make the Attack More Practical
运行 MeltdownAttack,发现secret 值为 83(S),之后为了打印出所有的字符,我们只需要让他每次攻击地址的步长增加1B就好,最后会得到结果SEEDLabs
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!