CET & Shadow Stack
控制流执行技术(CET)
CET是一种在硬件级别实现的安全功能,旨在阻止常见的控制流劫持攻击,如返回导向编程(ROP)和跳转导向编程(JOP)。这些类型的攻击操纵程序的执行流程,以执行恶意代码或以一种执行恶意操作的方式链接一起程序中的良性代码片段。
CET引入了两个主要功能:间接分支跟踪(IBT)和影子栈。
IBT确保间接跳转和调用是到有效目标的,这些目标被明确标记为间接分支的合法目的地。通过使用标记有效目标的新指令集来实现这一点,从而防止攻击者将控制流重定向到任意位置。
影子栈是一种为返回地址提供完整性的机制。它保留了一个安全的、隐藏的返回地址副本,与常规调用栈分开。当函数返回时,返回地址将与影子栈进行验证,防止攻击者覆盖栈上的返回地址以劫持控制流。
影子栈
影子栈是一个专用栈,仅用于存储返回地址。它与常规栈一起工作,但受到保护并隐藏在正常程序执行之外,使攻击者难以篡改。影子栈的主要目标是确保在可以使用之前检测到对常规栈上返回地址的任何修改,有效地减轻ROP攻击。
CET和影子栈如何防止攻击
ROP和JOP攻击依赖于能够通过利用允许它们覆盖指针或栈上的返回地址的漏洞来劫持应用程序的控制流。通过将流程引导到现有代码片段或返回导向编程代码片段,攻击者可以执行任意代码。
CET的IBT功能通过确保间接分支只能跳转到已明确标记为有效目标的地址,使这些攻击变得更加困难。这使得攻击者无法执行散布在二进制文件中的任意代码片段。
另一方面,影子栈确保即使攻击者可以覆盖常规栈上的返回地址,当从函数返回时,在将损坏的地址与存储在影子栈中的安全副本进行比较时,将检测到不一致。如果地址不匹配,程序可以终止或采取其他安全措施,防止攻击成功。
最后更新于