Wykrywanie i unikanie podatności w aplikacjach natywnych

Czas trwania szkolenia:3 dni (24h)

Kod kursu:XPL

Poziom zaawansowania:

security

Szkolenie na zamówienie

Szkolenie dostosowane do potrzeb Twojego zespołu.
Dostępne wyłącznie na zamówienie

  • Dostosowany program
  • Indywidualna wycena
  • Dowolny termin
Icon with laptop

O szkoleniu Wykrywanie i unikanie podatności w aplikacjach natywnych

W cenie otrzymasz:

  • Materiały szkoleniowe
  • Certyfikat ukończenia szkolenia
  • W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki

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
  • Praktyka przed teorią - wszystkie szkolenia technologiczne prowadzone są w formie warsztatowej. Konieczna teoria jest wyjaśniana na przykładzie praktycznych zadań
  • Konkretne umiejętności - w ramach każdego szkolenia rozwijamy praktyczne umiejętności związane z daną technologią i tematyką
  • Nauka z praktykami - wszyscy trenerzy na co dzień pracują w projektach, gwarantuje to dostęp do eksperckiej wiedzy i praktycznego know-how

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
  • Windows

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

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++

Podobne szkolenia