Cyber Security Academy · Lektion

Heapexploatering: use-after-free och heap spraying

Förstå internals i glibc malloc, use-after-free-tillstånd och tekniker för heap spraying.

Lektion 4 av 413 steg

Heapexploatering: use-after-free och heap spraying är en gratis lektion i Cyber Security Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Cyber Security Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cyber Security Academy innehåller totalt 4 lektioner.

Heapen

Heapen är dynamiskt minne som allokeras vid körning via malloc()/free()/new/delete. Till skillnad från stacken bestäms heapens layout av mönstren för allokering och frigöring, inte av anropsstacken. Heap-sårbarheter är vanliga i webbläsare, parsers och nätverksdaemoner.

Use-After-Free (UAF)

En sårbarhet av typen Use-After-Free uppstår när ett program fortsätter att använda ett minnesområde efter att det har frigjorts. Om det frigjorda området allokeras på nytt med data som angriparen kontrollerar arbetar programmet nu med angriparens data via den gamla pekaren.

UAF-exempel

UAF-mönster:

// Vulnerable C code:
struct Object *obj = malloc(sizeof(*obj));
free(obj);
// Later, attacker causes a new malloc to fill the freed region
// with their data...
obj->method();  // now calls attacker's function pointer!

Heap feng shui

Heap feng shui (eller heap grooming) är tekniken att manipulera heapallokeraren för att placera objekt på specifika positioner, vilket möjliggör kontrollerad återanvändning av frigjort minne. Angriparen formar heapen genom att utlösa allokeringar och frigöringar i en noggrant bestämd ordning.

Heap spraying

Heap spraying allokerar stora mängder data som angriparen kontrollerar (shellcode + NOP sleds) över hela heapen. När så stor del av heapen är fylld är det sannolikt att en felaktig pekare landar i angriparens data. Används ofta tillsammans med UAF- eller type confusion-buggar.

// JavaScript heap spray:
var spray = [];
for(var i = 0; i < 100000; i++) {
  spray[i] = unescape("%90%90...shellcode...");
}

Double free

En double free uppstår när minne frigörs två gånger. Den andra frigöringen korrumperar heapallokerarens metadata (pekare i free-listan), vilket potentiellt gör det möjligt för en angripare att styra var nästa allokering placeras — och skriva till en godtycklig adress.

Heapbuffertöverflöde

Precis som stacköverflöden skriver ett heapbuffertöverflöde förbi slutet av en heapallokering. Till skillnad från stacköverflöden är målet vanligtvis heapmetadata (storlek samt framåt- och bakåtpekare) eller angränsande allokeringar som innehåller funktionspekare eller vtable-pekare.

Type confusion

Type confusion uppstår när ett minnesområde som allokerats som en typ används som en annan typ. Det är vanligt i JavaScript-motorer och C++-kod. Om en angripare kan kontrollera allokeringsordningen kan han eller hon få motorn att behandla angriparens data som ett betrott objekt.

Interna detaljer i ptmalloc och tcmalloc

Kunskap om heapallokeraren underlättar exploitutveckling. glibc:s ptmalloc använder bins (unsorted, small, large) och fast bins. tcache (per-thread cache) är den första källan för allokeringar. Exploitar riktar sig ofta mot korruption av bins för att kontrollera framtida allokeringsadresser.

Begränsningar

Begränsningar mot heapexploatering:

  • Heap randomization (en del av ASLR) — randomiserar heapens basadress
  • Safe unlinking — verifierar framåt- och bakåtpekare före unlinking
  • tcache poisoning detection — lades till i glibc 2.32
  • Pointer mangling — krypterar lagrade pekare i tcache
  • Minnessäkra språk — Rust eliminerar UAF vid kompilering

Webbläsarbaserade heapexploitar

De flesta 0-days i webbläsare involverar heap-sårbarheter i JavaScript-motorer (V8, SpiderMonkey). Moderna webbläsare bygger kedjor för att ta sig ut ur sandlådan: heapbugg i renderingsprocessen → ut ur sandlådan till webbläsarprocessen → privilegieeskalering i operativsystemet. Varje steg kräver sin egen teknik.

Snabbkontroll: heapexploatering

Vilken sårbarhet gör det möjligt för en angripare att kontrollera programmets körning genom att använda en gammal pekare till minne som redan har frigjorts och allokerats på nytt med data som angriparen kontrollerar?

Sammanfattning av lektionen

Heap-sårbarheter — UAF, double free, heapöverflöden och type confusion — utnyttjar felaktig hantering av dynamiskt minne. Use-after-free är den vanligaste moderna klassen av exploitar. Heap spraying maximerar sannolikheten att träffa angriparens data. Begränsningar: ASLR, safe unlinking och pointer mangling. Minnessäkra språk som Rust eliminerar dessa klasser helt.

Gratis att börja

Lär dig Cyber Security Academy med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
303

Vanliga frågor

Är lektionen ”Heapexploatering: use-after-free och heap spraying” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Cyber Security Academy, inklusive ”Heapexploatering: use-after-free och heap spraying”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Cyber Security Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Heapexploatering: use-after-free och heap spraying”?

Förstå internals i glibc malloc, use-after-free-tillstånd och tekniker för heap spraying. Ni övar på Cyber Security Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Cyber Security Academy?

Du behöver inga förkunskaper. Utbildningen i Cyber Security Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Heapexploatering: use-after-free och heap spraying”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Cyber Security Academy-lektionen?

Ja. Varje Cyber Security Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Stackbaserade buffertöverflöden
  2. Return-Oriented Programming (ROP)
  3. Sårbarheter i formatsträngar
  4. Heapexploatering: use-after-free och heap spraying
← Tillbaka till Cyber Security Academy