0Pricing
C++ Academy · Lezione

Fuzzing con libFuzzer

Individui crash nei casi limite sottoponendo il codice a fuzzing con libFuzzer

Fuzzing con libFuzzer è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Perché usare il fuzzing?

Il fuzzing genera input casuali per trovare crash, blocchi e vulnerabilità di sicurezza. I fuzzing moderni utilizzano il feedback sulla copertura per far evolvere gli input ed esplorare nuovi percorsi del codice.

libFuzzer

libFuzzer fa parte di LLVM e si integra con i sanitizer. Scriva una singola funzione che esegua il fuzzing di un punto di ingresso; il framework si occupa di generare gli input.

Scrivere un fuzz target

La firma è fissa: accetti un array di byte e restituisca 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;
}

Compilazione per libFuzzer

Utilizzi Clang con la combinazione -fsanitize=fuzzer,address. Esegua direttamente il linking: non è necessario alcun main.

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

Mutazione guidata dalla copertura

libFuzzer tiene traccia dei percorsi del codice eseguiti da ogni input. Modifica gli input promettenti per esplorare percorsi più profondi, in modo molto più efficiente rispetto alla generazione casuale senza guida.

Un corpus

Inizializzi il fuzzer con una directory contenente input noti e interessanti. Il fuzzer genera nuovi input modificando quelli esistenti.

./fuzz_target corpus/

File di dizionario

Fornisca un dizionario di token comuni per velocizzare l'esplorazione di input conformi alla grammatica (HTML, JSON, messaggi di protocollo).

Combinazione con i sanitizer

L'esecuzione sotto AddressSanitizer trasforma le corruzioni silenziose in crash immediati che il fuzzer può rilevare.

Prestazioni

Un singolo core può eseguire decine di migliaia di esecuzioni al secondo su target di piccole dimensioni. Lo esegua per ore o giorni e lo lasci attivo in background nella CI.

Riproduzione dei crash

Quando libFuzzer trova un crash, salva l'input su disco. Potrà riprodurlo in seguito per eseguire il debug.

./fuzz_target crash-abc123

OSS-Fuzz

OSS-Fuzz di Google esegue continuamente i fuzzer sui progetti open source e segnala i bug. Molte librerie importanti si integrano con questo servizio.

AFL e Honggfuzz

Esistono anche altri fuzzer:

  • AFL/AFL++ — basato su processi, con accelerazione tramite fork server
  • Honggfuzz — supporta i protocolli di rete

libFuzzer è l'integrazione più semplice per C++.

Quando usare il fuzzing

Applichi il fuzzing a qualsiasi codice che gestisca input non attendibili:

  • Parser (JSON, XML, protobuf)
  • Decoder (immagini, audio, video)
  • Gestori di protocolli di rete
  • Qualsiasi componente che legga dati esterni

Verifica rapida

Perché il fuzzing guidato dalla copertura è più efficace del fuzzing puramente casuale?

Riepilogo

libFuzzer è un fuzzer guidato dalla copertura e integrato con Clang. Scriva un piccolo punto di ingresso LLVMFuzzerTestOneInput, compili con -fsanitize=fuzzer,address e lo lasci cercare i crash. Lo combini con i sanitizer e i corpus; applichi il fuzzing a qualsiasi codice che gestisca input non attendibili.

Domande Frequenti

La lezione «Fuzzing con libFuzzer» è gratuita?

Sì — il testo completo di «Fuzzing con libFuzzer» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Fuzzing con libFuzzer»?

Individui crash nei casi limite sottoponendo il codice a fuzzing con libFuzzer Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Fuzzing con libFuzzer»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Strumenti di analisi statica: clang-tidy, cppcheck
  2. Sanitizer: Address, Thread e UB Sanitizer
  3. Fuzzing con libFuzzer
  4. Integrazione continua per progetti C++
← Torna a C++ Academy