libfuzzer-workshop
Materiali del workshop "Modern fuzzing of C/C++ Projects".
La prima versione del workshop è stata presentata alla conferenza sulla sicurezza ZeroNights'16.
Avvertenza
Questo workshop è stato originariamente sviluppato nel 2016. Oggi (2021 e oltre), la parte pratica del workshop potrebbe non funzionare subito, perché libFuzzer si è notevolmente evoluto nel corso degli anni. La parte teorica è ancora un buon materiale didattico, ma per le lezioni pratiche si consiglia di seguire la versione più recente del libFuzzer tutorial.
Requisiti
- 2-3 ore del tuo tempo
- Sistema operativo basato su Linux
- Esperienza in C/C++ (niente di speciale, ma devi essere in grado di leggere, scrivere e compilare codice C/C++)
- Una versione recente del compilatore clang. Le distribuzioni dai gestori di pacchetti sono troppo vecchie e molto probabilmente non funzioneranno (il workshop si chiama "moderno", giusto?), hai due opzioni:
- fare il checkout del repository llvm e compilarlo da solo. Per semplificare, sentiti libero di usare lo script checkout_build_install_llvm.sh, è stato testato su una Ubuntu 16.04 pulita
- una VirtualBox VM con ambiente funzionante è disponibile, credenziali:
fuzzer:zeronights
sudo apt-get install -y make autoconf automake libtool pkg-config zlib1g-dev
Non è richiesta esperienza di fuzzing.
Contenuti
- Un'introduzione al fuzz testing
- Un esempio di fuzzing tradizionale
- Fuzzing guidato dalla copertura
- Scrivere fuzzer (semplici esempi)
- Trovare Heartbleed (CVE-2014-0160)
- Trovare il bug da $100,000 di c-ares (CVE-2016-5180)
- Come migliorare il tuo fuzzer
- Fuzzing di libxml2, imparare come migliorare il fuzzer e analizzare le prestazioni
- Fuzzing di libpng, imparare l'importanza del seed corpus e altre cose
- Fuzzing di re2
- Fuzzing di pcre2
- Integrazione con Chromium e compito a casa
La maggior parte degli esempi sono stati tratti da libFuzzer tutorial e Fuzzer Test Suite.
Prerequisiti
libFuzzer
Compilare libFuzzer è estremamente facile:
cd libFuzzer
Fuzzer/build.sh
Il repository di libFuzzer si trova all'interno del progetto compiler-rt di LLVM.
Link