hacktricks/binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md

4.2 KiB
Raw Blame History

控制流执行技术CET和影子栈

{% hint style="success" %} 学习并练习 AWS 黑客技术:HackTricks 培训 AWS 红队专家ARTE
学习并练习 GCP 黑客技术:HackTricks 培训 GCP 红队专家GRTE

支持 HackTricks
{% endhint %}

控制流执行技术CET

CET 是一种在硬件级别实现的安全功能,旨在阻止常见的控制流劫持攻击,如返回导向编程ROP跳转导向编程JOP。这些类型的攻击会操纵程序的执行流程,以执行恶意代码或以一种执行恶意操作的方式链接一起程序中的良性代码片段。

CET引入了两个主要功能间接分支跟踪IBT影子栈

  • IBT 确保间接跳转和调用只能到达明确标记为间接分支的合法目标。通过使用一组新的指令集来标记有效目标,从而防止攻击者将控制流重定向到任意位置。
  • 影子栈是一种为返回地址提供完整性的机制。它保留了一个安全的、隐藏的返回地址副本,与常规调用栈分开。当函数返回时,返回地址将与影子栈进行验证,防止攻击者覆盖栈上的返回地址以劫持控制流。

影子栈

影子栈是一个专用栈,仅用于存储返回地址。它与常规栈一起工作但受到保护并对正常程序执行隐藏使攻击者难以篡改。影子栈的主要目标是确保在可以使用之前检测到对常规栈上返回地址的任何修改有效地减轻ROP攻击。

CET 和影子栈如何防止攻击

ROP 和 JOP 攻击依赖于能够通过利用允许它们覆盖指针或栈上的返回地址的漏洞来劫持应用程序的控制流。通过将流程引导到现有代码片段或返回导向编程片段,攻击者可以执行任意代码。

  • CET 的 IBT 功能通过确保间接分支只能跳转到明确标记为有效目标的地址,使这些攻击变得更加困难。这使得攻击者无法执行散布在二进制文件中的任意代码片段。
  • 另一方面,影子栈确保即使攻击者可以覆盖常规栈上的返回地址,当从函数返回时,在将损坏的地址与存储在影子栈中的安全副本进行比较时将检测到不一致。如果地址不匹配,程序可以终止或采取其他安全措施,防止攻击成功。

{% hint style="success" %} 学习并练习 AWS 黑客技术:HackTricks 培训 AWS 红队专家ARTE
学习并练习 GCP 黑客技术:HackTricks 培训 GCP 红队专家GRTE

支持 HackTricks
{% endhint %}