Voltar às atualizações
New releaseSep 4, 2026

AFLplusplus v5.03c

AFL++ é um fuzzer de última geração, e #1 em benchmarks. Originalmente era baseado no AFL. Hoje vem com qemu 5.1, cobertura livre de colisões, laf-intel & redqueen aprimorados, power schedules do AFLfast++, mutadores MOpt, unicorn_mode, e muito mais!

Compartilhar

American Fuzzy Lop plus plus (AFL++)

AFL++ logo

Versão de lançamento: 5.03c

Versão GitHub: 5.03c

Repositório: https://github.com/AFLplusplus/AFLplusplus

O AFL++ é mantido por:

Originalmente desenvolvido por Michal "lcamtuf" Zalewski.

O AFL++ é um fork superior ao AFL do Google - mais velocidade, mais e melhores mutações, mais e melhor instrumentação, suporte a módulos personalizados, etc.

O AFL++ é licenciado sob a AGPL-3.0-or-later, e também contém arquivos sob a Licença Apache-2.0. Tudo compilado em um harness de fuzzing é e permanecerá licenciado sob Apache 2.0. Cada arquivo declara sua própria licença no cabeçalho SPDX-License-Identifier — essa é a licença que você deve seguir para aquele arquivo. Uma licença comercial opcional está disponível para organizações que não podem usar a AGPL (obtida através de doação para uma boa causa — o projeto e seus mantenedores não recebem dinheiro). Consulte LICENSING.md para uma visão geral em linguagem simples e a seção Licença abaixo para detalhes.

Começando

Aqui estão algumas informações para você começar:

  • Para uma visão geral da documentação do AFL++ e um guia gráfico muito útil, visite docs/README.md.
  • Para começar com tutoriais, acesse docs/tutorials.md.
  • Para lançamentos, consulte a aba Releases e branches. As melhores branches para usar são, no entanto, stable ou dev - dependendo da sua tolerância a risco. Dê também uma olhada na lista de mudanças importantes no AFL++ e na lista de recursos.
  • Se você deseja usar o AFL++ para seu trabalho acadêmico, consulte a página de artigos no site.
  • Para citar nosso trabalho, veja a seção Citar.
  • Para comparações, use a configuração aflplusplus do fuzzbench, ou use afl-clang-fast com AFL_LLVM_CMPLOG=1. Você pode encontrar a configuração padrão do aflplusplus no fuzzbench do Google.

Compilando e instalando o AFL++

Para ter o AFL++ facilmente disponível com tudo compilado, puxe a imagem diretamente do Docker Hub (disponível para x86_64 e arm64):

docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus

Esta imagem é publicada automaticamente quando um push para a branch stable acontece (veja branches). Se você usar o comando acima, encontrará o código-fonte do seu alvo em /src no contêiner.

Nota: você também pode puxar aflplusplus/aflplusplus:dev, que é o estado de desenvolvimento mais atual do AFL++.

Para compilar o AFL++ você mesmo - o que recomendamos - continue em docs/INSTALL.md.

Início rápido: Fuzzing com AFL++

NOTA: Antes de começar, leia sobre os riscos de bom senso do fuzzing.

Este é um início rápido para fazer fuzzing em alvos com código-fonte disponível. Para ler sobre o processo em detalhes, consulte docs/fuzzing_in_depth.md.

Para aprender sobre fuzzing em outros tipos de alvos, veja:

Início rápido passo a passo:

  1. Compile o programa ou biblioteca a ser submetido a fuzzing usando afl-cc. Uma forma comum de fazer isso seria:

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. Obtenha um arquivo de entrada pequeno, mas válido, que faça sentido para o programa. Ao fazer fuzzing em sintaxe verbosa (SQL, HTTP, etc.), crie também um dicionário conforme descrito em dictionaries/README.md.

  3. Se o programa lê da entrada padrão (stdin), execute afl-fuzz assim:

    ./afl-fuzz -i seeds_dir -o output_dir -- \
    /path/to/tested/program [...program's cmdline...]
    

    Para adicionar um dicionário, adicione -x /path/to/dictionary.txt ao afl-fuzz.

    Se o programa recebe entrada de um arquivo, você pode colocar @@ na linha de comando do programa; o AFL++ colocará um nome de arquivo gerado automaticamente ali para você.

  4. Investigue qualquer coisa exibida em vermelho na interface do fuzzer consultando prontamente docs/afl-fuzz_approach.md#understanding-the-status-screen.

  5. Você encontrará crashes e hangs nos subdiretórios crashes/ e hangs/ no diretório -o output_dir. Você pode reproduzir os crashes alimentando-os ao alvo, por exemplo, se seu alvo usa stdin:

    cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]
    

    Você pode gerar core dumps ou usar gdb diretamente para acompanhar os crashes.

  6. Para análise de cobertura do seu fuzzing, recomendamos nossas ferramentas parceiras cov-analysis (relatórios de cobertura baseados em código-fonte a partir de um corpus de fuzzing) e fuzz-reachability (análise estática de quais funções um harness pode alcançar, para distinguir lacunas de cobertura acionáveis de código morto e gerar listas de permissão de instrumentação)

  7. Não podemos enfatizar o suficiente - se você quer fazer fuzzing de forma eficaz, leia o documento docs/fuzzing_in_depth.md!

Contato

Perguntas? Preocupações? Relatórios de bugs?

Branches

As seguintes branches existem:

Categorias