1 puntos por GN⁺ 2024-10-07 | 1 comentarios | Compartir por WhatsApp

Fuzzing-101

Estructura

  • Práctica 1: Xpdf, CVE-2019-13288, 120 minutos, Afl-clang-fast, Afl-fuzz, GDB
  • Práctica 2: libexif, CVE-2009-3895, CVE-2012-2836, 6 horas, Afl-clang-lto, biblioteca de fuzzing, Eclipse IDE
  • Práctica 3: TCPdump, CVE-2017-13028, 4 horas, ASan, Sanitizers
  • Práctica 4: LibTIFF, CVE-2016-9297, 3 horas, cobertura de código, LCOV
  • Práctica 5: Libxml2, CVE-2017-9048, 3 horas, diccionario, paralelización básica, fuzzing de argumentos de línea de comandos
  • Práctica 6: GIMP, CVE-2016-4994, bug extra, 7 horas, fuzzing persistente, fuzzing de aplicaciones interactivas
  • Práctica 7: VLC media player, CVE-2019-14776, 6 horas, instrumentación parcial, harness de fuzzing
  • Práctica 8: Adobe Reader, 8 horas, fuzzing de aplicaciones de código cerrado, instrumentación con QEMU
  • Práctica 9: 7-Zip, CVE-2016-2334, 8 horas, WinAFL, fuzzing de aplicaciones de Windows
  • Práctica 10 (desafío final): Google Chrome / V8, CVE-2019-5847, 8 horas, Fuzzilli, fuzzing de motores de JavaScript

Registro de cambios

  • 14 de febrero de 2022: corrección de un error tipográfico de 'wget' en la práctica 5
  • 25 de noviembre de 2021: actualización y correcciones de la práctica 3

¿Para quién es este curso?

  • Personas que quieran aprender los fundamentos del fuzzing
  • Personas que quieran encontrar vulnerabilidades en proyectos de software reales

Requisitos

  • Se requiere un sistema Linux y conexión a internet
  • Se recomiendan conocimientos básicos de Linux
  • Todas las prácticas fueron probadas en Ubuntu 20.04.2 LTS
  • Este curso usa AFL++, un nuevo fork de AFL de Michał "lcamtuf" Zalewski

¿Qué es el fuzzing?

  • Prueba de fuzz (o fuzzing): técnica automatizada de pruebas de software que proporciona entradas aleatorias/modificadas a un programa y monitorea excepciones/fallos
  • AFL, libFuzzer y HonggFuzz son ejemplos de fuzzers exitosos en aplicaciones reales
  • Fuzzer evolutivo basado en cobertura: selecciona entradas que encuentran nuevas rutas de ejecución recolectando y comparando datos de cobertura de código

Fuzzer evolutivo basado en cobertura

  • Evolutivo: enfoque metaheurístico inspirado en algoritmos evolutivos que encuentra nuevos fallos mediante la evolución y mutación de un subconjunto inicial (seeds)
  • Basado en cobertura: selecciona entradas que encuentran nuevas rutas de ejecución recolectando y comparando datos de cobertura de código

Agradecimientos

  • Personas que ayudaron: Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes

Contacto

  • Si necesitas ayuda o tienes sugerencias, únete al canal #fuzzing en el Slack de GitHub Security Lab

Resumen de GN⁺

  • Este curso es útil para aprender los conceptos básicos del fuzzing y encontrar vulnerabilidades en software real
  • Se pueden aprender técnicas de fuzzing usando herramientas como AFL++ a través de varios casos reales
  • El fuzzing cumple un papel importante en reforzar la estabilidad y la seguridad del software, y este curso ofrece un enfoque práctico para ello
  • Herramientas con funciones similares incluyen libFuzzer y HonggFuzz

1 comentarios

 
GN⁺ 2024-10-07
Opiniones de Hacker News
  • El artículo enlazado toma unos 11 minutos de lectura, y resulta interesante la diferencia con el enfoque de golang

    • En golang se puede ejecutar fuzzing de forma tan simple como correr pruebas, lo que permite apuntar fácilmente a partes específicas de una aplicación o biblioteca
    • Este enfoque vuelve innecesarias muchas técnicas existentes
  • Hay curiosidad sobre las técnicas para guiar el fuzzing de manera más efectiva

    • El mejor método parece ser proporcionar un corpus semilla y esperar los mejores resultados
  • Sorprende que Heartbleed no esté en la lista

    • Heartbleed es muy fácil de reproducir
  • Opinión de agradecimiento por compartirlo

    • Parece muy útil