# CET & Shadow Stack

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

## 控制流执行技术（CET）

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

CET引入了两个主要功能：**间接分支跟踪（IBT）和影子栈**。

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

## 影子栈

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

## CET和影子栈如何防止攻击

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

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