Voltar às atualizações
New releaseAug 10, 2026

LibAFL v0.16.0

Biblioteca Avançada de Fuzzing - Monte seu Fuzzer em Rust! Escala em núcleos e máquinas. Para Windows, Android, MacOS, Linux, no_std, ...

Compartilhar

LibAFL, a biblioteca de fuzzing

LibAFL logo

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

Conceitos principais

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:

Construindo e instalando

Instale as Dependências

  • A linguagem de desenvolvimento Rust
    • Recomendamos 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
      
  • Ferramentas LLVM
    • As ferramentas LLVM (incluindo clang, clang++) são necessárias (mais recentes que LLVM 15.0.0 até LLVM 18.1.3). Se você está usando Debian/Ubuntu, novamente, recomendamos fortemente que instale o pacote a partir daqui
  • Just:

Clone o repositório LibAFL com

git clone https://github.com/AFLplusplus/LibAFL

Construa a biblioteca usando

cargo build --release

Construa a documentação da API com

cargo doc
cd docs && mdbook serve

Primeiros passos

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.

Recursos

Contribuidores

LibAFL é escrito e mantido por

Contribuindo

Por favor, consulte CONTRIBUTING.md para as diretrizes de contribuição.

Depuração

Seu fuzzer não funciona como esperado? Tente ler DEBUGGING.md para entender como depurar seus problemas.

Citar

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},
}

Licença

Licenciado sob a Licença Apache, Versão 2.0 ou a licença MIT, à sua escolha.
A menos que você declare explicitamente o contrário, qualquer contribuição intencionalmente submetida para inclusão neste crate por você, conforme definido na licença Apache-2.0, será licenciada duplamente como acima, sem quaisquer termos ou condições adicionais.

Categorias