
Biblioteca Avançada de Fuzzing - Monte seu Fuzzer em Rust! Escala em núcleos e máquinas. Para Windows, Android, MacOS, Linux, no_std, ...
LibAFL, a biblioteca de fuzzingBiblioteca Avançada de Fuzzing - Monte seus próprios fuzzers e estenda seus recursos usando Rust.
LibAFL é uma coleção de peças reutilizáveis de fuzzers, escrita em Rust, que fornece muitos dos benefícios de um fuzzer pronto para uso, sendo completamente personalizável.
Algumas funcionalidades de destaque atualmente incluem:
rápido: Fazemos tudo que podemos em tempo de compilação, mantendo a sobrecarga em tempo de execução mínima. Usuários atingem 120k execuções/seg em modo frida em um telefone (usando todos os núcleos).escalável: Low Level Message Passing, LLMP para abreviar, permite que LibAFL escale quase linearmente entre núcleos, e via TCP para várias máquinas.adaptável: Você pode substituir cada parte do LibAFL. Por exemplo, BytesInput é apenas uma forma potencial de entrada:
sinta-se à vontade para adicionar uma entrada baseada em AST para fuzzing estruturado, e mais.multiplataforma: LibAFL roda em Windows, macOS, iOS, Linux e Android, e mais. LibAFL pode ser construído em modo no_std para injetar LibAFL em alvos obscuros como dispositivos embarcados e hipervisores.traga seu próprio alvo: Suportamos modos somente binário, como Frida-Mode, bem como múltiplas passagens de compilação para instrumentação baseada em código-fonte. Claro que é fácil adicionar backends de instrumentação personalizados.LibAFL é rápido, multiplataforma, compatível com no_std e escala entre núcleos e máquinas. Ele oferece um crate principal que fornece blocos de construção para fuzzers personalizados, libafl, uma biblioteca contendo código comum que pode ser usado para instrumentação de alvos, libafl_targets, e uma biblioteca que fornece facilidades para envolver compiladores, libafl_cc. Ele oferece integrações com frameworks de instrumentação populares. No momento, os backends suportados são:
SanitizerCoverage, em libafl_targetsFrida, em libafl_fridaQEMU modo usuário e modo sistema, incluindo hooks para emulação, em libafl_qemuTinyInst, em libafl_tinyinst por elbiazoRecomendamos fortemente não usar, por exemplo, o pacote da sua distribuição Linux, pois provavelmente está desatualizado. Portanto, instale o Rust diretamente, instruções podem ser encontradas aqui.
A versão mínima suportada do Rust está definida. Você pode sempre verificar a versão atualmente requerida no Cargo.toml do LibAFL:
Se a sua versão instalada do Rust for mais antiga que a listada no Cargo.toml, atualize para o toolchain estável mais recente:
rustup update stable
fuzzers/. Você pode encontrar instruções para instalá-lo no seu ambiente no Manual do Programador Just.LibAFL comgit clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL (em andamento!) com (requer mdbook)cd docs && mdbook serve
Coletamos todos os fuzzers de exemplo em ./fuzzers.
Certifique-se de ler a documentação (e o código fonte), esta é a maneira natural de começar!
just run
Você pode executar cada fuzzer de exemplo com o seguinte comando, desde que o diretório do fuzzer tenha um arquivo Justfile. O fuzzer mais bem testado é ./fuzzers/inprocess/libfuzzer_libpng, um fuzzer multicore semelhante ao libfuzzer usando LibAFL para um harness libpng.
LibAFL (em andamento) online ou no repositóriolibaf_qemu, Hacking TMNF - Fuzzing the game server, por RickdeJager.LibAFL é escrito e mantido por
Por favor, consulte CONTRIBUTING.md para as diretrizes de contribuição.
Seu fuzzer não funciona como esperado? Tente ler DEBUGGING.md para entender como depurar seus problemas.
Se você usar LibAFL para seu trabalho acadêmico, cite o seguinte artigo:
@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},
}