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