
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!
American Fuzzy Lop plus plus (AFL++)
Versione di rilascio: 5.03c
Versione GitHub: 5.04a
Repository: https://github.com/AFLplusplus/AFLplusplus
AFL++ è mantenuto da:
- Marc "van Hauser" Heuse [email protected]
- Dominik Maier [email protected]
- Andrea Fioraldi [email protected]
- Heiko "hexcoder-" Eissfeldt [email protected]
- frida_mode è mantenuto da @Worksbutnottested
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,
stableodev- 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
aflplusplusdi fuzzbench, oppure usaafl-clang-fastconAFL_LLVM_CMPLOG=1. Puoi trovare la configurazione predefinita diaflplusplussu 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:
- Target solo binari: docs/fuzzing_binary-only_targets.md
- Servizi di rete: docs/best_practices.md#fuzzing-a-network-service
- Programmi GUI: docs/best_practices.md#fuzzing-a-gui-program
Avvio rapido passo dopo passo:
-
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 -
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.
-
Se il programma legge da stdin, eseguire
afl-fuzzin 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.txtad 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. -
Indaga qualsiasi cosa mostrata in rosso nell'interfaccia del fuzzer consultando prontamente docs/afl-fuzz_approach.md#understanding-the-status-screen.
-
Troverai i crash e gli hang rilevati nelle sottodirectory
crashes/ehangs/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.
-
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)
-
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?
- I contributori sono raggiungibili tramite (ad esempio, creando una issue - ma solo per difetti di AFL++!): https://github.com/AFLplusplus/AFLplusplus.
- Dai un'occhiata alle nostre FAQ e alle Best Practices.
- Meglio ancora: unisciti al server Zulip di Fuzzing!
Branch
Esistono i seguenti branch: