0Pricing
Cyber Security Academy · Lekcja

Wykorzystanie sterty: use-after-free i heap spraying

Poznają Państwo elementy wewnętrzne glibc malloc, warunki use-after-free i techniki heap spray.

Wykorzystanie sterty: use-after-free i heap spraying to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cyber Security Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Sterta

Sterta to pamięć dynamiczna przydzielana w czasie działania programu za pomocą malloc()/free()/new/delete. W przeciwieństwie do stosu układ sterty zależy od wzorców alokacji i zwalniania, a nie od stosu wywołań. Podatności sterty często występują w przeglądarkach, parserach i demonach sieciowych.

Use-After-Free (UAF)

Podatność Use-After-Free występuje, gdy program nadal używa obszaru pamięci po jego zwolnieniu. Jeśli zwolniony obszar zostanie ponownie zaalokowany z danymi kontrolowanymi przez atakującego, program zaczyna operować na danych atakującego za pomocą nieaktualnego wskaźnika.

Przykład UAF

Wzorzec UAF:

// 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 (lub heap grooming) to technika manipulowania alokatorem sterty w celu umieszczania obiektów w określonych miejscach, co umożliwia kontrolowane ponowne użycie zwolnionej pamięci. Atakujący kształtuje stertę, wyzwalając alokacje i zwolnienia w precyzyjnej kolejności.

Heap Spraying

Heap spraying polega na alokowaniu dużych ilości danych kontrolowanych przez atakującego (shellcode + NOP sleds) w całej stercie. Gdy sterta jest wypełniona w tak dużym stopniu, błędny wskaźnik prawdopodobnie trafi w dane atakującego. Technika ta jest często używana wraz z podatnościami UAF lub błędami pomylenia typów.

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

Podwójne zwolnienie

Double free występuje, gdy pamięć zostaje zwolniona dwukrotnie. Drugie zwolnienie uszkadza metadane alokatora sterty (wskaźniki listy wolnych bloków), potencjalnie pozwalając atakującemu kontrolować miejsce umieszczenia następnej alokacji — i zapisywać pod dowolnym adresem.

Przepełnienie bufora sterty

Podobnie jak przepełnienie stosu, przepełnienie bufora sterty zapisuje dane poza końcem alokacji na stercie. W przeciwieństwie do przepełnień stosu celem są zazwyczaj metadane sterty (rozmiar, wskaźniki do przodu i do tyłu) lub sąsiednie alokacje zawierające wskaźniki funkcji albo wskaźniki vtable.

Pomylenie typów

Type confusion występuje, gdy fragment pamięci zaalokowany jako jeden typ jest używany jako inny typ. Zjawisko to często występuje w silnikach JavaScript i kodzie C++. Jeśli atakujący może kontrolować kolejność alokacji, może sprawić, że silnik potraktuje dane atakującego jako zaufany obiekt.

Wewnętrzne mechanizmy ptmalloc i tcmalloc

Zrozumienie działania alokatora sterty pomaga w tworzeniu exploitów. ptmalloc w glibc używa binów (unsorted, small, large) oraz fast binów. tcache (pamięć podręczna wątku) jest pierwszym źródłem alokacji. Exploity często celują w uszkodzenie binów, aby kontrolować adresy przyszłych alokacji.

Zabezpieczenia

Zabezpieczenia przed wykorzystywaniem sterty:

  • Losowanie sterty (część ASLR) — losuje bazowy adres sterty
  • Bezpieczne odłączanie — sprawdza wskaźniki do przodu i do tyłu przed odłączeniem
  • Wykrywanie zatruwania tcache — dodane w glibc 2.32
  • Manglowanie wskaźników — szyfruje zapisane wskaźniki w tcache
  • Języki bezpieczne pamięciowo — Rust eliminuje UAF na etapie kompilacji

Exploity sterty przeglądarki

Większość przeglądarkowych luk 0-day dotyczy podatności sterty w silnikach JavaScript (V8, SpiderMonkey). Współczesne przeglądarki stosują wieloetapowe łańcuchy ucieczki z piaskownicy: błąd sterty w procesie renderera → ucieczka do procesu przeglądarki → eskalacja uprawnień systemu operacyjnego. Każdy etap wymaga własnej techniki.

Szybki test: wykorzystywanie sterty

Która podatność pozwala atakującemu przejąć kontrolę nad wykonaniem programu dzięki użyciu nieaktualnego wskaźnika do pamięci, która została już zwolniona, a następnie ponownie zaalokowana z danymi atakującego?

Podsumowanie lekcji

Podatności sterty — UAF, podwójne zwolnienie, przepełnienie sterty i pomylenie typów — wykorzystują błędne zarządzanie pamięcią dynamiczną. Use-after-free jest obecnie najczęściej występującą klasą exploitów. Heap spraying maksymalizuje szansę trafienia w dane atakującego. Zabezpieczenia obejmują ASLR, bezpieczne odłączanie i manglowanie wskaźników. Języki bezpieczne pamięciowo, takie jak Rust, całkowicie eliminują te klasy podatności.

Często zadawane pytania

Czy lekcja „Wykorzystanie sterty: use-after-free i heap spraying” jest bezpłatna?

Tak — pełny tekst „Wykorzystanie sterty: use-after-free i heap spraying” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cyber Security Academy, przejdź na CoddyKit PRO. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wykorzystanie sterty: use-after-free i heap spraying”?

Poznają Państwo elementy wewnętrzne glibc malloc, warunki use-after-free i techniki heap spray. Ćwiczysz Cyber Security Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cyber Security Academy?

Nie wymagamy żadnego doświadczenia. Cyber Security Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wykorzystanie sterty: use-after-free i heap spraying”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cyber Security Academy?

Tak. Każda lekcja Cyber Security Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Przepełnienia bufora stosu
  2. Programowanie zorientowane na zwroty (ROP)
  3. Podatności format string
  4. Wykorzystanie sterty: use-after-free i heap spraying
← Powrót do Cyber Security Academy