来自美国和澳大利亚多所大学的研究人员开发了两种 Rowhammer 级攻击——GDDRHammer 和 GeForge——它们允许在 NVIDIA GPU 上执行非特权 CUDA 内核时,破坏 GDDR 显存芯片中的单个比特。与去年提出的 GPUHammer 方法不同,这些新攻击不仅限于影响 GPU 内存中处理的数据,还能完全访问 CPU 地址空间内的所有主内存。研究人员演示了在 GPU 上执行非特权 CUDA 内核时,如何利用这些漏洞获得主机系统的 root 权限。
这两种攻击都会提前耗尽攻击者无法直接访问的特定显存单元,从而篡改这些单元中存储的数据。攻击者通过干扰GPU内存分配器(cudaMalloc)来破坏GPU内存隔离,并将虚拟GPU地址映射到物理GPU或CPU内存中的任意地址,从而实现对CPU地址空间内内存的读写操作。
该攻击通过篡改显存中的位值来实现,显存存储着GPU的页表,页表负责将虚拟地址转换为物理地址。GDDRHammer攻击和GeForge攻击的区别在于,GDDRHammer方法修改的是末级页表(PT),而GeForge方法修改的是末级页目录(PD0)。
除其他用途外,指定的地址转换表用于组织 GPU 对 CPU 内存的直接访问,因此,将 GPU 页表中的地址更改为主 RAM 中的物理地址并设置启用 CPU 内存映射模式的 APERTURE 标志,即可在禁用 IOMMU(默认情况下禁用)的情况下,通过 PCIe 总线访问主内存并读写数据。


针对基于安培微架构的高性能 NVIDIA RTX A6000 专业显卡(新卡起价 6850 美元,二手卡起价 4000 美元)和消费级 NVIDIA RTX 3060 显卡(售价 250-300 美元)的成功攻击已被证实。所开发的绕过 Rowhammer 保护的技术,结合 GPU 的并行处理能力,使得单元损坏率比之前的攻击提高了 64 倍。作为临时阻止攻击的措施,可以使用“nvidia-smi -e 1”命令启用纠错码 (ECC) 模式,但这会引入额外的开销,并且可能被 ECCploit 和 ECC.fail 等攻击方法绕过。
RowHammer 攻击通过循环读取相邻存储单元的数据,可以篡改 DRAM 存储器中各个比特位的内容。由于 DRAM 存储器是一个二维存储单元阵列,每个存储单元由一个电容器和一个晶体管组成,因此对同一存储区域进行连续读取会导致电压波动和异常,从而导致相邻存储单元的少量电荷损失。如果读取强度较高,则相邻存储单元可能会损失大量电荷,以至于下一个刷新周期将来不及恢复其原始状态,从而导致存储在该存储单元中的数据值发生变化。
Rowhammer攻击方法于2014年被提出,引发了安全研究人员和硬件制造商之间的一场猫鼠游戏:内存芯片制造商试图封堵该漏洞,而研究人员则不断寻找绕过漏洞的新方法。例如,为了防御Rowhammer攻击,芯片制造商添加了TRR(目标行刷新)机制,但事实证明,该机制仅在特定情况下阻止了单元损坏,并不能抵御所有可能的攻击场景。针对搭载Intel、AMD和ARM处理器的系统中的DDR3、DDR4和DDR5芯片,以及NVIDIA GPU中的GDDR内存,都开发出了相应的攻击方法。此外,还发现了绕过ECC纠错机制的方法,并提出了针对网络攻击和在浏览器中执行JavaScript代码的攻击方法。
来源: opennet.ru
