Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 1036

Return-Oriented Programming

Geprüft vonCybersecurity entrepreneur & security researcher

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 stellte ROP in seiner Arbeit „The Geometry of Innocent Flesh on the Bone" (2007) vor und zeigte, dass sich Return-into-libc zu Turing-vollständiger Berechnung verallgemeinern lässt und damit DEP/W^X aushebelt. Der Angreifer verfälscht den Stack und schreibt eine Kette von Adressen, die jeweils auf ein kurzes Gadget zeigen — wenige Instruktionen, die mit RET enden. Nach jedem Gadget holt RET die nächste Adresse, sodass die Kontrolle durch bereits vorhandene ausführbare Bytes (libc, das Programm, Bibliotheken) fließt — ohne injizierten Code, den DEP abfangen könnte.

Da jede Gadget-Adresse absolut ist, setzt ROP Kenntnis der Code-Lage im Speicher voraus — genau das, was ASLR randomisiert; reale Exploits kombinieren ROP daher mit einem Informationsleck. Varianten verallgemeinern die Primitive: JOP (Sprünge) und COP (Calls) verketten indirekte Sprünge/Calls statt Returns, und SROP (Sigreturn) missbraucht die Signal-Frame-Wiederherstellung des Kernels, um alle Register auf einmal zu setzen. Blind ROP (Bittau et al., 2014) baut eine Kette gegen einen entfernten Dienst ganz ohne Binary, indem es Abstürze beobachtet.

ROP ist der Hauptgrund für eine ganze Generation von Gegenmaßnahmen. Abwehr greift eine von drei Flächen an: Gadget-Verfügbarkeit, Kontrollfluss-Integrität oder Speichersicherheit an der Quelle. Intel CET (seit Tiger Lake, 2020) erzwingt einen Hardware-Shadow-Stack, der manipulierte Rücksprungadressen erkennt, sowie Indirect Branch Tracking (endbr64) gegen JOP/COP; ARM bietet Pointer Authentication und BTI. Speichersichere Sprachen wie Rust beseitigen den Korruptionsfehler, der die Kette überhaupt erst startet.

flowchart TD
  A["Speicherkorruptions-Bug<br/>Stack-Ueberlauf"] --> B["Ueberschreibt Ruecksprungadresse"]
  B --> C["Stack enthaelt nun<br/>eine Gadget-Kette"]
  C --> G1["Gadget 1: pop rdi, ret"]
  G1 --> G2["Gadget 2: pop rsi, ret"]
  G2 --> G3["Gadget 3: syscall, ret"]
  G3 --> X["execve /bin/sh"]
  D1["DEP: Stack nicht ausfuehrbar"] -. durch Reuse umgangen .-> C
  D2["ASLR"] -. braucht Info-Leak .-> C
  D3["Intel CET Shadow-Stack"] -. blockt falsches RET .-> G1

Beispiele

  1. 01

    Exploit verkettet pop-rdi/syscall-Gadgets in glibc, um execve("/bin/sh") aufzurufen.

  2. 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 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

Siehe auch