zzrcxb/binoculars
GitHub: zzrcxb/binoculars
Binoculars 是一种针对 Intel 处理器的无状态微架构侧信道攻击工具,利用页表遍历器加载与超线程存储间的资源争用,实现对虚拟地址的高信噪比泄露,可破坏 KASLR 并窃取密码学敏感数据。
Stars: 12 | Forks: 4
#
Binoculars 微架构侧信道攻击
Binoculars 是首个*无状态间接*侧信道攻击
(无状态意味着它不依赖于持久的状态变化,如缓存足迹;
间接意味着它不是受害者指令的*直接*结果)。
Binoculars 攻击是跨超线程的,它利用了一个线程的页表遍历器加载与兄弟线程的普通数据存储之间的*临时*资源争用(有时是饥饿)。
Binoculars 的两个重要特征使其与众不同:
- **易于观察,信噪比高**。
攻击者可以在线程执行时间中造成*显著*的延迟
(高达 16,000~20,000 个周期!),所有这些都源于单条动态指令。
这种延迟幅度使任何其他微架构侧信道产生的延迟相形见绌,至少高出两个数量级;
- **泄露受害者内存操作中的大范围虚拟地址位**。
这种争用是依赖于地址的。
我们构建了两个可以监视受害者内存访问模式的攻击原语。
第一个原语,Store->Load 通道,泄露受害者存储的低阶地址位(例如,第 11-3 位)。
第二个原语,Load->Store 通道,泄露所有受害者 TLB 缺失访问的高阶虚拟地址位(例如,虚拟页号)。
利用这两个原语,
我们在真实机器上演示了两次端到端攻击,
包括在*单次受害者运行*中提取 ECDSA 中的 nonce $k$
以及完全破坏内核 ASLR (KASLR)。
## 尝试 Binoculars 攻击
如果你想尝试 Binoculars 攻击,
请参考这份[文档](EXP.md)。
## 发生了什么?
为了执行内存访问,硬件首先需要通过查找 TLB 将虚拟地址转换为物理地址。
如果查询导致 TLB 缺失,
一个名为*页表遍历器*的硬件单元
将启动*页表遍历*,从内存中的页表读取虚拟到物理的映射。
在 x86-64 上,在页表遍历期间,页表遍历器通过从基数页表的根节点开始进行指针追逐,
发出**多个** *页表遍历器加载*,从每一级页表读取数据。
与普通内存加载类似,页表遍历器加载也会经过缓存层级
并且**受制于依赖于地址的争用**。
我们发现,来自*读取者*超线程 (HT) 的页表遍历器加载可能会经历
极端的争用(例如,被延迟长达 20,000 个周期),
这是由于来自兄弟*写入者*超线程的普通数据存储造成的。
如果页表遍历器加载和存储是“4K 别名”(或者更准确地说,它们共享相同的 VA 第 11-3 位),
就会发生极端争用。
通过改变攻击者是扮演读取者还是写入者线程的角色,
我们可以泄露受害者访问的大范围虚拟地址位。
我们相信这种令人惊讶的行为是 Intel 处理器优化的结果。
该优化是将页表遍历器加载作为“填充加载”发出,
它们绕过指令调度器以避免调度延迟。
但这种优化的一个意外影响是,调度器不再能
检测并调解页表遍历器加载与其他内存访问之间的冲突。
结果,页表遍历器将经历资源饥饿,
直到大约 20,000 个周期后触发看门狗警报。
之后,页表遍历被中止并重新开始,据推测是以更高的优先级进行。
## 研究论文
Binoculars 论文发表在 *USENIX Security '22* 上,标题为
*"Binoculars: Contention-Based Side-Channel Attacks Exploiting the Page Walker"*。
你可以在[此处](https://www.usenix.org/system/files/sec22-zhao-zirui.pdf)找到该论文的副本,
BibTeX 引用如下:
```
@inproceedings{binoculars-attack,
author = {Zirui Neil Zhao and Adam Morrison and Christopher W. Fletcher and Josep Torrellas},
title = {Binoculars: Contention-Based Side-Channel Attacks Exploiting the Page Walker},
booktitle = {31st USENIX Security Symposium (USENIX Security 22)},
year = {2022},
}
```
## 受影响的处理器
我们认为 Binoculars 攻击的根本原因
与 Intel 对页表遍历器加载的优化有关。
因此,Binoculars 攻击很可能仅限于 Intel 处理器。
我们验证了该攻击适用于以下 Intel 处理器:
- Haswell-EP (Xeon E3-1246 v3)
- Skylake-X (i7-7820X)
- Cascade Lake-X (Xeon W-2245)
如果你发现 Binoculars 攻击也适用于其他处理器(Intel 或非 Intel),
欢迎通过向我们发送 pull request 来报告
(请包括处理器型号、操作系统发行版和内核版本)。
## 软件缓解措施
由于 Binoculars 是一种跨超线程侧信道,
最简单的缓解措施是禁用超线程
或者仅在同一个物理核心上调度相互信任的程序。
另一种选择是使用数据无知编程实践重写敏感的易受攻击程序。
这两种缓解措施都可能带来不可忽视的性能损失。
## 为什么叫 Binoculars(双筒望远镜)?
因为这个侧信道是不对称的。根据攻击者所处的位置(即读取者还是写入者一侧),
该通道泄露不同的虚拟地址位(高位或低位)。
这种行为让我们想起从两端观看(现实世界中的)双筒望远镜,
既可以把物体拉近,也可以推远。
因此得名,Binoculars。
标签:0day挖掘, Binoculars, CISA项目, CPU漏洞, Cutter, ECDSANonce攻击, KASLR绕过, meg, Store-to-Load, TLB缺失, 侧信道攻击, 信息安全, 内核安全, 地址泄露, 处理器安全, 密码学攻击, 微架构安全, 时序分析, 硬件漏洞, 自动回退, 虚拟化安全, 资源竞争, 跨超线程攻击, 隐蔽通道, 页表遍历