libfuzzer-workshop
Materiales del taller "Modern fuzzing of C/C++ Projects".
La primera versión del taller se presentó en la conferencia de seguridad ZeroNights'16.
Aviso legal
Este taller fue desarrollado originalmente en 2016. A día de hoy (2021 y posteriores),
la parte práctica del taller podría no funcionar de inmediato, porque
libFuzzer ha evolucionado enormemente con los años. La parte teórica del taller
sigue siendo un buen material de aprendizaje, pero para las lecciones prácticas se
recomienda seguir la versión más reciente del libFuzzer tutorial.
Requisitos
- 2-3 horas de tu tiempo
- Sistema operativo basado en Linux
- Experiencia con C/C++ (nada especial, pero necesitas saber leer, escribir y
compilar código C/C++)
- una versión reciente del compilador clang. Las distribuciones de los
gestores de paquetes son demasiado antiguas y probablemente no funcionen (el taller
se llama "moderno", ¿verdad?), tienes dos opciones:
- hacer checkout del repositorio de llvm y compilarlo tú mismo. Para hacerlo fácil,
no dudes en usar el script checkout_build_install_llvm.sh, que ha sido
probado en una instalación limpia de Ubuntu 16.04
- hay una VirtualBox VM con un entorno de trabajo disponible, credenciales:
fuzzer:zeronights
sudo apt-get install -y make autoconf automake libtool pkg-config zlib1g-dev
No se requiere experiencia en fuzzing.
Contenido
- Introducción a las pruebas de fuzzing
- Un ejemplo de fuzzing tradicional
- Fuzzing guiado por cobertura
- Escribiendo fuzzers (ejemplos sencillos)
- Encontrando Heartbleed (CVE-2014-0160)
- Encontrando el bug de c-ares de $100,000 (CVE-2016-5180)
- Cómo mejorar tu fuzzer
- Fuzzing de libxml2, aprendiendo a mejorar el fuzzer y analizar el rendimiento
- Fuzzing de libpng, aprendiendo la importancia del corpus semilla y otras cosas
- Fuzzing de re2
- Fuzzing de pcre2
- Integración con Chromium y tarea para casa
La mayoría de los ejemplos se han tomado del libFuzzer tutorial y de
Fuzzer Test Suite.
Requisitos previos
libFuzzer
Compilar libFuzzer es extremadamente fácil:
cd libFuzzer
Fuzzer/build.sh
El repositorio de libFuzzer se puede encontrar dentro del proyecto compiler-rt de LLVM.
Enlaces