Heap overflow
Z Wikipedii
Heap overflow - to inna nazwa błędu przepełnienia bufora, mającego miejsce na stercie. Sterta jest obszarem pamięci procesu na którym dynamicznie alokowane są bufory na dane.
Spis treści |
[edytuj] Szczegóły techniczne
Błąd przepełnienia bufora, mającego miejsce na stercie, może zostać wykorzystany przez crackera do przejęcia kontroli nad błędnie napisaną aplikacją lub spowodowania ataku typu DoS.
Wykorzystanie błędu polega na doprowadzeniu do stanu, gdy zapisywane na stercie dane procesu nadpiszą struktury kontrolne alokatora pamięci zarządzającego stertą procesu. Taka sytuacja najczęściej prowadzi do zakończenia działania procesu przez jądro systemu operacyjnego, co jest spowodowane błędem ochrony pamięci występującym w następstwie uszkodzenia struktur alokatora pamięci sterty. W szczególnym przypadku wykorzystanie błędu może prowadzić do przejęcia kontroli nad aplikacją.
[edytuj] 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 kontrole pod względem ich integralności i poprawności. W tym przypadku, naruszenie struktur kontrolnych alokatora pamięci skutkuje zakończeniem działania procesu.