Back
Featured image of post Spectre&Meltdown

Spectre&Meltdown

OS

Spectre&Meltdown

这是一种利用现代处理器特性来“窃取”内存中重要信息的漏洞。

Meltdown

  1. 诱使CPU在乱序执行的基础上将高权限的data信息放置于cache中
    1. 首先有一个数组,直接访问它的第data*4096个index处的元素
    2. 这样这个index处的元素会被放进cache中
  2. 循环遍历这个数组,当遍历到第data*4096个index处元素时,载入速度明显变快,这就说明这里是当时载入cache的元素
  3. 取到data*4096这个index就取到了data

假设data是一个内核内存空间内的数据,我们就get到了机密的内核数据,这都依赖于cpu的乱序执行:

exception(dont have priority to access))
access(array[data*4096])

乱序执行使得在指令生效前,access运行在了exception之前,虽然指令未生效(寄存器状态等未变),但cache内却有了array[data*4096]这个元素

Spectre

Spectre基本原理与Meltdown类似,但他更强

Meltdown一旦被从根本上避免就无法使用,比如内核和用户使用不同的页目录寄存器等

Spectre并非依赖于乱序执行,而是依赖于分支预测。

分支预测也会使cpu提前跑一下cpu认为正确的分支,尽管他不一定真的是接下来要执行的,同样会在cache里留下痕迹。

但他要求代码有如下形式:

if(index1<array_a_size) {
  index2=array_a[index1];
  if(index2 < array_b_size);
     value = array_b[index2];
}

通过控制index1的长度,让array_b的特定下标的数据Cacheline被点亮,如果有办法访问一次array_b的全部内容,我们就可以窃取到index1这个值。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy