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++)

AFL++ logo

Versión de lanzamiento: 5.03c

Versión de GitHub: 5.03c

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

AFL++ es mantenido por:

Desarrollado originalmente por Michal "lcamtuf" Zalewski.

AFL++ es un fork superior al 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 harness 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. Una licencia comercial opcional está disponible para organizaciones que no pueden usar la AGPL (se obtiene donando 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 información para comenzar:

  • Para una descripción general de la documentación de AFL++ y una guía gráfica muy útil, visita docs/README.md.
  • Para comenzar con tutoriales, ve a docs/tutorials.md.
  • Para lanzamientos, consulta la pestaña de Lanzamientos y ramas. Las mejores ramas para usar son, sin embargo, stable o dev, dependiendo de tu tolerancia al riesgo. También echa 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, mira 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, extrae la imagen directamente de 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 realiza un push a la rama stable (consulta ramas). Si usas el comando anterior, encontrarás el código fuente de tu objetivo en /src dentro del contenedor.

Nota: también puedes extraer 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 comenzar, lee sobre los riesgos de sentido común del fuzzing.

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

Para aprender sobre fuzzing de otros tipos de objetivos, consulta:

Inicio rápido paso a paso:

  1. Compila el programa o biblioteca a fuzzear 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. Cuando hagas fuzzing a 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 de la siguiente manera:

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

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

    Si el programa recibe la entrada desde un archivo, puedes poner @@ en la línea de comandos del programa; AFL++ colocará un nombre de archivo autogenerado ahí por ti.

  4. Investiga cualquier cosa que se muestre en rojo en la interfaz del fuzzer consultando rápidamente docs/afl-fuzz_approach.md#understanding-the-status-screen.

  5. Encontrarás los crashes y hangs descubiertos en los subdirectorios crashes/ y hangs/ dentro del directorio -o output_dir. Puedes reproducir los crashes alimentá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 core dumps 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 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 brechas de cobertura accionables del código muerto y generar listas de permitidos de instrumentación).

  7. No podemos enfatizarlo lo suficiente: si quieres hacer fuzzing de manera efectiva, lee el documento docs/fuzzing_in_depth.md.

Contacto

¿Preguntas? ¿Inquietudes? ¿Informes de errores?

Ramas

Existen las siguientes ramas:

Categorías