libfuzzer-workshop
Supports de l'atelier "Modern fuzzing of C/C++ Projects".
La première version de l'atelier a été présentée à la conférence de sécurité
ZeroNights'16.
Avertissement
Cet atelier a été développé à l'origine en 2016. À ce jour (2021 et au-delà),
la partie pratique de l'atelier pourrait ne pas fonctionner immédiatement, car
libFuzzer a considérablement évolué au fil des ans. La partie théorique de
l'atelier reste un bon support d'apprentissage, mais pour les leçons pratiques,
il est recommandé de suivre la version la plus récente du libFuzzer tutorial.
Conditions requises
- 2 à 3 heures de votre temps
- Système d'exploitation basé sur Linux
- Expérience en C/C++ (rien d'extraordinaire, mais vous devez être capable de
lire, écrire et compiler du code C/C++)
- une version récente du compilateur clang. Les distributions fournies par
les gestionnaires de paquets sont trop anciennes et ne fonctionneront
probablement pas (l'atelier se veut « moderne », non ?), vous avez deux options :
- récupérez le dépôt llvm et compilez-le vous-même. Pour vous faciliter la
tâche, n'hésitez pas à utiliser le script checkout_build_install_llvm.sh,
il a été testé sur une installation propre d'Ubuntu 16.04
- une VirtualBox VM avec un environnement de travail fonctionnel est
disponible, identifiants :
fuzzer:zeronights
sudo apt-get install -y make autoconf automake libtool pkg-config zlib1g-dev
Aucune expérience du fuzzing n'est requise.
Sommaire
- Une introduction aux tests de fuzzing
- Un exemple de fuzzing traditionnel
- Fuzzing guidé par couverture de code
- Écrire des fuzzers (exemples simples)
- Trouver Heartbleed (CVE-2014-0160)
- Trouver le bug de c-ares à 100 000 $ (CVE-2016-5180)
- Comment améliorer votre fuzzer
- Fuzzing de libxml2, apprendre à améliorer le fuzzer et analyser les performances
- Fuzzing de libpng, apprendre l'importance du corpus initial et d'autres choses
- Fuzzing de re2
- Fuzzing de pcre2
- Intégration de Chromium et devoir maison
La plupart des exemples proviennent du libFuzzer tutorial et de la
Fuzzer Test Suite.
Prérequis
libFuzzer
Compiler libFuzzer est extrêmement facile :
cd libFuzzer
Fuzzer/build.sh
Le dépôt libFuzzer se trouve dans le projet compiler-rt de LLVM.
Liens