WARSZTAT - Security PWNing Conference 2019

Od zera do pierwszego 0-daya!

 

Warsztaty automatycznego wyszukiwania podatności i ich analizy

Jeżeli chcesz “mieć” swoje CVE to trafiłeś idealnie!

Warsztat jest opracowany z myślą o wprowadzeniu uczestników w arkana najlepszych metod i narzędzi służących do automatycznego wykrywania podatności i analizy błędów w oprogramowaniu w praktyczny sposób.

Na początku skupimy się na zrozumieniu technik: analizy binarnej, wyszukiwania różnych typów podatności oraz debuggowania. “Wgryziemy” się w praktyczny fuzzing i błędy, które spędzają sen z powiek programistom za pomocą swojego niedeterministycznego występowania. Uczestnicy poznają techniki do analizy słabych stron aplikacji, pisania gramatyk oraz pozyskiwania korpusów testowych gwarantujących interesujące wyniki.

Po zrozumieniu aspektów bughuntingu nadejdzie czas na automatyzację analizy podatności i sposoby debuggowania gwarantujące szybkie znalezienie wadliwych elementów kodu.

Szkolenie skupia się na architekturze x86/x64 i atakowaniu parserów (tekstowych, sieciowych, binarnych), fuzzingu sieciowym na platformach Windows i Linux.

To szkolenie nauczy Cię…

  • charakterystyk klas podatności i sposobów obrony przed nimi;
  • technik automatycznego poszukiwania błędów i doboru najlepszych narzędzi w branży do odkrywania podatności (blackbox, graybox, whitebox);
  • podstaw analizy binarnej;
  • analizować i automatyzować analizę znalezionych błędów;
  • tunigować (sieć, pliki, binaria) i skalować proces fuzzingu na wielu poziomach: fuzzera, systemu operacyjnego i harnessu;
  • pisania własnego fuzzera dla wybranego projektu open-source;
  • gotowego do wdrożenia podejścia Fuzz-Driven Development;

Program

12 listopada
09:00
Dlaczego warto szukać podatności bezpieczeństwa?
  • Microsoft Security Development Lifecycle (SDL)
Dlaczego warto to robić za pomocą fuzzerów i metod automatycznych?
Najczęściej występujące problemy bezpieczeństwa w oprogramowaniu i mechanizmy mitygacji
  • Klasy podatności
        • Business-logic vulns
        • OOBRs
        • Buffer overflows
        • UAF
        • Double free
        • Use after scope
        • Initialization order bugs
        • “Dziwne” rzeczy z kodem
  • Mechanizmy ochrony
        • RELRO
        • ASLR
        • DEP / NX
        • SEHOP
        • CFI
        • Code & pointer signing
        • Przejście na inne języki programowania?
Workflow poszukiwania podatności
    • 8 praw fuzzingu
Fuzzery pod maską i niejedno imię fuzzera
  • Guided fuzzing
  • Dumb fuzzing
  • Smart fuzzing
  • Mutation based fuzzing
  • Generation based fuzzing
  • Hypervisory specjalizowane pod fuzzing
  • Structured fuzzing
  • Sienna Locomotive
  • Fuzzing = Unit Testy?
  • Antyfuzzing
Wprowadzenie do fuzzingu na GNU/Linux
    • Jak znaleźć interesujący komponent do ataku?
          • Parsery plików
          • Interpretery gramatyk
          • Biblioteki
    • Atakowanie whitebox
          • AFL++
            - Różnice pomiędzy AFL i AFL++
            - Power Schedules – AFLFast
          • Honggfuzz
            - AFL++ vs. Honggfuzz
          • LibFuzzer
            - Testowanie na poziomie funkcji
          • DeepState
            - Fuzzujące Unit Testy?
          • Fuzzery Go / .NET / Python / Rust
          • Szybkie wprowadzenie do sanitizerów ich możliwości w zakresie detekcji błędów (ASAN, MSAN, UBSAN, TSAN) 
          • Pokrycie kodu
            - Metody pomiaru pokrycia
    • Atakowanie greybox
          • Na czym polega atakowanie greybox?
          • AFLSmart
    • Atakowanie blackbox
          • AFL++ + QEMU
          • DynInst
13:30-14:00
Lunch
Wprowadzenie do fuzzingu na Windows
    • WinAFL
      - Poszukiwania funkcji do testów
    • DrFuzz
