Przepełnienie bufora: Różnice pomiędzy wersjami
[wersja nieprzejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
drobne redakcyjne |
drobne redakcyjne |
||
Linia 1:
{{dopracować|styl}}
{{Spis treści}}
'''Przepełnienie bufora''' ({{ang.|buffer overflow}}) – [[bug (programowanie)|błąd programistyczny]] polegający na zapisaniu do wyznaczonego obszaru pamięci ([[Bufor (programowanie)|bufor]]a) większej ilości danych niż zarezerwował na ten cel programista. Taka sytuacja prowadzi do zamazania danych znajdujących się w pamięci bezpośrednio za buforem, a w rezultacie do błędnego działania programu. Gdy dane, które wpisywane są do bufora, podlegają kontroli osoby o potencjalnie wrogich intencjach, może dojść do nadpisania struktur kontrolnych programu w taki sposób, by zaczął on wykonywać operacje określone przez atakującego.
Przyczyną powstawania takich błędów jest najczęściej brak odpowiedniej wiedzy lub należytej staranności ze strony autora oprogramowania.
== Szczegóły techniczne ==
Ze względu na sposób budowy [[
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 ''buffer overflow'' mogą prowadzić do przejęcia kontroli nad systemem przez nadpisanie istotnych parametrów wykorzystywanych przez program lub biblioteki standardowe.
== Przykład w działaniu ==
:''(Poniższe rozważania wymagają znajomości [[C (język programowania)|języka C]] oraz [[asembler]]a.)
Spróbujmy zaatakować bardzo prosty program, który sprawdza hasło podane w linii poleceń.
Załóżmy, że nie znamy hasła i nie mamy możliwości wyciągnięcia go z pliku binarnego.
Nie znamy też dokładnego kodu źródłowego, ale ponieważ program jest
<tt>hello.c</tt>:
Linia 51 ⟶ 54:
Dziura polega na tym, że <tt>buf</tt> ma stałą wielkość i nie sprawdza się długości danych, które do niego kopiujemy.
Najpierw musimy sprawdzić, czy w ogóle występuje taka dziura i jeśli tak, to ile danych potrzeba, żeby przepełnić bufor.
<tt>./exploit1.c</tt>:
|