唯一不涉及降级到具有 DDR2 的主板的可靠硬件缓解措施是使用支持 TRR(目标行刷新)的内存,这对于LPDDR4是可选的(与 DDR4 不同)。不幸的是,许多 DDR4 模块不支持 TRR,而且如果不深入挖掘,通常没有简单的方法来判断它是否支持。此外,似乎大多数现代 TRR 实现都无效,实际上使情况变得更糟。还有pTRR (伪 TRR)用于某些 Ivy Bridge 处理器具有的 DDR3。它需要使用与 pTRR 兼容的 DIMM。我不知道这有多有效或可靠,因为网上几乎没有关于其实施或规范的信息。除此之外,还有一些技术可以降低易感性:
使用 ECC 并在 MCE 上出现恐慌- 虽然 ECC 不能完全缓解攻击,但如果您将计算机配置为在任何违规(称为机器检查异常或 MCE)时出现恐慌,它可以有很长的路要走。如果第一个检测到的错误导致系统停止,攻击者将很难成功利用系统。高擦洗率提高检测。
提高刷新率* - 默认情况下,内存以 64 毫秒的间隔刷新。某些 BIOS 允许您指定刷新间隔。将其减少到 32 毫秒会使 rowhammer 更难被利用,但会牺牲性能和能源使用。进一步减少它有助于更多,但对性能的影响更大。一些声称具有 rowhammer 缓解设置(可选或默认启用)的 BIOS 供应商只是将刷新间隔减少到 32 毫秒。
降低时钟速度* - 降低每个内核的最大时钟速度会使高速访问内存行变得更加困难,因为内存访问自然受到时钟速度的限制。这种缓解措施仅适用于边缘易受攻击且价格昂贵(显着降低性能)的内存。您还可以禁用超线程或其他形式的SMT并切换到使用单核,这同样会对性能产生重大影响。
设置 CPU 和 RAM 资源限制* - Rowhammer 需要锤击内存,这会占用大量 CPU 时间。如果恶意进程可以分配大量内存,一些 privesc 攻击也会更快地工作。设置严格的资源限制来杀死使用过多 CPU 或内存的进程可以在使用易受攻击的内存模块时减慢攻击速度。
在 Web 浏览器中禁用 JIT - JIT 或即时编译是浏览器使用的一种优化功能,可将 JavaScript 编译为可执行代码。这大大加快了网页上的繁重脚本。但是,它也使浏览器中的 rowhammer 成为可能。禁用 JIT 会降低 JavaScript 性能,以至于这种攻击变得不可行。请注意,这种缓解只会降低浏览器的敏感性,而不是任何其他本地进程!
使用具有高 MAC的内存 - 最大激活计数 (MAC) 是 DRAM 的一种度量,它计算在导致不稳定之前在单个刷新间隔内可以对一行进行多少次访问。MAC 越高越好,无限制的 MAC 是理想的。理论上,具有无限 MAC 的模块不易受到 rowhammer 的攻击。您需要搜索数据表以找出该特定型号的 MAC,或通过SPD获取数据。还需要测试模块以确保它们是安全的,因为报告的 MAC 值并不总是准确的。
黑名单易受攻击的地址- x86 CPU 的一个特殊功能是e820,其中包含 CPU 将隐藏并拒绝映射到虚拟内存的物理内存地址列表。结合这一点,rowhammer 通常会一遍又一遍地影响相同的行(即,在任何给定的模块中都有易受攻击的行和不敏感的行),找到这些易受攻击的地址并将它们列入黑名单是有意义的。这是B-CATT采用的方法。
物理分区内存- 如果您可以对内存进行分区,以便不同安全级别的进程永远不会映射到相邻行,则可以隔离基于 rowhammer 的损坏。这在为虚拟机分配内存或对内存进行分段以便在用户和内核物理内存区域(不仅仅是“上层”内核)之间进行分割时很有用。
rowhammer -discuss上有许多与 rowhammer 相关的问题和讨论。
* 就其本身而言,这些缓解措施只能起到很小的作用,并且在许多情况下只会略微降低位翻转率。