Cyber Security Academy · Les

Return-Oriented Programming (ROP)

Koppel ROP-gadgets om NX/DEP te omzeilen en exploits zonder shellcode te bouwen.

Les 2 van 413 stappen

Return-Oriented Programming (ROP) is een gratis Cyber Security Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Cyber Security Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Cyber Security Academy bevat in totaal 4 lessen.

Waarom ROP bestaat

Met NX/DEP kan geïnjecteerde shellcode niet worden uitgevoerd. Return-Oriented Programming (ROP) omzeilt dit door kleine bestaande codereeksen (gadgets) aan elkaar te koppelen die eindigen met ret-instructies. Er wordt geen nieuwe code geïnjecteerd — alleen de stack en bestaande code worden gebruikt.

Wat is een ROP-gadget?

Een gadget is een korte reeks instructies die eindigt met ret en in het binaire bestand of geladen bibliotheken voorkomt. Voorbeelden zijn pop rdi; ret, pop rsi; ret en mov eax, 0; ret. Gadgets zijn de bouwstenen van ROP-ketens.

Gadgets vinden

Hulpmiddelen om ROP-gadgets in binaire bestanden te vinden:

# 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"])

Een ROP-keten bouwen

Een ROP-keten is een reeks retouradressen op de stack. Zodra het overschreven retouradres wordt gebruikt, springt het naar gadget 1 (dat iets nuttigs doet en vervolgens ret uitvoert). Dat haalt het volgende adres van de stack en springt naar gadget 2, enzovoort.

ret2plt en GOT-overschrijving

ret2plt roept functies aan via de PLT (tabel voor procedurekoppeling) — nuttig om met puts() adressen van libc te lekken en die vervolgens te gebruiken om system() aan te roepen. De PLT/GOT-structuren zijn zelfs met ASLR voorspelbaar voor het hoofdbinaire bestand (zonder PIE).

ASLR omzeilen met ROP

ROP kan met een gadget dat puts(GOT_entry) aanroept het adres van een libc-functie uit de GOT lekken. Het gelekte adres onthult het basisadres van libc. Bereken de verschuiving van system(): system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].

SROP: programmeren op basis van sigreturn

SROP gebruikt de sigreturn-systeemaanroep om een vervalst sigcontext-frame te laden en in één gadget alle registers in te stellen op waarden die de aanvaller beheert. Dit is nuttig wanneer er weinig gadgets beschikbaar zijn.

Varianten van JOP en COP

Naast ROP:

  • JOP (programmeren op basis van sprongen) — koppelt gadgets aan elkaar die eindigen met jmp in plaats van ret
  • COP (programmeren op basis van aanroepen) — koppelt gadgets aan elkaar die eindigen met call

Beveiligingen zoals CFI (integriteit van de besturingsstroom) proberen al deze technieken te voorkomen.

Integriteit van de besturingsstroom (CFI)

CFI dwingt af dat indirecte sprongen (functieaanroepen, retouren) alleen naar geldige doelen springen. Dit doorbreekt ROP door het retourdoel te controleren aan de hand van een schaduwstack of een toegestane lijst. Intel CET (Control-flow Enforcement Technology) implementeert CFI op hardwareniveau.

Praktisch ROP-voorbeeld

Een 64-bits ret2libc via 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()

Samenvatting van beveiligingsmaatregelen

Beveiligingen tegen ROP:

  • CFI — controleert vertakkingsdoelen
  • Schaduwstack (CET) — door hardware beschermde kopie van het retouradres
  • RELRO (volledig) — maakt de GOT alleen-lezen en voorkomt overschrijvingen
  • PIE — maakt het basisadres van het binaire bestand willekeurig; er is een lek nodig om gadgets te vinden

Snelle controle: ROP

Wat is een ROP-gadget?

Samenvatting van de les

ROP omzeilt NX/DEP door bestaande codereeksen aan elkaar te koppelen (gadgets die eindigen op ret) — injectie van shellcode is niet nodig. Hulpmiddelen voor het vinden van gadgets zijn ROPgadget en ropper. ret2plt lekt libc-adressen om ASLR te omzeilen. Beveiligingen zijn CFI, schaduwstacks (Intel CET), PIE en volledige RELRO. ROP vormt de basis van moderne binaire exploitatie.

Gratis beginnen

Leer Cyber Security Academy met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
303

Veelgestelde vragen

Is de les “Return-Oriented Programming (ROP)” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Cyber Security Academy, waaronder “Return-Oriented Programming (ROP)”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Cyber Security Academy bevat in totaal 4 lessen.

Wat leer ik in “Return-Oriented Programming (ROP)”?

Koppel ROP-gadgets om NX/DEP te omzeilen en exploits zonder shellcode te bouwen. Je oefent met Cyber Security Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Cyber Security Academy te beginnen?

Ervaring vooraf is niet nodig. Cyber Security Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Return-Oriented Programming (ROP)”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Cyber Security Academy?

Ja. Elke les over Cyber Security Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Stackbuffer-overflows
  2. Return-Oriented Programming (ROP)
  3. Kwetsbaarheden in format strings
  4. Heap-exploitation: use-after-free en heap spraying
← Terug naar Cyber Security Academy