Fuzzing met libFuzzer
Vind crashes in randgevallen door uw code te fuzztesten met libFuzzer
Fuzzing met libFuzzer is een gratis C++ Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.
Waarom fuzztesten?
Fuzzing genereert willekeurige invoer om crashes, vastlopers en beveiligingsbugs te vinden. Moderne fuzztesters gebruiken feedback over codedekking om invoer te ontwikkelen die nieuwe codepaden verkent.
libFuzzer
libFuzzer maakt deel uit van LLVM en integreert met sanitizers. Schrijf één functie die één ingangspunt fuzztest; het raamwerk genereert de invoer.
Een fuzzdoel schrijven
De signatuur ligt vast: neem een byte-array en geef 0 terug.
#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;
}Compileren voor libFuzzer
Gebruik Clang met de combinatie -fsanitize=fuzzer,address. Koppel rechtstreeks: een main is niet nodig.
clang++ -g -O1 -fsanitize=fuzzer,address fuzz.cpp parser.cpp -o fuzz_target
./fuzz_targetMutatie op basis van codedekking
libFuzzer houdt bij welke codepaden elke invoer uitvoert. Het muteert veelbelovende invoer om diepere paden te verkennen: veel efficiënter dan blind willekeurige invoer genereren.
Een corpus
Geef de fuzztester een map met bekende interessante invoer als startset. De fuzztester ontwikkelt nieuwe invoer door deze te muteren.
./fuzz_target corpus/Woordenboekbestanden
Lever een woordenboek met veelvoorkomende tokens om het verkennen van invoer met een grammatica te versnellen, zoals HTML, JSON en protocolberichten.
Combineren met sanitizers
Uitvoeren onder AddressSanitizer verandert stille beschadigingen in directe crashes die de fuzztester kan detecteren.
Prestaties
Eén processorkern kan bij kleine doelen tienduizenden uitvoeringen per seconde doen. Laat de fuzztester uren of dagen draaien, bijvoorbeeld op de achtergrond van CI.
Crashes reproduceren
Wanneer libFuzzer een crash vindt, slaat het de invoer op schijf op. Speel deze later opnieuw af om fouten te onderzoeken.
./fuzz_target crash-abc123OSS-Fuzz
De OSS-Fuzz-service van Google voert continu fuzztests uit op opensourceprojecten en rapporteert bugs. Veel bekende bibliotheken zijn ermee geïntegreerd.
AFL en Honggfuzz
Er bestaan ook andere fuzztesters:
- AFL/AFL++ — procesgebaseerd, met versnelling via een forkserver
- Honggfuzz — ondersteunt netwerkprotocollen
libFuzzer is de eenvoudigste C++-integratie.
Wanneer fuzztesten
Fuzztest alle code die onbetrouwbare invoer verwerkt:
- Parsers (JSON, XML, protobuf)
- Decoders (afbeeldingen, audio, video)
- Verwerkers van netwerkprotocollen
- Alles wat externe gegevens leest
Snelle controle
Waarom is fuzzing op basis van codedekking effectiever dan puur willekeurige fuzzing?
Samenvatting
libFuzzer is een fuzztester op basis van codedekking die met Clang is geïntegreerd. Schrijf een klein LLVMFuzzerTestOneInput-ingangspunt, bouw met -fsanitize=fuzzer,address en laat de fuzztester naar crashes zoeken. Combineer dit met sanitizers en corpora; fuzztest alle code die onbetrouwbare invoer verwerkt.
Leer C++ met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “Fuzzing met libFuzzer” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “Fuzzing met libFuzzer”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.
Wat leer ik in “Fuzzing met libFuzzer”?
Vind crashes in randgevallen door uw code te fuzztesten met libFuzzer Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C++ Academy te beginnen?
Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Fuzzing met libFuzzer”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C++ Academy?
Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Statische analysetools: clang-tidy, cppcheck
- Sanitizers: Address-, Thread- en UB-Sanitizer
- Fuzzing met libFuzzer
- Continuous integration voor C++-projecten