Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
centipede — Motore di fuzzing distribuito guidato dalla copertura, compatibile con i target libFuzzer; scalabile fino a migliaia di job concorrenti, utilizza sanitizer e distillazione del corpus per scoprire bug. | Kitploit
Strumenti/GitHubGitHub/dvyukov/centipede
Analisi delle VulnerabilitàAnalisi Dinamica del Codice (DAST)Fuzzing
GitHubdvyukov/centipede

centipede

Motore di fuzzing distribuito guidato dalla copertura, compatibile con i target libFuzzer; scalabile fino a migliaia di job concorrenti, utilizza sanitizer e distillazione del corpus per scoprire bug.

Vedi Repository
795301 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Centipede - un motore di fuzzing distribuito. Lavoro in corso.

Perché Centipede

Perché no? Stiamo attualmente cercando di fare fuzzing su alcuni target molto grandi e molto lenti per i quali libFuzzer, AFL e simili non scalano necessariamente bene. Per uno dei nostri esempi motivazionali vedi SiliFuzz. Mentre lavoriamo su Centipede, intendiamo sperimentare nuovi approcci al fuzzing differenziale su larga scala che i motori di fuzzing esistenti non provano a fare.

Caratteristiche notevoli:

  • Supporto immediato per i fuzz target basati su libFuzzer. Per usare la tua LLVMFuzzerTestOneInput() preferita devi solo compilare il target con le opzioni del compilatore e del linker di Centipede.

  • Lavoro in corso. Testiamo Centipede all'interno di un piccolo team su un paio di target. A meno che tu non faccia parte del progetto Centipede o voglia aiutarci, probabilmente non vuoi ancora leggere oltre.

  • Scala. L'intento è poter eseguire un numero qualsiasi di job contemporaneamente, con un overhead di comunicazione molto ridotto. Attualmente testiamo con 100 job locali e con 10k job su un cluster.

  • Fuori processo. Il target gira in un processo separato. Eventuali crash in esso non influenzeranno il fuzzer. Centipede può essere usato anche in-process, ma questa modalità non è l'obiettivo principale. Se il tuo target è piccolo e veloce, probabilmente vuoi ancora libFuzzer.

  • L'integrazione con i sanitizer è ottenuta tramite build separate. Se durante il fuzzing vuoi trovare bug con ASAN, MSAN o TSAN, dovrai fornire binari separati per ogni sanitizer e un binario principale per Centipede stesso. Il binario principale non dovrebbe usare nessuno dei sanitizer.

  • Nessuna parte dell'interfaccia interna è stabile. Qualsiasi cosa può cambiare in questa fase.

Terminologia

Motore di fuzzing, noto anche come fuzzer {#fuzzer}

Un programma che produce un flusso infinito di input per un target e ne orchestra l'esecuzione.

Fuzz target {#target}

Un binario, una libreria, un'API, o piuttosto qualsiasi cosa che possa consumare byte come input e produrre una qualche forma di dati di copertura come output. Un target di libFuzzer può essere un target di Centipede. Leggi di più qui.

Input {#input}

Una sequenza di byte che può essere fornita a un target. L'input può essere un insieme arbitrario di byte o alcuni dati strutturati, ad esempio un proto serializzato.

Feature

Un numero che rappresenta un comportamento unico del target. Ad esempio, una feature 1234567 può rappresentare il fatto che il blocco di base numero 987 nel target è stato eseguito 7 volte. Quando esegue un input con il target, il fuzzer raccoglie le feature osservate durante l'esecuzione.

Feature set

Un insieme di feature associate a un input specifico.

Copertura

Alcune informazioni sul comportamento del target quando esegue un dato input. La copertura è solitamente rappresentata come l'insieme di feature che l'input ha attivato nel target.

Mutator

Una funzione che prende byte come input e restituisce una piccola mutazione casuale dell'input. Vedi anche: structure-aware fuzzing.

Executor {#executor}

Una funzione che sa come fornire un input a un target e ottenere in cambio la copertura (cioè eseguire).

Centipede

Un motore di fuzzing personalizzabile che consente all'utente di sostituire il Mutator e l'Executor.

Centipede runner {#runner}

Una libreria che implementa l'interfaccia dell'executor prevista dal fuzzer Centipede. Il runner sa come eseguire un target instrumentato con sancov, raccogliere la copertura risultante e restituirla a Centipede. I potenziali fuzz target di Centipede possono essere linkati con questa libreria per renderli eseguibili da Centipede.

Corpus (plurale: corpora)

Un insieme di input.

Distillazione (creazione di un corpus distillato)

Un processo di selezione di un sottoinsieme di un corpus più grande, tale che il sottoinsieme abbia le stesse feature di copertura del corpus originale.

Shard

Un file che rappresenta un sottoinsieme del corpus e un altro file che rappresenta gli insiemi di feature per quello stesso sottoinsieme del corpus.

Unione di shard

Unire lo shard B nello shard A significa: per ogni input nello shard B che ha feature mancanti nello shard A, aggiungere quell'input ad A.

Job

Un singolo processo del fuzzer. Un job scrive solo su uno shard, ma può leggere più shard.

Workdir o WD

Una directory locale o remota che contiene dati prodotti o consumati da un fuzzer.

Compilare 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

Cosa ti servirà per i passaggi successivi:

  • $BIN_DIR/centipede - il binario del motore (il fuzzer).
  • $BIN_DIR/libcentipede_runner.pic.a - la libreria con cui devi linkare il tuo fuzz target (il runner).
  • $CENTIPEDE_SRC/clang-flags.txt - le flag di compilazione clang consigliate per il target.

Puoi tenere questi file dove sono o copiarli altrove.

Compilare il tuo fuzz target

Forniamo due esempi di compilazione del target: un minuscolo target a file singolo e libpng. Una volta compilato il target, procedi al passaggio di esecuzione del fuzz target.

L'esempio semplice

Questo esempio usa uno dei semplici fuzz target di esempio, noti anche come puzzle, inclusi nel repository Centipede.

Compilazione

NOTA: I comandi seguenti usano le flag da $CENTIPEDE_SRC/clang-flags.txt. Puoi scegliere di usare un altro insieme di flag di strumentazione: clang-flags.txt fornisce solo una semplice opzione predefinita.

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

Link

Questo passaggio collega (linka) il fuzz target appena compilato con libcentipede_runner.pic.a e altre librerie richieste.

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

Vai al passaggio di esecuzione.

L'esempio libpng

Scaricare e compilare 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

Linkare il fuzz target di libpng con 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

Eseguire Centipede localmente {#run-step}

Eseguire localmente non darà la scala completa, ma può essere utile durante la fase di sviluppo del fuzzer. Raccomandiamo di copiare sia il fuzzer che il target in una directory locale prima dell'esecuzione per evitare di sollecitare un file system di rete.

Prepararsi per un'esecuzione

WD=$HOME/centipede_run
mkdir -p $WD
Scarica lo strumento