0Pricing
C++ Academy · Aula

Fuzzing com libFuzzer

Encontre falhas em casos extremos testando o seu código com libFuzzer

Fuzzing com libFuzzer é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Por que usar testes aleatórios

Testes aleatórios geram entradas aleatórias para encontrar falhas, travamentos e erros de segurança. As ferramentas modernas usam feedback de cobertura para evoluir entradas que exploram novos caminhos do código.

libFuzzer

libFuzzer faz parte do LLVM e integra-se aos sanitizadores. Escreva uma única função que faça testes aleatórios de um ponto de entrada; a estrutura gera as entradas.

Escrevendo um alvo de testes aleatórios

A assinatura é fixa: receba uma matriz de bytes e retorne 0.

#include <cstdint>
#include <cstddef>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
    parse_input(reinterpret_cast<const char*>(data), size);
    return 0;
}

Compilação para libFuzzer

Use Clang com a combinação -fsanitize=fuzzer,address. Faça a ligação diretamente — não é necessário usar main.

clang++ -g -O1 -fsanitize=fuzzer,address fuzz.cpp parser.cpp -o fuzz_target
./fuzz_target

Mutação guiada por cobertura

libFuzzer acompanha quais caminhos do código cada entrada executa. Ele modifica as entradas promissoras para explorar caminhos mais profundos — de forma muito mais eficiente do que uma geração aleatória às cegas.

Um conjunto de entradas

Inicialize a ferramenta com um diretório de entradas conhecidamente interessantes. A ferramenta cria novas entradas modificando-as.

./fuzz_target corpus/

Arquivos de dicionário

Forneça um dicionário de tokens comuns para acelerar a exploração de entradas com estrutura gramatical (HTML, JSON, mensagens de protocolo).

Combine com sanitizadores

Executar sob o AddressSanitizer transforma corrupções silenciosas em falhas imediatas que a ferramenta consegue detectar.

Desempenho

Um único núcleo pode realizar dezenas de milhares de execuções por segundo em alvos pequenos. Execute por horas ou dias; deixe a ferramenta rodando em segundo plano na integração contínua.

Reprodução de falhas

Quando libFuzzer encontra uma falha, salva a entrada no disco. Reproduza-a mais tarde para depurar.

./fuzz_target crash-abc123

OSS-Fuzz

O OSS-Fuzz do Google executa continuamente ferramentas de testes aleatórios em projetos de código aberto e relata erros. Muitas bibliotecas conhecidas integram-se a ele.

AFL e Honggfuzz

Existem outras ferramentas de testes aleatórios:

  • AFL/AFL++ — baseadas em processos, com aceleração por servidor de bifurcação
  • Honggfuzz — oferece suporte a protocolos de rede

libFuzzer é a integração mais fácil com C++.

Quando usar testes aleatórios

Faça testes aleatórios em qualquer código que processe entradas não confiáveis:

  • Analisadores (JSON, XML, protobuf)
  • Decodificadores (imagem, áudio, vídeo)
  • Manipuladores de protocolos de rede
  • Qualquer código que leia dados externos

Verificação rápida

O que torna os testes guiados por cobertura mais eficazes do que testes puramente aleatórios?

Recapitulação

libFuzzer é uma ferramenta de testes aleatórios guiada por cobertura e integrada ao Clang. Escreva uma entrada LLVMFuzzerTestOneInput pequena, compile com -fsanitize=fuzzer,address e deixe a ferramenta procurar falhas. Combine-a com sanitizadores e conjuntos de entradas; faça testes aleatórios em qualquer código que processe entradas não confiáveis.

Perguntas Frequentes

A aula “Fuzzing com libFuzzer” é grátis?

Sim — o texto completo de “Fuzzing com libFuzzer” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Fuzzing com libFuzzer”?

Encontre falhas em casos extremos testando o seu código com libFuzzer Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Fuzzing com libFuzzer”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Ferramentas de análise estática: clang-tidy, cppcheck
  2. Sanitizers: Address, Thread e UB Sanitizer
  3. Fuzzing com libFuzzer
  4. Integração contínua para projetos C++
← Voltar para C++ Academy