Return-Oriented Programming
Was ist Return-Oriented Programming?
Return-Oriented ProgrammingReturn-Oriented Programming (ROP) ist eine Exploit-Technik des Code-Reuse, die kurze, mit RET endende Instruktionsfolgen verkettet, um beliebige Berechnungen ohne neuen Code auszufuehren.
Hovav Shacham praesentierte ROP 2007 als Umgehung von DEP/W^X. Der Angreifer beschaedigt den Stack und legt eine Kette von Adressen ab, die je auf kurze, mit RET endende Gadgets zeigen. Nach jedem Gadget popt RET die naechste Adresse; aus vorhandenen ausfuehrbaren Bytes (libc, Bibliotheken, Programm) entsteht eine Turing-vollstaendige Berechnung. Varianten sind JOP (Jumps), COP (Calls) und SROP (Signal-Frames). ROP war der Hauptantrieb fuer ASLR, CFI, Stack Canaries, Shadow Stacks, Intel CET und memory-safe Sprachen; Gegenmassnahmen zielen auf Gadget-Verfuegbarkeit, Kontrollfluss-Integritaet oder Memory Safety im Quellcode.
● Beispiele
- 01
Exploit verkettet pop-rdi/syscall-Gadgets in glibc, um execve("/bin/sh") aufzurufen.
- 02
Kernel-Exploit nutzt KASLR-Leak und ROP zu commit_creds(prepare_kernel_cred(0)).
● Häufige Fragen
Was ist 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. Es gehört zur Kategorie Anwendungssicherheit der Cybersicherheit.
Was bedeutet 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.
Wie funktioniert Return-Oriented Programming?
Hovav Shacham praesentierte ROP 2007 als Umgehung von DEP/W^X. Der Angreifer beschaedigt den Stack und legt eine Kette von Adressen ab, die je auf kurze, mit RET endende Gadgets zeigen. Nach jedem Gadget popt RET die naechste Adresse; aus vorhandenen ausfuehrbaren Bytes (libc, Bibliotheken, Programm) entsteht eine Turing-vollstaendige Berechnung. Varianten sind JOP (Jumps), COP (Calls) und SROP (Signal-Frames). ROP war der Hauptantrieb fuer ASLR, CFI, Stack Canaries, Shadow Stacks, Intel CET und memory-safe Sprachen; Gegenmassnahmen zielen auf Gadget-Verfuegbarkeit, Kontrollfluss-Integritaet oder Memory Safety im Quellcode.
Wie schützt man sich gegen Return-Oriented Programming?
Schutzmaßnahmen gegen Return-Oriented Programming kombinieren typischerweise technische Kontrollen und operative Praktiken, wie in der Definition oben beschrieben.
Welche anderen Bezeichnungen gibt es für Return-Oriented Programming?
Übliche alternative Bezeichnungen: ROP, Code-Reuse-Angriff, Return-to-libc.
● Verwandte Begriffe
- 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№ 217
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.
- 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№ 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
- № 1095Stack Canary
- № 1058SMEP / SMAP
- № 671Memory-Safe Sprachen