
AFLplusplus v5.03c
AFL++ est un fuzzer de pointe, et n°1 dans les benchmarks. Il était à l'origine basé sur AFL. Aujourd'hui, il est livré avec qemu 5.1, une couverture sans collision, laf-intel & redqueen améliorés, les power schedules AFLfast++, les mutateurs MOpt, unicorn_mode, et bien plus encore !
American Fuzzy Lop plus plus (AFL++)
Version de la release : 5.03c
Version GitHub : 5.03c
Dépôt : https://github.com/AFLplusplus/AFLplusplus
AFL++ est maintenu par :
- Marc "van Hauser" Heuse [email protected]
- Dominik Maier [email protected]
- Andrea Fioraldi [email protected]
- Heiko "hexcoder-" Eissfeldt [email protected]
- frida_mode est maintenu par @Worksbutnottested
Développé à l'origine par Michal "lcamtuf" Zalewski.
AFL++ est un fork supérieur à l'AFL de Google - plus de vitesse, plus et de meilleures mutations, plus et une meilleure instrumentation, prise en charge de modules personnalisés, etc.
AFL++ est sous licence AGPL-3.0-or-later, et contient également des fichiers
sous licence Apache-2.0.
Tout ce qui est compilé dans un harnais de fuzzing est et restera sous licence
Apache 2.0.
Chaque fichier indique sa propre licence dans son en-tête SPDX-License-Identifier
— c'est la licence que vous devez respecter pour ce fichier.
Une licence commerciale optionnelle est disponible pour les organisations
qui ne peuvent pas utiliser l'AGPL (obtenue en faisant un don à une bonne cause —
le projet et ses mainteneurs ne reçoivent aucun argent).
Voir LICENSING.md pour un aperçu en langage clair et la
section Licence ci-dessous pour plus de détails.
Pour commencer
Voici quelques informations pour vous aider à démarrer :
- Pour un aperçu de la documentation d'AFL++ et un guide graphique très utile, veuillez consulter docs/README.md.
- Pour commencer avec des tutoriels, allez sur docs/tutorials.md.
- Pour les releases, voir l'
onglet Releases et
branches. Les meilleures branches à utiliser sont cependant
stableoudev— selon votre appétit pour le risque. Jetez également un œil à la liste des changements importants dans AFL++ et à la liste des fonctionnalités. - Si vous souhaitez utiliser AFL++ pour vos travaux académiques, consultez la page des publications sur le site web.
- Pour citer nos travaux, regardez la section Cite.
- Pour les comparaisons, utilisez la configuration
aflplusplusde fuzzbench, ou utilisezafl-clang-fastavecAFL_LLVM_CMPLOG=1. Vous pouvez trouver la configuration par défaut d'aflplusplussur le fuzzbench de Google.
Compilation et installation d'AFL++
Pour avoir AFL++ facilement disponible avec tout compilé, tirez l'image directement depuis Docker Hub (disponible pour x86_64 et arm64) :
docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
Cette image est automatiquement publiée lorsqu'un push est effectué sur la
branche stable (voir branches). Si vous utilisez la commande
ci-dessus, vous trouverez votre code source cible dans /src dans le conteneur.
Remarque : vous pouvez également tirer aflplusplus/aflplusplus:dev qui
correspond à l'état de développement le plus récent d'AFL++.
Pour compiler AFL++ vous-même — ce que nous recommandons — continuez sur docs/INSTALL.md.
Démarrage rapide : Fuzzing avec AFL++
REMARQUE : Avant de commencer, veuillez lire les risques de bon sens liés au fuzzing.
Ceci est un démarrage rapide pour fuzzer des cibles dont le code source est disponible. Pour lire le processus en détail, voir docs/fuzzing_in_depth.md.
Pour apprendre à fuzzer d'autres types de cibles, voir :
- Cibles binaires uniquement : docs/fuzzing_binary-only_targets.md
- Services réseau : docs/best_practices.md#fuzzing-a-network-service
- Programmes GUI : docs/best_practices.md#fuzzing-a-gui-program
Démarrage rapide étape par étape :
-
Compilez le programme ou la bibliothèque à fuzzer en utilisant
afl-cc. Une façon courante de faire cela serait :CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all -
Obtenez un petit fichier d'entrée valide mais qui a du sens pour le programme. Lorsque vous fuzzez une syntaxe verbeuse (SQL, HTTP, etc.), créez également un dictionnaire comme décrit dans dictionaries/README.md.
-
Si le programme lit depuis stdin, exécutez
afl-fuzzcomme ceci :./afl-fuzz -i seeds_dir -o output_dir -- \ /path/to/tested/program [...program's cmdline...]Pour ajouter un dictionnaire, ajoutez
-x /path/to/dictionary.txtà afl-fuzz.Si le programme prend l'entrée depuis un fichier, vous pouvez mettre
@@dans la ligne de commande du programme ; AFL++ y placera un nom de fichier auto-généré pour vous. -
Examinez tout ce qui est affiché en rouge dans l'interface du fuzzer en consultant rapidement docs/afl-fuzz_approach.md#understanding-the-status-screen.
-
Vous trouverez les crashes et les blocages détectés dans les sous-répertoires
crashes/ethangs/dans le répertoire-o output_dir. Vous pouvez rejouer les crashes en les fournissant à la cible, par exemple si votre cible utilise stdin :cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]Vous pouvez générer des core dumps ou utiliser gdb directement pour suivre les crashes.
-
Pour l'analyse de couverture de votre fuzzing, nous recommandons nos outils partenaires cov-analysis (rapports de couverture basés sur le code source à partir d'un corpus de fuzzing) et fuzz-reachability (analyse statique des fonctions qu'un harnais peut atteindre, pour distinguer les lacunes de couverture exploitables du code mort et pour générer des listes blanches d'instrumentation)
-
Nous ne saurions trop insister — si vous voulez fuzzer efficacement, lisez le document docs/fuzzing_in_depth.md !
Contact
Des questions ? Des préoccupations ? Des rapports de bugs ?