Romain Canu

Fuzzing

★★★★☆
Temps de lecture : 6 min

Définition

Le fuzzing (ou test à données aléatoires) est une technique pour tester des logiciels​. L'idée est d'injecter des données aléatoires dans les entrées d'un programme. Si le programme échoue (par exemple en plantant ou en générant une erreur), alors il y a des défauts à corriger. Exemples de points d'entrée d'un programme :

  • Fichiers

  • Périphériques (clavier, souris, etc.)

  • Variables d'environnement

  • Réseau

  • Limitation des ressources (mémoire, disque dur, temps CPU, etc.)

Le grand avantage du fuzzing est que l'écriture de tests est extrêmement simple, ne demande aucune connaissance du fonctionnement du système et permet de trouver des vulnérabilités facilement.

Source : Wikipedia

Les hackers utilisent le fuzzing pour trouver des exploits de type "zero-day" - c'est ce qu'on appelle une attaque par fuzzing. Les professionnels de la sécurité, quant à eux, utilisent les techniques de fuzzing pour évaluer la sécurité et la stabilité des applications.​

Le fuzzing est une technique aujourd’hui largement utilisée dans les plus grandes entreprises du monde:

  • Google utilise le fuzzing pour vérifier et protéger des millions de lignes de code dans Chrome. En 2019, Google a découvert plus de 20 000 vulnérabilités dans Chrome via des tests de fuzzing en interne.​

  • Microsoft utilise le fuzzing comme l' une des étapes de son cycle de développement logiciel, pour trouver les vulnérabilités et améliorer la stabilité de ses produits.​

  • Le département américain de la Défense (DoD) a publié une conception de référence DevSecOps et un guide de sécurité des applications qui nécessitent tous deux des tests de fuzzing dans le cadre de développement logiciel.​

Mes éléments de preuve

J'ai utilisé le fuzzing (au sens énumération du terme) dans presque la totalité de mes challenges pentest sur des sites web prévus à cet effet (root-me, HackTheBox) pour trouver des fichiers ou dossiers cachés qui peuvent contenir des informations sensibles (c'est une des premières étapes d'analyse d'une cible en pentest) :

  • Pour trouver ces fichiers et dossiers, on fuzz l’URL du site en y ajoutant des mots d’un dictionnaire et ainsi vérifier si la page existe ou non. Avec cette méthode, on peut ainsi trouver des fichiers intéressants contenant des logins et des mots de passe en dur ou encore des clés d’API.

  • On peut également fuzzer un site web pour trouver les pages de connexions Administrateur, ce qui permet dans un second temps de lancer une attaque brute force.

J’ai également utilisé la méthode de fuzzing dans le cadre de mon alternance chez Thales Avionics pour tester la fiabilité d'un driver SPI sur un système Linux embarqué. J’ai ainsi injecté des données erronées en entrée du système pour vérifier la robustesse du driver (voir le projet A429Fuzzer).

J'ai aussi pu mettre en place un environnement de test chez moi pour tester le fuzzing sur diverses applications avec AFL (American Fuzzy Lop)​ qui est le logiciel de fuzzing le plus utilisé et le plus connu à l'heure actuelle.

Enfin, j'ai choisi de retenir le fuzzing comme fil directeur de ma soutenance finale à IN'TECH : Pourquoi le fuzzing est-il de plus en plus utilisé dans le cadre des opérations de contrôle qualité et de cybersécurité ?

Mon autocritique

Le fuzzing est une technique indispensable à maîtriser dans le cadre de mon profil d'Expert en Ingénierie, car :

  • Les erreurs et failles de sécurité des logiciels entraînent, dans la plupart des cas, une perte de réputation et de confiance envers la société qui l’a développée

  • Le fuzzing est une solution permettant de trouver des erreurs avant qu’elles ne soient détectées par des tiers

  • Le fuzzing est une méthode permettant d'atteindre un niveau accru de stabilité et de sécurité des logiciels.​

À noter que j'avais seulement quelques notions acquises lors de mes entraînements pentest sur différents sites lorsque j'ai dû mettre en place des outils et des solutions de fuzzing chez Thales Avionics. J'ai donc dû me documenter et monter rapidement en compétence pour pouvoir développer un outil de fuzzing de A à Z (A429Fuzzer).

Au moment où je rédige ce portfolio, je sais mettre en place des environnements de test pour pouvoir fuzzer des applications développées en C/C++ avec AFL, ainsi que développer des logiciels de fuzzing (en Python par exemple) générant des données aléatoires.

Mon conseil aujourd'hui serait de s'intéresser au fuzzing et de chercher à généraliser la mise en place de cette technique le plus tôt possible dans un projet, idéalement en intégration continue, pour pouvoir, à maturation du projet, avoir un produit logiciel qui soit stable et robuste dans le temps.

Mon évolution dans cette compétence

Je n'identifie pas d'évolution en tant que telle dans cette compétence, car les outils et les méthodes actuels couvrent déjà la totalité des besoins de fuzzing.

Cependant, j'identifie deux objectifs personnels :

  • Apprendre à déboguer des applications qui ont planté suite au fuzzing,

  • Promouvoir, sensibiliser et mettre en place cette technique dans les entreprises que j'intégrerai.


  • a429fuzzer - projet professionnel (Thales Avionics)