Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
centipede — Verteilte coverage-gesteuerte Fuzzing-Engine, kompatibel mit libFuzzer-Targets; skaliert auf Tausende gleichzeitiger Jobs, nutzt Sanitizer und Korpus-Destillation, um Bugs aufzudecken. | Kitploit
Tools/GitHubGitHub/dvyukov/centipede
SchwachstellenanalyseDynamische Code-Analyse (DAST)Fuzzing
GitHubdvyukov/centipede

centipede

Verteilte coverage-gesteuerte Fuzzing-Engine, kompatibel mit libFuzzer-Targets; skaliert auf Tausende gleichzeitiger Jobs, nutzt Sanitizer und Korpus-Destillation, um Bugs aufzudecken.

Repository anzeigen
79526vor 1 JahrVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Centipede - eine verteilte Fuzzing-Engine. In Arbeit.

Warum Centipede

Warum nicht? Wir versuchen derzeit, einige sehr große und sehr langsame Targets zu fuzzen, für die libFuzzer, AFL und Ähnliches nicht unbedingt gut skalieren. Ein Beispiel, das uns motiviert, ist SiliFuzz. Während wir an Centipede arbeiten, planen wir, neue Ansätze für differenzielles Fuzzing in großem Maßstab auszuprobieren, die bestehende Fuzzing-Engines nicht versuchen.

Besondere Merkmale:

  • Out-of-the-box-Unterstützung für libFuzzer-basierte Fuzz-Targets. Um dein bevorzugtes LLVMFuzzerTestOneInput() zu verwenden, musst du dein Target nur mit Centipedes Compiler- und Linker-Optionen bauen.

  • Work-in-progress. Wir testen Centipede in einem kleinen Team mit einigen Targets. Wenn du nicht Teil des Centipede-Projekts bist oder uns helfen möchtest, willst du wahrscheinlich noch nicht weiterlesen.

  • Skalierung. Die Absicht ist, eine beliebige Anzahl von Jobs gleichzeitig ausführen zu können, mit sehr geringem Kommunikationsaufwand. Wir testen derzeit mit 100 lokalen Jobs und mit 10k Jobs in einem Cluster.

  • Out-of-process. Das Target läuft in einem separaten Prozess. Abstürze darin beeinträchtigen den Fuzzer nicht. Centipede kann auch prozessintern verwendet werden, aber dieser Modus ist nicht das Hauptziel. Wenn dein Target klein und schnell ist, willst du wahrscheinlich weiterhin libFuzzer verwenden.

  • Die Integration mit den Sanitizern wird über separate Builds erreicht. Wenn du während des Fuzzings Fehler mit ASAN, MSAN oder TSAN finden möchtest, musst du separate Binärdateien für jeden Sanitizer sowie eine Haupt-Binärdatei für Centipede selbst bereitstellen. Die Haupt-Binärdatei sollte keinen der Sanitizer verwenden.

  • Kein Teil der internen Schnittstelle ist stabil. In dieser Phase kann sich alles ändern.

Terminologie

