Torna agli aggiornamenti
New releaseAug 10, 2026

LibAFL v0.16.0

Libreria di Fuzzing Avanzata - Incastra il tuo Fuzzer insieme in Rust! Scala su core e macchine. Per Windows, Android, MacOS, Linux, no_std, ...

Condividi

LibAFL, la libreria per fuzzing

LibAFL logo

Libreria Avanzata per Fuzzing - Combina i tuoi fuzzer e estendi le loro funzionalità usando Rust.

LibAFL è una collezione di componenti riutilizzabili di fuzzer, scritta in Rust, che ti offre molti dei vantaggi di un fuzzer già pronto, pur essendo completamente personalizzabile. Alcune delle caratteristiche principali attualmente includono:

  • fast: Facciamo tutto il possibile in fase di compilazione, mantenendo il sovraccarico a runtime minimo. Gli utenti raggiungono 120k esecuzioni/sec in modalità Frida su un telefono (usando tutti i core).
  • scalable: Low Level Message Passing, LLMP in breve, consente a LibAFL di scalare quasi linearmente su più core e, via TCP, su più macchine.
  • adaptable: Puoi sostituire ogni parte di LibAFL. Ad esempio, BytesInput è solo una possibile forma di input: sentiti libero di aggiungere un input basato su AST per fuzzing strutturato e altro.
  • multi platform: LibAFL funziona su Windows, macOS, iOS, Linux e Android, e altro. LibAFL può essere compilato in modalità no_std per iniettare LibAFL in target oscuri come dispositivi embedded e hypervisor.
  • bring your own target: Supportiamo modalità solo binario, come Frida-Mode, e anche molteplici passaggi di compilazione per strumentazione basata su codice sorgente. Ovviamente è facile aggiungere backend di strumentazione personalizzati.

Concetti principali

LibAFL è veloce, multipiattaforma, compatibile con no_std e scala su core e macchine. Offre un crate principale che fornisce componenti di base per fuzzer personalizzati, libafl, una libreria contenente codice comune che può essere usata per la strumentazione dei target, libafl_targets, e una libreria che fornisce strumenti per avvolgere compilatori, libafl_cc. Offre integrazioni con framework di strumentazione popolari. Al momento, i backend supportati sono:

Compilazione e installazione

Installa le dipendenze

  • Il linguaggio di sviluppo Rust
    • Ti consigliamo vivamente di non usare ad esempio il pacchetto della tua distribuzione Linux poiché probabilmente è obsoleto. Piuttosto installa Rust direttamente, le istruzioni si trovano qui.

    • La versione minima supportata di Rust è definita. Puoi sempre controllare la versione attualmente richiesta nel Cargo.toml di LibAFL:

      Se la versione di Rust installata è più vecchia di quella elencata in Cargo.toml, aggiorna all'ultima toolchain stabile:

      rustup update stable
      
  • Strumenti LLVM
    • Gli strumenti LLVM (inclusi clang, clang++) sono necessari (più recenti di LLVM 15.0.0 fino a LLVM 18.1.3). Se stai usando Debian/Ubuntu, ancora una volta, raccomandiamo vivamente di installare il pacchetto da qui
  • Just:

Clona il repository LibAFL con

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

Compila la libreria usando

cargo build --release

Compila la documentazione API con

cargo doc

Sfoglia il libro LibAFL (WIP!) con (richiede mdbook)

cd docs && mdbook serve

Per iniziare

Raccogliamo tutti i fuzzer di esempio in ./fuzzers. Assicurati di leggere la loro documentazione (e il codice sorgente), questo è il modo naturale per iniziare!

just run

Puoi eseguire ogni fuzzer di esempio con questo comando, purché la directory del fuzzer abbia un file Justfile. Il fuzzer più testato è ./fuzzers/inprocess/libfuzzer_libpng, un fuzzer multicore simile a libfuzzer che usa LibAFL per un harness libpng.

Risorse

Collaboratori

LibAFL è scritto e mantenuto da

Contribuire

Per favore consulta CONTRIBUTING.md per le linee guida su come contribuire.

Debug

Il tuo fuzzer non funziona come previsto? Prova a leggere DEBUGGING.md per capire come fare debug dei tuoi problemi.

Citazione

Se usi LibAFL per il tuo lavoro accademico, per favore cita il seguente articolo:

@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},
}

Licenza

Concesso in licenza secondo una delle seguenti: Apache License, Version 2.0 o licenza MIT a tua scelta.
Salvo dichiarazione contraria esplicita, qualsiasi contributo inviato intenzionalmente per l'inclusione in questo crate da parte tua, come definito nella licenza Apache-2.0, sarà concesso in doppia licenza come sopra, senza termini o condizioni aggiuntivi.

Categorie