Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
centipede — Mecanismo de fuzzing distribuído orientado por cobertura, compatível com alvos libFuzzer; escala para milhares de tarefas concorrentes, usa sanitizers e destilação de corpus para revelar bugs. | Kitploit
Ferramentas/GitHubGitHub/dvyukov/centipede
Análise de VulnerabilidadesAnálise Dinâmica de Código (DAST)Fuzzing
GitHubdvyukov/centipede

centipede

Mecanismo de fuzzing distribuído orientado por cobertura, compatível com alvos libFuzzer; escala para milhares de tarefas concorrentes, usa sanitizers e destilação de corpus para revelar bugs.

Ver Repositório
79525há 1 anoRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Centipede - um mecanismo de fuzzing distribuído. Em desenvolvimento.

Por que Centipede

Por que não? Atualmente, estamos tentando fuzzar alguns alvos muito grandes e muito lentos para os quais o libFuzzer, o AFL e afins não escalam necessariamente bem. Para um dos nossos exemplos motivadores, veja SiliFuzz. Ao trabalhar no Centipede, planejamos experimentar novas abordagens para fuzzing diferencial em escala massiva, que os mecanismos de fuzzing existentes não tentam fazer.

Recursos notáveis:

  • Suporte pronto para uso para fuzz targets baseados em libFuzzer. Para usar o seu LLVMFuzzerTestOneInput() favorito, você só precisa compilar seu alvo com as opções de compilador e linker do Centipede.

  • Em desenvolvimento. Testamos o centipede em uma pequena equipe com alguns alvos. A menos que você faça parte do projeto Centipede ou queira nos ajudar, provavelmente você ainda não quer continuar lendo.

  • Escala. A intenção é poder executar qualquer número de jobs simultaneamente, com muito pouca sobrecarga de comunicação. Atualmente testamos com 100 jobs locais e com 10 mil jobs em um cluster.

  • Fora do processo. O alvo é executado em um processo separado. Qualquer crash nele não afetará o fuzzer. O Centipede também pode ser usado em processo, mas esse modo não é o objetivo principal. Se o seu alvo for pequeno e rápido, você provavelmente ainda prefere o libFuzzer.

  • A integração com os sanitizers é alcançada por meio de builds separados. Se durante o fuzzing você quiser encontrar bugs com ASAN, MSAN ou TSAN, você precisará fornecer binários separados para cada sanitizer, além de um binário principal para o próprio Centipede. O binário principal não deve usar nenhum dos sanitizers.

  • Nenhuma parte da interface interna é estável. Tudo pode mudar nesta fase.

Terminologia