Inne
  • Predykcja ROI za pomocą Pythia – Kiedy fuzzing przestaje się opłacać?
  • Fuzzing sieciowy

    • Moduły metasploita – Web Fuzzery
    • BooFuzz & Fuzzowski
    • Fuzzing sieci bez sieci? Tak!
  • Fuzzing hybrydowy z Symbolic / Concolic Execution
  • Sztuczna inteligencja w służbie bughuntingowi
Zarządzanie i tworzenie korpusów testowych
  • Ewolucja i badanie pokrycia kodu

    • Magic numbers & fuzzer – How to deal with it?
  • Generowanie i ręczne tworzenie przypadków testowych z lepszym pokryciem kodu
Jak wycisnąć fuzzerem jeszcze więcej z testowanego projektu?
-17:00
Fuzzing w wielkiej skali
  • Fuzz-Driven Development
  • ClusterFuzz & OSS-Fuzz od Google
  • FuzzManager
  • Integracja FuzzManagera z AFL / Honggfuzz / Python
  • Badanie pokrycia kodu na potrzeby FuzzManagera
  • Grupowanie duplikatów za pomocą sygnatur
13 listopada
09:00
Pisanie własnego fuzzera opartego o LibFuzzer
Statyczna analiza kodu
  • Mamy 2019 rok, czy dalej warto?
  • cppcheck vs. Clang Static Analyzer
  • Weryfikacja znalezisk za pomocą fuzzera
    – AFLGo
  • Statyczna analiza jako pierwszy krok do ręcznego przeglądu kodu?
Make vulnerability reporting great again!
    • Analiza błędów
      – Sanitizery (ASAN, MSAN, UBSAN, TSAN)
      – Valgrind
      – DrMemory
    • Co powinien zawierać rzetelny raport o podatności?
    • O co chodzi z CVE?
13:30-14:00
Lunch
Podstawy selekcji interesujących przypadków błędów
    • Określanie krytyczności awarii
      • Proces selekcji znalezionych błędów
      • Jak to robić możliwie najbardziej efektywnie i najmniej boleśnie?
Praca z niedeterministycznymi awariami kodu
    • Gdzie leży problem w problemie?
    • Debuggowanie za pomocą RR
    • Narzędzia analizy binarnej w GNU\Linux
-17:00
Co dalej?
    • Wykorzystanie błędów, czyli exploitacja!
      • Modern Binary Exploitation
      • Pwntools
      • gdbpeda
      • QIRA
    • Rode0day
    • Open Research Attack Teams – czyli P0 w Twojej firmie!

EKSPERT

Kamil Frankowicz foto
KAMIL FRANKOWICZ

Fan fuzzingu oraz nowych metod powodowania awarii programów. Na co dzień broni bezpieczeństwa polskiego Internetu, pracując jako Senior Security Engineer w CERT Polska. Do jego specjalności należy psucie – często nieintencjonalne. Odkrywca ponad 130 podatności bezpieczeństwa i 450+ błędów w oprogramowaniu. W czasie wolnym lata dronem, fotografuje i nieregularnie opisuje swoje znaleziska na blogu związanym z bughuntingiem (https://frankowicz.me).

Uczestnicy

Kto powinien wziąć udział w szkoleniu?

  • specjaliści ds. bezpieczeństwa IT i pentesterzy,
  • programiści i testerzy,
  • badacze bezpieczeństwa IT,
  • dostawcy rozwiązań w zakresie bezpieczeństwa IT,
  • pasjonaci bezpieczeństwa teleinformatycznego,
  • wszyscy, którzy myślą o karierze w obszarze ofensywnego bezpieczeństwa aplikacji!

 –

Wymagania:

  • Podstawy programowania w C/C++ lub Python
  • Podstawy obsługi systemów operacyjnych z rodziny GNU\Linux i Windows
  • Własny komputer:
    • 64-bitowy system operacyjny Windows lub GNU/Linux (preferowane pochodne Debiana, np. Ubuntu)
    • zainstalowane oprogramowanie VirtualBox
    • minimum 8 GB RAM, sugerowane 16+ GB
    • minimum 2-rdzeniowy procesor
    • minimum 50GB wolnego miejsca na dysku

Miejsce i termin

12-13 listopada, Warszawa
Golden Floor Plaza
Warszawa, Aleje Jerozolimskie 123a

Podobne wydarzenia:

Konferencja
Security PWNing Conference 2019