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.03c

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

AFL++ è mantenuto da:

Originariamente sviluppato da Michal "lcamtuf" Zalewski.

AFL++ è un fork superiore rispetto ad AFL di Google: più velocità, più e migliori mutazioni, più e migliore strumentazione, supporto a moduli personalizzati, ecc.

AFL++ è concesso in licenza AGPL-3.0-or-later e contiene anche file sotto licenza Apache-2.0. Tutto ciò che viene compilato in un harness di fuzzing è e resterà concesso in licenza Apache 2.0. Ogni file dichiara la propria licenza nell'intestazione SPDX-License-Identifier: quella è la licenza che devi seguire per quel file. È disponibile una licenza commerciale opzionale per le organizzazioni che non possono utilizzare l'AGPL (ottenuta donando a una buona causa: il progetto e i suoi manutentori non ricevono denaro). Consulta 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 su docs/tutorials.md.
  • Per i rilasci, consulta la scheda Releases e branches. I branch migliori da usare sono comunque stable o dev, a seconda della tua propensione al rischio. Dai anche un'occhiata all'elenco delle modifiche importanti in AFL++ e all'elenco delle funzionalità.
  • Se vuoi usare AFL++ per il tuo lavoro accademico, consulta la pagina dei paper sul sito web.
  • Per citare il nostro lavoro, guarda la sezione Cite.
  • 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.

Compilazione e installazione di AFL++

Per avere AFL++ facilmente disponibile con tutto compilato, estrai 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 viene effettuato un push al branch stable (vedi branches). Se usi il comando sopra, troverai il codice sorgente del tuo target in /src nel container.

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

Per compilare AFL++ da solo — cosa che raccomandiamo — continua su 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 codice sorgente disponibile. Per leggere il processo in dettaglio, vedi docs/fuzzing_in_depth.md.

Per saperne di più 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. Ottieni un piccolo ma valido file di input che abbia senso per il programma. Quando fai fuzzing su sintassi verbose (SQL, HTTP, ecc.), crea anche un dizionario come descritto in dictionaries/README.md.

  3. Se il programma legge da stdin, esegui 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à automaticamente un nome di file generato al suo posto.

  4. Indaga su 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 es. se il tuo target usa stdin:

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

    Puoi generare core o usare gdb direttamente per dare seguito ai crash.

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

  7. Non possiamo sottolinearlo abbastanza: se vuoi fare fuzzing in modo efficace, leggi il documento docs/fuzzing_in_depth.md!

Contatti

Domande? Preoccupazioni? Segnalazioni di bug?

Branches

Esistono i seguenti branch:

Categorie