Control-Flow Integrity
Was ist Control-Flow Integrity?
Control-Flow IntegrityControl-Flow Integrity (CFI) beschraenkt indirekte Aufrufe und Returns auf einen vorab berechneten Satz legitimer Ziele und blockiert ROP- bzw. JOP-Angriffe.
CFI wurde 2005 von Abadi, Budiu, Erlingsson und Ligatti formalisiert. Der Compiler erzeugt den Kontrollflussgraphen, weist jeder indirekten Aufrufstelle eine Menge erlaubter Ziele zu und instrumentiert Call- und Return-Stellen mit Laufzeitpruefungen. Praktische Umsetzungen sind LLVM CFI (typbasierte Bucket-IDs fuer Forward-Edges), Microsoft Control Flow Guard, Linux-Kernel CFI (kCFI) sowie hardware-gestuetzte Varianten wie Intel CET-IBT und Arm BTI fuer indirekte Spruenge plus Shadow Stack fuer Returns. CFI vereitelt klassisches ROP/JOP, weil Gadget-Ketten die erlaubten Kanten verletzen. Hauptbeschraenkungen bleiben grosse Aequivalenzklassen in C/C++ und inkompatible Schnittstellen.
● Beispiele
- 01
Microsoft Control Flow Guard blockt indirekte Aufrufe ueber manipulierte vtable in Edge.
- 02
Der Linux-6.x-Kernel mit kCFI stoppt eine ROP-Kette in einer Treiberluecke.
● Häufige Fragen
Was ist Control-Flow Integrity?
Control-Flow Integrity (CFI) beschraenkt indirekte Aufrufe und Returns auf einen vorab berechneten Satz legitimer Ziele und blockiert ROP- bzw. JOP-Angriffe. Es gehört zur Kategorie Anwendungssicherheit der Cybersicherheit.
Was bedeutet Control-Flow Integrity?
Control-Flow Integrity (CFI) beschraenkt indirekte Aufrufe und Returns auf einen vorab berechneten Satz legitimer Ziele und blockiert ROP- bzw. JOP-Angriffe.
Wie funktioniert Control-Flow Integrity?
CFI wurde 2005 von Abadi, Budiu, Erlingsson und Ligatti formalisiert. Der Compiler erzeugt den Kontrollflussgraphen, weist jeder indirekten Aufrufstelle eine Menge erlaubter Ziele zu und instrumentiert Call- und Return-Stellen mit Laufzeitpruefungen. Praktische Umsetzungen sind LLVM CFI (typbasierte Bucket-IDs fuer Forward-Edges), Microsoft Control Flow Guard, Linux-Kernel CFI (kCFI) sowie hardware-gestuetzte Varianten wie Intel CET-IBT und Arm BTI fuer indirekte Spruenge plus Shadow Stack fuer Returns. CFI vereitelt klassisches ROP/JOP, weil Gadget-Ketten die erlaubten Kanten verletzen. Hauptbeschraenkungen bleiben grosse Aequivalenzklassen in C/C++ und inkompatible Schnittstellen.
Wie schützt man sich gegen Control-Flow Integrity?
Schutzmaßnahmen gegen Control-Flow Integrity kombinieren typischerweise technische Kontrollen und operative Praktiken, wie in der Definition oben beschrieben.
Welche anderen Bezeichnungen gibt es für Control-Flow Integrity?
Übliche alternative Bezeichnungen: CFI, Control Flow Guard, kCFI.
● Verwandte Begriffe
- appsec№ 1028
Shadow Stack
Ein Shadow Stack ist ein separater, geschuetzter Stack mit Kopien der Rueckkehradressen, sodass die CPU Manipulationen am normalen Stack erkennt und ROP-Angriffe stoppt.
- appsec№ 545
Intel CET
Intel CET (Control-flow Enforcement Technology) ist eine CPU-Funktion, die einen Hardware-Shadow-Stack mit Indirect Branch Tracking (IBT) kombiniert, um ROP-, JOP- und COP-Exploits zu stoppen.
- appsec№ 925
Return-Oriented Programming
Return-Oriented Programming (ROP) ist eine Exploit-Technik des Code-Reuse, die kurze, mit RET endende Instruktionsfolgen verkettet, um beliebige Berechnungen ohne neuen Code auszufuehren.
- appsec№ 064
ASLR
Address Space Layout Randomization platziert Code, Stacks, Heaps und Bibliotheken bei jedem Programmstart zufaellig im Speicher, sodass Angreifer Zieladressen nicht vorhersagen koennen.
- appsec№ 303
DEP
Data Execution Prevention (auch NX oder W^X) markiert Speicherseiten als nicht ausfuehrbar, sodass Angreifer keinen in Stack oder Heap eingeschleusten Shellcode starten koennen.
- appsec№ 670
Speichersicherheit
Speichersicherheit (Memory Safety) ist die Eigenschaft, dass ein Programm niemals Speicher liest, schreibt oder ausfuehrt, den es nicht legitim allokiert hat, und schaltet damit ganze Schwachstellenklassen aus.
● Siehe auch
- № 569Jump-Oriented Programming (JOP)
- № 1095Stack Canary
- № 581KASLR
- № 1058SMEP / SMAP
- № 671Memory-Safe Sprachen
- № 953Sicherheitseigenschaften von Rust