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

52 lines
5.3 KiB
Markdown
Raw Normal View History

# CET & Shadow Stack
{% hint style="success" %}
Lernen Sie & üben Sie AWS-Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lernen Sie & üben Sie GCP-Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstützen Sie HackTricks</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositorys senden.
</details>
{% endhint %}
## Control Flow Enforcement Technology (CET)
**CET** ist eine Sicherheitsfunktion, die auf Hardwareebene implementiert ist und darauf abzielt, häufige Angriffe auf die Kontrollflussmanipulation wie **Return-Oriented Programming (ROP)** und **Jump-Oriented Programming (JOP)** zu vereiteln. Diese Arten von Angriffen manipulieren den Ausführungsfluss eines Programms, um bösartigen Code auszuführen oder harmlose Codefragmente so zu verketten, dass sie eine bösartige Aktion ausführen.
CET führt zwei Hauptfunktionen ein: **Indirect Branch Tracking (IBT)** und **Shadow Stack**.
* **IBT** stellt sicher, dass indirekte Sprünge und Aufrufe zu gültigen Zielen erfolgen, die explizit als legale Ziele für indirekte Branches markiert sind. Dies wird durch die Verwendung eines neuen Befehlssatzes erreicht, der gültige Ziele markiert und somit verhindert, dass Angreifer den Kontrollfluss zu beliebigen Positionen umleiten.
* **Shadow Stack** ist ein Mechanismus, der die Integrität von Rückgabeadressen gewährleistet. Er hält eine gesicherte, versteckte Kopie von Rückgabeadressen getrennt vom regulären Aufrufstapel. Wenn eine Funktion zurückkehrt, wird die Rückgabeadresse gegen den Shadow Stack validiert, wodurch verhindert wird, dass Angreifer Rückgabeadressen auf dem Stapel überschreiben, um den Kontrollfluss zu übernehmen.
## Shadow Stack
Der **Shadow Stack** ist ein **dedizierter Stapel, der ausschließlich zum Speichern von Rückgabeadressen verwendet wird**. Er arbeitet neben dem regulären Stapel, ist jedoch geschützt und vor normalem Programmablauf verborgen, was es für Angreifer schwierig macht, damit zu manipulieren. Das Hauptziel des Shadow Stacks besteht darin sicherzustellen, dass Änderungen an Rückgabeadressen auf dem herkömmlichen Stapel erkannt werden, bevor sie verwendet werden können, um ROP-Angriffe effektiv zu verhindern.
## Wie CET und Shadow Stack Angriffe verhindern
**ROP- und JOP-Angriffe** beruhen auf der Fähigkeit, den Kontrollfluss einer Anwendung zu übernehmen, indem sie Schwachstellen ausnutzen, die es ihnen ermöglichen, Zeiger oder Rückgabeadressen auf dem Stapel zu überschreiben. Indem sie den Fluss zu Sequenzen von vorhandenen Code-Gadgets oder Return-Oriented Programming-Gadgets lenken, können Angreifer beliebigen Code ausführen.
* Die Funktion **IBT von CET** erschwert diese Angriffe erheblich, indem sichergestellt wird, dass indirekte Branches nur zu Adressen springen können, die explizit als gültige Ziele markiert wurden. Dies macht es unmöglich, dass Angreifer beliebige Gadgets im Binärformat ausführen.
* Der **Shadow Stack** hingegen stellt sicher, dass selbst wenn ein Angreifer eine Rückgabeadresse auf dem normalen Stapel überschreiben kann, die **Diskrepanz erkannt wird**, wenn die korrupte Adresse beim Zurückkehren aus einer Funktion mit der sicheren Kopie im Shadow Stack verglichen wird. Wenn die Adressen nicht übereinstimmen, kann das Programm beendet oder andere Sicherheitsmaßnahmen ergriffen werden, um zu verhindern, dass der Angriff erfolgreich ist.
{% hint style="success" %}
Lernen Sie & üben Sie AWS-Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lernen Sie & üben Sie GCP-Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstützen Sie HackTricks</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositorys senden.
</details>
{% endhint %}