Volver a actualizaciones
Nuevo releaseSep 4, 2026

AFLplusplus v5.03c

AFL++ es un fuzzer de vanguardia, y #1 en benchmarks. Originalmente estaba basado en AFL. Hoy viene con qemu 5.1, cobertura libre de colisiones, laf-intel & redqueen mejorados, planificadores de energía AFLfast++, mutadores MOpt, unicorn_mode, ¡y mucho más!

Compartir

American Fuzzy Lop plus plus (AFL++)

Logotipo de AFL++

Versión de lanzamiento: 5.03c

Versión de GitHub: 5.04a

Repositorio: https://github.com/AFLplusplus/AFLplusplus

AFL++ está mantenido por:

Desarrollado originalmente por Michal "lcamtuf" Zalewski.

AFL++ es un fork superior del AFL de Google: más velocidad, más y mejores mutaciones, más y mejor instrumentación, soporte de módulos personalizados, etc.

AFL++ está licenciado bajo la AGPL-3.0-or-later, y también contiene archivos bajo la Licencia Apache-2.0. Todo lo compilado en un arnés de fuzzing está y seguirá estando licenciado bajo Apache 2.0. Cada archivo declara su propia licencia en su cabecera SPDX-License-Identifier — esa es la licencia que debes seguir para ese archivo. Hay disponible una licencia comercial opcional para organizaciones que no puedan usar la AGPL (obtenida mediante una donación a una buena causa — el proyecto y sus mantenedores no reciben dinero). Consulta LICENSING.md para una descripción general en lenguaje sencillo y la sección de Licencia a continuación para más detalles.

Primeros pasos

Aquí tienes algo de información para empezar:

  • Para una descripción general de la documentación de AFL++ y una guía gráfica muy útil, visita docs/README.md.
  • Para empezar con los tutoriales, ve a docs/tutorials.md.
  • Para las versiones, consulta la pestaña Releases y branches. Sin embargo, las mejores ramas para usar son stable o dev — dependiendo de tu tolerancia al riesgo. Echa también un vistazo a la lista de cambios importantes en AFL++ y a la lista de características.
  • Si quieres usar AFL++ para tu trabajo académico, consulta la página de artículos en el sitio web.
  • Para citar nuestro trabajo, consulta la sección Citar.
  • Para comparaciones, usa la configuración aflplusplus de fuzzbench, o usa afl-clang-fast con AFL_LLVM_CMPLOG=1. Puedes encontrar la configuración predeterminada de aflplusplus en el fuzzbench de Google.

Compilar e instalar AFL++

Para tener AFL++ fácilmente disponible con todo compilado, descarga la imagen directamente desde Docker Hub (disponible tanto para x86_64 como para arm64):

docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus

Esta imagen se publica automáticamente cuando se produce un push a la rama estable (consulta branches). Si utilizas el comando anterior, encontrarás tu código fuente objetivo en /src dentro del contenedor.

Nota: también puedes descargar aflplusplus/aflplusplus:dev, que es el estado de desarrollo más actual de AFL++.

Para compilar AFL++ tú mismo —lo cual recomendamos— continúa en docs/INSTALL.md.

Inicio rápido: Fuzzing con AFL++

NOTA: Antes de empezar, lee sobre los riesgos de sentido común del fuzzing.

Este es un inicio rápido para hacer fuzzing de objetivos con el código fuente disponible. Para leer sobre el proceso en detalle, consulta docs/fuzzing_in_depth.md.

Para aprender sobre el fuzzing de otros objetivos, consulta:

Inicio rápido paso a paso:

  1. Compila el programa o biblioteca al que se le hará fuzzing usando afl-cc. Una forma común de hacerlo sería:

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. Obtén un archivo de entrada pequeño pero válido que tenga sentido para el programa. Al hacer fuzzing de sintaxis verbosa (SQL, HTTP, etc.), crea también un diccionario como se describe en dictionaries/README.md.

  3. Si el programa lee desde stdin, ejecuta afl-fuzz así:

    ./afl-fuzz -i seeds_dir -o output_dir -- \
    /path/to/tested/program [...program's cmdline...]
    

    Para añadir un diccionario, añade -x /path/to/dictionary.txt a afl-fuzz.

    Si el programa toma la entrada de un archivo, puedes poner @@ en la línea de comandos del programa; AFL++ colocará allí un nombre de archivo generado automáticamente.

  4. Investiga cualquier cosa mostrada en rojo en la interfaz del fuzzer consultando docs/afl-fuzz_approach.md#understanding-the-status-screen.

  5. Encontrarás los crashes y hangs hallados en los subdirectorios crashes/ y hangs/ dentro del directorio -o output_dir. Puedes reproducir los crashes pasándolos al objetivo, por ejemplo, si tu objetivo usa stdin:

    cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]
    

    Puedes generar cores o usar gdb directamente para dar seguimiento a los crashes.

  6. Para el análisis de cobertura de tu fuzzing recomendamos nuestras herramientas asociadas cov-analysis (informes de cobertura basados en el código fuente a partir de un corpus de fuzzing) y fuzz-reachability (análisis estático de qué funciones puede alcanzar un harness, para distinguir las brechas de cobertura accionables del código muerto y generar listas de permitidos de instrumentación)

  7. No podemos insistir lo suficiente en esto: si quieres hacer fuzzing de forma efectiva, ¡lee el documento docs/fuzzing_in_depth.md!

Contacto

¿Preguntas? ¿Inquietudes? ¿Informes de errores?

Ramas

Existen las siguientes ramas:

Categorías