解密DRAM读干扰:RowHammer和RowPress现象

_

拨开 DRAM 读干扰迷雾:RowHammer 与 RowPress 现象

动态随机存取存储器(DRAM)是现代计算的核心,作为智能手机至服务器的多数系统的首要内存发挥着作用。尽管其普及且可靠,但 DRAM 并非没有怪癖。其中最引人入胜且最具挑战性的怪癖之一便是 DRAM 读干扰现象,该现象可能导致性能下降甚至数据损坏。近年来,该问题的两种特定表现形式——RowHammer 和 RowPress——受到了广泛关注。理解这些现象对于任何处理内存密集型应用或系统的从业者都至关重要。

DRAM 的基础知识

在深入探讨读干扰的具体细节之前,简要回顾一下 DRAM 的工作原理将有所帮助。DRAM 将数据存储在由电容器和晶体管组成的单元中。由于电容器会随时间自然泄漏电荷,DRAM 需要周期性刷新周期来维持数据完整性。这些刷新周期涉及读取内存的每一行,然后将其写回,这个过程被称为“刷新”。

然而,这种刷新机制并非没有副作用。当读取一行时,附近行的电荷可能会受到影响,从而导致所谓的“读干扰”。这是 DRAM 物理设计的自然结果,通常通过精心设计的电路和刷新算法来缓解。但在特定条件下,这些干扰可能变得显著,进而引发 RowHammer 和 RowPress 现象。

RowHammer:行访问模式的影响

RowHammer 是最知名的 DRAM 读干扰现象之一。它于 2016 年由谷歌研究人员首次发现,并迅速被认识到是一个严重漏洞。RowHammer 发生在高数量的随机读操作对内存连续行执行时。这种重复访问模式会导致相邻行的电荷退化,导致位翻转——错误存储的位,从而损坏数据。

RowHammer 的工作原理

要理解 RowHammer,考虑以下简化示例:

# RowHammer 攻击模式的示例
def row_hammer_attack(memory, target_row, num_accesses):
    for i in range(num_accesses):
        # 随机访问目标行周围的行
        row_to_access = target_row + i % len(memory)
        memory[row_to_access] = memory[row_to_access] ^ 1  # 翻转位

在这个示例中,memory 表示 DRAM 数组,target_row 是攻击者瞄准的行,num_accesses 是执行的读操作次数。^ 1 操作翻转内存单元中的位。

真实世界的影响

RowHammer 已被证明在真实场景中会导致严重问题。例如,它可以导致:

  • 数据损坏:翻转的位会损坏应用数据,导致崩溃或错误结果。
  • 性能下降:纠正位翻转的需要会引入延迟,降低系统性能。
  • 安全漏洞:在某些情况下,RowHammer 可被用来读取相邻内存行的敏感数据。

缓解策略

已开发出多种策略来缓解 RowHammer:

  1. 刷新率调整:提高刷新率有助于稳定内存单元中的电荷,使其更不易受干扰。
  2. 内存分配策略:设计避免以可预测模式访问连续行的算法,可以降低 RowHammer 的风险。
  3. 硬件改进:一些 DRAM 制造商已引入可缓解读干扰的硬件特性,例如更强的晶体管或改进的刷新机制。

RowPress:DRAM 干扰的新维度

虽然 RowHammer 已得到广泛研究,但一种名为 RowPress 的新现象已出现。与关注读操作的 RowHammer 不同,RowPress 与写操作相关。它发生在对连续行执行高数量写操作时,导致相邻行的电荷被压缩或“挤压”在一起。

RowPress 的工作原理

RowPress 可以用简单的示例说明:

# RowPress 攻击模式的示例
def row_press_attack(memory, target_row, num_accesses):
    for i in range(num_accesses):
        # 随机访问目标行周围的行
        row_to_access = target_row + i % len(memory)
        memory[row_to_access] = 1  # 向单元写入高电荷

在这种情况下,向一行写入高电荷会导致相邻行的电荷被压缩,当这些行被读取时,可能导致位翻转。

真实世界的影响

RowPress 已被观察到会导致与 RowHammer 类似的问题,包括:

  • 数据损坏:压缩的电荷会导致位翻转,损坏数据。
  • 性能下降:纠正这些错误的需要会引入延迟。
  • 安全漏洞:在某些情况下,RowPress 可被用来读取敏感数据。

缓解策略

缓解 RowPress 涉及与 RowHammer 类似的策略:

  1. 刷新率调整:提高刷新率有助于稳定内存单元中的电荷。
  2. 内存分配策略:避免可预测的写模式,可以降低 RowPress 的风险。
  3. 硬件改进:一些 DRAM 制造商正在探索缓解写干扰的硬件解决方案。

更广泛的影响

RowHammer 和 RowPress 都突显了 DRAM 的固有物理限制。它们表明,即使在精心设计的系统中,内存操作之间的微妙交互也可能导致严重问题。这对以下方面具有重要影响:

  • 系统设计者:必须了解这些现象,并设计对它们具有弹性的系统。
  • 应用开发者:需要留意其内存访问模式,避免可能触发 RowHammer 或 RowPress 的行为。
  • 安全研究人员:继续探索和理解这些漏洞,以开发更好的缓解策略。

总结

像 RowHammer 和 RowPress 这样的 DRAM 读干扰现象提醒我们,即使现代计算系统的最基本组件也有其局限性。虽然这些问题可能导致严重问题,但它们也推动了硬件和软件方面的创新。通过理解和缓解这些漏洞,我们可以构建更健壮、更可靠的计算系统。随着 DRAM 的不断发展,了解内存技术领域的新挑战和新解决方案至关重要。

JEP 401:值对象(预览版)已合并到OpenJDK主分支 2026-07-31
解密DRAM读干扰:RowHammer和RowPress现象 2026-08-01

评论区