TLB Attacks and Potential Defense Strategies
TLB Attacks and Potential Defense Strategies
TLB 攻击原理与分类
TLB 攻击主要利用 TLB 的访问模式、命中 / 未命中时间差作为侧信道,通过观察 TLB 状态变化来推断敏感信息。根据攻击原理和目标,TLB 攻击可以分为以下几类:
基于时间侧信道的 TLB 攻击
这类攻击利用 TLB 命中和未命中之间的时间差异来推断内存访问模式。攻击者通过测量访问特定虚拟地址的时间,判断该地址是否在 TLB 中,从而推断受害者的内存访问行为。
TLBleed 攻击是一种典型的基于时间侧信道的 TLB 攻击,它扩展了 Prime+Probe 缓存侧信道攻击到 TLB。攻击者首先填充 TLB (Prime 阶段),然后让受害者执行敏感操作,最后重新访问 TLB 条目并测量访问时间 (Probe 阶段)。通过比较访问时间的差异,攻击者可以推断受害者访问了哪些 TLB 条目,从而泄露敏感信息。
攻击过程分为三个阶段:
- Prime 阶段:攻击者填充 TLB,将目标 TLB 条目加载到 TLB 中。
- Victim 阶段:受害者执行敏感操作,如签名生成,这会改变 TLB 状态。
- Probe 阶段:攻击者重新访问 TLB 条目并测量访问时间,通过比较访问时间的差异来推断受害者访问了哪些 TLB 条目。
基于推测执行的 TLB 攻击
这类攻击结合推测执行和 TLB 侧信道,绕过系统的安全机制。攻击者利用处理器的推测执行特性,使处理器暂时执行不应该执行的指令,从而改变 TLB 状态,然后通过侧信道泄露敏感信息。
SysBumps 攻击是一种利用系统调用中的推测执行来绕过 macOS 的 KASLR 保护的攻击。攻击者利用 Spectre 类型的小工具,使非特权攻击者能够导致攻击者选择的内核地址的转换,导致 TLB 根据地址的有效性而改变。这允许构建一个攻击原语,绕过内核隔离,破坏 KASLR。
攻击的关键步骤包括:
- 利用 Spectre 类型的小工具,使处理器推测执行不应该执行的指令。
- 通过推测执行,导致攻击者选择的内核地址的转换,改变 TLB 状态。
- 利用 TLB 状态变化作为侧信道,推断内核地址信息,绕过 KASLR 保护。
基于地址空间布局随机化 (KASLR) 绕过的 TLB 攻击
这类攻击利用 TLB 侧信道来绕过 KASLR 保护,获取内核或其他敏感代码的地址信息。
EntryBleed 攻击是一种针对 Linux 系统的 KASLR 绕过攻击。攻击者利用微架构侧信道和 KPTI 缓解措施中的设计缺陷,实现对 KASLR 的通用绕过。攻击利用了系统调用和中断处理页面在 KPTI 隔离中的豁免,通过观察 TLB 状态变化来推断内核地址信息。
TLB 攻击归因
确定性(Determinism)
确定性是指微架构优化在相同条件下以相同方式触发,导致可预测的微架构状态转换和时间变化。在 TLB 中,确定性表现为 TLB 条目在相同条件下以相同方式被加载、替换和驱逐,使得攻击者能够预测 TLB 状态变化。
共享 (Sharing)
共享是指微架构资源状态在受害者和攻击者之间共享,允许创建侧信道。在多核处理器和 SMT 处理器中,TLB 资源在不同核心或线程之间共享,使得攻击者能够通过观察共享 TLB 资源的状态变化来推断受害者的内存访问行为。
访问违规 (Access Violation)
访问违规是指微架构资源允许访问超出程序保护域的秘密数据。在 TLB 攻击中,攻击者能够通过推测执行或其他方式,访问超出其权限范围的内存地址,从而改变 TLB 状态,泄露敏感信息。
信息流 (Information Flow)
信息流是指通过微架构状态交换信息。在 TLB 攻击中,攻击者能够通过观察 TLB 状态变化,获取受害者的内存访问模式,从而推断敏感信息。