Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałKlimek Szymajda Został zmieniony 11 lat temu
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
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
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
Zapowiedź problemu //syslog_test_1_c #include <stdio.h>
#include <string.h> 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"); return 0; }
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
Stos po wywołaniu funkcji
7
Zaatakowany program
8
Hasło – sam sobie ustalę
//password.c #include <stdio.h> #include <string.h> 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
* 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
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
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
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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.