0Pricing
Cyber Security Academy · Lektion

Return-Oriented Programming (ROP)

Verketten Sie ROP-Gadgets, um NX/DEP zu umgehen und Exploits ohne Shellcode zu erstellen.

Return-Oriented Programming (ROP) ist eine kostenlose Cyber Security Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cyber Security Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum es ROP gibt

Mit NX/DEP kann eingeschleuster Shellcode nicht ausgeführt werden. Return-Oriented Programming (ROP) umgeht dies, indem kleine, bereits vorhandene Code-Sequenzen (Gadgets) verkettet werden, die mit ret-Anweisungen enden. Es wird kein neuer Code eingeschleust — verwendet werden nur der Stack und vorhandener Code.

Was ist ein ROP-Gadget?

Ein Gadget ist eine kurze, mit ret endende Folge von Anweisungen, die im Binary oder in geladenen Bibliotheken zu finden ist. Beispiele: pop rdi; ret, pop rsi; ret, mov eax, 0; ret. Gadgets sind die Bausteine von ROP-Ketten.

Gadgets finden

Werkzeuge zum Finden von ROP-Gadgets in Binaries:

# ROPgadget:
ROPgadget --binary ./vuln --rop
# ropper:
ropper -f ./vuln --search "pop rdi"
# pwntools:
from pwn import *
elf = ELF("./vuln")
rop = ROP(elf)
rop.find_gadget(["pop rdi", "ret"])

Eine ROP-Kette erstellen

Eine ROP-Kette ist eine Folge von Rücksprungadressen auf dem Stack. Wenn die überschriebenen Rücksprungadresse erreicht wird, springt die Ausführung zu Gadget 1 (das etwas Nützliches tut und anschließend zurückspringt), wobei die nächste Adresse entfernt wird und zu Gadget 2 gesprungen wird, und so weiter.

ret2plt und GOT-Überschreibung

ret2plt ruft Funktionen über die PLT (Procedure Linkage Table) auf — nützlich, um mit puts() libc-Adressen auszulesen und anschließend mit diesen system() aufzurufen. Die PLT-/GOT-Strukturen sind auch bei ASLR für das Haupt-Binary vorhersehbar (ohne PIE).

ASLR mit ROP umgehen

ROP kann eine libc-Funktionsadresse aus der GOT auslesen, indem ein Gadget puts(GOT_entry) aufruft. Die geleakte Adresse verrät die libc-Basisadresse. Berechnen Sie den system()-Offset: system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].

SROP: Sigreturn-Oriented Programming

SROP verwendet den sigreturn-Systemaufruf, um einen gefälschten Sigcontext-Frame zu laden und alle Register mit vom Angreifer kontrollierten Werten zu setzen — und das mit nur einem Gadget. Nützlich, wenn nur wenige Gadgets verfügbar sind.

JOP- und COP-Varianten

Über ROP hinaus:

  • JOP (Jump-Oriented Programming) — verkettet Gadgets, die statt mit ret mit jmp enden
  • COP (Call-Oriented Programming) — verkettet Gadgets, die mit call enden

Schutzmaßnahmen wie CFI (Control Flow Integrity) sollen all diese Techniken verhindern.

Control Flow Integrity (CFI)

CFI erzwingt, dass indirekte Sprünge (Aufrufe, Rücksprünge) nur zu gültigen Zielen springen. Dadurch wird ROP unterbrochen, indem das Rücksprungziel anhand eines Shadow-Stacks oder einer Positivliste überprüft wird. Intel CET (Control-flow Enforcement Technology) implementiert CFI auf Hardwareebene.

Praktisches ROP-Beispiel

Ein 64-Bit-ret2libc über ROP:

# pwntools ROP chain example:
from pwn import *
p = process("./vuln")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
elf = ELF("./vuln")
rop = ROP(elf)
# Leak puts GOT to get libc base
rop.puts(elf.got["puts"])
rop.main()

Zusammenfassung der Schutzmaßnahmen

Schutzmaßnahmen gegen ROP:

  • CFI — überprüft Sprungziele
  • Shadow-Stack (CET) — hardwaregeschützte Kopie der Rücksprungadresse
  • RELRO (vollständig) — macht die GOT schreibgeschützt und verhindert Überschreibungen
  • PIE — randomisiert die Basisadresse des Binaries, sodass zum Finden von Gadgets ein Leck erforderlich ist

Schnelltest: ROP

Was ist ein ROP-Gadget?

Zusammenfassung der Lektion

ROP umgeht NX/DEP, indem vorhandene Code-Sequenzen (Gadgets, die mit ret enden) verkettet werden — eine Shellcode-Injektion ist nicht erforderlich. Werkzeuge zum Finden von Gadgets: ROPgadget, ropper. ret2plt liest libc-Adressen aus, um ASLR außer Kraft zu setzen. Schutzmaßnahmen: CFI, Shadow-Stacks (Intel CET), PIE und vollständiges RELRO. ROP bildet die Grundlage moderner Binary-Exploitation.

Häufig gestellte Fragen

Ist die Lektion „Return-Oriented Programming (ROP)“ kostenlos?

Ja — der vollständige Text von „Return-Oriented Programming (ROP)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cyber Security Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Return-Oriented Programming (ROP)“?

Verketten Sie ROP-Gadgets, um NX/DEP zu umgehen und Exploits ohne Shellcode zu erstellen. Du übst Cyber Security Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Cyber Security Academy zu starten?

Keine Vorkenntnisse erforderlich. Cyber Security Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Return-Oriented Programming (ROP)“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Cyber Security Academy-Lektion Code schreiben und ausführen?

Ja. Jede Cyber Security Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Stack Buffer Overflows
  2. Return-Oriented Programming (ROP)
  3. Format-String-Schwachstellen
  4. Heap-Exploitation: Use-After-Free und Heap-Spraying
← Zurück zu Cyber Security Academy