Cyber Security Academy · Lektion

Return-Oriented Programming (ROP)

Kæd ROP-gadgets for at omgå NX/DEP, og byg exploits uden shellcode.

Lektion 2 af 413 trin

Return-Oriented Programming (ROP) er en gratis Cyber Security Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Cyber Security Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cyber Security Academy-kurset indeholder 4 lektioner i alt.

Hvorfor ROP findes

Med NX/DEP kan injiceret shellcode ikke eksekveres. Returorienteret programmering (ROP) omgår dette ved at kæde små eksisterende kodesekvenser (gadgets), der slutter med ret-instruktioner. Der injiceres ingen ny kode — kun stakken og eksisterende kode bruges.

Hvad er en ROP-gadget?

En gadget er en kort sekvens af instruktioner, der slutter med ret, og som findes i binærfilen eller indlæste biblioteker. Eksempler: pop rdi; ret, pop rsi; ret, mov eax, 0; ret. Gadgets er byggestenene i ROP-kæder.

Sådan finder du gadgets

Værktøjer til at finde ROP-gadgets i binærfiler:

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

Opbygning af en ROP-kæde

En ROP-kæde er en sekvens af returadresser på stakken. Når den overskrevne returadresse rammes, hopper den til gadget 1 (som udfører noget nyttigt og derefter returnerer), som henter den næste adresse og hopper til gadget 2, og så videre.

ret2plt og GOT-overskrivning

ret2plt kalder funktioner via PLT (procedurekoblingstabellen) — nyttigt til at kalde puts() for at lække libc-adresser og derefter bruge dem til at kalde system(). PLT/GOT-strukturerne er forudsigelige selv med ASLR for hovedbinærfilen (uden PIE).

Omgåelse af ASLR med ROP

ROP kan lække adressen på en libc-funktion fra GOT ved hjælp af en gadget, der kalder puts(GOT_entry). Den lækkede adresse afslører libc-basisen. Beregn forskydningen til system(): system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].

SROP: sigreturn-orienteret programmering

SROP bruger sigreturn-systemkaldet til at indlæse en falsk sigcontext-ramme, som indstiller alle registre til angriberstyrede værdier i én gadget. Det er nyttigt, når der kun er få gadgets til rådighed.

JOP- og COP-varianter

Ud over ROP:

  • JOP (jump-orienteret programmering) — kæder gadgets, der slutter med jmp i stedet for ret
  • COP (call-orienteret programmering) — kæder gadgets, der slutter med call

Forsvar som CFI (integritet af kontrolflow) sigter mod at forhindre dem alle.

Integritet af kontrolflow (CFI)

CFI håndhæver, at indirekte forgreninger (kald, returneringer) kun hopper til gyldige mål. Det bryder ROP ved at validere returmålet mod en skyggestak eller en tilladelsesliste. Intel CET (teknologi til håndhævelse af kontrolflow) implementerer CFI på hardwareniveau.

Praktisk ROP-eksempel

Et 64-bit-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()

Oversigt over beskyttelser

Beskyttelser mod ROP:

  • CFI — validerer forgreningsmål
  • Skyggestak (CET) — hardwarebeskyttet kopi af returadressen
  • RELRO (fuld) — gør GOT skrivebeskyttet og forhindrer overskrivninger
  • PIE — randomiserer binærfilens basis og kræver en lækage for at finde gadgets

Hurtigt tjek: ROP

Hvad er en ROP-gadget?

Opsummering af lektionen

ROP omgår NX/DEP ved at kæde eksisterende kodesekvenser (gadgets, der slutter med ret) — ingen shellcode-injektion er nødvendig. Værktøjer til at finde gadgets: ROPgadget, ropper. ret2plt lækker libc-adresser for at omgå ASLR. Beskyttelser: CFI, skyggestakke (Intel CET), PIE, fuld RELRO. ROP er grundlaget for moderne binærudnyttelse.

Gratis at komme i gang

Lær Cyber Security Academy med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
76
Lektioner
303

Ofte stillede spørgsmål

Er lektionen “Return-Oriented Programming (ROP)” gratis?

Ja — alle 3 lektioner i læringssporet Cyber Security Academy, inklusive “Return-Oriented Programming (ROP)”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Cyber Security Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Return-Oriented Programming (ROP)”?

Kæd ROP-gadgets for at omgå NX/DEP, og byg exploits uden shellcode. Du øver dig i Cyber Security Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Cyber Security Academy?

Der kræves ingen tidligere erfaring. Cyber Security Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Return-Oriented Programming (ROP)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Cyber Security Academy-lektion?

Ja. Alle Cyber Security Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Stack buffer overflows
  2. Return-Oriented Programming (ROP)
  3. Sårbarheder i formatstrenge
  4. Heap-exploitering: Use-After-Free og heap spraying
← Tilbage til Cyber Security Academy