Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów
LICZBA DNI: 5 (40h)
KOD KURSU: RE
Weź udział w szkoleniu
Termin
Lokalizacja
Cena / os
14
czerwca
Warszawa,
Kraków,
Łódź,
Wrocław,
Gdańsk,
Poznań,
Zdalne,
Termin
14
czerwca
Lokalizacja
Warszawa,
Kraków,
Łódź,
Wrocław,
Gdańsk,
Poznań,
Zdalne,
Cena / os
Powiadom
o kolejnych terminach
O szkoleniu
DLA KOGO?
Szkolenie **Inżynieria odwrotna kodu*
jest adresowane do programistów, testerów oraz specjalistów z zakresu bezpieczeństwa aplikacji
WYMAGANIA
Znajomość podstaw działania komputera na poziomie architektury
Umiejętność rozumienia kodu napisanego w językach typu C/C++, Java i .NET
Biegłe posługiwanie się wybranym systemem operacyjnym: Windows lub Linux
Wskazana jest znajomość jednego z popularnych języków skryptowych a także algorytmów i struktur danych
ZALETY
Podczas szkolenia **Inżynieria odwrotna*
uczestnicy poznają metody reverse engineeringu oraz zabezpieczania oprogramowania przed inżynierią odwrotną pod opieką doświadczonego trenera
Przykłady zostały dobrane tak by mogły się na nim odnaleźć osoby o różnym poziomie doświadczenia
Cele szkolenia
Przedstawienie technik inżynierii odwrotnej (ang. reverse engineering, RE) aplikacji, protokołów i formatów plików na platformach typu desktop (x86, x86-64, Java, .NET)
Przećwiczenie poznanych technik w formie warsztatu na praktycznych przykładach używając wiodących w branży narzędzi takich jak IDA Pro, OllyDbg, Immunity Debugger i inne
Pozwoli na lepszą ochronę tworzonych aplikacji przed stosowaniem inżynierii odwrotnej przez atakujących jak również na obchodzenie niektórych z zabezpieczeń dzięki zdobytej wiedzy
Nauka identyfikowania formatów plików, algorytmów (w tym algorytmy kryptograficzne) oraz monitorowania działania aplikacji
Zapewnienie podstawy dla kolejnych szkoleń z zakresu bezpieczeństwa dotyczących analizy malware, inżynierii odwrotnej na platformach mobilnych oraz technik informatyki śledczej i analizy powłamaniowej
Program
Wprowadzenie do tematyki reverse engineering
- Co może podlegać inżynierii wstecznej
- Czym jest inżynieria odwrotna oprogramowania
- Legalność inżynierii wstecznej
- Jakie są etapy procesu reverse engineering?
- Zastosowania reverse engineering: kompatybilność, wyszukiwanie błędów, analiza złośliwego kodu, łamanie zabezpieczeń, odzyskiwanie kodu źródłowego, modyfikacja i poprawianie oprogramowania (reengineering)
Podstawy asemblera
- Działanie procesora
- Instrukcje
- Proste programy w asemblerze
- Różnice pomiędzy platformami x86 a x86-64
- Asemblery NASM i FASM
- Kompilacja programów w assemblerze
- Śledzenie programów z użyciem debuggera: x64dbg
Utrudnianie inżynierii odwrotnej - jak się zabezpieczyć?
- Sztuczki „antydebug”: wykrywanie śledzenia i piaskownicy (sandbox)
- Wykrywanie maszyn wirtualnych
- Zaciemnianie znaczenia kodu asemblera (obfuskacja kodu)
- Optymalizacja kodu kompilowanego
- Maszyny pseudowirtualne
- Wykrywanie modyfikacji i pułapek
- Zabezpieczenia warstwowe i emulacja kodu
- Użycie protektorów i pakerów
- Zaciemnianie kodu w językach opartych o maszyny wirtualnego na przykładzie yGuard, Proguard, Excelsior JET
Etapy procesu RE
- Identyfikacja celu
- Monitorowanie celu
- Usunięcie utrudnień
- Deasemblacja
- Identyfikacja algorytmów i bloków budujących np. funkcji bibliotecznych
- Dekompilacja i rekonstrukcja kodu źródłowego
- Wykorzystanie instrumentacji i profilowania
Identyfikacja celu
- Detekcja formatów pliku wykonywalnego
- Detekcja pakerów i protektorów
- Identyfikacja ciągów znaków w tym ukrytych ścieżek
- Narzędzia: PEiD, PEbear
Monitorowanie celu
- Otwieranie plików i ścieżek rejestru
- Komunikacja sieciowa
- Narzędzia: Process Monitor (Regmon+Filemon)
Usuwanie utrudnień w reverse engineering
- Ręczne i automatyczne usuwanie pakerów i protektorów
- Manualna rekonstrukcja plików wykonywalnych
- Narzędzia: OllyDbg, OllyDump
Debugowanie
- Techniki debugowania
- Używanie debuggera
- Narzędzia: Immunity Debugger, OllyDbg, WinDbg
- Użycie maszyn wirtualnych i zdalnego debugowania
Instrumentacja i profilowanie
- Wykorzystanie w celu śledzenia
- Narzędzia: PIN Framework
Deasemblacja kodu
- Co to jest deasemblacja, trudności deasemblacji
- Proces deasemblacji: IDA Pro
- Identyfikacja funkcji bibliotecznych
- Jak działa mechanizm FLIRT?
- Przygotowywanie sygnatur
- Zastosowania skryptów IDC w IDA Pro
- Skrypty w IDAPython
- Debugger i emulator IDA Pro
Postępowanie z typowymi celami na platformie Windows
- Pliki natywne (.exe - PE i PE64)
- Format pliku
- Proces ładowania i wykonywania pliku przez system
- Zasoby i edycja zasobów
- Visual Basic i języki posługujące się bytecode (p-code)
- Dedykowane dekompilatory
- Delphi i C++ Builder
- Dedykowane narzędzia: DeDe
- Cele egzotyczne: pliki obiektowe, skompilowane pliki skryptów w językach interpretowanych typu Python
Postępowanie z typowymi celami na platformie Linux
- Pliki natywne - ELF i a.out
- Pliki obiektowe
- Dedykowane narzędzia Linux: GDB, Fenris, IDA Pro etc
Postępowanie z programami Java
- Użycie dekompilatorów Java
- Użycie deasemblerów bajtkodu (bytecode) dla Java
- Zabezpieczanie i utrudnianie reverse engineeringu kodu Java
Postępowanie z programami .NET
- Użycie dekompilatorów - Reflector
- Użycie deasemblerów Intermediate Languange (ildasm)
- Zabezpieczanie i utrudnianie reverse engineeringu kodu .NET
Charakterystyczne cechy języków C i C++
- Tablice metod wirtualnych
- Mangling
- Konstruktory i destruktory
- Argumenty funkcji i metod
- Zmienne i zmienne rejestrowe
- Informacje symboliczne (symbole debugowania)
- Przykłady dla Visual C++, GCC
- Cele tworzone przez inne kompilatory: Watcom, Borland C/C++
Wykopki muzealne
- Pliki .com i .exe 16-bit
- Pascal, FoxPro etc
Reversing algorytmów
- Obserwacja symptomów działania
- Identyfikacja przepływu danych
- Wyodrębnianie bloków składowych
- Metody identyfikacji: magiczne ciągi, sygnatury metod bibliotecznych, metody heurystyczne
- Identyfikacja algorytmów kryptograficznych
Reversing protokołów komunikacyjnych i formatów plików
- Wykorzystanie snifferów
- Zautomatyzowany reversing protokołów
- Narzędzia: Hachoir
Reversing formatów plików
- Typowe zagadnienia spotykane w plikach: sygnatury, sumy kontrolne, kompresja
- Narzędzia: MultiExtractor
