
Bibliothèque avancée de Fuzzing - Assemblez votre Fuzzer en Rust ! Passe à l'échelle sur plusieurs cœurs et machines. Pour Windows, Android, MacOS, Linux, no_std, ...
LibAFL, la bibliothèque de fuzzingBibliothèque de Fuzzing Avancée - Assemblez vos propres fuzzers et étendez leurs fonctionnalités avec Rust.
LibAFL est une collection de morceaux réutilisables de fuzzers, écrite en Rust, qui offre de nombreux avantages d'un fuzzer prêt à l'emploi, tout en étant entièrement personnalisable.
Certaines fonctionnalités marquantes incluent actuellement :
rapide : Nous faisons tout notre possible au moment de la compilation, minimisant la surcharge à l'exécution. Les utilisateurs atteignent 120k execs/sec en mode frida sur un téléphone (en utilisant tous les cœurs).évolutif : Low Level Message Passing, LLMP en abrégé, permet à LibAFL de s'adapter presque linéairement sur les cœurs, et via TCP à plusieurs machines.adaptable : Vous pouvez remplacer chaque partie de LibAFL. Par exemple, BytesInput n'est qu'une forme possible d'entrée :
n'hésitez pas à ajouter une entrée basée sur AST pour le fuzzing structuré, et plus encore.multi-plateforme : LibAFL fonctionne sur Windows, macOS, iOS, Linux et Android, et plus encore. LibAFL peut être compilé en mode no_std pour injecter LibAFL dans des cibles obscures comme les appareils embarqués et les hyperviseurs.apportez votre propre cible : Nous supportons les modes binaires uniquement, comme Frida-Mode, ainsi que plusieurs passes de compilation pour l'instrumentation basée sur le code source. Bien sûr, il est facile d'ajouter des backends d'instrumentation personnalisés.LibAFL est rapide, multi-plateforme, compatible no_std, et s'adapte sur les cœurs et les machines. Il propose une crate principale qui fournit des blocs de construction pour des fuzzers personnalisés, libafl, une bibliothèque contenant du code commun pouvant être utilisé pour l'instrumentation de cibles, libafl_targets, et une bibliothèque fournissant des outils pour encapsuler des compilateurs, libafl_cc. Il offre des intégrations avec des frameworks d'instrumentation populaires. Actuellement, les backends supportés sont :
SanitizerCoverage, dans libafl_targetsFrida, dans libafl_fridaQEMU en mode utilisateur et système, incluant des hooks pour l'émulation, dans libafl_qemuTinyInst, dans libafl_tinyinst par elbiazoNous recommandons vivement de ne pas utiliser par exemple le paquet de votre distribution Linux car il est probablement obsolète. Installez plutôt Rust directement, les instructions se trouvent ici.
La version minimale supportée de Rust est définie. Vous pouvez toujours vérifier la version actuellement requise dans le Cargo.toml de LibAFL :
Si votre version installée de Rust est plus ancienne que celle listée dans Cargo.toml, mettez à jour vers la dernière toolchain stable :
rustup update stable
fuzzers/. Vous trouverez les instructions pour l'installer dans votre environnement dans le Manuel du Programmeur Just.LibAFL avecgit clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL (en cours !) avec (nécessite mdbook)cd docs && mdbook serve
Nous rassemblons tous les exemples de fuzzers dans ./fuzzers.
Assurez-vous de lire leur documentation (et leur code source), c'est la manière naturelle de commencer !
just run
Vous pouvez exécuter chaque exemple de fuzzer avec cette commande, tant que le répertoire du fuzzer contient un fichier Justfile. Le fuzzer le mieux testé est ./fuzzers/inprocess/libfuzzer_libpng, un fuzzer multicœur de type libfuzzer utilisant LibAFL pour un harnais libpng.
LibAFL (en cours) en ligne ou dans le dépôtlibaf_qemu, Hacking TMNF - Fuzzing the game server, par RickdeJager.LibAFL est écrit et maintenu par
Veuillez consulter CONTRIBUTING.md pour les directives de contribution.
Votre fuzzer ne fonctionne pas comme prévu ? Essayez de lire DEBUGGING.md pour comprendre comment déboguer vos problèmes.
Si vous utilisez LibAFL pour vos travaux académiques, veuillez citer l'article suivant :
@inproceedings{libafl,
author = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
title = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
booktitle = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
series = {CCS '22},
year = {2022},
month = {November},
location = {Los Angeles, U.S.A.},
publisher = {ACM},
}