Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 PRZEPEŁNIENIE BUFORA B u f f e r O v e r f l o w WSIZ Copernicus 6 ZINF, Łukasz Rajzer, nr indeksu 1749.

Podobne prezentacje


Prezentacja na temat: "1 PRZEPEŁNIENIE BUFORA B u f f e r O v e r f l o w WSIZ Copernicus 6 ZINF, Łukasz Rajzer, nr indeksu 1749."— Zapis prezentacji:

1 1 PRZEPEŁNIENIE BUFORA B u f f e r O v e r f l o w WSIZ Copernicus 6 ZINF, Łukasz Rajzer, nr indeksu 1749

2 2 B u f f e r O v e r f l o w Wprowadzenie Buffer Overflow – ogólna definicja Struktura pamięci Zasada działania włamującego Przykłady podatnych kodów Wskazówki dla programistów

3 3 Bufor programu Program komputerowy składa sie kodu, który korzysta ze zmiennych zapisanych w różnych miejscach pamięci. Podczas wykonywania sie programu zmiennym przydzielana jest pamięć, a jej ilość zależy od rodzaju informacji, które ma przechowywać zmienna. Na przykład dane typu Short Integer zajmują niewiele miejsca w pamięci RAM, natomiast dane Long Integer zajmują go więcej. Istnieją różne rodzaje zmiennych, a każdy rodzaj może potrzebować innej ilości pamięci. Przestrzeń zarezerwowana w pamięci dla zmiennej jest używana do przechowywania informacji niezbędnych do wykonywania sie programu. Program przechowuje w tym obszarze pamięci zawartość zmiennej i w razie potrzeby pobiera ja stamtąd. Ta wirtualna przestrzeń nazywana jest buforem.

4 4 Zapowiedź problemu //syslog_test_1_c #include int main(int argc, char **argv) { char tab1[6] = "TEKST"; char tab2[12] = "DLUGI TEKST"; printf("\n tab1: %s", tab1); printf("\n tab2: %s", tab2); strcpy(tab2,"TO BEDZIE HAKER ATAK"); printf("\n tab2: %s", tab2); printf("\n tab1: %s", tab1); return 0; }

5 5 B u f f e r O v e r f l o w Definicja ogólna Przepełnienie bufora (ang. Buffer overflow) polega na nieplanowanej przez twórcę ingerencji w bufor programu; podanie większej ilości danych przekraczających tablicę – wydzielony obszar pamięci zostaje nadpisany nadmiarowymi informacjami. Nadpisanie pamięci może nieść skutek zmiany wartości zmiennych, jak i adresu powrotów funkcji. W najgorszym przypadku ataku dane nadmiarowe są nowymi instrukcjami, umożliwiającymi napastnikowi sterowaniem pracą procesora.

6 6 Stos po wywołaniu funkcji

7 7 Zaatakowany program

8 8 Hasło – sam sobie ustalę //password.c #include void check_password(char *pass1, char *pass2){ char buffer1[8]; char buffer2[8]; strcpy(buffer1, pass1); strcpy(buffer2, pass2); printf("buffer1: '%s' buffer2: '%s'\n", buffer1, buffer2); if( strcmp(buffer1, buffer2) == 0 ) printf("password ok\n"); else printf("wrong password\n"); } int main() { char stored_password[8]; char entered_password[8]; strcpy(stored_password,"mypass"); printf("Enter password: "); gets(entered_password); check_password(stored_password, entered_password); printf("Correct password: %s\n", stored_password); return 0;}

9 9 * Przepełnienie sterty Sterta (ang. heap) nazywamy obszar pamięci dynamicznie przydzielonej aplikacji w celu przechowywania w niej zmiennych. W ataku przepełnienia sterty haker u siłuje zmienić zawartość takich zmiennych, jak hasła, nazwy plików oraz identyfikatory UID znajdujące się na stercie. Jaka jest różnica miedzy przepełnieniem bufora a przepełnieniem sterty? W przypadku przepełnienia bufora zmiana zawartości adresu powrotu znajdującego się na stosie oznacza próbę wykonania określonych instrukcji maszynowych. W przypadku przepełnienia sterty zmiana zawartości zmiennych dynamicznych oznacza próbę podniesienia poziomu uprawnień w systemie. Programy stosujące przepełnienie sterty wykorzystują błędy formatów oraz atakują funkcje malloc( ) i free( ).

10 10 Shellcode Shellcode - anglojęzyczny zlepek słów shell (powłoka) oraz code (kod) oznaczający prosty, niskopoziomowy program odpowiedzialny za wywołanie powłoki systemowej w ostatniej fazie wykorzystywania wielu błędów zabezpieczeń przez exploity.

11 11 Zapobieganie przepełnieniom bufora Sprawdzanie wielkości danych przed umieszczeniem ich w buforze. Użycie funkcji ograniczających liczbę i (lub) format wprowadzanych znaków. Unikanie niebezpiecznych funkcji języka C, takich jak scanf( ), strcpy( ), strcat( ), getwd( ), gets( ), strcmp( ), sprintf( ). Bezpieczniejsze: JAVA,.NET. Funkcja systemu operacyjnego DEP (Data Execution Prevention) NX-bit (AMD), XD-bit (Intel) Narzędzia analizujące kod, chroniące stos

12 12 Literatura Strażnik bezpieczeństwa danych - Cyrus Peikari, Anton Chuvakin; Hellion 2005 (tyt. oryg. Security Warrior) Buffer Overflow Attacks - Detect, Exploit, Prevent – James C. Foster; Syngress 2005 Problem przepełnienia bufora – Piotr Kubowicz – opracowanie problemu


Pobierz ppt "1 PRZEPEŁNIENIE BUFORA B u f f e r O v e r f l o w WSIZ Copernicus 6 ZINF, Łukasz Rajzer, nr indeksu 1749."

Podobne prezentacje


Reklamy Google