DRAM的排锤效应(Row hammer effect )

排锤效应        

        Row hammer排锤(也写作 rowhammer)是一种安全漏洞,它利用动态随机存取存储器 (DRAM) 中的意外和不良副作用,其中存储单元通过泄漏电荷在彼此之间进行电气交互,可能会更改附近的内容在原始内存访问中未寻址的内存行。这种对 DRAM 内存单元之间隔离的规避是现代 DRAM 中高单元密度的结果,并且可以通过特制的内存访问模式来触发,这些模式可以多次快速激活相同的内存行。

        排锤效应已被用于一些计算机安全漏洞提权,并且理论上基于网络的攻击也是可能的。当然也存在不同的基于硬件的技术来防止发生 排锤效应,包括某些处理器和 DRAM 内存模块类型所需的支持。

  DRAM 组织的高级说明,其中包括存储单元(蓝色方块)、地址解码器(绿色矩形)和读出放大器(红色方块)

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

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

概述

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

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

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

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

        随着 DRAM 供应商部署缓解措施,模式必须变得更加复杂才能绕过 Rowhammer 缓解措施。最近的 Rowhammer 模式包括非均匀的、基于频率的模式。这些模式由许多双面攻击者对组成,其中每个攻击者都以不同的频率、相位和幅度进行锤击。使用此功能并将模式与 REFRESH 命令同步,可以非常有效地确定缓解措施无法再提供保护的“盲点”。基于这个想法,学者们构建了一个名为 Blacksmith  的 Rowhammer 模糊器,它可以绕过所有 DDR4 设备上的现有缓解措施。

缓解方法

        存在不同的方法来或多或少成功地检测、预防、纠正或减轻排锤效应。测试表明,提供单错误纠正和双错误检测 (SECDED) 功能的简单纠错代码无法纠正或检测所有观察到的干扰错误,因为其中一些错误每个存储字包含两个以上的翻转位。 此外,研究表明,精确定位的三位排锤翻转可以防止 ECC 内存注意到修改。

        一个不太有效的解决方案是引入更频繁的内存刷新,刷新间隔比通常的 64 ms 短,,但这种技术会导致更高的功耗和增加的处理开销;一些供应商提供了实现此类缓解措施的固件更新。一种更复杂的预防措施对频繁访问的内存行执行基于计数器的识别,并主动刷新其相邻行;另一种方法对与被访问的行相邻的存储器行进行额外的不频繁的随机刷新,而不管它们的访问频率如何。研究表明,这两种预防措施对性能的影响可以忽略不计。

        自 Ivy Bridge 微架构发布以来,英特尔至强处理器支持所谓的伪目标行刷新 (pTRR),可与符合 pTRR 的 DDR3 双列直插内存模块 (DIMM) 结合使用,通过以下方式减轻排锤效应:自动刷新可能的受害者行,不会对性能或功耗产生负面影响。当与不兼容 pTRR 的 DIMM 一起使用时,这些 Xeon 处理器默认会以两倍于通常频率的频率执行 DRAM 刷新,这会导致内存访问延迟稍高,并可能使内存带宽减少高达 2-4%。

        JEDEC发布的 LPDDR4 移动内存标准包括对所谓目标行刷新 (TRR) 的可选硬件支持,可防止排锤效应,而不会对性能或功耗产生负面影响。 此外,一些制造商在他们的 DDR4 产品中实现了 TRR,,尽管它不是 JEDEC 发布的 DDR4 内存标准的一部分。  在内部,TRR 通过计算行激活的数量并比较来识别可能的受害者行它针对预定义的芯片特定最大激活计数 (MAC) 和最大激活窗口 (t MAW ) 值,并刷新这些行以防止位翻转。 MAC 值是特定 DRAM 行在其相邻行被识别为受害行之前的时间间隔内可能遇到的最大行激活总数,该时间间隔等于或短于 t MAW 时间量;如果某行的两个相邻行的行激活总和在 t MAW 时间窗口内达到 MAC 限制,TRR 也可能会将其标记为受害行。研究表明,TRR 缓解措施部署在 DDR4 UDIMM 上2019 至 2020 年间生产的设备中的 LPDDR4X 芯片无法有效防御 Rowhammer。

        由于需要大量快速执行 DRAM 行激活,排锤利用会发出大量未缓存的内存访问,从而导致缓存未命中,这可以通过使用硬件性能计数器监控异常峰值的缓存未命中率来检测。

        2013年12月3日发布的MemTest86内存诊断软件5.0版增加了排锤测试,用于检查电脑RAM是否容易受到干扰错误,但只有在电脑启动UEFI时才有效;没有 UEFI,它会启动旧版本,无需进行锤子测试。

