Pular para o conteúdo
Skillpedia
Testes35 mil · #5878

implementing-fuzz-testing-in-cicd-with-aflplusplus

Faz seu agente integrar testes de fuzzing no processo de desenvolvimento. Ele encontra erros de memória e vulnerabilidades em código C/C++. É útil para melhorar a segurança de software compilado.

O que ela faz

Esta ferramenta ajuda a encontrar erros em programas de computador, especialmente aqueles que lidam com informações vindas de fora. Ela faz isso testando o programa com muitas entradas diferentes de forma automática e inteligente.

Quando usar

  • ✓Ao adicionar testes automáticos para encontrar falhas em programas.
  • ✓Ao procurar por bugs de segurança em programas que processam dados.
  • ✓Ao integrar testes de segurança em processos de desenvolvimento contínuo.

Exemplo do que pedir para a IA

“Integre testes automáticos para encontrar falhas em programas de computador no meu processo de desenvolvimento.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/implementing-fuzz-testing-in-cicd-with-aflplusplus/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/implementing-fuzz-testing-in-cicd-with-aflplusplus/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta insere um código especial no programa para monitorar quais partes dele são executadas. Ela então gera dados de teste aleatórios e usa as informações de execução para encontrar novas maneiras de testar o programa e descobrir erros.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill implementing-fuzz-testing-in-cicd-with-aflplusplus

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/implementing-fuzz-testing-in-cicd-with-aflplusplus/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Implementando Testes de Fuzzing em CI/CD com AFL++

Visão Geral

AFL++ (American Fuzzy Lop Plus Plus) é um fork mantido pela comunidade do AFL que oferece testes de fuzzing de ponta guiados por cobertura para descobrir vulnerabilidades em aplicações compiladas. O AFL++ usa algoritmos genéticos para mutar entradas, rastreando a cobertura de código para encontrar novos caminhos de execução que acionam falhas, travamentos e comportamento indefinido. Em ambientes de CI/CD, o AFL++ pode ser integrado para testar continuamente parsers, manipuladores de protocolo, processadores de formato de arquivo e qualquer código que lide com entradas não confiáveis. O AFL++ suporta modo persistente para fuzzing de alta velocidade (até 100.000+ execuções por segundo), mutadores personalizados, modo QEMU para fuzzing apenas de binários e CmpLog/RedQueen para extração automática de dicionário.

Quando Usar

  • Ao implantar ou configurar a implementação de testes de fuzzing em cicd com capacidades aflplusplus em seu ambiente
  • Ao estabelecer controles de segurança alinhados aos requisitos de conformidade
  • Ao construir ou melhorar a arquitetura de segurança para este domínio
  • Ao realizar avaliações de segurança que exigem esta implementação

Pré-requisitos

  • Runners de CI baseados em Linux (o AFL++ não suporta Windows nativamente)
  • Toolchain de compilador GCC ou Clang
  • AFL++ instalado (apt install aflplusplus ou compilado a partir do código-fonte)
  • Aplicação alvo com funções de harness isolando o processamento de entrada
  • Corpus de sementes de amostras de entrada válidas

Conceitos Principais

Testes de Fuzzing Guiados por Cobertura

O AFL++ instrumenta o binário alvo em tempo de compilação (ou via QEMU/Frida para alvos apenas de binários) para rastrear quais caminhos de código cada entrada exercita. Quando uma entrada mutada aciona um novo caminho de código, ela é salva no corpus para mutação adicional. Esse loop de feedback permite que o AFL++ explore sistematicamente o espaço de estado do programa.

Modos de Instrumentação

Modo Caso de Uso Desempenho
afl-clang-fast (LTO) Código-fonte disponível, melhor desempenho Mais Alto
afl-clang-fast Código-fonte disponível, padrão Alto
afl-gcc-fast Projetos baseados em GCC Alto
QEMU mode Apenas binário, sem código-fonte Médio
Frida mode Apenas binário, multiplataforma Médio
Unicorn mode Firmware, embarcado Baixo

