Augmenter les données de vulnérabilité avec des modèles de langue
Utiliser des modèles linguistiques pour améliorer les jeux de données de détection de vulnérabilités.
Seyed Shayan Daneshvar, Yu Nong, Xu Yang, Shaowei Wang, Haipeng Cai
― 9 min lire
Table des matières
Détecter les Vulnérabilités dans les logiciels est super important pour garder les systèmes sûrs et en bon état. Au fil des ans, utiliser des modèles de deep learning pour repérer ces vulnérabilités est devenu plus courant, mais y'a des défis. Un gros problème, c’est le manque de données suffisantes pour entraîner ces modèles efficacement. Pour y remédier, les techniques d'augmentation de données peuvent aider en créant plus d'exemples. Cependant, faire du code vulnérable factice n'est pas évident et ça peut mener à des erreurs si c'est pas fait avec précaution.
Récemment, les grands modèles de langage (LLMs) ont montré qu'ils peuvent être utiles pour des tâches de codage. Ils peuvent générer et comprendre du code, ce qui pourrait potentiellement aider à créer plus d'exemples de code vulnérable. Cet article parle des différentes techniques pour augmenter les données de vulnérabilité en utilisant des LLMs, en se concentrant spécifiquement sur trois stratégies : Mutation, Injection et Extension. On évalue aussi comment ces méthodes se comparent aux techniques existantes.
Contexte
La détection des vulnérabilités est un aspect clé de l'ingénierie logicielle. À mesure que les modèles de deep learning deviennent populaires pour cette tâche, les chercheurs cherchent à améliorer la capacité de ces modèles à détecter les défauts dans le code. Cependant, pour entraîner ces modèles efficacement, un ensemble de données conséquent est nécessaire, ce qui est souvent limité. Certains chercheurs ont tenté de combler cette lacune en générant des vulnérabilités factices ou en augmentant le nombre d'échantillons Vulnérables existants.
Il existe plusieurs approches pour créer de nouvelles données, mais la plupart se concentrent sur un type de vulnérabilité. Ça limite leur utilité, car seule une petite fraction des vulnérabilités réelles peut être classée de cette manière. Dans ce contexte, les LLMs se sont révélés être des outils puissants pour générer du code, y compris du code vulnérable, grâce à leur capacité à comprendre et générer divers concepts de programmation.
Stratégies d'augmentation de données
Dans cet article, on présente trois stratégies différentes pour générer des exemples de code vulnérable en utilisant des LLMs :
1. Mutation
La stratégie de Mutation consiste à modifier du code vulnérable existant. Cette méthode permet au modèle de garder le sens original du code tout en apportant des changements qui peuvent introduire de nouvelles vulnérabilités. En incitant les LLMs à altérer des parties spécifiques du code, on encourage la diversité dans les exemples générés.
Pour cette approche, on propose un prompt clair qui indique au LLM comment changer le code sans affecter sa fonctionnalité. L'objectif est de créer de nouveaux exemples qui conservent les mêmes vulnérabilités que le code original.
2. Injection
La méthode d'Injection consiste à insérer des segments vulnérables d'un échantillon de code dans un autre échantillon de code propre. Cette stratégie se concentre sur le lien entre la logique du code vulnérable et celle d'un code propre, permettant l'émergence de vulnérabilités plus complexes. En sélectionnant soigneusement des parties du code vulnérable, on guide le LLM pour créer de nouveaux échantillons vulnérables de manière efficace.
Tout comme la stratégie de Mutation, on fournit un prompt structuré qui indique au LLM comment effectuer l'injection tout en s'assurant que des lignes clés du code vulnérable soient incluses. L'objectif ici est de générer des exemples variés qui représentent des vulnérabilités réelles.
3. Extension
L'Extension va un peu plus loin en ajoutant une nouvelle logique à un extrait de code vulnérable existant. Ici, le but est d'élargir le contexte de la vulnérabilité, enrichissant le scénario dans lequel elle se produit. Cette méthode permet de créer des échantillons plus complets qui conservent leurs défauts originaux tout en explorant différents contextes où ces défauts pourraient apparaître.
Le prompt pour cette stratégie indique au LLM de prendre des parties d'un échantillon de code propre et de les inclure dans l'échantillon vulnérable sans altérer les lignes critiques qui définissent la vulnérabilité.
Méthodologie
Pour évaluer l'efficacité de ces stratégies, on a généré des échantillons vulnérables en utilisant deux LLMs différents. On a ensuite testé comment ces échantillons amélioraient la performance des modèles de deep learning conçus pour détecter les vulnérabilités. Notre évaluation a inclus des expériences approfondies avec de nombreux échantillons de données, garantissant des résultats solides.
On a comparé nos approches aux méthodes existantes, y compris les techniques traditionnelles pour améliorer les ensembles de données. L'évaluation s'est centrée sur plusieurs questions se concentrant sur la capacité de chaque stratégie à créer des données d'entraînement efficaces pour les modèles tout en analysant leur qualité et leur diversité globale.
Résultats
Nos résultats ont montré que les stratégies d'Injection et d'Extension ont surpassé les méthodes traditionnelles et la stratégie de Mutation. Notamment, l'Injection a systématiquement produit de meilleurs F1-scores par rapport aux autres méthodes, confirmant son efficacité à produire des données utiles pour les modèles de détection de vulnérabilités.
De plus, on a constaté que l'augmentation des données a significativement amélioré la performance globale des modèles. Plus d'échantillons signifiait généralement des modèles plus précis, soulignant l'importance de générer des données diverses et de haute qualité pour un entraînement efficace.
Diversité dans les échantillons générés
Un aspect critique de notre évaluation était l'analyse de la diversité des échantillons vulnérables générés. Des ensembles de données diversifiés sont cruciaux pour entraîner des modèles efficaces. En comparant les niveaux d'entropie de nos échantillons générés avec ceux des méthodes existantes, on a confirmé que nos approches produisaient une plus grande variété de snippets de code vulnérables. Cette diversité accrue contribue à une meilleure généralisation dans les modèles entraînés, leur permettant de détecter des vulnérabilités avec plus de précision dans divers contextes.
Nos expériences ont montré que les stratégies d'Injection et d'Extension non seulement fournissaient des échantillons de meilleure qualité, mais enrichissaient aussi le contexte dans lequel les vulnérabilités se produisaient. Ce double bénéfice est clé pour entraîner des modèles robustes capables de gérer des scénarios réels.
Analyse des coûts
Un facteur important dans notre approche est l'efficacité en termes de coûts pour générer des échantillons vulnérables. On a calculé le temps et les ressources nécessaires pour produire un nombre significatif d'échantillons augmentés. Nos résultats ont montré que générer 1 000 échantillons vulnérables coûte environ 1,88 $ en utilisant des LLMs à la pointe. Ce modèle à faible coût rend possible l'échelle du processus d'augmentation de données et améliore significativement les ensembles de données existants.
En utilisant nos méthodes, il est possible de doubler la taille d'ensembles de données comme Devign sans engendrer de frais importants. La capacité de produire des données de haute qualité à un coût abordable est un avantage significatif pour ceux qui travaillent dans la détection des vulnérabilités logicielles.
Menaces à la validité
Bien que nos résultats soient prometteurs, il y a des menaces à la validité qui doivent être prises en compte. Une préoccupation majeure tourne autour des réglages d'hyperparamètres pour les modèles utilisés dans nos expériences. Détecter des vulnérabilités est une tâche complexe, et varier ces réglages peut conduire à des résultats différents. Cependant, pour garantir l'équité dans nos comparaisons, on a maintenu des réglages cohérents sur tous les modèles.
Une autre préoccupation est la dépendance aux LLMs pour suivre les prompts avec précision. Bien qu'on ait utilisé des filtres pour améliorer la qualité du code généré, il y a une possibilité de générer des échantillons incorrects ou absurdes. On a tenté de minimiser ce risque grâce à plusieurs tours de prompt, offrant un filet de sécurité pour les réponses de mauvaise qualité.
Dans l'ensemble, bien que nous reconnaissions les limitations potentielles de notre approche, nous pensons que nos méthodes représentent une avancée significative dans la détection des vulnérabilités grâce à l'augmentation de données.
Conclusion
Dans cet article, on a présenté de nouvelles stratégies pour augmenter des ensembles de données vulnérables en utilisant des modèles de langage avancés. En mettant en œuvre des méthodes comme la Mutation, l'Injection et l'Extension, on peut générer des échantillons divers et utiles qui améliorent l'efficacité des modèles de détection de vulnérabilités. Notre évaluation a démontré les avantages clairs de nos approches par rapport aux méthodes traditionnelles, en soulignant particulièrement l'importance de la diversité dans les données d'entraînement.
Avec des solutions rentables pour produire de grands volumes de données de qualité, on pense que nos stratégies auront un impact significatif sur l'amélioration des processus de détection des vulnérabilités logicielles. Notre recherche fournit une base pour de futurs efforts dans ce domaine, encourageant l'exploration de modèles et de techniques plus avancés qui pourraient encore améliorer les capacités de détection des vulnérabilités.
Alors que le paysage du développement logiciel continue de croître en complexité, des outils efficaces pour identifier et atténuer les vulnérabilités resteront cruciaux. Les méthodes décrites dans cet article ouvrent la voie à des systèmes de détection des vulnérabilités plus robustes et efficaces, contribuant finalement à des environnements logiciels plus sûrs et sécurisés.
Titre: Exploring RAG-based Vulnerability Augmentation with LLMs
Résumé: Detecting vulnerabilities is vital for software security, yet deep learning-based vulnerability detectors (DLVD) face a data shortage, which limits their effectiveness. Data augmentation can potentially alleviate the data shortage, but augmenting vulnerable code is challenging and requires a generative solution that maintains vulnerability. Previous works have only focused on generating samples that contain single statements or specific types of vulnerabilities. Recently, large language models (LLMs) have been used to solve various code generation and comprehension tasks with inspiring results, especially when fused with retrieval augmented generation (RAG). Therefore, we propose VulScribeR, a novel LLM-based solution that leverages carefully curated prompt templates to augment vulnerable datasets. More specifically, we explore three strategies to augment both single and multi-statement vulnerabilities, with LLMs, namely Mutation, Injection, and Extension. Our extensive evaluation across three vulnerability datasets and DLVD models, using two LLMs, show that our approach beats two SOTA methods Vulgen and VGX, and Random Oversampling (ROS) by 27.48%, 27.93%, and 15.41% in f1-score with 5K generated vulnerable samples on average, and 53.84%, 54.10%, 69.90%, and 40.93% with 15K generated vulnerable samples. Our approach demonstrates its feasibility for large-scale data augmentation by generating 1K samples at as cheap as US$ 1.88.
Auteurs: Seyed Shayan Daneshvar, Yu Nong, Xu Yang, Shaowei Wang, Haipeng Cai
Dernière mise à jour: 2024-12-04 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2408.04125
Source PDF: https://arxiv.org/pdf/2408.04125
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.