Volver a actualizaciones
Nuevo releaseAug 10, 2026

LibAFL v0.16.0

Biblioteca avanzada de fuzzing - ¡Conecta tu Fuzzer en Rust! Escala entre núcleos y máquinas. Para Windows, Android, MacOS, Linux, no_std, ...

Compartir

LibAFL, la biblioteca de fuzzing

Logotipo de LibAFL

Biblioteca avanzada de fuzzing: ensamble sus propios fuzzers y amplíe sus funcionalidades usando Rust.

LibAFL es una colección de piezas reutilizables de fuzzers, escrita en Rust, que le brinda muchos de los beneficios de un fuzzer comercial, siendo completamente personalizable. Algunas características destacadas incluyen actualmente:

  • fast: Hacemos todo lo posible en tiempo de compilación, minimizando la sobrecarga en tiempo de ejecución. Los usuarios alcanzan 120k ejecuciones/seg en modo frida en un teléfono (usando todos los núcleos).
  • scalable: El paso de mensajes de bajo nivel, o LLMP para abreviar, permite que LibAFL escale casi linealmente entre núcleos, y a través de TCP a múltiples máquinas.
  • adaptable: Puede reemplazar cada parte de LibAFL. Por ejemplo, BytesInput es solo un posible formulario de entrada: siéntase libre de agregar una entrada basada en AST para fuzzing estructurado, y más.
  • multi plataforma: LibAFL funciona en Windows, macOS, iOS, Linux y Android, y más. LibAFL se puede compilar en modo no_std para inyectar LibAFL en objetivos oscuros como dispositivos embebidos e hipervisores.
  • traiga su propio objetivo: Admitimos modos solo binarios, como el modo Frida, así como múltiples pasos de compilación para instrumentación basada en código fuente. Por supuesto, es fácil agregar backends de instrumentación personalizados.

Conceptos principales

LibAFL es rápido, multiplataforma, compatible con no_std y escala entre núcleos y máquinas. Ofrece un crate principal que proporciona bloques de construcción para fuzzers personalizados, libafl, una biblioteca que contiene código común que se puede usar para la instrumentación de objetivos, libafl_targets, y una biblioteca que proporciona facilidades para envolver compiladores, libafl_cc. Ofrece integraciones con marcos de instrumentación populares. Actualmente, los backends compatibles son:

Compilación e instalación

Instalar las dependencias

  • El lenguaje de desarrollo Rust
    • Recomendamos encarecidamente no usar, por ejemplo, el paquete de su distribución Linux, ya que probablemente esté desactualizado. Por lo tanto, instale Rust directamente, las instrucciones se pueden encontrar aquí.

    • La versión mínima de Rust compatible está definida. Siempre puede verificar la versión requerida actualmente en el Cargo.toml de LibAFL:

      Si su versión instalada de Rust es anterior a la que aparece en Cargo.toml, actualice al último toolchain estable:

      rustup update stable
      
  • Herramientas LLVM
    • Las herramientas LLVM (incluyendo clang, clang++) son necesarias (más nuevas que LLVM 15.0.0 hasta LLVM 18.1.3) Si usa Debian/Ubuntu, nuevamente, recomendamos encarecidamente que instale el paquete desde aquí
  • Just:

Clone el repositorio de LibAFL con

git clone https://github.com/AFLplusplus/LibAFL

Compile la biblioteca usando

cargo build --release

Compile la documentación de la API con

cargo doc
cd docs && mdbook serve

Comenzando

Recopilamos todos los fuzzers de ejemplo en ./fuzzers. Asegúrese de leer su documentación (y código fuente), ¡esta es la forma natural de empezar!

just run

Puede ejecutar cada fuzzer de ejemplo con este comando, siempre que el directorio del fuzzer tenga un archivo Justfile. El fuzzer mejor probado es ./fuzzers/inprocess/libfuzzer_libpng, un fuzzer multinúcleo similar a libfuzzer que usa LibAFL para un harness de libpng.

Recursos

Contribuyentes

LibAFL está escrito y mantenido por

Contribuir

Consulte CONTRIBUTING.md para la guía de contribución.

Depuración

¿Su fuzzer no funciona como esperaba? Intente leer DEBUGGING.md para entender cómo depurar sus problemas.

Citar

Si usa LibAFL para su trabajo académico, cite el siguiente artículo:

@inproceedings{libafl,
 author       = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
 title        = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
 booktitle    = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
 series       = {CCS '22},
 year         = {2022},
 month        = {November},
 location     = {Los Angeles, U.S.A.},
 publisher    = {ACM},
}

Licencia

Licenciado bajo Licencia Apache, Versión 2.0 o licencia MIT a su elección.
A menos que indique explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en este crate por usted, según lo definido en la licencia Apache-2.0, tendrá una licencia dual como se indica arriba, sin términos ni condiciones adicionales.

Categorías