Simple Science

La science de pointe expliquée simplement

# Informatique# Cryptographie et sécurité# Intelligence artificielle# Génie logiciel

Avancer le test de fuzzing avec des modèles de langage

Utiliser des modèles de langage pour améliorer la détection de bugs dans les logiciels et l'efficacité des tests.

― 8 min lire


Tests de fuzz avec desTests de fuzz avec desmodèles de langagedes modèles de langage avancés.Révolutionne les tests logiciels avec
Table des matières

Le fuzzing, c'est une méthode utilisée dans les tests de logiciels pour débusquer des bugs et des problèmes de sécurité dans les programmes. Ça fonctionne en créant des entrées de test aléatoires qui visent à faire planter le logiciel. À mesure que les logiciels deviennent plus complexes, surtout ceux qui utilisent des Données structurées (données organisées dans un format spécifique), les méthodes de fuzzing traditionnelles ont du mal à identifier efficacement les vulnérabilités.

Qu'est-ce que le Greybox Fuzzing ?

Le greybox fuzzing est un type de fuzzing qui combine à la fois la génération d'entrées aléatoires et les informations obtenues grâce à la structure du logiciel. Ça fonctionne en utilisant des retours spécifiques du code pour guider le processus de fuzzing, ce qui aboutit souvent à une meilleure détection des problèmes. Les fuzzers greybox analysent comment le logiciel se comporte avec différentes entrées, leur permettant d'affiner leurs stratégies de test au fil du temps.

Le défi des données structurées

Les données structurées nécessitent un format spécifique pour fonctionner correctement. Les fuzzers traditionnels modifient souvent les entrées à un niveau bas, en manipulant des bits individuels, ce qui peut conduire à des entrées qui ne respectent pas le format requis. Cette randomité peut entraîner des tests inefficaces parce que les entrées générées peuvent ne pas être utiles pour découvrir des bugs.

Il existe des fuzzers spécialisés qui gèrent les données structurées plus efficacement. Cependant, ceux-ci requièrent beaucoup de travail pour définir les formats d'entrées, et ils peuvent être lents à générer des cas de test en raison de leur complexité.

Utilisation des grands modèles de langage

Les avancées récentes ont introduit les Grands Modèles de Langage (GML) pour améliorer les processus de fuzzing. Les GML, qui sont entraînés sur d'énormes quantités de données textuelles, peuvent apprendre des motifs pour différents types de formats de données. Ils peuvent comprendre les structures des entrées et aider à générer des données valides qui pourraient dévoiler des vulnérabilités.

En affinant ces modèles en fonction de données structurées spécifiques, ils peuvent efficacement modifier des entrées existantes tout en maintenant leur validité. Cela signifie qu'ils peuvent aider à créer des cas de test précieux que les fuzzers traditionnels pourraient manquer.

Méthodes de test de fuzzing

Le test de fuzzing génère des entrées à partir de données de départ (entrées originales) en faisant diverses modifications. Ces modifications peuvent être aléatoires, mais elles peuvent aussi prendre en compte des règles qui définissent comment les données doivent être structurées.

Types de Mutations

  1. Mutation aléatoire : Cela consiste à apporter des changements arbitraires aux données d'entrée. Bien que cela puisse générer des entrées diverses, ça peut aussi entraîner de nombreux cas de test inutilisables.

  2. Mutation déterministe : C'est plus organisé et implique des opérations spécifiques comme le retournement de bits ou la modification de valeurs de manière contrôlée. Ce type de mutation conduit souvent à des entrées plus valides.

  3. Splicing : Cette méthode combine des parties de deux entrées différentes pour créer une nouvelle entrée. Cela peut aider à produire des cas de test valides et diversifiés.

Le rôle des retours dans le fuzzing

Le retour d'information du programme cible est essentiel pour guider le processus de fuzzing. L'idée est de se concentrer sur les zones du logiciel qui n'ont pas encore été testées, car les vulnérabilités se trouvent souvent dans ces sections inexplorées. Les méthodes traditionnelles peuvent avoir du mal à obtenir ce retour efficacement, surtout lorsqu'il s'agit de structures complexes.

Tirer parti des forces des GML

Les GML peuvent améliorer le processus de fuzzing en apprenant comment modifier des données structurées. En utilisant des paires d'entrées (originales et mutées), ces modèles peuvent être affinés pour comprendre des formats structurés spécifiques.

Entraînement du GML

Le processus d'entraînement implique :

  1. Collecte de données : Rassembler des exemples de données structurées qui ont été mutées avec succès. Ces données sont utilisées pour apprendre au modèle comment générer des entrées valides.

  2. Conversion de données : Convertir des données binaires dans un format que le GML peut facilement comprendre. Cela implique souvent de transformer des entrées binaires en une représentation hexadécimale.

  3. Affinage : Adapter le GML pour se concentrer spécifiquement sur les formats d'entrées et les motifs de mutation nécessaires pour un fuzzing efficace.

Intégration du fuzzer et du GML

