Speculator: A Tool to Analyze Speculative Execution Attacks and Mitigations
-
摘要:
- 现状:新的推测执行攻击基本上每个月都会出现新的,同时仍旧存在很多未被发现的微体系结构攻击
- Speculator:一个新的工具,用于审查新的微体系结构攻击和相应的缓解方法(GDB of speculative execution)
- 通过利用一些可被观察到的性能计数器,speculator可以了解代码片段或者复杂攻击常见在推测执行过程中的微体系结构行为
-
介绍:
- 目前推测式攻击和防御的需求:
- 为了开发新的攻击,通常会需要分析调试一些PoC代码的片段,此时就需要一个类似于推测执行攻击的工具,能够直接检查微体系结构状态的变化,从而判断攻击是否成功
- 当测试防御策略的有效性时,目前的选择是执行攻击的PoC代码或者选择相信一些提供的CPU flags或者内核配置。此时也需要一个更细粒度的工具能够检查微体系结构状态的变化,从而判断防御策略的有效性
- 推测执行攻击的步骤
- 准备侧信道:执行一些操作用于增加攻击成功的机会。例如对于prime-and-probe的攻击,需要实现刷新cache。
- 准备侧信道攻击:执行一些代码,引导受害者进行推测执行
- 开始推测执行:CPU执行一条指令,并且该指令的输出将会决定下一条指令的执行,例如条件分支。
- 推测执行,通过侧信道发送数据:推测执行某些指令,修改微体系结构状态(侧信道)
- 通过侧信道接收数据:CPU执行某些指令,将微体系结构状态的变化转换为数据。
- 推测执行攻击可以跨域的特权边界:
- kernel vs. user-mode code
- hardware enclave(SGX) vs. user-mode or kernel-mode code
- sandboxed code in the same process, (JavaScript JIT code)
- processes-to-process boundary
- remote node to local node boundary
- Speculator:通过性能计数器记录或者推断微体系结构行为,支持增量分析(在代码片段(code snippet)上的微体系结构状态的演化),在Intel和AMD cpu上运行,支持并发执行(在SMT环境中两个线程的交互)
- 文章工作:
- 提出了一种基于性能计数器的方法和工具,speculator,用于分析攻击和缓解策略
- 利用speculator验证了RAS的大小,嵌套的推测执行的有效性,推测执行不会跨越系统调用,clflush在推测执行过
- 目前推测式攻击和防御的需求: