Évaluer de nouvelles approches dans la détection des vulnérabilités logicielles
Un nouveau système pour évaluer les vulnérabilités des logiciels à plusieurs niveaux.
― 8 min lire
Table des matières
- Défis actuels dans la détection des vulnérabilités
- Système d'évaluation proposé
- Configuration expérimentale
- Conclusions des expériences
- Détection de vulnérabilités au niveau des fonctions
- Prédiction des dépendances liées aux vulnérabilités
- Détection de vulnérabilités au niveau du dépôt
- Efficacité face à différents types de vulnérabilités
- Implications des résultats
- Directions de recherche future
- Conclusion
- Source originale
- Liens de référence
Les vulnérabilités logicielles sont des faiblesses dans un programme qui peuvent être exploitées, causant des problèmes de sécurité comme des plantages de système et des fuites de données. Au cours des dix dernières années, le nombre de vulnérabilités logicielles signalées a augmenté de façon significative, mettant en évidence le besoin urgent de méthodes de détection efficaces. Les chercheurs ont développé diverses approches pour identifier ces vulnérabilités, y compris des méthodes basées sur des règles, des techniques d'apprentissage automatique, et de nouvelles méthodes utilisant de Grands Modèles de Langage (LLMs).
Défis actuels dans la détection des vulnérabilités
La plupart des méthodes de détection actuelles se limitent à analyser des fonctions uniques dans un programme. Ça veut dire qu'elles manquent souvent des vulnérabilités qui peuvent survenir lorsque plusieurs fonctions interagissent entre elles. Les développeurs doivent souvent analyser l'ensemble du dépôt de code pour trouver ces problèmes plus complexes. Malheureusement, la plupart des ensembles de données disponibles pour tester les méthodes de détection ne contiennent que des vulnérabilités simples et à fonction unique, laissant un vide dans la compréhension de la performance des méthodes dans des situations réelles.
Cet article propose un nouveau système d'évaluation qui évalue à la fois les vulnérabilités intra-procédurales (dans une seule fonction) et inter-procédurales (à travers plusieurs fonctions) au niveau du dépôt, ce qui est plus représentatif des scénarios réels de développement logiciel.
Système d'évaluation proposé
Le nouveau système d'évaluation se compose de trois tâches principales :
- Détection de vulnérabilités au niveau des fonctions : Cette tâche identifie les vulnérabilités au sein des fonctions individuelles de code.
- Prédiction des dépendances liées aux vulnérabilités : Cette tâche récupère les dépendances pertinentes à partir du graphique d'appels du programme, fournissant des explications pour aider les développeurs à mieux comprendre les vulnérabilités.
- Détection de vulnérabilités au niveau du dépôt : Cette tâche combine les résultats des étapes précédentes pour identifier les vulnérabilités qui s'étendent sur plusieurs fonctions dans l'ensemble du dépôt.
Pour soutenir l'évaluation, un grand ensemble de données a été créé, constitué de plus de 4 000 vulnérabilités connues et d'une vaste quantité de code réel.
Configuration expérimentale
Nous avons testé diverses méthodes de détection existantes sous le nouveau système d'évaluation pour voir comment elles se comportaient à la fois au niveau des fonctions et des dépôts. Les méthodes testées comprenaient des approches traditionnellement basées sur des règles, des techniques d'apprentissage supervisé, des méthodes de fine-tuning qui adaptent des modèles pré-entraînés, et des méthodes modernes basées sur des invites utilisant de grands modèles de langage.
Pour nos expériences, nous avons utilisé deux approches de séparation des données :
- Séparation aléatoire : Cette méthode divise aléatoirement l'ensemble de données en ensembles d'entraînement, de validation et de test, permettant une évaluation typique de la performance.
- Séparation temporelle : Cette méthode sépare l'ensemble de données en fonction des dates de commit des vulnérabilités, s'assurant que les données d'entraînement n'incluent pas d'informations futures.
Conclusions des expériences
Détection de vulnérabilités au niveau des fonctions
En évaluant à quel point différentes méthodes détectaient des vulnérabilités au niveau des fonctions, les méthodes de fine-tuning ont généralement surpassé les autres techniques. Ces méthodes utilisent des modèles pré-entraînés qui ont déjà appris d'une grande quantité de code, leur permettant d'identifier efficacement les vulnérabilités.
Fait intéressant, bien que les méthodes de fine-tuning aient montré de bonnes performances dans l'ensemble, elles ont eu du mal à maintenir ce niveau dans le scénario de séparation temporelle. C'est probablement parce que beaucoup de ces modèles extraient des connaissances de données historiques, qui ne s'appliquent pas toujours aux nouvelles vulnérabilités qui apparaissent.
D'un autre côté, les méthodes d'analyse de programme avaient tendance à être à la traîne dans la détection générale des vulnérabilités, mais à mieux performer dans l'identification de types spécifiques de vulnérabilités en raison de leur nature basée sur des règles.
Prédiction des dépendances liées aux vulnérabilités
Dans la prochaine partie de nos expériences, nous nous sommes concentrés sur l'efficacité de différentes méthodes pour identifier les dépendances pertinentes associées aux vulnérabilités. Les méthodes basées sur le lexical, qui examinent le texte réel dans le code, ont constamment surpassé les méthodes basées sur le sémantique, qui se concentrent sur le sens plutôt que sur le texte lui-même.
Notamment, la Similarité de Jaccard, une métrique qui mesure la similarité entre les ensembles, s'est révélée être la méthode la plus efficace dans le cadre de la séparation aléatoire, tandis que la Similarité d'Édition a mieux performé dans la séparation temporelle. Ces résultats suggèrent que comprendre les tokens communs entre les extraits de code et leurs dépendances associées est crucial pour une récupération efficace.
Détection de vulnérabilités au niveau du dépôt
L'objectif principal de ce système d'évaluation est d'évaluer les vulnérabilités à travers l'ensemble du dépôt. Ici, nous avons constaté que les méthodes utilisant des informations de dépendance contextuelle performaient généralement mieux que celles qui n'en tenaient pas compte. En intégrant les dépendances pertinentes identifiées dans les tâches précédentes, les modèles pouvaient mieux comprendre le contexte plus large du code qu'ils examinaient.
Les modèles plus grands ont le plus bénéficié de ce contexte supplémentaire, améliorant encore leur performance dans la détection des vulnérabilités. Alors que certains modèles ont montré des améliorations marquées, d'autres ne semblaient pas tirer autant parti des informations au niveau du dépôt, indiquant que l'efficacité de ces techniques peut varier considérablement selon la méthode et le modèle utilisés.
Efficacité face à différents types de vulnérabilités
Nous avons aussi évalué comment différentes méthodes se débrouillaient contre des types spécifiques de vulnérabilités, comme les débordements de tampon ou les problèmes de validation des entrées. Notre analyse a révélé que les LLMs, en particulier des modèles comme ChatGPT, excellaient souvent dans l'identification de ces types de vulnérabilités. Cela suggère qu'utiliser des modèles plus avancés peut conduire à de meilleurs résultats de détection.
Implications des résultats
Les résultats de cette recherche mettent en évidence plusieurs points importants pour le domaine de la détection des vulnérabilités logicielles. Tout d'abord, incorporer le contexte des vulnérabilités au niveau du dépôt peut considérablement améliorer les capacités de détection par rapport à l'analyse des fonctions individuelles en isolation. Cela est particulièrement vrai pour les modèles plus grands, qui semblent tirer parti de cette information de manière plus efficace.
De plus, les résultats soulignent l'importance de développer des méthodes plus efficaces pour récupérer les dépendances liées aux vulnérabilités. Les méthodes actuelles montrent qu'il y a de la place pour l'amélioration, surtout pour s'adapter aux scénarios réels où la complexité d'une base de code peut obscurcir certaines vulnérabilités.
Directions de recherche future
En regardant vers l'avenir, il y a de nombreux aspects de la détection des vulnérabilités qui méritent d'être explorés. Les travaux futurs pourraient se concentrer sur l'amélioration des techniques de récupération des dépendances, explorer comment combiner les forces de différents modèles de détection, et évaluer l'applicabilité de ce système d'évaluation à une plus grande variété de langages de programmation.
Un autre domaine prometteur pour l'exploration est le développement de méthodes pour identifier automatiquement les dépendances, ce qui pourrait réduire l'effort manuel actuellement requis par les développeurs et améliorer l'efficacité globale du processus de détection.
Conclusion
Cette étude contribue à l'effort continu d'amélioration de la détection des vulnérabilités logicielles en introduisant un système d'évaluation holistique capable d'évaluer à la fois les vulnérabilités intra-procédurales et inter-procédurales au niveau du dépôt. Grâce à des tests rigoureux de diverses méthodes de détection, nous avons établi que l'intégration d'informations contextuelles sur les vulnérabilités peut conduire à de meilleures performances. La recherche continue devrait continuer à affiner ces méthodes, menant finalement à des systèmes logiciels plus sûrs et plus sécurisés.
Titre: VulEval: Towards Repository-Level Evaluation of Software Vulnerability Detection
Résumé: Deep Learning (DL)-based methods have proven to be effective for software vulnerability detection, with a potential for substantial productivity enhancements for detecting vulnerabilities. Current methods mainly focus on detecting single functions (i.e., intra-procedural vulnerabilities), ignoring the more complex inter-procedural vulnerability detection scenarios in practice. For example, developers routinely engage with program analysis to detect vulnerabilities that span multiple functions within repositories. In addition, the widely-used benchmark datasets generally contain only intra-procedural vulnerabilities, leaving the assessment of inter-procedural vulnerability detection capabilities unexplored. To mitigate the issues, we propose a repository-level evaluation system, named \textbf{VulEval}, aiming at evaluating the detection performance of inter- and intra-procedural vulnerabilities simultaneously. Specifically, VulEval consists of three interconnected evaluation tasks: \textbf{(1) Function-Level Vulnerability Detection}, aiming at detecting intra-procedural vulnerability given a code snippet; \textbf{(2) Vulnerability-Related Dependency Prediction}, aiming at retrieving the most relevant dependencies from call graphs for providing developers with explanations about the vulnerabilities; and \textbf{(3) Repository-Level Vulnerability Detection}, aiming at detecting inter-procedural vulnerabilities by combining with the dependencies identified in the second task. VulEval also consists of a large-scale dataset, with a total of 4,196 CVE entries, 232,239 functions, and corresponding 4,699 repository-level source code in C/C++ programming languages. Our analysis highlights the current progress and future directions for software vulnerability detection.
Auteurs: Xin-Cheng Wen, Xinchen Wang, Yujia Chen, Ruida Hu, David Lo, Cuiyun Gao
Dernière mise à jour: 2024-04-23 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2404.15596
Source PDF: https://arxiv.org/pdf/2404.15596
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.