Tutoriel sur les tests de fuzz (Fuzzing)
Qu’est-ce que le test Fuzz ?
Test de Fuzz ou Fuzzing est une technique de test de logiciels consistant à insérer des données invalides ou aléatoires appelées FUZZ dans un système logiciel pour découvrir les erreurs de codage et les failles de sécurité. Le but des tests fuzz est d'insérer des données à l'aide de techniques automatisées ou semi-automatisées et de tester le système pour diverses exceptions telles qu'une panne du système ou une défaillance du code intégré, etc.
Les tests de fuzz ont été initialement développés par Barton Miller à l'Université du Wisconsin en 1989. Les tests de fuzz ou fuzzing sont une technique de test de logiciels et un type de Test de sécurité.
Pourquoi faire des tests Fuzz ?
- Habituellement, les tests flous détectent la faille ou le défaut de sécurité le plus grave.
- Les tests Fuzz donnent des résultats plus efficaces lorsqu'ils sont utilisés avec Noir Box USP,EP, BP, tests bêta et autres méthodes de débogage.
- Les tests Fuzz sont utilisés pour vérifier la vulnérabilité des logiciels. Ce sont des techniques de test très rentables.
- Le test Fuzz est l'une des techniques de test de la boîte noire. Le fuzzing est l’une des méthodes les plus couramment utilisées par les pirates pour découvrir la vulnérabilité du système.
Comment faire des tests de fuzz
Les étapes des tests flous incluent les étapes de test de base :
Étape 1) Identifier le système cible
Étape 2) Identifier les entrées
Étape 3) Générer des données floues
Étape 4) Exécuter le test en utilisant des données floues
Étape 5) Surveiller le comportement du système
Étape 6) Consigner les défauts
Exemples de fuzzers
- Fuzzers basés sur les mutations modifier les échantillons de données existants pour créer de nouvelles données de test. Il s'agit d'une approche très simple et directe, elle commence avec des échantillons valides de protocole et continue de modifier chaque octet ou fichier.
- Fuzzers basés sur la génération définir de nouvelles données en fonction de l'entrée du modèle. Il commence à générer des entrées à partir de zéro en fonction de la spécification.
- Fuzzer BASÉ SUR UN PROTOCOLE, le fuzzer le plus efficace est d'avoir une connaissance détaillée du format de protocole testé. La compréhension dépend de la spécification. Cela implique d'écrire un tableau de la spécification dans l'outil, puis, en utilisant une technique de génération de tests basée sur un modèle, de parcourir la spécification et d'ajouter des irrégularités dans le contenu des données, la séquence, etc. Ceci est également connu sous le nom de test de syntaxe, test de grammaire, test de robustesse, etc. etc. Fuzzer peut générer des cas de test à partir d'un cas existant, ou utiliser des entrées valides ou invalides.
Il existe deux limites au fuzzing basé sur le protocole :
- Les tests ne peuvent pas avoir lieu tant que la spécification n'est pas mature.
- De nombreux protocoles utiles sont une extension des protocoles publiés. Si les tests de fuzz sont basés sur des spécifications publiées, Couverture de test pour les nouveaux protocoles sera limitée.
La forme la plus simple de technique de fuzzing consiste à envoyer une entrée aléatoire au logiciel sous forme de paquets de protocole ou d'événement. Cette technique de transmission d'entrées aléatoires est très puissante pour trouver des bugs dans de nombreuses applications et services. D’autres techniques sont également disponibles, et elles sont très simples à mettre en œuvre. Pour mettre en œuvre ces techniques, il nous suffit de modifier les entrées existantes. Nous pouvons changer l'entrée simplement en échangeant les bits d'entrée.
Types de bugs détectés par Fuzz Testing
- Échecs d’assertion et fuites de mémoire cette méthodologie est largement utilisée pour les grandes applications où les bogues affectent la sécurité de la mémoire, ce qui constitue une vulnérabilité grave.
- Entrée invalide Dans les tests fuzz, les fuzzers sont utilisés pour générer une entrée invalide qui est utilisée pour tester les routines de gestion des erreurs, ce qui est important pour le logiciel qui ne contrôle pas son entrée. Le simple fuzzing peut être considéré comme un moyen d’automatiser les tests négatifs.
- Bugs d'exactitude Le fuzzing peut également être utilisé pour détecter certains types de bogues « d’exactitude ». Comme une base de données corrompue, des résultats de recherche médiocres, etc.
Outils de test de fuzz
Les outils utilisés dans la sécurité Web peuvent être largement utilisés dans les tests de fuzz tels que Burp Suite, Peach Fuzzer, etc.
- Fuzzer pêche: Peach Fuzzer offre une couverture plus robuste et plus sécurisée qu'un scanner. D'autres outils de test peuvent rechercher uniquement des threads connus, tandis que Peach Fuzzer permet aux utilisateurs de trouver des threads connus et inconnus.
- Proxy de pointe: Il s'agit d'un outil de qualité professionnelle recherchant les vulnérabilités au niveau des applications dans les applications Web. SPIKE Proxy couvre les bases, telles que SQL Injection et cross-site-scripting, mais c'est complètement ouvert Python Infrastructure. Le proxy SPIKE est disponible pour Linux et Windows.
- Webscarabée: Webscarab est écrit en Java donc portable sur de nombreuses plates-formes. Pour analyser l'application, le framework Webscarab est utilisé et communique à l'aide des protocoles HTTP et HTTPS.Ex: Webscarab fonctionne comme un proxy d'interception, il permet à l'opérateur d'examiner et de modifier les requêtes créées par le navigateur avant qu'elles ne soient reçues par le serveur. Et permet d'examiner et de mettre à jour la réponse générée par le serveur avant qu'elle ne soit reçue par le navigateur. De cette façon, si Web Scarab découvre une faille, il figurera dans la liste des problèmes signalés.
- OWASP WSFuzzer: WSFuzzer est un programme GPL écrit en Python. Un programme sous GPL cible actuellement les services Web. Dans la version actuelle d'OWASPWSFuzzer basée sur HTTP Services SOAP sont la cible principale.
Avantages des tests Fuzz
- Les tests Fuzz améliorent les logiciels Test de sécurité.
- Les bugs trouvés dans le fuzzing sont parfois graves et la plupart du temps utilisés par des pirates informatiques, notamment des crashs, des fuites de mémoire, des exceptions non gérées, etc.
- Si l'un des bugs n'est pas remarqué par les testeurs en raison du manque de temps et de ressources, ces bugs sont également détectés dans les tests Fuzz.
Inconvénients des tests Fuzz
- Les tests fuzz ne peuvent à eux seuls fournir une image complète d’une menace de sécurité ou d’un bug global.
- Les tests fuzz sont moins efficaces pour traiter les menaces de sécurité qui ne provoquent pas de plantage du programme, telles que certains virus, vers, chevaux de Troie, etc.
- Les tests Fuzz ne peuvent détecter que des pannes ou des menaces simples.
- Pour être efficace, il faudra beaucoup de temps.
- Définir une condition de valeur limite avec des entrées aléatoires est très problématique, mais désormais, en utilisant des algorithmes déterministes basés sur les entrées des utilisateurs, la plupart des testeurs résolvent ce problème.
Résumé
En génie logiciel, les tests Fuzz montrent la présence de bugs dans une application. Le fuzzing ne peut pas garantir la détection complète des bugs dans une application. Mais en utilisant la technique Fuzz, cela garantit que l'application est robuste et sécurisée, car cette technique permet d'exposer la plupart des vulnérabilités courantes.