欢迎来到天天文库
浏览记录
ID:46883624
大小:697.33 KB
页数:12页
时间:2019-11-28
《JIT 引擎触发 RowHammer 可行性研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、JIT引擎触发RowHammer可行性研究R3dF09@腾讯玄武实验室2015.50x00前言2015年3月GoogleProjectZero发表文章ExploitingtheDRAMrowhammerbugtogainkernelprivileges。由于文中提到的缺陷比较难以修复,需要更新BIOS来提高内存刷新的速度,引起了人们的担忧。然而由于RowHammer的运行需要在目标主机上运行特定的汇编代码,实施攻击存在很大的难度。本文旨在研究能否通过Javascript等脚本语言的动态执行触发RowHammer,如果能够成功将极大
2、增加RowHammer的攻击性。为了验证该思路,本文分析了JavaHotspot、ChromeV8、.NETCoreCLR以及FirefoxSpiderMonkey的实现机制并给出了可行性分析。遗憾的是我们在这几个程序中,没有找到最优的利用方式。要么不存在相关的指令,要么指令无法达到RowHammer要求,要么需要有额外的操作更改执行环境才能触发,缺乏实际的攻击意义。0x01RowHammer本节将简要回顾RowHammer存在的原理,其触发的机制,已经在利用时将面临到的一些挑战。1.1What`sRowHammer?RowHam
3、mer是DDR3内存中存在的问题,通过频繁的访问内存中的一行(row)数据,会导致临近行(row)的数据发生位反转。如图1.1(a)所示,内存是由一系列内存单元构成的二维数组。如图1.1(b)所示每一个内存单元由一个晶体管和一个电容组成,晶体管与wordline相连,电容负责存储数据。DRAM的每一行(row)有自己的wordline,wordline需要置高电压,特定行(row)的数据才能够访问。当某一行的wordline置高电压时,该行的数据就会进入row-buffer。当wordline频繁的充放电时,就可能会导致附近row
4、的存储单元中的电容放电,如果在其被刷新之前,损失过多的电压就会导致内存中的数据发生变化。图1.2所示是一块内存,其中一个row为64kb(8KB)大小,32k个row组成一个Bank,8个Bank组成一个Rank,该Rank为2G。此处需要注意不同的Bank有专用的row-buffer,访问不同Bank中的row不会导致wordline的充放电。内存中的电压是不能长期保存的,需要不停的对其进行刷新,刷新的速度为64ms,所以必须在64ms内完成RowHammer操作。图1.1图1.21.2RowHammer触发的方法表1.1所示为
5、GoogleProjectZero所给出的可以触发RowHammer的代码段。表1.1code1a:mov(X),%eax//ReadfromaddressXmov(Y),%ebx//ReadfromaddressYclflush(X)//FlushcacheforaddressXclflush(Y)//FlushcacheforaddressYjmpcode1a其中x,y地址的选择非常重要,x,y必须要在同一个Bank,不同的row中。因为不同的Bank有专用的row-buffer。如果x,y在同一个row中就不会对wordli
6、ne进行频繁的充放电,也就不会触发RowHammer。上述代码只是一种有效的测试方法,但并不是惟一的,归根到底我们所需要的就是在64ms内让一个wordline频繁的充放电。1.3触发RowHammer指令为了频繁的使wordline充放电,必须考虑CPU的Cache,如果当前地址在Cache里面就不会访问内存,也就不会导致wordline的充放电情况。表1.2指令作用CLFLUSH将数据从Cache中擦除PREFETCH从内存中读取数据并存放在Cache中MOVNT*不经过Cache直接操作数据表1.2中的指令都可以用来频繁的访
7、问一个内存地址,并使相应的wordline充放电,如果要触发RowHammer,需要上述指令的配合才能完成。(注:这些指令并不是惟一的触发方法,比如通过分析物理地址和L3Cache的映射关系算法(不同的CPU架构实现可能不同),找到映射到同一个Cacheset的一系列地址,通过重复访问这一系列的地址即可触发RowHammer。)0x02脚本层面触发RowHammerGoogleProjectZero给出的POC是直接以汇编的方式来运行,可以用来验证内存是否存在安全问题。当前脚本语言大都存在JIT引擎,如果能够通过脚本控制JIT引擎
8、直接触发RowHammer,将会具有更大的攻击意义。为了分析其可行性,本节研究了JavaHotspot、ChromeV8等执行引擎的运行机制。2.1JavaHotspotHotspot是OracleJDK官方的默认虚拟机,主要用来解释执行Java字
此文档下载收益归作者所有