Mieux vaut prévenir que guérir… Telle est la philosophie qui est à la base du fuzzing. Elle a pour principe de tester un logiciel ou un système sous les angles les plus divers, les plus imprévisibles et tenter ainsi de repérer des failles potentielles avant qu’elles ne puissent être exploitées de manière nuisible.
Un système, quel qu’il soit, est initialement conçu pour fonctionner dans un environnement tranquille, dépourvu de surprises. Or, dans le réel, il va arriver que ledit système connaisse un crash pour une raison inattendue. L’utilisateur a entré une information que le logiciel n’avait pas prévu, et faute de savoir la traiter, il en vient à crasher.
Pour les concepteurs d’un programme, le souci est qu’il est difficile de prévoir les situations en question. En résultat, une industrie à part entière a vu le jour avec pour objectif de pouvoir soumettre un système à toutes sortes de conditions imprévues.
L’une des méthodes de test qui a vu le jour s’intitule le « fuzzing ». Il s’agit d’une technique de test automatisée. Elle consiste à injecter des données aléatoires dans un système informatique et à voir comment réagit celui-ci. Le fuzzing peut ainsi révéler des problèmes de sécurité, de performance.
Qu’est ce qu’un fuzzer ?
Un fuzzer est un programme qui injecte automatiquement des entrées aléatoires dans un programme afin de détecter de potentielles anomalies.
Grâce aux fuzzers, les experts en cybersécurité peuvent découvrir des vulnérabilités avant qu’elles aient une possibilité d’être exploitées par des hackers. Des mesures peuvent alors être prises pour corriger ces failles et prévenir de potentielles attaques.
L’origine du mot fuzzing
Durant les années 80, le professeur Barton Miller de l’Université du Wisconsin se trouvait en connexion via le réseau téléphonique durant une situation de forte bourrasque. Il a alors remarqué une importante interférence sur le signal. Peu à peu, cette interférence a provoqué un crash du système.
Intrigué, Miller a demandé à ses étudiants de simuler cette expérience à l’aide d’un générateur de bruit, et de voir si ces signaux pouvaient en venir à planter des systèmes UNIX. Il a ainsi créé le premier test de fuzzing. Et puis, cette approche a été mise en œuvre sur toutes sortes d’environnements informatiques.
Comment fonctionne le fuzzing ?
Le principe du fuzzing consiste à introduire des entrées volontairement incorrectes dans un système pour identifier les défaillances.
Un fuzzer repose sur plusieurs composants clés surnommés poète, messager et oracle en raison de leurs rôles spécifiques : créer, transmettre et analyser les cas de test.
- Un poète, qui génère les données de test (case tests). La philosophie d’un fuzzer est que par essence, on ne se concentre pas sur les vulnérabilités connues, l’idée étant de générer le plus grand nombre possible de cas de test.
- Un messager qui achemine ces case tests au logiciel cible.
- Un oracle, qui détecte si une défaillance s’est révélée. Si tel est le cas, il fournit des informations pour qu’il soit possible de reproduire le problème, l’analyser et le corriger.
Les trois types de ‘test cases’
Le poète crée des données aléatoires basées sur des modèles évolutifs ou bien il les génère à partir d’une compréhension approfondie des protocoles, formats de fichiers ou API. Trois approches peuvent exister :
- Fuzzing aléatoire : données totalement aléatoires.
- Fuzzing évolutif : anomalies introduites délibérément dans des entrées valides et ajustées en fonction des résultats.
- Fuzzing génératif : basé sur la compréhension des règles du système, avec pour principe de les enfreindre systématiquement.
Les avantages du fuzzing
Le fuzzing a de nombreux atouts.
Evaluation de la sécurité
Il produit une évaluation globale de la robustesse et des risques de sécurité.
Prévention des piratages
Les sources de hacking potentiel sont repérées avant d’avoir pu être exploitées.
Coût réduit
Une fois configuré, un fuzzer peut fonctionner en autonome.
Détection de bugs
Un fuzzer va révéler des bugs que les méthodes de test conventionnelles ne détectent pas.
Les types de fuzzers
Boîte noire
Le terme « boîte noire » indique que le fuzzer ne dispose d’aucune information sur le fonctionnement interne du logiciel.
Boîte blanche
Un fuzzer boîte blanche dispose d’une connaissance approfondie du logiciel qu’il teste. Il a accès à son code source, à sa documentation et à sa structure interne.
Les principaux fuzzers
Fuzzer payants
- Beyond Security beSTORM
Ce fuzzer de type boîte noire utilise un moteur de fuzzing génératif basé sur des modèles. Il couvre de façon étendue les protocoles, normes et formats de fichiers, sans toutefois nécessiter l’accès au code source.
- Black Duck Defensics
Cette solution de fuzzing se distingue par son intelligence intégrée, plus de 250 suites de tests prédéfinis (réseaux, fichiers, etc.), et sa capacité à détecter rapidement des vulnérabilités grâce à une analyse approfondie des spécifications et règles du système cible.
- Code Intelligence Fuzz
Cette plate-forme de fuzzing de type boîte blanche s’intègre directement dans les pipelines CI/CD (suite automatisée de processus de création et déploiement d’’applications) et aide donc à automatiser les tests de sécurité.
- ForAllSecure Mayhem for Code
Une solution avancée de type boîte blanche qui vouée à la détection de bugs et de vulnérabilités dans le code source. Elle offre des tests automatisés, une couverture approfondie et des rapports détaillés.
- Coverity Fuzz Testing
Cette solution automatisée de fuzzing inclut la génération de données de test, l’exécution des tests et la génération de rapports. Elle intègre des outils de diagnostic des défauts détectés.
Fuzzer open source
- Ffuf (Fuzz Faster U Fool)
Un outil de fuzzing flexible et rapide à même d’explorer des sous-domaines, des fichiers cachés. Il est capable de gérer des données volumineuses et constitue un outil de choix pour les tests de sécurité d’applications web.
- OneFuzz
Cette plate-forme cloud de fuzzing bien que développée par Microsoft est open source, donc disponible gratuitement sur GitHub – elle vise à démocratiser le fuzzing. OneFuzz s’appuie sur des techniques d’apprentissage automatique pour améliorer l’efficacité des tests. Son usage peut cependant entraîner des coûts indirects, comme ceux liés à l’usage de l’infrastructure cloud.
- PeachTech Peach Fuzzer
Cet outil de fuzzing polyvalent peut être utilisé pour tester une grande variété de logiciels, de protocoles et de formats de fichiers. Il sert à tester la robustesse des logiciels, protocoles, et formats de fichiers. Il est capable de simuler des environnements complexes afin d’identifier des vulnérabilités critiques de manière systématique et ciblée.