0Pricing
C++ Academy · Leçon

Fuzzing avec libFuzzer

Détecter les plantages dans les cas limites en soumettant votre code à libFuzzer

Fuzzing avec libFuzzer est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Pourquoi utiliser le fuzzage ?

Le fuzzage génère des entrées aléatoires pour trouver des plantages, des blocages et des failles de sécurité. Les fuzzers modernes utilisent les informations de couverture pour faire évoluer les entrées qui explorent de nouveaux chemins d’exécution.

libFuzzer

libFuzzer fait partie de LLVM et s’intègre aux outils d’assainissement. Écrivez une seule fonction qui soumet un point d’entrée au fuzzage ; la bibliothèque se charge de générer les entrées.

Écrire une cible de fuzzage

La signature est fixe : prenez un tableau d’octets et renvoyez 0.

#include <cstdint>
#include <cstddef>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
    parse_input(reinterpret_cast<const char*>(data), size);
    return 0;
}

Compiler pour libFuzzer

Utilisez Clang avec la combinaison -fsanitize=fuzzer,address. Effectuez directement l’édition des liens : aucune fonction main n’est nécessaire.

clang++ -g -O1 -fsanitize=fuzzer,address fuzz.cpp parser.cpp -o fuzz_target
./fuzz_target

Mutation guidée par la couverture

libFuzzer suit les chemins d’exécution empruntés par chaque entrée. Il modifie les entrées prometteuses pour explorer des chemins plus profonds, ce qui est beaucoup plus efficace qu’une génération aléatoire sans guidage.

Un corpus

Initialisez le fuzzer avec un répertoire contenant des entrées connues comme intéressantes. Le fuzzer fait évoluer de nouvelles entrées en les modifiant.

./fuzz_target corpus/

Fichiers de dictionnaire

Fournissez un dictionnaire de jetons courants pour accélérer l’exploration des entrées conformes à une grammaire (HTML, JSON, messages de protocole).

Combiner avec les outils d’assainissement

Exécuter le programme avec AddressSanitizer transforme les corruptions silencieuses en plantages immédiats que le fuzzer peut détecter.

Performances

Un seul cœur peut effectuer des dizaines de milliers d’exécutions par seconde sur de petites cibles. Exécutez le fuzzer pendant des heures ou des jours ; laissez-le fonctionner en arrière-plan dans l’intégration continue.

Reproduire les plantages

Lorsque libFuzzer trouve un plantage, il enregistre l’entrée sur le disque. Rejouez-la plus tard pour déboguer.

./fuzz_target crash-abc123

OSS-Fuzz

OSS-Fuzz de Google exécute en continu des fuzzers sur des projets libres et signale les bogues. De nombreuses bibliothèques réputées s’y intègrent.

AFL et Honggfuzz

D’autres fuzzers existent :

  • AFL/AFL++ — fondé sur les processus, avec accélération par serveur de bifurcation
  • Honggfuzz — prend en charge les protocoles réseau

libFuzzer est l’intégration C++ la plus simple.

Quand utiliser le fuzzage

Soumettez au fuzzage tout code qui traite des entrées non fiables :

  • Analyseurs syntaxiques (JSON, XML, protobuf)
  • Décodeurs (image, audio, vidéo)
  • Gestionnaires de protocoles réseau
  • Tout code qui lit des données externes

Vérification rapide

Pourquoi le fuzzage guidé par la couverture est-il plus efficace qu’un fuzzage purement aléatoire ?

Récapitulatif

libFuzzer est un fuzzer guidé par la couverture intégré à Clang. Écrivez un petit point d’entrée LLVMFuzzerTestOneInput, compilez avec -fsanitize=fuzzer,address et laissez-le rechercher les plantages. Combinez-le avec les outils d’assainissement et des corpus ; soumettez au fuzzage tout code qui traite des entrées non fiables.

Questions Fréquemment Posées

La leçon « Fuzzing avec libFuzzer » est-elle gratuite ?

Oui — le texte complet de « Fuzzing avec libFuzzer » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Fuzzing avec libFuzzer » ?

Détecter les plantages dans les cas limites en soumettant votre code à libFuzzer Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Fuzzing avec libFuzzer » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Outils d’analyse statique : clang-tidy et cppcheck
  2. Sanitizers : Address, Thread et UB Sanitizer
  3. Fuzzing avec libFuzzer
  4. Intégration continue pour les projets C++
← Retour à C++ Academy