Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
centipede — Moteur de fuzzing distribué guidé par la couverture, compatible avec les cibles libFuzzer ; passe à l'échelle jusqu'à des milliers de tâches concurrentes, utilise les sanitizers et la distillation de corpus pour découvrir des bugs. | Kitploit
Outils/GitHubGitHub/dvyukov/centipede
Analyse des VulnérabilitésAnalyse Dynamique de Code (DAST)Fuzzing
GitHubdvyukov/centipede

centipede

Moteur de fuzzing distribué guidé par la couverture, compatible avec les cibles libFuzzer ; passe à l'échelle jusqu'à des milliers de tâches concurrentes, utilise les sanitizers et la distillation de corpus pour découvrir des bugs.

Voir le dépôt
79525il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Centipede - un moteur de fuzzing distribué. Travail en cours.

Pourquoi Centipede

Pourquoi pas ? Nous essayons actuellement de fuzzer des cibles très volumineuses et très lentes pour lesquelles libFuzzer, AFL et autres ne passent pas nécessairement à l'échelle. Pour l'un de nos exemples motivants, voir SiliFuzz. En travaillant sur Centipede, nous prévoyons d'expérimenter de nouvelles approches de fuzzing différentiel à grande échelle, que les moteurs de fuzzing existants ne tentent pas.

Fonctionnalités notables :

  • Prise en charge immédiate des cibles de fuzzing basées sur libFuzzer. Pour utiliser votre LLVMFuzzerTestOneInput() préféré, il vous suffit de compiler votre cible avec les options de compilateur et de linker de Centipede.

  • Travail en cours. Nous testons Centipede au sein d'une petite équipe sur quelques cibles. Sauf si vous faites partie du projet Centipede, ou si vous voulez nous aider, vous ne voulez probablement pas lire la suite pour l'instant.

  • Passage à l'échelle. L'intention est de pouvoir exécuter un nombre quelconque de tâches en parallèle, avec très peu de surcharge de communication. Nous testons actuellement avec 100 tâches locales et 10 000 tâches sur un cluster.

  • Hors processus. La cible s'exécute dans un processus séparé. Tout crash dans celle-ci n'affectera pas le fuzzer. Centipede peut également être utilisé en mode in-process, mais ce mode n'est pas l'objectif principal. Si votre cible est petite et rapide, vous voulez probablement encore libFuzzer.

  • L'intégration avec les sanitizers est réalisée via des compilations séparées. Si pendant le fuzzing vous voulez trouver des bugs avec ASAN, MSAN ou TSAN, vous devrez fournir des binaires séparés pour chaque sanitizer ainsi qu'un binaire principal pour Centipede lui-même. Le binaire principal ne doit utiliser aucun des sanitizers.

  • Aucune partie de l'interface interne n'est stable. Tout peut changer à ce stade.

Terminologie

Moteur de fuzzing, alias fuzzer {#fuzzer}

Un programme qui produit un flux infini d'entrées pour une cible et orchestre l'exécution.

Cible de fuzzing {#target}

Un binaire, une bibliothèque, une API, ou plus généralement tout ce qui peut consommer des octets en entrée et produire une forme de données de couverture en sortie. Une cible libFuzzer peut être une cible de Centipede. En savoir plus ici.

Entrée {#input}

Une séquence d'octets qui peut être fournie à une cible. L'entrée peut être un ensemble arbitraire d'octets, ou des données structurées, par exemple un proto sérialisé.

Caractéristique

Un nombre qui représente un comportement unique de la cible. Par exemple, une caractéristique 1234567 peut représenter le fait qu'un bloc de base numéro 987 de la cible a été exécuté 7 fois. Lors de l'exécution d'une entrée avec la cible, le fuzzer collecte les caractéristiques observées pendant l'exécution.

Ensemble de caractéristiques

Un ensemble de caractéristiques associé à une entrée spécifique.

Couverture

Des informations sur le comportement de la cible lorsqu'elle exécute une entrée donnée. La couverture est généralement représentée comme l'ensemble de caractéristiques que l'entrée a déclenché dans la cible.

Mutateur

Une fonction qui prend des octets en entrée et produit une petite mutation aléatoire de l'entrée. Voir aussi : fuzzing conscient de la structure.

Exécuteur {#executor}

Une fonction qui sait comment fournir une entrée à une cible et obtenir une couverture en retour (c'est-à-dire exécuter).

Centipede

Un moteur de fuzzing personnalisable qui permet à l'utilisateur de remplacer le mutateur et l'exécuteur.

Runner Centipede {#runner}

Une bibliothèque qui implémente l'interface d'exécuteur attendue par le fuzzer Centipede. Le runner sait comment exécuter une cible instrumentée avec sancov, collecter la couverture résultante et la retransmettre à Centipede. Les futures cibles de fuzzing Centipede peuvent être liées à cette bibliothèque pour être exécutables par Centipede.

Corpus (pluriel : corpora)

Un ensemble d'entrées.

Distillation (création d'un corpus distillé)

Un processus de sélection d'un sous-ensemble d'un corpus plus large, de sorte que le sous-ensemble possède les mêmes caractéristiques de couverture que le corpus d'origine.

Shard

Un fichier représentant un sous-ensemble du corpus et un autre fichier représentant les ensembles de caractéristiques pour ce même sous-ensemble du corpus.

Fusion des shards

Fusionner le shard B dans le shard A signifie : pour chaque entrée du shard B qui possède des caractéristiques absentes du shard A, ajouter cette entrée à A.

Tâche

Un processus de fuzzing unique. Une tâche n'écrit que dans un seul shard, mais peut lire plusieurs shards.

Workdir ou WD

Un répertoire local ou distant qui contient des données produites ou consommées par un fuzzer.

Compiler 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

Ce dont vous aurez besoin pour les étapes suivantes :

  • $BIN_DIR/centipede - le binaire du moteur (le fuzzer).
  • $BIN_DIR/libcentipede_runner.pic.a - la bibliothèque que vous devez lier à votre cible de fuzzing (le runner).
  • $CENTIPEDE_SRC/clang-flags.txt - les drapeaux de compilation clang recommandés pour la cible.

Vous pouvez garder ces fichiers là où ils sont ou les copier ailleurs.

Compiler votre cible de fuzzing

Nous fournissons deux exemples de compilation de la cible : une petite cible monofichier et libpng. Une fois votre cible compilée, passez à l'étape d'exécution de la cible de fuzzing.

L'exemple simple

Cet exemple utilise l'une des cibles de fuzzing d'exemple simples, aussi appelées puzzles, incluses dans le dépôt Centipede.

Compilation

NOTE : Les commandes ci-dessous utilisent les drapeaux de $CENTIPEDE_SRC/clang-flags.txt. Vous pouvez choisir d'utiliser un autre ensemble de drapeaux d'instrumentation : clang-flags.txt ne fournit qu'une simple option par défaut.

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

Édition de liens

Cette étape lie la cible de fuzzing tout juste compilée avec libcentipede_runner.pic.a et les autres bibliothèques requises.

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

Passez à l'étape d'exécution.

L'exemple libpng

Téléchargement et compilation de 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

Lier la cible de fuzzing de libpng avec 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

Exécuter Centipede localement {#run-step}

Télécharger l’outil