Qu'est-ce que le test Fuzz?
Le test Fuzz, ou fuzzing, est une méthode permettant de vérifier comment un programme ou un système informatique répondra à diverses entrées et informations, parfois aléatoires. Le processus consiste à générer un certain type de données, soit complètement aléatoire, soit dans le respect de certaines contraintes, puis à alimenter ces données dans le programme pour tester la manière dont il traite les informations inattendues. La forme la plus élémentaire de test fuzz consiste à envoyer au programme une séquence aléatoire de touches ou de caractères et à vérifier qu'il les traite correctement. Une version plus complexe du test fuzz utilise des données structurées qui sont ensuite manipulées de manière aléatoire et envoyées au programme. Les données peuvent atteindre le programme sous forme d'événements système, d'entrées au clavier, de signaux réseau fictifs ou même de fichiers à charger.
Il existe différentes parties d’un programme informatique qui peuvent être testées avec un générateur de fuzz. L’interface utilisateur graphique (IUG) peut être testée en créant une séquence d’événements aléatoires de souris et de clavier et en vérifiant que l’interface graphique est capable de gérer l’entrée sans se planter, se bloquer ou effectuer une tâche inattendue. Les protocoles réseau peuvent être testés en permettant au générateur de fuzz de modifier de manière aléatoire des parties d'un paquet de données valide, puis en s'assurant que le protocole peut continuer à fonctionner après la réception de données malformées. Les éléments d'entrée de base de presque tous les programmes peuvent être vérifiés pour leur capacité à résister aux erreurs, telles qu'une entrée beaucoup trop longue pour le type de stockage, une entrée d'un type différent de celui attendu et une entrée incomplète ou incorrecte.
Le secteur de la sécurité informatique peut utiliser le test fuzz pour s'assurer qu'il n'existe pas de faille de sécurité évidente dans certains systèmes. Cela peut être fait en utilisant un générateur de fuzz conçu pour tester la sécurité informatique. Ces programmes essaieront d'utiliser des mots-clés système, des mots de passe administrateur par défaut connus, des fonctions des bibliothèques utilisées par le programme et des appels aléatoires aux fonctions système pour voir comment le programme réagira.
Les différents types de test fuzz peuvent être personnalisés pour s’inscrire dans certaines plages, voire pour ne tester que des types d’entrée spécifiques. Cela signifie qu'un programme ne peut recevoir que des commandes valides, mais que leur ordre peut être absurde. Il existe des programmes de test fuzz plus complexes pouvant utiliser des éléments du programme cible et les manipuler pour générer des situations pouvant être exploitées de manière malveillante. Cela peut inclure la modification de l'ordre des processus générés, la modification des autorisations ou la modification des fichiers de données et de bibliothèque de base.
Le résultat final des tests fuzz est de vérifier si un programme est sécurisé et se comporte comme il se doit face à une situation inattendue. Utilisé conjointement avec un logiciel de profilage et d'analyse, il peut également détecter les fuites de mémoire dans des zones du programme telles que la gestion des erreurs ou les goulots d'étranglement des performances. En cas de sécurité informatique, des problèmes dangereux, tels que des débordements pouvant compromettre un système, peuvent être résolus avec une configuration correcte. Cependant, les tests Fuzz ne peuvent pas être utilisés comme méthode unique de test de logiciel et doivent faire partie d'un processus plus vaste d'assurance qualité et d'inspection de logiciel.