Évaluer le rôle de ChatGPT dans la révision de code de sécurité Python
Explorer l'efficacité de ChatGPT pour identifier les vulnérabilités dans le code Python.
― 10 min lire
Table des matières
Ces derniers temps, l'intelligence artificielle (IA) est devenue super importante dans plein de domaines. Un domaine où l'IA peut aider, c'est pour vérifier le code en matière de sécurité. On appelle ça la revue de code de sécurité. Les gens se tournent de plus en plus vers des outils AI pour dénicher des problèmes dans le code, et un outil qui a pas mal fait parler de lui, c’est ChatGPT. ChatGPT est connu pour sa capacité à suivre des instructions et à fournir des réponses détaillées. Cet article examine si ChatGPT peut être utilisé pour trouver des problèmes de sécurité dans le code Python.
Avec l’évolution de la technologie, la quantité de code écrite a aussi augmenté. Par exemple, le nombre de projets sur GitHub a doublé en quelques années, passant de 100 millions en 2018 à 200 millions en 2022. Cette hausse du code signifie qu'il y a plus de chances pour que des problèmes de sécurité apparaissent. Des recherches montrent que le nombre de Vulnérabilités dans les logiciels a aussi grimpé, ce qui souligne l'importance de trouver et de corriger ces problèmes. Les vulnérabilités sont des failles qui peuvent être exploitées, menant à des fuites de données ou même à des pannes de service.
Pour trouver ces vulnérabilités, beaucoup d’outils utilisent une méthode appelée analyse statique du code source. Cette méthode examine le code sans l’exécuter, permettant aux testeurs de trouver des problèmes de sécurité de manière efficace. Parmi les outils courants pour cela, on trouve Bandit, Semgrep et SonarQube. Bien que ces outils soient utiles, ils ont quelques limites, comme générer beaucoup de faux positifs (alertes incorrectes) et de faux négatifs (problèmes réels ignorés). Quand les outils produisent trop de fausses alertes, ça peut prendre un temps fou de tout vérifier. D’un autre côté, manquer de vrais problèmes peut avoir de graves conséquences.
Ces dernières années, l'Apprentissage automatique et l'apprentissage profond ont fait de grands progrès dans plein de domaines, y compris la compréhension du langage humain. Comme le code est similaire au langage naturel, les chercheurs s’intéressent à utiliser des méthodes d'apprentissage profond pour des tâches liées à la détection des vulnérabilités dans le code. Les modèles d'apprentissage automatique peuvent apprendre à partir des données et identifier des motifs qui pourraient indiquer des problèmes de sécurité. Des études ont suggéré que ces modèles peuvent produire moins de faux positifs par rapport aux outils traditionnels. Certaines recherches ont même montré que les modèles d'apprentissage profond surpassent plusieurs outils open-source existants pour trouver des problèmes dans le code C/C++.
Maintenant, ChatGPT, qui est basé sur l'IA et utilise le traitement du langage naturel, a attiré l’attention pour son potentiel dans les affaires et d'autres domaines. Il peut automatiser des tâches qui nécessitent généralement un effort humain, économisant ainsi du temps et des ressources. Le modèle a été formé sur un large ensemble de données jusqu'en 2021, ce qui lui donne des connaissances sur divers modèles, y compris ceux que l’on trouve dans le code. Cet article évalue à quel point ChatGPT peut identifier les vulnérabilités de sécurité dans le code Python par rapport à des outils de sécurité populaires comme Bandit, Semgrep et SonarQube.
Python est devenu l'un des langages de programmation les plus populaires, souvent classé parmi les trois premiers selon diverses enquêtes. Il est largement utilisé dans de nombreux domaines, pas seulement en apprentissage automatique et en science des données, mais aussi en développement web avec des frameworks comme Django et Flask. À cause de sa popularité, assurer la sécurité des applications Python est super important.
Cet article est organisé en plusieurs sections. La première section donne un aperçu des recherches précédentes dans ce domaine. La section suivante traite des ensembles de données utilisés pour les tests. Ensuite, on explique les détails des expériences réalisées avec ChatGPT. Après ça, on présente l'évaluation des résultats obtenus. Enfin, il y a une discussion sur les facteurs qui pourraient influencer la validité des résultats, suivi d'une conclusion.
Recherches Précédentes
Dans le passé, beaucoup d'études se sont concentrées sur la détection des vulnérabilités en utilisant différents modèles d'IA. La plupart de ces études ont suivi une méthode appelée apprentissage supervisé. Dans cette méthode, divers modèles d'apprentissage automatique utilisent des caractéristiques comme le nombre de lignes de code ou la complexité de ce code. Les recherches ont montré que les modèles basés sur le texte performent souvent mieux que ceux qui dépendent principalement des caractéristiques du code.
Plus récemment, l'accent a été mis sur l'apprentissage profond. Les chercheurs ont exploré différents modèles d'apprentissage profond, comme les réseaux de neurones convolutionnels (CNN) et les réseaux à mémoire à long et court terme (LSTM). Certains chercheurs ont même expérimenté différents types de graphiques de propriétés de code. Quelques études ont examiné comment les modèles d'apprentissage profond fonctionnent dans la détection des vulnérabilités, montrant que le réglage fin des modèles peut mener à de meilleures performances.
Une étude a suggéré que les modèles basés sur des transformateurs performent mieux que les modèles basés sur des graphiques. Par exemple, un modèle appelé VulBERTa a été développé en utilisant le modèle RoBERTa pour identifier les vulnérabilités dans le code C/C++. D'autres études ont exploré l'utilisation de l'architecture BERT pour détecter des vulnérabilités dans le code, constatant que les modèles de transformateurs peuvent être plus efficaces que les modèles d'apprentissage profond traditionnels.
Récemment, il y a eu des recherches évaluant ChatGPT pour trouver des vulnérabilités dans le code Java. Cependant, il y a un manque d'études comparant ChatGPT avec des outils de sécurité existants spécifiquement pour Python, ce que cet article vise à combler.
Ensemble de Données Utilisé pour les Tests
Notre ensemble de données de test se compose de 156 fichiers de code Python. Parmi ceux-ci, 130 fichiers proviennent d'un ensemble de données d'évaluation de sécurité représentant 75 types de vulnérabilités différents. Les 26 fichiers restants proviennent d'un projet qui s'est concentré sur la détection des vulnérabilités dans Python. Un expert en sécurité a dû examiner les fichiers pour marquer les lignes spécifiques du code contenant des vulnérabilités.
Utilisation de l'API ChatGPT pour la Détection
Pour nos expériences, nous avons utilisé le modèle ChatGPT GPT-3.5-turbo, qui permet une interaction plus avancée par rapport aux versions précédentes. Ce modèle peut traiter une série de messages et garder le contexte, ce qui facilite de lui poser des questions liées à des fichiers de code spécifiques. Nous avons réalisé quatre types d'expériences en utilisant ce modèle.
Dans la première expérience, nous avons fourni au modèle des fichiers vulnérables et demandé s'ils contenaient des problèmes de sécurité sans spécifier de types de vulnérabilités connus. L'objectif était de déterminer si le modèle pouvait identifier des vulnérabilités simplement en indiquant les numéros de ligne du code.
Dans la deuxième expérience, nous avons fourni une liste de types de vulnérabilités connus et demandé au modèle d'identifier lesquels étaient présents dans les fichiers de code vulnérables. Les réponses étaient au format JSON pour faciliter la comparaison avec les résultats d'autres outils.
La troisième expérience a consisté à donner au modèle des étiquettes provenant d'outils de sécurité existants et à lui demander de confirmer si des vulnérabilités spécifiques étaient présentes dans chaque fichier. Ici, nous avons également eu la possibilité d'inclure des vulnérabilités supplémentaires que le modèle pourrait identifier.
Dans la dernière expérience, nous n'avons pas fourni d'étiquettes au modèle et lui avons demandé d'identifier les vulnérabilités en fonction de ses connaissances. Les réponses suivaient le même format JSON.
Le choix des prompts utilisés pour interagir avec le modèle était crucial, car cela pouvait fortement influencer les résultats. Nous avons ajusté la manière dont nous présentions les prompts pour optimiser les performances du modèle.
Évaluation des Résultats
Pour évaluer l’efficacité de ChatGPT par rapport aux outils établis, nous avons calculé plusieurs métriques basées sur la précision d'identification des vulnérabilités. Ces métriques incluaient combien de vrais positifs, de vrais négatifs, de faux positifs et de faux négatifs le modèle a produits. Nous avons ensuite comparé les résultats de ChatGPT avec ceux de Bandit, Semgrep et SonarQube.
Dans la première expérience, ChatGPT ne performait pas mieux que les autres outils en ce qui concerne la précision ou le rappel. Dans la deuxième expérience, malgré l’utilisation des étiquettes de vulnérabilité fournies, les résultats du modèle étaient comparables à ceux des outils SAST.
Dans la troisième expérience, où nous agissions comme assistant aux outils SAST, les résultats ont montré une amélioration notable. Notamment, lorsque nous avons ignoré les nouvelles étiquettes identifiées par le modèle, les résultats de ChatGPT étaient significativement meilleurs que ceux des outils existants.
Quand nous avons permis au modèle de s'appuyer sur ses connaissances sans aucune étiquette d'entrée, ses performances restaient similaires à celles des outils SAST.
Défis et Limitations
Plusieurs facteurs pourraient influencer les résultats de notre étude. Le principal défi était de sélectionner des prompts appropriés pour ChatGPT, ce qui pouvait grandement affecter ses performances. La taille et la diversité de l'ensemble de données jouent également un rôle, tout comme la couverture des différentes vulnérabilités. Nous avons seulement comparé ChatGPT avec trois outils de sécurité pour Python, et d'autres outils pourraient fournir des perspectives différentes.
Enfin, nous nous sommes concentrés sur la version GPT-3.5 de ChatGPT, et il est possible que les versions plus récentes puissent donner encore de meilleurs résultats dans de futures études.
Conclusion
En résumé, nous avons réalisé diverses expériences pour tester la capacité de ChatGPT à identifier les vulnérabilités de sécurité dans le code Python. Bien que les résultats montrent que ChatGPT peut apporter des aperçus précieux, surtout quand il est utilisé comme assistant aux outils de sécurité existants, il n'est pas encore un remplaçant pour les méthodes traditionnelles. Les résultats de notre étude, bien que limités, indiquent un potentiel pour de futurs travaux sur l'utilisation de modèles avancés d'IA pour améliorer la sécurité du code. À mesure que de nouveaux modèles sont publiés, d'autres recherches pourraient aider à obtenir encore de meilleurs résultats dans l'identification des vulnérabilités à travers différents langages de programmation.
Titre: Using ChatGPT as a Static Application Security Testing Tool
Résumé: In recent years, artificial intelligence has had a conspicuous growth in almost every aspect of life. One of the most applicable areas is security code review, in which a lot of AI-based tools and approaches have been proposed. Recently, ChatGPT has caught a huge amount of attention with its remarkable performance in following instructions and providing a detailed response. Regarding the similarities between natural language and code, in this paper, we study the feasibility of using ChatGPT for vulnerability detection in Python source code. Toward this goal, we feed an appropriate prompt along with vulnerable data to ChatGPT and compare its results on two datasets with the results of three widely used Static Application Security Testing tools (Bandit, Semgrep and SonarQube). We implement different kinds of experiments with ChatGPT and the results indicate that ChatGPT reduces the false positive and false negative rates and has the potential to be used for Python source code vulnerability detection.
Auteurs: Atieh Bakhshandeh, Abdalsamad Keramatfar, Amir Norouzi, Mohammad Mahdi Chekidehkhoun
Dernière mise à jour: 2023-08-28 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2308.14434
Source PDF: https://arxiv.org/pdf/2308.14434
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.