Bezpieczne programowanie

Cele prezentacji








Wstęp








Najczęstsze źródła błędów w programach


Blędy implementacyjne









Błędy związane z projektowaniem









Omówienie przepełnienia bufora

Błąd ten omówię na przykładzie języka C, ale może się on zdarzyć się w każdym języku, który pozwala na zapis w pamięci, do której program nie powienien mieć normalnie dostępu.

Istnieje wiele wariantów tego błędu, ale generalnie polega on na skopiowaniu danych z jednego obiektu do innego, bez sprawdzenia czy obiekt nadpisywany jest wystarczająco duży, żeby zmieścić wszystkie kopiowane dane. Do kopiowania używana jest funkcja taka jak sprintf.






Przykład programu, który zawiera ten błąd:


void main (int argc, char *argv[]){
	p(argv[1]);
}

void p (char *str){
	char bufor[16];
	
	strcpy(bufor,str);
}







Błąd ten można wykorzystać, kiedy program zawierający błąd wykonuje się w atakowanym systemie. Błędny program można wykorzystać do uruchomienia dowolnego kodu z uprawnieniami użytkownika, który ten program uruchomił. Jeśli jest to administrator, atakujący uzyskuje pełną kontrolę nad systemem.

Wykorzystywany jest mechanizm zapisywania argumentów funkcji i adresu powrotnego na stosie w momencie wywołania funkcji. Dokładniej, w momencie wołania funkcji na stosie zapisywane są: argumenty funkcji, adres powrotu, wskaźnik ramki stosu (SFP) i miejsce na zmienne lokalne funkcji.






Na przykład w momencie wywołania funkcji:

void function(char *str) {
   char bufor[16];

   strcpy(bufor,str);
}
Stos będzie wyglądał następująco:
stos







Błąd ten pojawia się bardzo często i mimo faktu, że jest powszechnie znany i wiele jego wariantów zostało dogłębnie przeanalizowane. W zeszłym roku w produktach firmy Microsoft zostało zgłoszonych oficjalnie 28 błędów typu BO, z czego ponad połowa o najwyższej randze (Critical). Najświeższy z nich z 18 grudnia pozwalał użytkownikowi dowolnej wersji Windows XP uruchomić shella z uprawnieniami administratora. [Microsoft 1] Tylko w grudniu na liście Bugtraq pojawiło się 18 zgłoszeń takich błędów.






Literatura

Dalej