Po nadpisaniu wartości na stosie odpowiednio dobranym adresem wskazującym na specjalnie spreparowany kod, program po zakończeniu aktualnie wykonywanej funkcji zamiast powrócić do funkcji nadrzędnej, wykonuje specjalnie przygotowany przez hakera kod.

Także w przypadku, gdy bezpośrednie nadpisanie adresu powrotnego nie jest możliwe (np. ze względu na to, że podatny na atak bufor znajduje się w oddzielnym regionie pamięci), ataki typu mogą prowadzić do przejęcia kontroli nad systemem przez nadpisanie istotnych parametrów wykorzystywanych przez program lub biblioteki standardowe.

Przykład Jeden z błędów wykorzystanych przez Roberta Morrisa, była podatność w procesie finger. W języku C istnieją dwie funkcje do pobierania danych od użytkownika.

char *fgets(char* restricted str, int size, FILE* restricted stream); char *gets(char* str);

W przypadku drugiej funkcji, której używał program finger, zbyt długi łańcuch wejściowy może spowodować przepełnienie bufora i możliwość przejęcia kontroli nad komputerem.

Zapobieganie Aby zapobiec tego typu atakom, zawsze należy brać pod uwagę rozmiar przyjmowanych danych. Należy unikać funkcji, które go nie sprawdzają (np. występująca w języku C funkcja strcpy), używając ich bezpieczniejszych odpowiedników (np. strncpy).

Zobacz też przepełnienie sterty przepełnienie stosu

Przypisy

Kategoria:Błędy programów komputerowych Kategoria:Cyberataki