Przepełnienie sterty

Przepełnienie sterty (ang. heap overflow) – rodzaj błędu przepełnienia bufora, mającego miejsce na stercie. Sterta jest obszarem pamięci procesu na którym dynamicznie alokowanebufory na dane. Jeśli błędnie napisana aplikacja dokona próby zapisania większej porcji danych, niż wcześniej przeznaczono na ten cel pamięci, nadpisane mogą zostać struktury kontrolne aplikacji, i możliwe jest naruszenie integralności danego programu.

Szczegóły techniczne

Błąd przepełnienia bufora na stercie, podobnie jak inne błędy z tej grupy, może zostać wykorzystany przez osoby trzecie do przejęcia kontroli nad podatną aplikacją albo do spowodowania ataku typu DoS.

Wykorzystanie tego typu podatności polega na doprowadzeniu do stanu, gdy zapisywane na stercie dane procesu nadpiszą struktury kontrolne alokatora pamięci zarządzającego stertą procesu albo inne dane kontrolne specyficzne dla atakowanego programu. Taka sytuacja najczęściej prowadzi do zakończenia działania procesu przez jądro systemu operacyjnego na skutek naruszenia ochrony pamięci przy najbliższej próbie posłużenia się uszkodzonymi danymi. Przez odpowiednią manipulację zapisanymi do pamięci wartościami jest jednak często możliwe przejęcie kontroli nad aplikacją.

Obrona

W celu obrony przed tego typu błędami należy unikać technik programistycznych, które przy zapisie obszarów pamięci nie weryfikują długości docelowego bufora danych (np. użycie funkcji biblioteki języka C: strcpy, strcat, sprintf).

Dodatkowo, możliwe jest zabezpieczenie aplikacji przez taką konstrukcję alokatora pamięci, która weryfikuje przed użyciem struktury kontrolne pod względem ich integralności i poprawności. W tym przypadku, naruszenie struktur kontrolnych alokatora pamięci skutkuje zakończeniem działania procesu.

Zobacz też

Linki zewnętrzne