Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów
Czas trwania szkolenia:5 dni (40h)
Kod kursu:RE
Poziom zaawansowania:
O szkoleniu Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów
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
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
- 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
- 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, Ghidra, x64dbg, GDB, Radare2 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ń zakresu bezpieczeństwa dotyczących testowania bezpieczeństwa i wyszukiwania podatności, 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
- Wykrywanie modyfikacji i pułapek
- Zabezpieczenia warstwowe i emulacja kodu
- Użycie protektorów i pakerów
- rekonstrukcja spakowanych plików
- Zaciemnianie kodu w językach opartych o maszyny wirtualne, stworzenie modułu disassemblera i emulatora dla maszyny wirtualnej
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: Scylla, OllyDumpEx
Debugowanie
- Techniki debugowania
- Używanie debuggera
- Narzędzia: x64dbg
Instrumentacja i profilowanie
- Wykorzystanie w celu śledzenia pokrycia kodu i przeprowadzania obserwacji typu Side-Channel
- Narzędzia: PIN Framework
Deasemblacja kodu
- Co to jest deasemblacja, trudności deasemblacji
- Proces deasemblacji: IDA Pro i Ghidra
- Identyfikacja funkcji bibliotecznych
- Zastosowania skryptów IDC w IDA Pro
- Skrypty w IDAPython
- Debugger i emulator IDA Pro
Dekompilacja kodu za pomocą Ghidra
Postępowanie z typowymi celami na platformie Windows
- Pliki natywne (.exe - PE i PE64)
- Visual Basic i języki posługujące się bytecode (p-code)
- Delphi i C++ Builder
Postępowanie z typowymi celami na platformie Linux
- Pliki natywne - ELF
- Dedykowane narzędzia Linux: EDB, GDB+GEF, Radare
- automatyzacja zadań w debuggerach z użyciem skryptów
Postępowanie z programami Java
- Użycie dekompilatorów Java - JD
- Zabezpieczanie i utrudnianie reverse engineeringu kodu Java
Postępowanie z programami .NET
- Użycie dekompilatorów - dnSpyEx
- 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, Clang, Borland C/C++
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
- Identyfikacja algorytmów z pomocą kodu źródłowego
- Identyfikacja zmienionych części kodu za pomocą porównania plików (patch-diffing)
Reversing protokołów komunikacyjnych
- Wykorzystanie snifferów
Reversing formatów plików
- Typowe zagadnienia spotykane w plikach: sygnatury, sumy kontrolne, kompresja
- Użycie hexedytora, wzorców (Templates) i skryptów
- Narzędzia: MultiExtractor, 010editor