Jak odbywają się ataki wykorzystujące przepełnienie buforu
Atakujący wykorzystują podatność przepełnienia buforu w celu uruchomienia kodu wykonywalnego poprzez przepełnienie buforów pamięci o ustalonej wielkości zarezerwowanych dla procesów wejściowych. Taki kod umożliwia atakującemu przejęcie komputera lub zagrożenie jego danym.
Poniżej opisano ataki polegające na przepełnieniu buforu oparte na stosie:
- Normalny proces pamięci stosu — obiekt pamięci stosu o ustalonej wielkości jest zazwyczaj pusty i oczekuje na dane wejściowe użytkownika. Kiedy program odbierze takie dane, na przykład nazwę, zapisuje je na górze stosu i przypisuje im zwrotny adres w pamięci. Podczas przetwarzania stosu dane wejściowe użytkownika są przesyłane na adres zwrotny określony przez program.
- Przepełnienie stosu — kiedy pisano program, zarezerwowano określoną ilość pamięci na dane. Jeśli zapisane dane są większe niż zarezerwowane dla nich miejsce w stosie, następuje przepełnienie stosu. Stanowi to problem tylko wtedy, gdy następuje w powiązaniu ze złośliwymi danymi wejściowymi.
- Wykorzystanie przepełnienia — jeśli program oczekuje na wpisanie nazwy przez użytkownika, ale atakujący wpisze polecenie wykonywalne, które przekracza wielkość stosu, polecenie to jest zapisywane poza zarezerwowanym miejscem.
- Uruchomienie złośliwego kodu — polecenie nie jest uruchamiane automatycznie, tylko dlatego że przekracza wielkość buforu stosu. Jednakże może zostać uruchomione, jeśli atakujący poda adres zwrotny wskazujący na złośliwe polecenie. Początkowo występuje awaria programu spowodowana przepełnieniem buforu, ale program próbuje odzyskać stabilność, korzystając z adresu zwrotnego podanego przez atakującego. Jeśli adres zwrotny jest poprawny, powoduje to uruchomienie złośliwego polecenia.
- Wykorzystanie uprawnień — ponieważ programy zazwyczaj działają w trybie jądra lub z uprawnieniami dziedziczonymi z konta usługi, złośliwy kod ma teraz te same uprawnienia, co aplikacja, która padła ofiarą ataku. Może to oznaczać, że atakujący uzyska pełną kontrolę nad systemem operacyjnym.