Fuzzing-Engine (a.k.a. Fuzzer) {#fuzzer}

Ein Programm, das einen unendlichen Strom von Eingaben für ein Target erzeugt und die Ausführung orchestriert.

Fuzz-Target {#target}

Ein Binary, eine Bibliothek, eine API oder eigentlich alles, das Bytes als Eingabe konsumieren und irgendeine Art von Coverage-Daten als Ausgabe erzeugen kann. Ein libFuzzer-Target kann als Centipede-Target verwendet werden. Mehr dazu hier.

Input {#input}

Eine Bytefolge, die einem Target zugeführt werden kann. Die Eingabe kann eine beliebige Ansammlung von Bytes oder strukturierte Daten sein, z. B. ein serialisiertes Proto.

Feature

Eine Zahl, die ein eindeutiges Verhalten des Targets repräsentiert. Zum Beispiel kann ein Feature 1234567 die Tatsache darstellen, dass der Basisblock 987 im Target siebenmal ausgeführt wurde. Wenn eine Eingabe mit dem Target ausgeführt wird, sammelt der Fuzzer die Features, die während der Ausführung beobachtet wurden.

Feature-Set

Eine Menge von Features, die mit einer bestimmten Eingabe verknüpft ist.

Coverage

Informationen über das Verhalten des Targets, wenn es eine bestimmte Eingabe ausführt. Coverage wird üblicherweise als Feature-Set dargestellt, das die Eingabe im Target ausgelöst hat.

Mutator

Eine Funktion, die Bytes als Eingabe nimmt und eine kleine zufällige Mutation der Eingabe ausgibt. Siehe auch: strukturbewusstes Fuzzing.

Executor {#executor}

Eine Funktion, die weiß, wie man eine Eingabe in ein Target einspeist und dafür Coverage zurückbekommt (d. h. ausführt).

Centipede

Eine anpassbare Fuzzing-Engine, die dem Benutzer erlaubt, den Mutator und den Executor zu ersetzen.

Centipede-Runner {#runner}

Eine Bibliothek, die das Executor-Interface implementiert, das der Centipede-Fuzzer erwartet. Der Runner weiß, wie man ein sancov-instrumentiertes Target ausführt, die resultierende Coverage sammelt und sie an Centipede zurückgibt. Potenzielle Centipede-Fuzz-Targets können mit dieser Bibliothek gelinkt werden, um sie durch Centipede ausführbar zu machen.

Corpus (Plural: Corpora)

Eine Menge von Eingaben.

Destillation (Erstellung eines destillierten Corpus)

Ein Prozess, bei dem eine Teilmenge aus einem größeren Corpus ausgewählt wird, sodass die Teilmenge dieselben Coverage-Features wie das ursprüngliche Corpus aufweist.

Shard

Eine Datei, die eine Teilmenge des Corpus darstellt, und eine weitere Datei, die Feature-Sets für dieselbe Teilmenge des Corpus darstellt.

Shards zusammenführen

Shard B in Shard A zusammenzuführen bedeutet: Für jede Eingabe in Shard B, die Features enthält, die in Shard A fehlen, diese Eingabe zu A hinzuzufügen.

Job

Ein einzelner Fuzzer-Prozess. Ein Job schreibt nur in einen Shard, kann aber mehrere Shards lesen.

Workdir oder WD

Ein lokales oder entferntes Verzeichnis, das Daten enthält, die von einem Fuzzer erzeugt oder verbraucht werden.

Centipede bauen

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

Was du für die folgenden Schritte benötigst:

  • $BIN_DIR/centipede - die Binärdatei der Engine (des Fuzzers).
  • $BIN_DIR/libcentipede_runner.pic.a - die Bibliothek, die du mit deinem Fuzz-Target linken musst (der Runner).
  • $CENTIPEDE_SRC/clang-flags.txt - empfohlene Clang-Compiler-Flags für das Target.

Du kannst diese Dateien an ihrem Platz lassen oder sie irgendwohin kopieren.

Baue dein Fuzz-Target

Wir stellen zwei Beispiele für das Bauen des Targets bereit: ein winziges Ein-Datei-Target und libpng. Sobald du dein Target gebaut hast, fahre mit dem Schritt zum Ausführen des Fuzz-Targets fort.

Das einfache Beispiel

Dieses Beispiel verwendet eines der einfachen Beispiel-Fuzz-Targets, auch Puzzles genannt, die im Centipede-Repository enthalten sind.

Kompilieren

HINWEIS: Die folgenden Befehle verwenden die Flags aus $CENTIPEDE_SRC/clang-flags.txt. Du kannst auch einen anderen Satz von Instrumentierungs-Flags wählen: clang-flags.txt bietet nur eine einfache Standardoption.

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

Linken

Dieser Schritt linkt das gerade gebaute Fuzz-Target mit libcentipede_runner.pic.a und anderen erforderlichen Bibliotheken.

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

Springe zum Ausführungsschritt.

Das libpng-Beispiel

libpng herunterladen und kompilieren


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

libpngs eigenes Fuzz-Target mit libcentipede_runner.pic.a linken

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

Centipede lokal ausführen {#run-step}

Tool herunterladen