Mecanismo de fuzzing, também conhecido como fuzzer {#fuzzer}

Um programa que produz um fluxo infinito de entradas para um alvo e orquestra a execução.

Fuzz target {#target}

Um binário, uma biblioteca, uma API, ou melhor, qualquer coisa que possa consumir bytes como entrada e produzir algum tipo de dados de cobertura como saída. Um alvo do libFuzzer pode ser um alvo do Centipede. Leia mais aqui.

Entrada {#input}

Uma sequência de bytes que pode ser fornecida a um alvo. A entrada pode ser um saco arbitrário de bytes ou algum dado estruturado, por exemplo, um proto serializado.

Feature

Um número que representa algum comportamento único do alvo. Por exemplo, uma feature 1234567 pode representar o fato de que o bloco básico número 987 no alvo foi executado 7 vezes. Ao executar uma entrada com o alvo, o fuzzer coleta as features que foram observadas durante a execução.

Conjunto de features

Um conjunto de features associado a uma entrada específica.

Cobertura

Algumas informações sobre o comportamento do alvo quando ele executa uma determinada entrada. A cobertura geralmente é representada como o conjunto de features que a entrada acionou no alvo.

Mutator

Uma função que recebe bytes como entrada e produz uma pequena mutação aleatória da entrada. Veja também: fuzzing ciente de estrutura.

Executor {#executor}

Uma função que sabe como alimentar uma entrada em um alvo e obter cobertura em troca (ou seja, executar).

Centipede

Um mecanismo de fuzzing personalizável que permite ao usuário substituir o Mutator e o Executor.

Centipede runner {#runner}

Uma biblioteca que implementa a interface de executor esperada pelo fuzzer Centipede. O runner sabe como executar um alvo instrumentado com sancov, coletar a cobertura resultante e passá-la de volta ao Centipede. Futuros fuzz targets do Centipede podem ser linkados com essa biblioteca para se tornarem executáveis pelo Centipede.

Corpus (plural: corpora)

Um conjunto de entradas.

Destilação (criação de um corpus destilado)

Um processo de escolha de um subconjunto de um corpus maior, de modo que o subconjunto tenha as mesmas features de cobertura do corpus original.

Shard

Um arquivo que representa um subconjunto do corpus e outro arquivo que representa os conjuntos de features para esse mesmo subconjunto do corpus.

Mesclando shards

Mesclar o shard B no shard A significa: para cada entrada no shard B que tenha features ausentes no shard A, adicionar essa entrada a A.

Job

Um único processo de fuzzer. Um job escreve apenas em um shard, mas pode ler vários shards.

Workdir ou WD

Um diretório local ou remoto que contém dados produzidos ou consumidos por um fuzzer.

Compilar o Centipede

git clone https://github.com/google/centipede.git
cd centipede
CENTIPEDE_SRC=`pwd`
BIN_DIR=$CENTIPEDE_SRC/bazel-bin
bazel build -c opt :all

O que você precisará para as etapas seguintes:

  • $BIN_DIR/centipede - o binário do mecanismo (o fuzzer).
  • $BIN_DIR/libcentipede_runner.pic.a - a biblioteca que você precisa linkar com seu fuzz target (o runner).
  • $CENTIPEDE_SRC/clang-flags.txt - flags de compilação recomendadas do clang para o alvo.

Você pode manter esses arquivos onde estão ou copiá-los para algum lugar.

Compilar seu fuzz target

Fornecemos dois exemplos de compilação do alvo: um alvo minúsculo de arquivo único e o libpng. Depois de compilar seu alvo, prossiga para a etapa de execução do fuzz target.

O exemplo simples

Este exemplo usa um dos fuzz targets de exemplo simples, também conhecidos como puzzles, incluídos no repositório do Centipede.

Compilar

NOTA: Os comandos abaixo usam as flags de $CENTIPEDE_SRC/clang-flags.txt. Você pode optar por usar outro conjunto de flags de instrumentação: clang-flags.txt apenas fornece uma opção padrão simples.

FUZZ_TARGET=byte_cmp_4  # or any other source under $CENTIPEDE_SRC/puzzles
clang++ @$CENTIPEDE_SRC/clang-flags.txt -c $CENTIPEDE_SRC/puzzles/$FUZZ_TARGET.cc -o $BIN_DIR/$FUZZ_TARGET.o

Linkar

Esta etapa linka o fuzz target recém-compilado com libcentipede_runner.pic.a e outras bibliotecas necessárias.

clang++ $BIN_DIR/$FUZZ_TARGET.o $BIN_DIR/libcentipede_runner.pic.a \
    -ldl -lrt -lpthread -o $BIN_DIR/$FUZZ_TARGET

Pule para a etapa de execução.

O exemplo do libpng

Baixar e compilar o libpng


LIBPNG_BRANCH=v1.6.37  # You can experiment with other branches if you'd like
git clone --branch $LIBPNG_BRANCH --single-branch https://github.com/glennrp/libpng.git
cd libpng
CC=clang CFLAGS=@$CENTIPEDE_SRC/clang-flags.txt ./configure --disable-shared
make -j

Linkar o fuzz target do próprio libpng com libcentipede_runner.pic.a

FUZZ_TARGET=libpng_read_fuzzer
clang++ -include cstdlib \
    ./contrib/oss-fuzz/$FUZZ_TARGET.cc \
    ./.libs/libpng16.a \
    $BIN_DIR/libcentipede_runner.pic.a \
    -ldl -lrt -lpthread -lz \
    -o $BIN_DIR/$FUZZ_TARGET

Executar o Centipede localmente {#run-step}

Executar localmente não dará a escala completa, mas pode ser útil durante a fase de desenvolvimento do fuzzer. Recomendamos que tanto o fuzzer quanto o alvo sejam copiados para um diretório local antes da execução, a fim de evitar sobrecarregar um sistema de arquivos de rede.

Preparar para uma execução

WD=$HOME/centipede_run
mkdir -p $WD
Baixar ferramenta