Intégrer le GML dans le processus de fuzzing est essentiel pour maximiser l'efficacité. Cette intégration permet au processus de fuzzing de continuer sans attendre que le GML génère de nouvelles entrées.

Communication asynchrone

Dans ce système, le fuzzer et le GML communiquent de manière asynchrone. Pendant que le fuzzer teste une entrée, le GML peut travailler à générer une nouvelle entrée de test. Cette méthode évite les retards et maintient le processus de fuzzing fluide, permettant une exploration rapide du logiciel.

Évaluation des performances

Pour démontrer l'efficacité de cette méthode, des tests approfondis sont réalisés en utilisant divers benchmarks qui incluent à la fois des logiciels standards et des applications du monde réel.

Résultats sur des benchmarks standards

Dans les tests utilisant Magma, un ensemble de benchmarks contenant des vulnérabilités connues, le fuzzer basé sur le GML a significativement surpassé les fuzzers traditionnels. Il a pu identifier plus de bugs et le faire plus rapidement que ses concurrents.

Performance des applications du monde réel

L'approche GML a aussi montré des résultats prometteurs lorsqu'elle a été appliquée à des applications du monde réel. Elle a réussi à gérer divers formats de données structurées, identifiant des vulnérabilités uniques que d'autres fuzzers ont ratées.

Études de cas en fuzzing

Pour illustrer les capacités améliorées apportées par les GML, on peut examiner des études de cas spécifiques. Ces cas soulignent comment les entrées générées par le GML ont conduit à une meilleure couverture de code et à la découverte de bugs.

Exemple de test de fichier PNG

Dans un cas, la structure d'un fichier PNG a été préservée, et les modifications apportées par le GML ont conduit à découvrir des vulnérabilités de mémoire que les fuzzers traditionnels n'ont pas pu identifier. Cela souligne la capacité du GML à comprendre les formats de données tout en générant efficacement des tests.

Couverture et impact sur le fuzzing

Les graines générées par le GML ont non seulement déclenché de nouveaux comportements, mais ont aussi contribué à améliorer la couverture globale de l'application testée. Au fur et à mesure que le processus de fuzzing continuait, de nouvelles graines tirées de la sortie du GML ont conduit à encore plus de gains de couverture.

Résumé des résultats

Dans l'ensemble, l'utilisation des GML dans le fuzzing offre des avantages notables. En comprenant les données structurées et en générant des entrées valides, ils améliorent l'efficacité et l'efficacité du processus de fuzzing.

  1. Augmentation de la détection de bugs : Plus de bugs ont été trouvés par rapport aux fuzzers traditionnels.

  2. Vitesse améliorée : Le processus de fuzzing est devenu plus rapide, aboutissant à une identification plus rapide des vulnérabilités.

  3. Couverture plus élevée : Les tests de fuzzing ont exploré plus de chemins de code, ce qui est crucial pour découvrir des problèmes potentiels.

Conclusion

En conclusion, l'intégration des Grands Modèles de Langage dans le processus de fuzzing marque un tournant vers des méthodes de test logiciel plus intelligentes et efficaces. En exploitant la force des GML pour comprendre et générer des données structurées, l'avenir du fuzzing s'annonce prometteur. Cette approche améliore non seulement la capacité à déceler des vulnérabilités, mais elle répond aussi aux limites des méthodes de fuzzing traditionnelles. Cela représente un pas en avant significatif dans le domaine de la sécurité des logiciels et de l'assurance qualité, garantissant que les programmes sont plus sûrs et plus fiables pour les utilisateurs.

Source originale

Titre: LLAMAFUZZ: Large Language Model Enhanced Greybox Fuzzing

Résumé: Greybox fuzzing has achieved success in revealing bugs and vulnerabilities in programs. However, randomized mutation strategies have limited the fuzzer's performance on structured data. Specialized fuzzers can handle complex structured data, but require additional efforts in grammar and suffer from low throughput. In this paper, we explore the potential of utilizing the Large Language Model to enhance greybox fuzzing for structured data. We utilize the pre-trained knowledge of LLM about data conversion and format to generate new valid inputs. We further fine-tuned it with paired mutation seeds to learn structured format and mutation strategies effectively. Our LLM-based fuzzer, LLAMAFUZZ, integrates the power of LLM to understand and mutate structured data to fuzzing. We conduct experiments on the standard bug-based benchmark Magma and a wide variety of real-world programs. LLAMAFUZZ outperforms our top competitor by 41 bugs on average. We also identified 47 unique bugs across all trials. Moreover, LLAMAFUZZ demonstrated consistent performance on both bug trigger and bug reached. Compared to AFL++, LLAMAFUZZ achieved 27.19% more branches in real-world program sets on average. We also demonstrate a case study to explain how LLMs enhance the fuzzing process in terms of code coverage.

Auteurs: Hongxiang Zhang, Yuyang Rong, Yifeng He, Hao Chen

Dernière mise à jour: 2024-06-13 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2406.07714

Source PDF: https://arxiv.org/pdf/2406.07714

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.

Plus d'auteurs

Articles similaires