Wykrywanie i unikanie podatności w aplikacjach natywnych
LICZBA DNI: 3 (24h)
KOD KURSU: XPL
O szkoleniu
DLA KOGO?
Szkolenie jest adresowane do specjalistów z zakresu bezpieczeństwa aplikacji, testerów wykonujących testy penetracyjne oraz programistów
WYMAGANIA
Od uczestników wymagana jest znajomość zasad działania komputera na poziomie architektury oraz biegłe posługiwanie się wybranym systemem operacyjnym (Windows lub Linux)
Sugerowana jest też umiejętność rozumienia kodu napisanego w języku C/C++ oraz asemblera x86 i x86-64
Pomocne jest wcześniejsze odbycie szkolenia z Inżynierii wstecznej (Reverse engineering)
ZALETY
Istotnym elementem szkolenia są warsztaty, podczas których uczestnicy przećwiczą poznane techniki na praktycznych przykładach z wykorzystaniem wiodących narzędzi i technik
Cele szkolenia
Uczestnik szkolenia będzie umiał identyfikować podatności, wykorzystywać je do zakłócenia bądź przejęcia kontroli nad systemem oraz przygotować odpowiedni kod PoC (Proof of Concept)
Program
Wprowadzenie
- Linux
- Zarządzanie pamięcią i formaty plików wykonywalnych
- Narzędzia: GDB, objdump
- Windows
- Zarządzanie pamięcią i formaty plików wykonywalnych
- Narzędzia: IDA Pro, OllyDbg, WinDbg, Immunity Debugger
Wyszukiwanie błędów - podejście
- Oprogramowanie z i bez dostępnego kodu źródłowego
Kategorie błędów
- Przepełnienie stosu (stack overflow)
- Łańcuchy formatujące (format string)
- Przepełnienie sterty (heap overflow)
- Sytuacje wyścigu (race condition)
- Użycie zwolnionej pamięci (use after free)
- Użycie nieaktualnej wartości (time of check, time of use)
- Odmowa usługi
- Do czego można wykorzystać błędy - DoS vs. zdobycie kontroli
Metody wyszukiwania błędów
- Analiza statyczna
- Fuzzing statyczny
- Fuzzing dynamiczny - zwiększanie skuteczności fuzzera przez badanie pokrycia kodu i modyfikację próbek
- Generowanie błędów (fault injection)
- Pokrycie kodu i wnioski z pokrycia kodu
- Porównywanie zmian w kodzie oraz poprawek
Narzędzia i ćwiczenia praktyczne
- Lint, FindBugs, PMD oraz SonarQube
- Valgrind
- Zzuf, SPIKE, AFL
- IDA, IDASploit
- BinNavi
Kody powłoki (shellcode)
- Po co shellcode?
- Budowa kodu shellcode
- Linux
- Windows
Implementacja PoC (Proof of Concept)
- Samodzielny program exploit - przykłady w C i Python
- Moduł Metasploit - implementacja przykładowego exploita
Mechanizmy zabezpieczające na poziomie OS
- W^X
- Niewykonywalny stos
- Filtry - shellcode z wykorzystaniem Unicode/ASCII
- ASLR
Mechanizmy zabezpieczające na poziomie kompilatora i języka programowania
- Wykrywanie nadpisania stosu (stack canaries)
- Użyteczne wzorce i biblioteki
- Przykłady z użyciem GCC i Visual C++
