Torna agli aggiornamenti
New releaseSep 4, 2026

AFLplusplus v5.03c

AFL++ è un fuzzer all'avanguardia, e #1 nei benchmark. Originariamente era basato su AFL. Oggi viene fornito con qemu 5.1, copertura collision-free, laf-intel & redqueen migliorati, power schedules AFLfast++, mutatori MOpt, unicorn_mode e molto altro!

Condividi

American Fuzzy Lop plus plus (AFL++)

AFL++ logo

Versione di rilascio: 5.03c

Versione GitHub: 5.04a

Repository: https://github.com/AFLplusplus/AFLplusplus

AFL++ è mantenuto da:

Sviluppato originariamente da Michal "lcamtuf" Zalewski.

AFL++ è un fork superiore dell'AFL di Google - maggiore velocità, più e migliori mutazioni, più e migliore strumentazione, supporto per moduli personalizzati, ecc.

AFL++ è distribuito con licenza AGPL-3.0-or-later, e contiene anche file sotto la licenza Apache-2.0. Tutto ciò che viene compilato in un fuzzing harness è e rimarrà con licenza Apache 2.0. Ogni file dichiara la propria licenza nel suo header SPDX-License-Identifier — quella è la licenza che devi seguire per quel file. Una licenza commerciale opzionale è disponibile per le organizzazioni che non possono usare l'AGPL (ottenuta donando a una buona causa — il progetto e i suoi manutentori non ricevono denaro). Vedi LICENSING.md per una panoramica in linguaggio semplice e la sezione Licenza qui sotto per i dettagli.

Per iniziare

Ecco alcune informazioni per iniziare:

  • Per una panoramica della documentazione di AFL++ e una guida grafica molto utile, visita docs/README.md.
  • Per iniziare con i tutorial, vai a docs/tutorials.md.
  • Per le release, vedi la scheda Releases e i branch. I branch migliori da usare sono, tuttavia, stable o dev - a seconda della tua propensione al rischio. Dai anche un'occhiata alla lista delle modifiche importanti in AFL++ e alla lista delle funzionalità.
  • Se vuoi usare AFL++ per il tuo lavoro accademico, consulta la pagina dei paper sul sito web.
  • Per citare il nostro lavoro, vedi la sezione Citare.
  • Per i confronti, usa la configurazione aflplusplus di fuzzbench, oppure usa afl-clang-fast con AFL_LLVM_CMPLOG=1. Puoi trovare la configurazione predefinita di aflplusplus su fuzzbench di Google.

Compilare e installare AFL++

Per avere AFL++ facilmente disponibile con tutto compilato, scarica l'immagine direttamente da Docker Hub (disponibile sia per x86_64 che per arm64):

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

Questa immagine viene pubblicata automaticamente quando avviene un push al branch stable (vedi branches). Se usi il comando sopra, troverai il codice sorgente di destinazione in /src nel container.

Nota: puoi anche scaricare aflplusplus/aflplusplus:dev, che è lo stato di sviluppo più recente di AFL++.

Per compilare AFL++ da solo - cosa che consigliamo - continua a leggere docs/INSTALL.md.

Avvio rapido: fuzzing con AFL++

NOTA: prima di iniziare, leggi i rischi di buon senso del fuzzing.

Questa è una guida rapida per il fuzzing di target con il codice sorgente disponibile. Per leggere il processo in dettaglio, vedi docs/fuzzing_in_depth.md.

Per informazioni sul fuzzing di altri target, vedi:

Avvio rapido passo dopo passo:

  1. Compila il programma o la libreria da sottoporre a fuzzing usando afl-cc. Un modo comune per farlo sarebbe:

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. Ottenere un file di input piccolo ma valido che abbia senso per il programma. Quando si esegue il fuzzing di sintassi verbose (SQL, HTTP, ecc.), creare anche un dizionario come descritto in dictionaries/README.md.

  3. Se il programma legge da stdin, eseguire afl-fuzz in questo modo:

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

    Per aggiungere un dizionario, aggiungi -x /path/to/dictionary.txt ad afl-fuzz.

    Se il programma riceve input da un file, puoi inserire @@ nella riga di comando del programma; AFL++ inserirà lì un nome di file generato automaticamente.

  4. Indaga qualsiasi cosa mostrata in rosso nell'interfaccia del fuzzer consultando prontamente docs/afl-fuzz_approach.md#understanding-the-status-screen.

  5. Troverai i crash e gli hang rilevati nelle sottodirectory crashes/ e hangs/ nella directory -o output_dir. Puoi riprodurre i crash fornendoli al target, ad esempio se il tuo target utilizza stdin:

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

    Puoi generare core o usare gdb direttamente per analizzare i crash.

  6. Per l'analisi della copertura del tuo fuzzing consigliamo i nostri strumenti partner cov-analysis (report di copertura basati sul codice sorgente da un corpus di fuzzing) e fuzz-reachability (analisi statica delle funzioni che un harness può raggiungere, per distinguere le lacune di copertura effettive dal codice morto e per generare allowlist di strumentazione)

  7. Non ci stancheremo mai di ripeterlo: se vuoi fare fuzzing in modo efficace, leggi il documento docs/fuzzing_in_depth.md!

Contatti

Domande? Dubbi? Segnalazioni di bug?

Branch

Esistono i seguenti branch:

Categorie