Rowhammer Test for DRAM

参考:

https://zh.wikipedia.org/wiki/Rowhammer

https://en.wikipedia.org/wiki/Row_hammer

https://www.4hou.com/mobile/11753.html

http://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf

https://github.com/google/rowhammer-test

https://vvdveen.com/publications/drammer.pdf

https://www.vusec.net/projects/glitch/#technicals

https://www.cs.vu.nl/~herbertb/download/papers/throwhammer_atc18.pdf

https://www.vusec.net/projects/drammer/

https://www.vusec.net/wp-content/uploads/2018/05/glitch.pdf

https://securityaffairs.co/wordpress/72377/hacking/throwhammer-rowhammer-attack.html

https://securityaffairs.co/wordpress/72131/hacking/glitch-attack-amndroid.html

https://securityaffairs.co/wordpress/34717/hacking/dram-rowhammer-flaw-exploit.html

https://securityaffairs.co/wordpress/52677/hacking/drammer-android-attack.html

 

RAMpageæ»å»ï¼å次å©ç¨å®åDRAM RowHammeræ¼æ´

自2012年起,Rowhammer漏洞是新一代DRAM(dynamic random access memory,动态随机存取存储器)芯片的硬件可靠性问题,当快速、重复访问一行内存时会造成邻接行的位(比特)翻转,比如比特值从1变成0或从0变成1。

2015年,Google Project Zero的安全研究人员成功证明了利用该硬件漏洞在有漏洞的Windows和Linux主机上进行权限提升的方法。谷歌的研究人员还介绍了一种双侧Rowhammer攻击,这种攻击可以增加两侧位翻转到概率。

触发Rowhammer漏洞非常简单,但成功地利用该漏洞有点难,因为内存中大多数的位是与攻击者无关的,而这些无关位的翻转可能会导致内存破坏。在DRAM中随机的位置上读取或写入数据是不足以导致目标内存页位翻转的。

想要成功地利用Rowhammer,攻击者必须能够诱使系统加载目标内存页到DRAM中与攻击者所有的物理内存行邻接的行中。

目前已有的Rowhammer攻击有GLitch、Throwhammer、Nethammer等。

· Glitch:该技术使用嵌入的GPU来实施针对安卓设备的Rowhammer攻击。

· Throwhammer:利用已知的DRAM漏洞利用使用远程直接内存访问(remote direct memory access,RDMA)信道通过网卡发起攻击,这是第一个基于网络的远程Rowhammer攻击方式。

· Nethammer:也是一个基于网络的远程Rowhammer攻击方法。在处理网络请求时通过未缓存的内存或flush指令来攻击系统。

 

 

RAMpageæ»å»ï¼å次å©ç¨å®åDRAM RowHammeræ¼æ´

 

Rowhammer是对动态随机存取存储器(DRAM)中会发生的一种意外情况的称呼。这种意外会导致存储器单元泄露电荷并可能造成比特翻转,这是由于现在DRAM单元的高密度造成的。Rowhammer可以通过特制的存储器访问模式来触发,该访问模式会快速激活相同的存储器行多次。一些高端芯片采用ECC(error-correcting code)技术来防止这个问题的发生。而一种称为ECCploit的攻击方法可以部分的绕过ECC保护机制[1]

上图为DRAM组织的高级示意图,其中包括存储单元 (蓝色正方形), 地址解码器 (绿色矩形)和读出放大器(红色正方形)。

动态RAM (DRAM)中,存储数据的每一位都占用一个单独的存储单元,该存储单元由一个电容器和一个晶体管电实现。 电容器的充电状态(充电或放电)决定了DRAM单元是将“ 1”还是“ 0”存储为二进制值 。 大量的DRAM存储单元被包装到集成电路中 ,并结合了一些其他逻辑来组织这些单元,以进行读取,写入和刷新数据。 [11] [12]

存储单元(图中的蓝色方块)进一步组织成矩阵,并通过行和列进行寻址。 应用于矩阵的内存地址分为行地址和列地址,它们由行和列地址解码器处理 (在图中分别为垂直和水平绿色矩形)。 在行地址为读取操作选择了该行之后(该选择也称为行激活 ),该行中所有单元的位都被传送到形成行缓冲器的读出放大器中(图中的红色方块),从中使用列地址选择确切的位。 因此,读取操作具有破坏性,因为DRAM的设计要求在通过将单元电荷转移到行缓冲器中读取了存储单元的值之后重写存储单元。 写操作以类似的方式对地址进行解码,但是由于设计的原因,必须更改整个行才能更改单个位的值。 

由于使用具有自然放电速率的电容器来存储数据位,因此DRAM存储单元会随着时间的流逝而失去其状态,并且需要对所有存储单元进行定期重写 ,这是称为刷新的过程。 作为设计的另一个结果,DRAM存储器容易受到存储数据随机变化的影响,这被称为软存储错误,并归因于宇宙射线和其他原因。 有多种技术可以抵消软存储器错误并提高DRAM的可靠性,其中最常使用的是纠错码(ECC)存储器及其高级变体(例如锁步存储器 )。

 

上图为快速行激活(黄色行)可能会更改受害者行(紫色行)中存储的位的值。

DRAM集成电路( IC )的密度增加导致能够存储较小电荷的物理上较小的存储单元,从而导致较低的操作噪声容限 ,存储单元之间的电磁相互作用的速率增加以及数据丢失的可能性更大。 结果,已经观察到干扰错误 ,这是由于单元相互干扰而引起的,并且表现为受影响的存储单元中存储的位的值的随机变化。 人们对干扰错误的认识可以追溯到1970年代初,而Intel 1103是第一个商用DRAM IC。 从那时起,DRAM制造商就采用了各种缓解技术来抵消干扰错误,例如改善单元之间的隔离度并执行生产测试。 但是,研究人员在2014年的分析中证明,2012年和2013年制造的商用DDR3 SDRAM芯片易受干扰错误的影响,同时使用术语行锤来命名导致观察到位翻转的相关副作用。 

在DDR3存储器中发生行锤效应的机会[16]主要归因于DDR3的高存储单元密度和单元之间相关联的交互作用的结果,而快速DRAM行激活已被确定为主要原因。 频繁的行激活会在关联的行选择线上引起电压波动,已观察到这种波动会导致属于附近(在大多数情况下为相邻)存储行(称为受害行 )的电容器产生高于自然的放电速率; 如果受影响的存储单元在丢失太多电荷之前没有刷新 ,则会发生干扰错误。 测试表明,在执行约139,000次后续存储行访问(使用缓存刷新 )后,可能会观察到干扰错误,并且每1700个单元中最多有一个存储单元可能受到影响。 这些测试还表明,干扰错误率不受环境温度升高的实质影响,而取决于DRAM的实际内容,因为某些位模式会导致更高的干扰错误率。[1] [2] [15] [17]

一种称为双面锤击的变体涉及有针对性地激活受害行周围的两个DRAM行:在本节提供的插图中,此变体将激活两个黄色行,以引起紫色行中的位翻转。案件将是受害者行。 测试表明,与仅激活受害行的相邻DRAM行之一的变体相比,此方法可能会导致更高的干扰错误率。

 

 

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值