Retour aux mises à jour
New releaseSep 4, 2026

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 !

Partager

American Fuzzy Lop plus plus (AFL++)

Logo AFL++

Version publiée : 5.03c

Version GitHub : 5.04a

Dépôt : https://github.com/AFLplusplus/AFLplusplus

AFL++ est maintenu par :

Développé à l'origine par Michal "lcamtuf" Zalewski.

AFL++ est un fork supérieur de l'AFL de Google - plus de vitesse, plus et de meilleures mutations, plus et de meilleures instrumentations, prise en charge de modules personnalisés, etc.

AFL++ est distribué sous licence AGPL-3.0-or-later, et il 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 les tutoriels, rendez-vous sur docs/tutorials.md.
  • Pour les versions, voir l' onglet Releases et branches. Les meilleures branches à utiliser sont toutefois stable ou dev - selon votre tolérance au 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 notre travail, consultez la section Citer.
  • Pour les comparaisons, utilisez la configuration aflplusplus de fuzzbench, ou utilisez afl-clang-fast avec AFL_LLVM_CMPLOG=1. Vous pouvez trouver la configuration par défaut aflplusplus sur le fuzzbench de Google.

Compiler et installer AFL++

Pour avoir AFL++ facilement disponible avec tout de compilé, récupérez 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 vers la branche stable se produit (voir branches). Si vous utilisez la commande ci-dessus, vous trouverez votre code source cible dans /src dans le conteneur.

Remarque : vous pouvez également récupérer 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 - poursuivez à la section docs/INSTALL.md.

Démarrage rapide : Fuzzing avec AFL++

REMARQUE : Avant de commencer, veuillez lire les risques de bon sens du fuzzing.

Ceci est un démarrage rapide pour le fuzzing de cibles dont le code source est disponible. Pour lire une description détaillée du processus, voir docs/fuzzing_in_depth.md.

Pour en savoir plus sur le fuzzing d'autres cibles, voir :

Démarrage rapide étape par étape :

  1. Compilez le programme ou la bibliothèque à fuzzer en utilisant afl-cc. Une manière courante de procéder serait :

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. Obtenez un fichier d'entrée petit mais valide qui a du sens pour le programme. Lors du fuzzing d'une syntaxe verbeuse (SQL, HTTP, etc.), créez également un dictionnaire comme décrit dans dictionaries/README.md.

  3. Si le programme lit depuis stdin, exécutez afl-fuzz comme 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 son entrée depuis un fichier, vous pouvez placer @@ dans la ligne de commande du programme ; AFL++ y insérera un nom de fichier généré automatiquement pour vous.

  4. 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.

  5. Vous trouverez les crashes et les hangs détectés dans les sous-répertoires crashes/ et hangs/ du 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 cores ou utiliser gdb directement pour suivre les crashes.

  6. 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 harness peut atteindre, afin de distinguer les lacunes de couverture exploitables du code mort et de générer des listes d'autorisation d'instrumentation)

  7. Nous ne le répéterons jamais assez - si vous voulez faire du fuzzing efficacement, lisez le document docs/fuzzing_in_depth.md !

Contact

Des questions ? Des préoccupations ? Des rapports de bugs ?

Catégories