Co to jest przepełnienie bufora stosu?

Przepełnienie bufora stosu ma miejsce, gdy program dokonuje wpisu do pamięci komputera, który jest dłuższy niż przydzielone miejsce. W pewnych okolicznościach może to spowodować uszkodzenie innych danych w pamięci, powodując problemy w działaniu komputera. W innych przypadkach przepełnienie bufora stosu może zostać wykorzystane przez złośliwą aplikację do przejęcia kontroli nad innymi częściami komputera.

Nazwa przepełnienia bufora stosu wywodzi się najpierw od stosu, który w rzeczywistości jest aktywną listą, na której zorganizowane są dane: termin pochodzi z analogii spiętrzenia fizycznych elementów. Jedna z wersji tego, stos wywołań, to lista, której program komputerowy używa do śledzenia różnych części programu, podprogramów, które działają w danym momencie. Ponieważ stos wywołań działa tymczasowo i wymaga szybkiego dostępu, znajduje się on w pamięci komputera, a nie w pamięci stałej, takiej jak dysk twardy.

Ponieważ nowoczesne systemy operacyjne umożliwiają jednoczesne uruchamianie wielu programów, istnieje potrzeba uporządkowania sposobu przydzielania pamięci, w tym stosów wywołań. Odbywa się to wydajnie, przypisując bufory, przestrzeń w pamięci zaprojektowaną tak, aby była wystarczająco duża, aby poradzić sobie z maksymalną przestrzenią wymaganą przez konkretny bufor. W większości przypadków część miejsca będzie niewykorzystana, więc działa jako bufor między danymi z różnych aplikacji, pozostawiając miejsce na radzenie sobie, jeśli nagle potrzebujesz dodatkowej przestrzeni. Jednym ze sposobów wizualizacji tego byłoby wymyślenie biblioteki, która przydzieliła określoną ilość miejsca do każdego obszaru tematycznego, upewniając się, że zostawisz trochę dodatkowego miejsca na radzenie sobie, jeśli na przykład wszystkie książki na jeden temat znajdowały się w bibliotece na w tym samym czasie, a nie sprawdzanie żadnego z nich.

Przepełnienie bufora stosu występuje, gdy program zapisuje dane stosu wywołań w buforze w sposób, który przekracza przydzielone miejsce. Może się to zdarzyć przez pomyłkę, zwykle przez błąd w programie. Na przykład, jeśli aplikacja została zaprojektowana tak, aby umożliwić użytkownikowi wpisanie numeru telefonu, ale nie ma limitu liczby znaków, które można wprowadzić, haker może użyć pola nieograniczonego, aby celowo spowodować przepełnienie bufora stosu . W zależności od sposobu działania systemu operacyjnego może to umożliwić hakerowi pośredni dostęp do innej aplikacji lub samego systemu operacyjnego.

Istnieje kilka podejść do łagodzenia skutków przepełnienia bufora stosu. Jeden jest znany jako randomizacja układu przestrzeni adresowej. Uporządkuje to w sposób losowy najważniejsze obszary danych na komputerze. Chodzi o to, że nawet jeśli haker spowoduje lub wykorzysta przepełnienie bufora stosu, nie będzie w stanie wykorzystać tego naruszenia w niezawodny sposób.