Rowhammer攻击
Rowhammer 攻击
Rowhammer 攻击是一种硬件漏洞,允许攻击者通过反复激活(即“锤击”)一个或多个相邻内存行来在无关的物理内存行中翻转比特
原理
Rowhammer 漏洞的核心是 DRAM 干扰错误 (DRAM disturbance errors)。当攻击者反复高速访问 (或“锤击”) 内存中的一个或多个行时,其相邻的内存行可能会因为电磁干扰等物理效应而发生 比特翻转 (bit flips)
攻击过程 (传统):
◦ 锤击 (Hammering):攻击者重复访问(读或写)内存中的特定“攻击者行 (aggressor rows)”。
◦ 比特翻转 (Bit Flips):由于DRAM单元之间的物理距离和电荷泄漏等问题,被锤击行的相邻“受害者行 (victim rows)”中的比特可能会从 0 翻转到 1,或从 1 翻转到 0。
◦ 目标数据:攻击者通常会设法让受害者行包含有价值的数据,例如 页表项 (Page Table Entries, PTEs)。通过翻转 PTE 中的比特,攻击者可以修改内存映射,从而获得对整个物理内存的读写权限,实现权限升级
攻击演变与挑战:
◦ 概率性攻击 (Probabilistic attacks):早期的 Rowhammer 攻击(如 Seaborn 和 Dullien 的攻击)是概率性的。它们会向内存中喷洒敏感数据,并触发随机比特翻转,希望能击中目标,但这有腐蚀意外数据并导致系统崩溃的风险。
◦ 确定性攻击 (Deterministic attacks):为了提高可靠性,后来的攻击尝试变得更具确定性。这类攻击通常依赖于以下三个主要步骤:
1. 内存模板化 (Memory templating):攻击者锤击自己的内存,以找到特定页偏移处的比特翻转模式。
2. 内存按摩 (Memory massaging):攻击者操纵内存布局,使目标数据(如 PTEs)存储在易受攻击的模板位置。
3. 锤击 (Hammering):攻击者重新发出原始的锤击模式,以在目标数据中触发比特翻转。
Half-spectre 加强 rowhammer
PRELOAD+TIME 的核心能力在于精确恢复攻击者拥有的页面和内核数据页面(包括页表页面)的物理寻址信息。它通过操纵半幽灵小工具进行推测性加载,然后测量缓存访问时间来判断目标物理地址是否被访问
通过 PRELOAD+TIME 获得的精确物理地址知识,攻击者能够在锤击之前就知晓不会诱发意外的比特翻转。这意味着攻击可以“结构上无崩溃”,避免损坏关键数据和导致系统崩溃的风险。
PRELOAD+TIME
核心目的是精确恢复攻击者拥有的页面和内核数据页面(包括页表页面)的物理寻址信息
工作原理:
◦ PRELOAD+TIME 利用了半幽灵 (v1) 小工具来在内核中触发推测性加载。这些半幽灵小工具在之前的研究中被认为在上一代 CPU 上无法直接泄露秘密数据而“无用”,但实际上它们能够实现强大的泄露原语。
◦ 攻击者首先需要打破 KASLR(内核地址空间布局随机化),然后通过操纵半幽灵小工具进行推测性加载,并结合时间测量来判断目标物理地址是否被访问