首页 > 菜鸟学院 > DRAM芯片内核提权漏洞解析

DRAM芯片内核提权漏洞解析

时间:2015-03-13 | 来源:互联网 | 阅读:152

话题: 漏洞

在Yoongu Kim et al的论文中谈到了关键的原理:

code1a:

  mov (X), %eax  // Read from address X   mov (Y), %ebx  // Read from address Y   clflush (X)  // Flush cache for address X   clflush (Y)  // Flush cache for address Y   jmp code1a

两个因素导致位的变化

1,地址选择:地址X和地址Y必须印射到内存的不同row但是又是在同一bank上。

每个DRAM芯片包含了很多行(row)的单元。访问一个byte在内存中涉及到将数据从row传输到芯片的"row buffer"中(放电操作),当读取或者写入row buffer的内容后,再把row buffer内容传输到原来的row单元里(充电操作)。这种”激活“一个row的操作(放电和充电)可以干扰到临近的row。如果这样做足够多的次数,临近row的自动刷新操作(一般是每64ms)可能会让临近row的位产生变化。row buffer作为缓存,如果地址X和Y指向相同的row,那code1a将会从row buffer中读取信息而不用任何”激活“操作。

每个DRAM的bank都有自己的"当前已激活的row",所以如果地址X和地址Y指向不同的bank,code1a将会从那些bank的row buffer中读取信息而不用反复的激活row。所以,如果地址X和地址Y指向同一bank上不同的row,code1a会导致X和Y不断的被激活,这被称为ROWHAMMERING。

2,绕过缓存:没有了code1a中的CLFLUSH指令的话,内存读操作(mov)只会操作CPU的缓存。CLFLUSH刷新缓存的操作强制让内存的访问直接指向DRAM,而这会导致不断有row被重复的激活。


湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网