论文标题
通过投机控制流劫持绕过记忆安全机制
Bypassing memory safety mechanisms through speculative control flow hijacks
论文作者
论文摘要
在过去几十年中,内存腐败错误的普遍性导致了许多防御,例如堆栈金丝雀,控制流完整性(CFI)和内存安全语言。这些防御能够防止整个漏洞类别,并有助于增加程序的安全姿势。在本文中,我们表明可以使用投机执行攻击绕过内存损坏防御。我们研究了GO中堆栈保护器,CFI和边界检查的案例,并证明在哪些条件下可以通过投机控制流劫持的形式绕过,这依赖于控制流量数据的投机性或建筑覆盖物。通过将受害者的投机控制流程重定向到访问秘密数据并充当侧通道发送的小工具来泄漏信息。我们还首次证明,这可以通过将多个小工具拼接在一起,以投机性返回为导向的编程攻击来实现。我们讨论和实施软件缓解,显示出适度的性能影响。
The prevalence of memory corruption bugs in the past decades resulted in numerous defenses, such as stack canaries, control flow integrity (CFI), and memory safe languages. These defenses can prevent entire classes of vulnerabilities, and help increase the security posture of a program. In this paper, we show that memory corruption defenses can be bypassed using speculative execution attacks. We study the cases of stack protectors, CFI, and bounds checks in Go, demonstrating under which conditions they can be bypassed by a form of speculative control flow hijack, relying on speculative or architectural overwrites of control flow data. Information is leaked by redirecting the speculative control flow of the victim to a gadget accessing secret data and acting as a side channel send. We also demonstrate, for the first time, that this can be achieved by stitching together multiple gadgets, in a speculative return-oriented programming attack. We discuss and implement software mitigations, showing moderate performance impact.