Mar
4

Co za dużo to niezdrowo

Tak nazywał się wykład, który miałem okazję przedstawić na tegorocznym Zimowym Obozie Studentów Informatyki A (w skrócie ZOSIA 2011. Poniżej abstrakt, a w dalszej części wpisu dokładniejsze info o czym opowiadałem:

Abstrakt:
Pod przykrywką zaprezentowania ataku stack buffer overflow omówimy co złego może wydarzyć się na stosie, gdy nie sprawdzamy wprowadzonych przez użytkownika danych. Dowiemy się czym są kanarki oraz poznamy jeszcze parę innych zabezpieczeń, które chronią nasze aplikacje przed tym błędem. Na koniec, zastanowimy się, czy rzeczywiście są one tak bezpieczne.

 

Zaczęło się od tego czym jest stos i w którym miejscu pamięci się on znajduje. Nie zabrakło też kilku informacji jak ta pamięć wygląda (głównie user-land, bo tym kawałkiem się zajmowaliśmy). Wspomniałem też w paru słowach o znaku null terminator występującym w tablicach char. Do zaprezentowania błędu wykorzystałem powszechnie znany (i uznawany za klasyk :P) strcpy(), który kopiował argument funkcji do jakiegoś małego, lokalnego bufora. Opowiedzieliśmy sobie czym jest EIP i ramka stosu, a później zaprezentowałem co i w jakiej kolejności ląduje na stosie po wywołaniu podatnej na buffer overflow funkcji.

Po zaprezentowaniu idei ataku (i miejsc, w które można wstrzyknąć shellcode) opowiedziałem trochę o zabezpieczeniach. Głównie skupiłem się na kanarkach, DEP i ASLR. Nie zabrakło też wzmianki, że nie tylko system i kompilator powinien czuwać nad błędami, ale jest to również obowiązek programisty (strncpy() jest lepsze). Na koniec, ciut pesymistycznym akcentem zaznaczyłem, że obecne zabezpieczenia również da się obejść (ot, chociażby JIT Sprying).

Zdecydowałem, że prezentacji (pliku .ppt) nie będę publikował w sieci – miała ona jedynie pomóc lepiej zobrazować o czym mówię i bez jakiegokolwiek komentarza nie stanowi ona jakiegoś cennego źródła wiedzy.

 

 

  

Dodaj komentarz

*

Audio-CAPTCHA