Rowhammer 漏洞研究进展*
2020-10-12肖超恩王建新
肖超恩 黄 松 王建新 张 磊
北京电子科技学院,北京市 100070
引言
随着信息技术的快速发展,信息安全问题愈发突出,信息安全涉及到防范个人信息、商业秘密、国家机密泄露等问题。 卡内基梅隆大学和英特尔实验室的合作论文中首次提出一个名为Rowhammer[1]的漏洞,随后Google Project Zero安全团队复现了利用比特位翻转攻击DDR DRAM 内存来获取目标系统内核特权的实验[2]。
内存是计算机系统的关键组成部分,决定着系统的整体性能、能效和可靠性。 由于内存中存储比特位的电容器体积越来越小、排列越来越紧密,每个单元中存储的电荷量越来越少,从而降低了存储的可靠性,使得存储单元更容易受到各种故障影响。 通过快速、重复读取存储器上攻击目标相邻行上的数据,触发存储单元电路中的电容不断充放电,产生一个电场,改变临近内存单元中的数值,使其发生由0 到1 或者由1 到0 的位翻转,攻击者可以利用这种硬件漏洞,通过软件触发的方式来提升权限。 本文就Rowhammer的研究现状、攻击方法以及安全防护措施等展开分析研究。
1 Rowhammer 漏洞产生机理
1.1 动态随机访问内存架构
内存由SRAM(静态随机访问内存) 和DRAM(动态随机访问内存)组成。 其中,DRAM
的组成及内部结构如图1 所示。
该内存条是一块大小为2GB 的双通道内存Dual Inline Memory Module(简称DIMM)。 内存条分正反两面rank1 和rank2,rank1 和rank2 各有8 个128MB 内存颗粒(Chip)共16 个,即:16×128MB =2GB。 每个颗粒内包含8 个bank(独立内存阵列),所有的bank 共享一个输入输出存储控制器(memory I/O controller),在每个bank 读写时并行执行。 bank 内部包含行与列地址解码器、数据缓冲区、传感放大器以及DRAM 内存阵列。 阵列中每个行与列的交点就是内存读写的最小单位(Cell),由一个电容和一个晶体管构成,电容可存储1 比特数据,电容的电势高低分别对应二进制数据0 和1。 每次访问时,行都是通过将其内存单元的内容复制到行缓冲区,然后将内容复制回内存单元(从而充电) 来“激活”的。
DRAM 保存数据具有时限特性,随着时间的推移,电容的电荷会流失从而导致数据丢失,需要周期性按行刷新。 DDR3 标准[3]指定每一行的电荷必须至少每64 毫秒刷新一次。 这种内存刷新间隔是在内存完整性、能量消耗和系统性能之间做出的权衡。 在内存刷新期间,特定的区域不可用,所以更频繁地刷新不仅会消耗更多的能量,而且可能会与合法的内存访问竞争[4]。
1.2 硬件漏洞
通常,在DRAM 内部只要彼此隔离的两个电路组件(如电容器、晶体管、导线)之间有足够强的相互作用,就会发生干扰错误。 市场上流行的DDR3 以及部分DDR4[5]内存在设计时都存在这种硬件缺陷,当内存中的一行基本存储单元被快速重复地读取,电容会不断充电和放电,在此过程中会有一定的概率泄露部分电子给相邻的内存单元,相邻行的内存单元在短时间内积累足够多的电量则会受到非预期的影响从而使存储的数据发生0、1 跳变。
2 国内外研究现状
2.1 漏洞攻击
2.1.1 基于x86 的攻击
2014 年,Y. Kim[1]等人首次提出动态随机存取存储器(DRAM)中的Rowhammer 问题。 随着工艺提升,存储芯片中的晶体管密度的增加,每次访问内存的过程中,电荷有一定概率泄漏到相邻存储单元,容易出现干扰错误(Disturbance Error)。 通过反复访问,即hammer(锤击)一个给定的物理内存行,攻击者可以在相邻行中造成足够大的干扰,导致比特位发生翻转。
2015 年,GoogleProject Zero 团队的两位研究人员M. Seaborn 和T. Dullien[2]提出了Rowhammer 的两种攻击方法。 第一种使用双面锤击来避开NaCl 沙盒(Native Client Sand box),由于NaCl 在运行代码之前会先对其进行静态验证,因此攻击者可以通过修改安全指令来达到攻击目的。 第二种功能更强大,它可以在Linux 上作为普通的x86-64 进程运行,攻击者对页面表条目(PTE)进行锤击,将PTE 更改为指向攻击进程的页表,获取完全读写访问权限,从而对所有物理内存进行完全读写访问,进而接管整个系统。
2018 年,D. Gruss[6]等人针对当前防御技术,提出了单点锤击、操作码翻转和memory waylaying 等新型攻击方法,并证明了该攻击可以使系统的防御对策失效。
2019 年,L. Xu[7]等人提出了Memway 算法,该算法在I/O 开销和速度方面都对memory waylaying 进行了改进。 通过使用Linux tmpfs 和内存交换来管理收回文件,运行时间和磁盘I/O 开销减少了90%。 此外,通过结合使用Memway 和非特权posix fadvise API,二进制重定位步骤的速度提高了100 倍,大大缩短了攻击消耗的时间。
2.1.2 基于ARM 的攻击
2015 年,D. Gruss[8]等人通过JavaScript 代码实现了对易受到Rowhammer 攻击的服务器的远程接管。 由于JavaScript 几乎存在于所有浏览器并默认启用,Rowhammer 攻击可以由网站发起,并且能够在访问该网站的系统上获得root权限。
2016 年,V. van der Veen[9]等人提出了一种使用操作系统提供的功能进行确定性Rowhammer 开发的通用技术(称之为“风水”),使用这种技术可以可靠地控制物理内存,将安全敏感数据(例如页表)放在易受攻击的物理内存位置,并且在移动设备上实现了一种使用不需要权限的用户级应用程序进行Rowhammer 攻击,表明了Rowhammer 攻击在移动平台上的有效性。
2018 年,P. Frigo[10]等人通过使用移动GPU上的WebGL 接口触发Rowhammer 漏洞来接管移动系统。
2018 年,A.Tatar[11]等人通过Remote Direct Memory Access(RDMA)协议触发Rowhammer 来接管远程系统,这种以网卡发起的攻击方法称作Throwhammer,也是第一个基于网络的远程Rowhammer 攻击方式。
2018 年,M. Lipp[12]等人提出了一种名为Nethammer 的新的攻击方法,在处理网络请求时通过内存或flush 指令来攻击系统。
2.1.3 基于虚拟机的攻击
2016 年, Xiao[13]等 人 滥 用 Xen 页 表Hypercall 界面将页目录表(PDT)复制到错误页,然后通过翻转某个页目录项,使用伪造的页表执行虚拟机转义并获得无限的内存访问。 实现了在跨vm 的条件下打破Xen 半虚拟化内存隔离。
2016 年,K. Razavid[14]等人利用页面重复数据删除技术翻转相邻VM(虚拟机)中的密钥。在同一系统上运行的VM 能够接管被攻击的VM,攻击VM 在易受Rowhammer 攻击的内存位置处写入一个已知存在于被攻击VM 中的内存页面,内存重复数据删除功能会将被攻击VM 和攻击VM 的重复页面合并到攻击VM 页面的位置,攻击者就能触发Rowhammer 漏洞实现修改攻击目标的内存地址。 重复数据删除引擎不会检测到对内存的修改,并且被攻击者VM 会使用错误页面而不是其原始页面。
2.1.4 基于服务器的攻击
2020 年,L. Cojocar[15]等人提出了一种确定云服务器是否容易受到Rowhammer 攻击的端到端方法,通过生成最高速率的DRAM 行激活命令和利用逆向工程找到在DRAM 设备内部物理相邻的行来评估Rowhammer 漏洞对云服务器的威胁。
2020 年,A. Kwong[16]等人演示了一种基于Rowhammer 的攻击,该攻击使用用户级别权限从OpenSSH 服务器恢复RSA 2048 位签名密钥。通过读取自己的私有内存,不涉及对目标数据、代码或地址空间的任何访问或修改就能获取机密信息,这种方法称作RAMBleed。
2.2 防护方法
苹果在针对Rowhammer 漏洞问题时提到,由于“Y. Kim 等人的原始研究”,他们提高了内存的刷新率并更新了行业标准Memtest86 程序,该程序用于测试已部署的内存芯片是否存在错误,其中包括了对Rowhammer 的检测。
抵抗Rowhammer 攻击的一种折中方案是合理分配内存单元和物理隔离页面,使Rowhammer不会影响重要页面[17,18]。 F. Brasser[17]等人扩展了操作系统的物理内存分配器,以隔离不同内存页面。 V. van der Veen[19]等人通过将DMA缓冲区与其他非存储数据的缓冲区行(即保护行)隔离,确保任何基于DMA 的攻击只能在保护行中引起Rowhammer 翻转,而不会影响其他包含重要数据的行。
抵抗Rowhammer 的另一种方法是静态分析,用这种方法来识别可能是Rowhammer 攻击的代码段,并在执行之前阻止可疑代码执行[20]。ZebRAM[21]将奇数行作为安全行,偶数行作为不安全行,不安全行作为交换空间,部分安全行作为不安全行交换空间中数据的缓存。 每当不安全行中的数据迁移到安全行时,ZebRAM 都会执行软件完整性检查和错误纠正。
2017 年,石培涛等人提出了一套软件防御机制——RDXA(Rowhammer Defense on Xen Allocator) 系统。 该系统是在虚拟机上进行Rowhammer 感知的内存分配机制,保证不同的虚拟机的内存相互隔离实现针对虚拟机的Rowhammer 攻击防护[22]。
2018 年,Gruss[6]等人将现有的防护方法分为五类,分别是:静态分析[23]、性能计数器监控[21]、内存访问模式监控[24]、内存足迹[7]和物理隔离[17]。
2019 年,M.Kim[25]等人提出了一种不同的防护方法来抵抗rowhammer 漏洞,利用Rowhammer 误差的分布,通过数学方法得出有效的重新映射矩阵并导出,通过两个步骤重新映射整个DRAM 地址,可将错误有效地分布在不同的行和列上,以使攻击单元不会集中在特定的行和列上。 这种重新映射方案减少了单个词中出现多个错误的可能性,因而减少了在单个错误或单个符号校正ECC 下出现的不可校正错误。
2020 年,I. Kang[32]等人提出了CAT-TWO,这是现有的基于计数器的自适应树(CAT)方案的时间窗口优化版本,用于抵抗Rowhammer 攻击。 该方法在DDR4 DRAM 设备上产生的能源开销不到0.7%,并且在最坏的情况下生成不到0.03%的额外激活来刷新目标行,这几乎不会影响系统性能。
3 Rowhammer 攻击方法
3.1 缓存刷新技术
缓存刷新(cache flush)技术主要是通过x86架构中的clflush 指令来刷新缓存,使得访问内存的操作绕开缓存,从而让内存访问直接指向DRAM。
每个DRAM 中都含有许多行(row),访问内存中数据的过程涉及到充放电。 将数据从行传到芯片的行缓冲区叫作放电;把行缓冲区中被读取或者写入的内容重新传回到原来的行单元叫作充电。 这样一个充放电操作会对相邻行产生干扰,在进行多次“激活”的情况下,自动刷新可能会使相邻行的某一位发生翻转。 通常bank 都存在着当前已激活的行,当地址X 和地址Y 位于不同行时,Code Flush 将不会触发激活操作,优先从行缓冲区中读取数据。 如果缺少clflush指令,读取操作(mov)只会作用于CPU 中的Cache。 只有当地址X 和地址Y 指向同一bank上的不同行时,Code Flush 调用clflush 指令移出缓存数据才会重复激活X 和Y。
谷歌安全团队已经在x86 平台上通过使用clflush 指令,成功地触发Rowhammer 漏洞,利用页表上发生的变化获取内核权限。
3.2 内存重复数据删除技术
内存重复数据删除技术[27,28]是一种目前非常流行的通过合并优化来减少内存使用量的存储技术。 为了追求更高的性能,当相同的内容存在于多个内存页面时,管理程序会将这些内存页面进行合并,删除多余的页面,只保留一份,从而消除冗余数据,释放内存。 保留的页面被修改时会触发缺页中断,计算机此时会将此页面“写时复制”,然后在新分配的物理页上进行写入。 然而这种热门技术并不安全,攻击者在同一主机中同时运行两个虚拟机,一个是攻击者虚拟机一个是目标虚拟机,结合二者在内存中的相同部分,放在物理内存中的某个位置上,通过反复“锤击”,攻击者可以获取其相邻的虚拟机内存信息。
3.3 双面锤击
随着DRAM 刷新速率翻倍(从每64ms 到每32ms),攻击者将有一半的时间来释放相邻行的位。 最初的Rowhammer 攻击只是单面攻击,重复访问目标行旁边的一个相邻行。 随后有研究人员发现,通过锤击与目标行相邻的两行,也就是锤击目标行物理位置上的前一行和后一行可以提高攻击的效率。 该技术被称为双面锤击[2]。 与单面攻击相比,双面Rowhammmer 攻击通常只需不到一半的访问次数即可翻转。 双面攻击已被证明可以克服两倍和四倍(16ms)刷新率[24]的缓解策略。
3.4 英特尔SGX
英特尔SGX(SoftwareGuard Extensions)是一种x86 指令集扩展,新增了一组指令集和内存访问机制,这些扩展允许创建一个安全环境enclave,在应用程序的地址空间中划分出一块被保护的安全区域,在不受信任的环境中能保证enclave 内运行数据的完整性和机密性,以免遭受恶意软件的攻击。
研究者在英特尔软件保护扩展(SGX)受保护区(enclave)内部进行攻击,enclaves 中的代码无法读取或检查,因为处理器阻止了对enclaves内存的所有访问。 由于代码加密后只有启动enclaves 才能对其进行解密,开发人员可以隐藏enclaves 内的任意代码。 因此,MASCAT 无法检测到攻击者在enclaves 内进行的任何微架构或Rowhammer 攻击。 处理器在用于特定进程的性能计数器检测中不包括SGX 活动,因此性能计数器也无法检测到这种攻击。 此外还可以利用SGX 针对云服务器进行拒绝服务型攻击。
3.5 操作码翻转技术
在x86 指令集中,操作码中的比特位翻转可产生其他有效操作码。 在指令中只需一个目标比特位翻转,就可以改变二进制文件,由此提供具有root 权限的非特权进程,例如sudo。 这些操作码与原始操作码非常相似,但具有不同的甚至相反的语义。 以x86 操作码JE =0x74 中的单个位翻转为例,该操作码中的单个位翻转可以产生操作码有:JNE =0x75、JBE =0x76、JO =0x70、JL =0x7C、PUSHQ =0x54、XORB =0x34(xor 字节)、HLT=0xF4 等等。 类似地,可以在条件跳转之前的TEST 指令中实现位翻转以达到影响密码验证位置的测试或条件跳转的效果[6]。 成功攻击条件跳转会更改条件,以便将错误的密码视为正确密码。
3.6 页表喷射技术
以前的Rowhammer 攻击技术大都具有随机性,通过触发漏洞来翻转页表条目中的某些位进而实现权限提升。 而页表喷射技术与此不同,这种技术则具有一定的概率性,首先通过在内存中部署大量的页表页,使得至少有一个目标能够位于脆弱的物理页上。 然后攻击该位置产生位翻转,从而使被攻击的目标页表指向一个任意物理内存位置。
3.7 内存伏击技术
通过页表喷射,攻击者用生成的页表副本填充整个内存,达到将页表放置在已知位翻转的物理内存位置,这种方法的弊端是会耗尽整个内存,通过监视内存消耗可以轻松检测到。
内存伏击的优点在于不会耗尽内存,采用优化的触发驱逐的方式,页面缓存中确定性地逐出文件页面,再重新映射到新的随机物理位置。 通过不断驱逐,页面最终被放置在易受攻击的物理位置上。
图3(a)表示刚初始的内存情况,空白方框为未经使用的空闲页面,蓝色方格则表示正被使用的页面,图3(b)表示填充所有空闲页面,同时从内存中驱逐目标页X,图3(c)表示将X 重新加载到内存中的另外一个位置,经过多次访问和驱逐操作,最终让X 被加载到易受攻击的位置A上。 2017 年, Gruss 和Lipp 等人首次提出了内存伏击技术[6],该技术能够实现云端的DDoS 攻击和本地的提升特权攻击。
3.8 Memway 算法
利用Linux tmpfs 来保存逐出的文件,消除了原始Waylaying 算法的大部分磁盘I / O 开销,从而更快地执行页面缓存逐出[7]。 通过对Linux 页面缓存接口进行详细分析,将Memway与posix fadvise API 结合在一起,posix fadvise 是linux 上对文件进行预取的系统调用,使用posix fadvise 快速重新定位目标二进制文件,并重复进行直到多次连续运行都无法生成新地址为止。然后执行Memway 算法,重新排列整个页面缓存,页缓存由此被修改,目标被迫移到新地址,随后的posix fadvise 调用可以再次生成新地址。 使用这种方法可以进行高效的二进制重定位,从而成倍数地缩短总运行时间。
3.9 ECC ploit
宇宙射线和其他外部事件可通过改变电容[29,30]中的电荷水平导致DRAM 单元损坏,为了解决此问题,ECC 内存在数据位旁增加了了额外的奇偶校验位(也称为控制位)来对数据进行错误检查和纠正。 这是一种新的Rowhammer攻击方法[31],Vrije 大学团队通过故障注入和冷启动攻击,对部分内存上的ECC 功能进行逆向工程,发现这部分ECC 内存只能在它监视的内存段中进检测并纠正一个位的翻转。 当在同一内存段中发生两个位翻转时,ECC 内存底层应用程序会崩溃以避免数据损坏或安全性受损。而当一次Rowhammer 攻击导致了三个位同时翻转,ECC 则是不会有任何反应。 虽然ECC 功能一度被看作对rowhammer 攻击免疫,但ECC ploit通过在基于ECC 的系统上重现现有漏洞,证实了在ECC 内存上也可以进行特权升级攻击。
3.10 攻击方法对比
现有的攻击方法虽然种类繁多,但总的来说都实现了以下几个方面:第一方面是快速重复访问内存,触发Rowhammer 漏洞的先决条件就是要快速多次访问内存单元导致足够多的电荷泄露,由于缓存的存在,攻击者采用了不同的手段来绕开缓存或者使其无效,例如使用clflush 指令。 第二方面是获取物理内存相邻关系,为了更精准有效地进行攻击,获取获取目标行与其相邻行的物理地址是十分重要的一环,通常对内存做逆向工程来获取逻辑地址与物理地址之间的映射关系。 第三方面是将敏感信息放在易受影响的位置上,页表喷射、内存伏击等方法都是为了实现该目标,从而更加有针对性地进行攻击。 表1 对几种攻击方法做了详细对比。
表1 Rowhammer 攻击技术对比
4 Rowhammer 防御技术
4.1 基于检测Rowhammer 漏洞的防御技术
4.1.1 静态分析
基于静态分析可以访问攻击(二进制)代码,在将软件添加到应用商店之前,如果检测有效,则用户不再受到攻击。 Irazoqui 等人使用一种自动静态代码分析工具MASCAT 来做静态分析,用于大规模检测微架构攻击。
4.1.2 性能计数器监控
性能计数器可用来监控包括攻击者程序的操作,Rowhammer 检测的典型参数是缓存命中数和缓存失效数。 使用性能计数器监视进程的可疑缓存活动,然后在指令指针附近搜索clflush指令来检测攻击。 Rowhammer 的底层Flush +Reload 循环也被缓存攻击防御技术检测到。
4.2 基于抵抗Rowhammer 漏洞的防御技术
4.2.1 G-CATT
由于Rowhammer 攻击需要翻转页表或其他内核页面中的比特位来接管系统,内存分配器可以防止用户页面和内核页面的物理接近。 GCATT 是一种替代内存分配器,通过在物理内存中留下间隙来隔离物理内存中的用户和内核空间。 如果隔离有效,则用户无法再接管内核和系统,确保攻击者无法利用内核内存中的位翻转来升级特权。
4.2.2 禁用内存重复数据删除技术
内存重复数据删除技术虽然可以减少磁盘占用,优化存储,但也容易被攻击者利用,进行Rowhammer 攻击。 通过禁止使用内存重复数据删除,防止Rowhammer 攻击利用这些功能,有效抵抗Rowhammer 漏洞攻击。
4.2.4 DRAM 地址重映射
将行错误分布在不同的DRAM 行和列中,以使攻击单元不会集中在特定的行和列上。通过利用Rowhammer 误差的分布,可以通过数学方法得出有效的重新映射矩阵。 使用导出的矩阵,通过两个步骤重新映射整个DRAM 地址。 实验结果表明,导出的矩阵可以有效地分配Rowhammer 误差,大大降低错误发生的概率。
4.2.5 PARA 机制
PARA[32](概率性相邻行激活)是一种识别Rowhammer 攻击并刷新其相邻行的低性能开销机制,原理是每次访问内存中的一行时,它的相邻行也会以一个较小概率p 刷新。 如果某一行受到攻击被反复读取,那么从统计学上可以确定,该行的相邻行最终也会被刷新。 该方法省去了计算某行被访问的次数或被攻击者的地址的昂贵开销,对性能影响微乎其微,能够有效抵御Rowhammer 攻击。
4.3 基于消除Rowhammer 漏洞的防御技术
4.3.1 提高刷新速率
芯片通过BIOS 更新使得刷新速率提高了一倍,由于Rowhammer 攻击必须在两次内存刷新的时间间隔内发生,所以可以提高Rowhammer攻击的门槛,但这不足以防止所有针对DRAM的攻击。 由于DRAM 刷新已经成为能耗、性能和服务质量的重要负担,如果再次提升内存刷新速率,会对系统性能造成显著的影响。 但是,提高刷新率可能是Rowhammer 漏洞最实用的即时解决方案,它不需要对系统进行任何重大的更改。
4.3.2 禁止使用cache 相关指令
快速激活DRAM 中每个bank 中的行以触发rowhammer 漏洞,需要用到基于x86 的处理器上的clflush 指令来绕过设备中的高速缓存机制。 谷歌的沙箱等系统已经禁止用户级别访问x86 clflush 缓存刷新指令,这对抵御许多针对x86 架构的攻击是非常有效的。
4.3.3 ECC(error corrected code)技术
ECC[1],即错误纠正码,这是一种基于硬件的防御技术,利用差错检测和修正算法来检验和纠正数据翻转错误,相比奇偶校验,ECC 功能更强、设 计 更 精 巧。 由 于 使 用 ECC 来 纠 正Rowhammer 错误的会增加能量、成本和DRAM容量开销,通常在服务器上才使用该功能。 而且ECC 能够快速地纠正1 位的错误和检测2 位错误,但无法纠正超过1 位的错误也不能检测高于2 位的错误,有一定的局限性。
4.3.4 内存访问模式监控
由于Rowhammer 攻击需要在一个内存行上存在大量缓存失效,并且在同一DRAM bank中的其他行上需要大量的访问。 ANVIL[24]通过使用现有的硬件性能计数器跟踪DRAM 访问的位置来检测行锤攻击,检测分为两个阶段检: 首先,它监视最后一级缓存失效率。 接下来,如果缓存失效率超过阈值,ANVIL 使用Intel PEBS 监视缓存失效的地址, 并将Rowhammer 攻击与正常工作负载区分开。 对于每个候选行,检查“来自同一DRAM bank 的其他行访问样本”。 只有当对同一个bank 的其他行有足够多的访问时,才会检测到攻击并刷新被攻击的行。
4.4 防御技术对比
基于Rowhammer 漏洞的防御技术要么不实用,要么需要改变硬件,想要应用于实际有极大的限制,防御技术具体优缺点如表2 所示。 相比较而言,基于检测Rowhammer 漏洞的防御技术和基于抵抗Rowhammer 漏洞的防御技术更加的实用,并且两种类型的防御技术可以结合使用来升级防御手段,提高攻击门槛,获得更好的防御效果。 有许多防御技术需要牺牲性能或存在诸多限制,攻击者在不断更新攻击手段,现有的一些防御技术也在被证实并不安全,例如之前认为ECC 内存和手机内存都不受此漏洞影响,然而研究证明通过改进的攻击技术能够成功进行攻击。
表2 Rowhammer 防御技术对比
5 结语
随着工艺提升,内存的体积越来越小,由设计缺陷引起的Rowhammer 漏洞无法通过简单的方法彻底消除,而内存在每一台计算机中都是重要的组成部分,所以对于Rowhammer 漏洞研究有着十分重要的现实意义。 随着系统安全研究人员对Rowhammer 的了解更多,并且由于技术扩展问题而使Rowhammer 继续从根本上影响存储芯片,研究人员和从业人员将开发各种类型的攻击,以在各种情况下以多种创新方式利用Rowhammer。 同时随着Rowhammer 漏洞的深入挖掘,更多的研究人员也会专注于研发新的防御手段,以最大程度地减少暴露给软件(以及公众)的此类硬件故障。 当前针对Rowhammer 攻击,研究的主要方向是如何提高攻击的稳定性、成功率和降低时间消耗,使得攻击者能够更好的定向地攻击内存中某个特定位置。 而防御技术的发展分为两个方面,第一是短期的缓解措施,能够应对当前的攻击手段,包括增加限制条件、提高攻击的不稳定性和增加时间消耗等;第二是研究长期的解决方案,旨在消除硬件漏洞,受实际情况和现有技术限制,该方向的研究还有很长的路要走。 随着存储器技术向更高密度的扩展,密度越高受此漏洞影响越大,其他类型的存储器(例如NAND 闪存或相变存储器)中也可能潜藏着类似的漏洞,这些漏洞可能会威胁到安全系统的基础[32],对于Rowhammer 漏洞的深入研究对防范以后可能出现的此类漏洞有着深远意义。我国对于Rowhammer 漏洞的研究还处于起步阶段,针对如何利用该漏洞和防护以及对于发现和解决由于技术扩展和硬件设计而可能增加的其他潜在漏洞还有很大的研究空间,对可靠和安全的存储系统进行研究有着光明的前景。