Modo Persistente

O modo persistente evita a sobrecarga de fork, realizando fuzzing dentro de um loop:

#include <unistd.h>

__AFL_FUZZ_INIT();

int main() {
    __AFL_INIT();
    unsigned char *buf = __AFL_FUZZ_TESTCASE_BUF;

    while (__AFL_LOOP(10000)) {
        int len = __AFL_FUZZ_TESTCASE_LEN;
        // Process buf[0..len-1]
        parse_input(buf, len);
    }
    return 0;
}

Fluxo de Trabalho

Etapa 1 --- Construir o Harness de Fuzzing

Crie um harness que alimente a entrada do AFL++ para a função alvo:

// fuzz_harness.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "target_parser.h"

__AFL_FUZZ_INIT();

int main() {
    __AFL_INIT();
    unsigned char *buf = __AFL_FUZZ_TESTCASE_BUF;

    while (__AFL_LOOP(10000)) {
        int len = __AFL_FUZZ_TESTCASE_LEN;
        if (len < 4) continue;

        // Reset state between iterations
        parser_context_t ctx;
        parser_init(&ctx);
        parser_process(&ctx, buf, len);
        parser_cleanup(&ctx);
    }
    return 0;
}

Etapa 2 --- Compilar com Instrumentação AFL++

# Standard instrumentation
export CC=afl-clang-fast
export CXX=afl-clang-fast++

# Enable AddressSanitizer for better crash detection
export AFL_USE_ASAN=1

# Build the target with instrumentation
$CC -o fuzz_harness fuzz_harness.c -ltarget_parser -fsanitize=address

# Build a CmpLog binary for better coverage
$CC -o fuzz_harness_cmplog fuzz_harness.c -ltarget_parser \
  -fsanitize=address -DCMPLOG

Etapa 3 --- Preparar o Corpus de Sementes

mkdir -p corpus/
# Add valid input samples
cp test_inputs/* corpus/
# Minimize the corpus
afl-cmin -i corpus/ -o corpus_min/ -- ./fuzz_harness @@
# Further minimize individual inputs
mkdir -p corpus_tmin/
for f in corpus_min/*; do
    afl-tmin -i "$f" -o "corpus_tmin/$(basename $f)" -- ./fuzz_harness @@
done

Etapa 4 --- Configurar a Integração CI/CD

GitHub Actions:

name: Fuzz Testing
on:
  push:
    branches: [main]
  schedule:
    - cron: '0 2 * * *'  # Fuzzing noturno

jobs:
  fuzz:
    runs-on: ubuntu-latest
    timeout-minutes: 120
    steps:
      - uses: actions/checkout@v4

      - name: Instalar AFL++
        run: |
          sudo apt-get update
          sudo apt-get install -y aflplusplus

      - name: Restaurar cache do corpus

…
Perguntas frequentes

O que é 'fuzz testing'?

É um tipo de teste onde o programa é alimentado com dados aleatórios ou inesperados para ver se ele falha ou se comporta de maneira incorreta, ajudando a encontrar bugs.

O que é CI/CD?

CI/CD significa Integração Contínua/Entrega Contínua. É uma prática no desenvolvimento de software onde as mudanças são testadas e integradas frequentemente, tornando o processo mais rápido e seguro.

Por que usar AFL++?

AFL++ é uma ferramenta avançada que usa 'cobertura de código' para guiar os testes, tornando a busca por falhas mais eficiente do que testes aleatórios simples.

Detalhes

Descrição original do autor

Integrates AFL++ coverage-guided fuzzing into CI/CD pipelines, covering harness construction, AFL++/AddressSanitizer/CmpLog instrumentation builds, and persistent-mode fuzzing to discover memory-corruption and input-handling vulnerabilities in C/C++ code. Use when adding automated fuzz testing to a build pipeline or hunting for memory-safety bugs in native/compiled applications.

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#5878
Licença
Apache-2.0
Atualizada em
31/08/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas