Tester des frameworks de Machine Learning avec ConFL
ConFL détecte efficacement les vulnérabilités dans les frameworks de machine learning grâce à des méthodes de test systématiques.
― 9 min lire
Table des matières
L'apprentissage automatique devient courant dans plein de domaines comme la reconnaissance d'images et de la parole. Mais, avec la croissance de l'apprentissage automatique, les inquiétudes sur la sécurité de ces systèmes augmentent aussi. Des problèmes peuvent surgir dans les frameworks d'apprentissage automatique, qui sont des outils que les développeurs utilisent pour créer ces systèmes. Tester ces frameworks pour détecter des problèmes peut être difficile à cause de leur complexité.
Dans cet article, on va parler d'un outil nommé ConFL. ConFL aide à trouver des problèmes dans les frameworks d'apprentissage automatique en générant des entrées de test qui respectent certaines exigences. Cet outil fonctionne principalement avec des frameworks populaires comme TensorFlow, PyTorch et PaddlePaddle. On va expliquer comment ConFL fonctionne et partager son efficacité à trouver des vulnérabilités.
Les Défis
Trouver des problèmes dans les frameworks d'apprentissage automatique est compliqué. Ces frameworks ont des parties avant et arrière. L'avant permet aux développeurs d'interagir avec le framework en utilisant des langages de programmation comme Python, tandis que l'arrière gère le gros du travail, comme exécuter des calculs.
Les opérateurs sont les parties essentielles de ces frameworks. Ils effectuent des calculs sur les données. Cependant, ces opérateurs peuvent être compliqués. Chacun peut avoir plusieurs paramètres, qui ne sont peut-être pas bien définis. Ça rend difficile de générer des entrées de test valides.
Les outils de test classiques, ou fuzzers, galèrent souvent avec les frameworks d'apprentissage automatique. Ils comprennent parfois mal les exigences pour les paramètres d'entrée. Du coup, les tests peuvent prendre du temps et donner peu de résultats.
Qu'est-ce que ConFL ?
ConFL est un outil conçu pour relever ces défis. Il aide à tester les frameworks d'apprentissage automatique plus efficacement. Voilà comment ça marche :
Collecte des Opérateurs : ConFL collecte automatiquement des infos sur les opérateurs à partir du code source du framework. Ça inclut leurs noms et les paramètres dont ils ont besoin.
Extraction des Contraintes : Ensuite, il extrait les contraintes pour chaque opérateur. Ces contraintes incluent des règles que les paramètres d'entrée doivent suivre pour garantir une exécution réussie.
Génération de modèles : ConFL crée des modèles de test basés sur les infos collectées sur les opérateurs et les contraintes extraites. Ces modèles décrivent à quoi devraient ressembler les entrées de test valides.
Génération d'Entrées : Enfin, ConFL génère des entrées de test spécifiques en utilisant ces modèles, dans le but d'explorer des problèmes potentiels au sein des opérateurs.
Comment ConFL Fonctionne
Collecte des Opérateurs
La collecte d'infos sur les opérateurs est la première étape. ConFL examine le code source du framework d'apprentissage automatique pour trouver tous les opérateurs disponibles. Il collecte des données comme :
- Noms des opérateurs
- Les paramètres requis pour chaque opérateur
- Les chaînes d'appels qui relient les opérateurs entre eux
Ce processus assure que ConFL a une vue complète des opérateurs existants et de leurs interactions.
Extraction des Contraintes
Après avoir recueilli les infos sur les opérateurs, l'étape suivante est de comprendre les contraintes. ConFL identifie quatre types principaux de contraintes :
Contraintes Environnementales : Elles déterminent le contexte d'exécution des opérateurs, comme le mode d'exécution (exécution immédiate ou par graphe).
Contraintes de Dépendance : Elles garantissent que les paramètres requis pour l'opération sont disponibles et corrects.
Contraintes de Validation : Elles définissent des règles pour chaque paramètre, comme les types acceptables et les plages de valeurs.
Contraintes Logiques : Elles proviennent des instructions if-else dans le code, définissant des conditions qui doivent être remplies pour que l'opération réussisse.
En extrayant ces contraintes, ConFL s'assure que les entrées de test générées seront valides et capables de déceler des vulnérabilités potentielles.
Génération de Modèles
Une fois les contraintes en place, ConFL crée des modèles de test. Ces modèles servent de plans pour les entrées de test.
Modèles de Contrôle : Ils mettent en place comment l'opérateur va fonctionner, détaillant comment les paramètres se relient entre eux.
Modèles de Données : Ils spécifient la forme, le type et la valeur de chaque paramètre.
Avec ces modèles, ConFL peut créer diverses entrées de test qui respectent les contraintes, permettant une exploration plus approfondie des opérateurs.
Génération d'Entrées
En utilisant les modèles, ConFL génère des entrées de test réelles. Il s'assure que ces entrées non seulement passent les contraintes, mais explorent également différents chemins d'exécution dans le code de l'opérateur. Cette approche systématique permet à ConFL de trouver des problèmes qui pourraient être manqués avec une génération d'entrées aléatoires.
Évaluation de ConFL
Pour comprendre comment ConFL se débrouille, il a été testé sur TensorFlow, l'un des frameworks d'apprentissage automatique les plus utilisés. L'évaluation s'est concentrée sur trois aspects clés :
Efficacité de la Collecte d'Opérateurs : On a mesuré combien d'opérateurs valides ConFL pouvait identifier.
Efficacité des Contraintes : On a regardé à quel point les contraintes soutenaient bien la génération d'entrées valides.
Détection de vulnérabilités : On a évalué combien de vulnérabilités ConFL pouvait déceler dans des applications réelles.
Résultats
Efficacité de la Collecte d'Opérateurs
ConFL a réussi à collecter des infos sur 1 355 opérateurs dans TensorFlow. Parmi eux, 1 331 ont été jugés valides pour les tests. Cette collecte efficace d'opérateurs garantit que chaque opportunité de test possible est exploitée.
Efficacité des Contraintes
Les contraintes se sont révélées très utiles pour la génération d'entrées. ConFL a extrait un total de 1 519 contraintes de validation, ce qui a considérablement amélioré la probabilité d'exécution réussie des entrées générées. Les contraintes ont aidé à maximiser la couverture de code pendant les tests, menant à une exploration plus approfondie des chemins de code.
Détection de Vulnérabilités
Un des résultats les plus impressionnants était la capacité de ConFL à trouver des vulnérabilités. Il a identifié un total de 84 vulnérabilités dans TensorFlow, couvrant une gamme de problèmes sérieux, y compris la corruption de mémoire, les exceptions de pointeur nul, et plus. Chacune de ces vulnérabilités a reçu un nouveau numéro d'identification, indiquant l'importance de traiter ces préoccupations de sécurité.
Vulnérabilités Trouvées
Les vulnérabilités ont été catégorisées selon leur nature, avec plusieurs types identifiés :
Hors Limites (OOB) : Ces erreurs surviennent quand le code essaie d'accéder à la mémoire en dehors de ses limites prévues.
Exception de Pointeur Nul (NPE) : Ça arrive quand le code essaie d'utiliser une référence qui n'a pas été assignée à un objet valide.
Exception de Point Flottant (FPE) : Erreurs qui se produisent lors de calculs à virgule flottante, comme une division par zéro.
Débordement d'Entier (IOF) : Quand des opérations produisent des valeurs qui dépassent la capacité de stockage des types de variables.
Utilisation Après Libération (UAF) : Quand on accède à de la mémoire qui a déjà été désallouée, ce qui conduit à un comportement imprévisible.
Application dans le Monde Réel
L'efficacité de ConFL a été démontrée non seulement en théorie, mais aussi dans des scénarios pratiques. En appliquant ses méthodes à TensorFlow, ConFL a pu révéler des problèmes qui pourraient affecter la performance et la sécurité des applications s'appuyant sur ce framework.
La capacité à identifier des vulnérabilités signifie que les développeurs peuvent prendre les mesures nécessaires pour résoudre ces problèmes avant qu'ils ne deviennent critiques dans des environnements de production.
Adaptabilité à D'autres Frameworks
Bien que ConFL ait été principalement testé sur TensorFlow, son design lui permet d'être adapté à d'autres frameworks d'apprentissage automatique avec peu de changements. C'est parce que de nombreux frameworks, comme PyTorch et PaddlePaddle, suivent des schémas similaires dans la définition des opérateurs et la gestion des contraintes.
En étendant les méthodes de ConFL à ces frameworks, les développeurs peuvent obtenir des bénéfices similaires en matière de détection de vulnérabilités et d'efficacité des tests.
Limitations et Travaux Futurs
Alors que ConFL montre un grand potentiel, il y a encore des défis et des domaines à améliorer. Certaines des limitations incluent :
Opérateurs Complexes : Certains opérateurs dépendent de types ou formats de fichiers spécifiques, que ConFL ne prend pas encore en compte. Des travaux futurs pourraient se concentrer sur l'ajout de capacités de mutation de fichiers.
Fusion d'Opérateurs : De nombreux frameworks utilisent une technique appelée fusion d'opérateurs pour améliorer la performance. ConFL teste actuellement les opérateurs individuellement, mais de futures améliorations pourraient envisager la fusion d'opérateurs pour des tests plus efficaces.
Optimisation de la Résolution des Contraintes : Utiliser des techniques plus avancées pour résoudre les contraintes pourrait mener à une meilleure génération d'entrées et à des tests plus approfondis.
Conclusion
ConFL est un outil prometteur pour tester des frameworks d'apprentissage automatique. En collectant efficacement des infos sur les opérateurs, en extrayant des contraintes, en générant des modèles et en créant des entrées de test valides, il améliore considérablement la capacité à détecter des vulnérabilités dans ces systèmes. Avec ses résultats remarquables dans TensorFlow et son adaptabilité à d'autres frameworks, ConFL offre une solution précieuse pour les développeurs cherchant à améliorer la sécurité et la robustesse de leurs applications d'apprentissage automatique.
Dans un monde qui dépend fortement de l'apprentissage automatique, assurer la sécurité et la fiabilité de ces systèmes est crucial, et des outils comme ConFL font partie intégrante de ce processus.
Titre: ConFL: Constraint-guided Fuzzing for Machine Learning Framework
Résumé: As machine learning gains prominence in various sectors of society for automated decision-making, concerns have risen regarding potential vulnerabilities in machine learning (ML) frameworks. Nevertheless, testing these frameworks is a daunting task due to their intricate implementation. Previous research on fuzzing ML frameworks has struggled to effectively extract input constraints and generate valid inputs, leading to extended fuzzing durations for deep execution or revealing the target crash. In this paper, we propose ConFL, a constraint-guided fuzzer for ML frameworks. ConFL automatically extracting constraints from kernel codes without the need for any prior knowledge. Guided by the constraints, ConFL is able to generate valid inputs that can pass the verification and explore deeper paths of kernel codes. In addition, we design a grouping technique to boost the fuzzing efficiency. To demonstrate the effectiveness of ConFL, we evaluated its performance mainly on Tensorflow. We find that ConFL is able to cover more code lines, and generate more valid inputs than state-of-the-art (SOTA) fuzzers. More importantly, ConFL found 84 previously unknown vulnerabilities in different versions of Tensorflow, all of which were assigned with new CVE ids, of which 3 were critical-severity and 13 were high-severity. We also extended ConFL to test PyTorch and Paddle, 7 vulnerabilities are found to date.
Auteurs: Zhao Liu, Quanchen Zou, Tian Yu, Xuan Wang, Guozhu Meng, Kai Chen, Deyue Zhang
Dernière mise à jour: 2023-07-11 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2307.05642
Source PDF: https://arxiv.org/pdf/2307.05642
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.