Que fait harness-writing ?
Techniques pour écrire des harnais de fuzzing efficaces dans différents langages. À utiliser lors de la création de nouvelles cibles de fuzzing ou de l'amélioration de code de harnais existant.
Vue d'ensemble
Cette compétence présente les principes fondamentaux pour concevoir des harnais de fuzzing performants. Un harnais bien écrit permet d'atteindre une meilleure couverture de code, de détecter plus de bugs et de réduire les faux positifs.
Langages supportés
- C/C++
- Python
- Rust
- Go
- Java
Techniques clés
- Initialisation correcte : Assurez-vous que l'état global est réinitialisé entre chaque itération de fuzzing.
- Gestion des entrées : Validez et nettoyez les entrées avant de les passer aux fonctions cibles.
- Couverture de code : Utilisez des boucles de fuzzing qui explorent différents chemins d'exécution.
- Détection d'erreurs : Utilisez des assertions et des vérifications pour capturer les comportements inattendus.
Exemple (C++ avec libFuzzer)
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// Initialiser l'état
MyParser parser;
parser.Reset();
// Analyser l'entrée
parser.Parse(data, size);
// Vérifier les résultats
assert(parser.IsValid() || parser.HasError());
return 0;
}
Ressources
- Documentation libFuzzer : https://llvm.org/docs/LibFuzzer.html
- Guide AFL : https://lcamtuf.coredump.cx/afl/
- Projet Trail of Bits : https://trailofbits.com