影响

      内存保护是防止进程访问尚未分配给每个进程的内存的一种方式,是大多数现代操作系统背后的概念之一。通过将内存保护与其他安全相关机制(例如保护环)结合使用,可以实现进程之间的特权分离,其中程序和计算机系统通常被划分为仅限于执行特定任务所需的特定特权的部分。任务。使用权限分离还可以通过将计算机安全攻击的影响限制在系统的特定部分来减少计算机安全攻击造成的潜在损害的程度。

        干扰错误(在上一节中进行了解释)通过在非常低的硬件级别上“短路”它们,有效地破坏了各个内存保护层,实际上创建了一种独特的攻击向量类型,允许进程更改主内存任意部分的内容通过直接操纵底层内存硬件。相比之下,缓冲区溢出等“传统”攻击向量旨在规避软件级别的保护机制,通过利用各种编程错误来实现更改否则无法访问的主内存内容。

研究开发

        2014 年 6 月发表的对行锤效应的初步研究描述了干扰错误的性质,并指出了构建攻击的可能性,但没有提供任何有效安全漏洞的示例。随后的 2014 年 10 月研究论文并不意味着存在由行锤效应引起的任何安全相关问题。  

        2015 年 3 月 9 日,Google 的零项目披露了两个基于行锤效应的工作权限提升漏洞,确立了其在 x86-64 架构上的可利用性质。已披露的漏洞之一针对的是 Google Native Client (NaCl) 机制,用于在沙箱中运行 x86-64 机器指令的有限子集,利用行锤效应逃离沙箱并获得以下能力:直接发出系统调用。这个 NaCl 漏洞(编号为 CVE - 2015-0565)已通过修改 NaCl 得到缓解,因此它不允许执行 clflush (缓存行刷新 )机器指令,此前认为该指令是构建所需的有效的排锤攻击。

        Project Zero 披露的第二个漏洞在 x86-64 架构上作为非特权 Linux 进程运行,利用行锤效应来不受限制地访问计算机中安装的所有物理内存。通过将干扰错误与内存喷射相结合,该漏洞利用能够更改虚拟内存系统用于将虚拟地址映射到物理地址的页表条目,从而导致漏洞利用获得不受限制的内存访问。由于其性质以及 x86-64 架构无法使 clflush 成为特权机器指令,因此在不使用具有内置行锤预防机制的硬件的计算机上很难缓解此漏洞。在测试漏洞利用的可行性时,零号项目发现,29 台测试的笔记本电脑中约有一半遇到了干扰错误,其中一些错误发生在易受攻击的笔记本电脑上,在运行行锤诱导代码不到五分钟的时间内;测试的笔记本电脑是在 2010 年至 2014 年之间制造的,并且使用非 ECC DDR3 内存。

        2015 年 7 月,一组安全研究人员发表了一篇论文,描述了一种独立于架构和指令集的利用行锤效应的方法。这种方法不是依赖 clflush 指令来执行缓存刷新,而是通过使用精心选择的内存访问模式导致非常高的缓存驱逐率来实现未缓存的内存访问。尽管处理器之间的缓存替换策略不同,但此方法通过采用自适应缓存逐出策略算法克服了架构差异。此方法的概念证明既作为本机代码实现又作为纯在 Firefox 39 上运行的 JavaScript 实现。JavaScript 实现称为 Rowhammer.js, 使用大型类型数组,并依赖于使用大页面的内部分配;因此,它展示了对非常低级别的漏洞的非常高级的利用。        

        2016 年 10 月,研究人员发布了 DRAMMER,这是一款 Android 应用程序,它使用排锤结合其他方法,在几款流行的智能手机上可靠地获得 root 访问权限。 该漏洞被确认为 CVE - 2016-6728  谷歌在一个月内发布了缓解措施。然而,由于攻击可能实现的一般性质,有效的软件补丁很难可靠地实现。截至 2018 年 6 月,学术界和工业界提出的大多数补丁提案要么部署不切实际,要么不足以阻止所有攻击。作为缓解措施,研究人员提出了一种轻量级防御,通过使用保护行隔离 DMA 缓冲区来防止基于直接内存访问 (DMA) 的攻击。

        2021 年 5 月,Google 研究团队宣布了一项新漏洞 Half-Double,该漏洞利用了一些较新 DRAM 芯片恶化的物理特性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北行黄金橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值