电脑死机、数据神秘出错,有时问题根源不在软件,而在内存条深处一场静默的“行为失控”。现代计算机的心脏搏动,与一种名为DRAM的动态随机存取存储器息息相关。它每时每刻的微观“行为”,直接决定了系统的稳定与安全。
夜深人静,你正在电脑前赶一份重要报告,突然屏幕一蓝,所有未保存的工作瞬间蒸发。大多数人会将此归咎于软件崩溃或系统 bug,但你可能没想到,罪魁祸首或许潜伏在你主板的内存条里——那是 DRAM(动态随机存取存储器)的一次异常“行为”失控。
对于普通用户,DRAM 就是“内存”的代名词,是程序运行时的临时舞台。但对工程师和安全研究员而言,DRAM 的微观世界充满了精妙的“行为艺术”,而一旦其行为模式被恶意利用,就可能演变成一场灾难。

要理解 DRAM 的异常行为,得先从它的正常作息说起。DRAM 的核心存储单元是一个微小得惊人的“电容-晶体管”组合-6。
你可以把这个电容想象成一个超级迷你的水杯,里面有电荷代表“1”,没电荷代表“0”。晶体管则是控制水杯开关的水龙头。
这种设计的精妙之处在于结构简单,能在一片芯片上集成数十亿个这样的单元,从而构成我们所说的大容量内存-6。
但问题随之而来。这个“水杯”会漏水。由于半导体物理特性,即使关闭“水龙头”(晶体管),电容里的电荷也会缓慢泄漏,导致数据丢失-6。
为了对抗这种自然的遗忘,DRAM 必须进行一种核心的周期性“行为”——刷新。它需要定期(通常是每64毫秒内)读取每一行数据,然后立刻重写一遍,相当于给每个“水杯”重新加满水-1-6。
这个刷新行为是DRAM被称为“动态”的原因,也是它与静态存储器(SRAM)最本质的区别。在集中刷新期间,内存甚至无法响应CPU的访问请求,这成了早期计算机性能提升的一个瓶颈-1。
当 DRAM 的“行为”被以特定方式干扰时,麻烦就来了。2014年前后,研究人员发现了一个颠覆性的安全漏洞:Rowhammer(行锤击)。
这个攻击的原理,堪称对 DRAM行为极限的恶意测试。它不依赖于软件漏洞,而是直接攻击硬件物理缺陷。
在 DRAM 芯片内部,存储单元像棋盘一样排列成一行行、一列列。攻击者通过编写特定程序,以极高的频率反复访问(“锤击”)某一行(称为攻击行)。
这种极端的访问行为会产生电学干扰,导致相邻的、未被访问的行的电容电荷发生意外翻转——“0”变成“1”,或“1”变成“0”-5。
更令人担忧的是,一种名为“RowPress”(行压迫)的新型攻击变种出现了。它不再需要高频“锤击”,而只需要长时间保持打开一行,就能以更少的激活次数诱发比特翻转,使得现有许多防护措施失效-10。
最初,业界认为这主要是英特尔平台的问题。但苏黎世联邦理工学院在2024年发布的研究“ZenHammer”证实,采用AMD Zen 2和Zen 3架构的平台同样脆弱,甚至在DDR5内存上首次公开触发了比特翻转-5。
这意味着攻击面大幅扩大。攻击者可以利用这些翻转的比特做什么?后果严重得超乎想象:破坏页表获取系统控制权、篡改RSA加密公钥以推导私钥、甚至绕过sudo密码验证直接获得根权限-5。
面对 DRAM的这类危险行为,产业界并未坐视不管。一系列缓解技术被提出和应用。
一种思路是在内存控制器(MC)层面进行监控和限制,例如追踪行的激活频率,一旦发现异常行为就主动介入刷新相邻行。另一种更底层的方案是“in-DRAM”跟踪器,直接在内存芯片内部集成监控逻辑-10。
但新的“RowPress”攻击给这些方案带来了挑战,因为它改变了攻击的“行为模式”。为此,研究人员提出了像“ImPress”这样的新方案。
它通过一个统一的电荷损失模型,将长时间打开的行也视作一种“等效激活”纳入防御体系,从而让现有的行锤防护能同时抵御行压迫,且不牺牲性能-10。
道高一尺,魔高一丈。根本的解决之道或许在于DRAM本身的架构革新。一些更根本的方案被探讨,比如使用更可靠的存储单元、改进制造工艺以降低单元间的电气干扰,或采用更强大的纠错码(ECC)-5。
值得注意的是,即使像DDR5这样的新一代内存,其测试样品中也已被证实存在比特翻转现象-5,说明这场围绕DRAM微观行为的攻防战,远未结束。
网友“硬件小白”提问: 听起来好可怕,我的个人电脑会不会被这种Rowhammer攻击啊?我该怎么知道自己中招没,又该怎么防范呢?
答: 你的担心很实际。对普通个人用户而言,遭遇针对性Rowhammer攻击的概率相对较低,因为这类攻击通常需要在本机运行恶意程序,或通过非常精巧的JavaScript在浏览器中实施-5。但这不意味着零风险。
想直接知道自己是否“中招”非常困难,因为比特翻转可能 silent地导致程序莫名崩溃、数据损坏,而你很难追溯到内存硬件本身。
对于防范,普通用户可以采取几条实用措施:
第一,保持系统和浏览器更新。微软、谷歌等公司已在操作系统和浏览器中引入了一些软件层面的缓解策略。
第二,在BIOS/UEFI设置中启用内存相关防护。一些主板厂商提供了相关选项。
第三,选购硬件时,考虑支持ECC(错误校验与纠正)功能的内存和平台。ECC内存能检测并纠正单比特错误,虽然不能完全防御Rowhammer,但能极大增加攻击难度-5。不过,这通常需要CPU和主板同时支持,且成本较高。
最重要的是养成良好的安全习惯:不点击可疑链接,不运行来历不明的程序。毕竟,大多数攻击都需要先在你的系统上获得一个落脚点。
网友“芯片爱好者”提问: DDR5不是新一代内存吗?为什么也扛不住这种攻击?未来DRAM的发展方向会不会彻底改变以解决这个问题?
答: 这是个非常棒的问题,触及了半导体技术的深层挑战。DDR5确实在带宽、能效和密度上进步显著,但其基础存储单元——那个微小的电容——的物理原理并未发生革命性变化。工艺尺寸的持续微缩,可能反而使电容更小、排列更密集,导致单元间电气干扰更容易发生-5。
这就像一座不断变得更密集、楼层更高的大厦,对地基和材料抗压能力的要求是几何级数增长的。DDR5的标准制定无疑考虑了可靠性,但Rowhammer类攻击是一种对物理极限的“应力测试”,总能找到最薄弱的环节。
关于未来方向,业界正在多条路径上探索:
一是改进DRAM架构,比如开发更抗干扰的存储单元设计,或如ImPress那样更智能、低开销的缓解方案-10。
二是探索新型存储器,如磁性存储器(MRAM)、相变存储器(PCM)等,它们原理不同,从根本上免疫此类电干扰攻击,但目前在大容量、成本和成熟度上还无法完全取代DRAM。
三是系统级解决方案,包括更强大的纠错码、与操作系统更深度的安全协同等。
可以预见,在可预见的未来,DRAM仍将主导市场,但安全性将成为与性能、容量同等重要的设计指标。这场攻防博弈将持续推动内存技术的演进。
网友“求知程序员”提问: 作为开发者,我需要在自己的代码里考虑防御Rowhammer吗?还是说这完全是硬件和系统底层该管的事?
答: 很高兴从开发者的角度提出这个问题!答案是:对于绝大多数应用层开发者,通常不需要、也无法直接在代码中防御Rowhammer。这主要是因为:
第一,攻击的触发需要极高精度的物理地址控制和访问时序,这通常在用户态被操作系统和硬件抽象层所屏蔽。
第二,有效的缓解措施必须作用于全局内存访问模式,单个应用的行为难以确保安全。
但是,这不意味着开发者与此完全无关。理解这一威胁具有重要价值:
首先,它能提升你对系统安全性的整体认知。当你编写涉及高性能内存操作(如密集计算、自定义内存分配器)的代码时,应意识到异常的内存访问模式理论上可能带来意想不到的副作用。
它强调了“不信任输入”和“最小权限”原则的重要性。Rowhammer攻击往往需要先通过其他漏洞获取一定的执行权限。编写安全的代码,减少软件漏洞,本身就是削弱攻击链条的关键一环。
对于从事底层开发的工程师(如操作系统、虚拟机监控程序、驱动或安全软件开发者),则必须密切关注相关缓解技术的进展(如内核中的防护补丁),并在设计和实现中予以考虑。
总而言之,应用开发者是“受益于”底层防护的乘客,而底层开发者则是参与“加固车厢”的工程师。了解引擎(硬件)可能存在的隐患,有助于所有人在建造更安全的数字世界时,做出更明智的决策。