Ne vous contentez pas d'utiliser le code ! L’article de 14 pages d’un chercheur chinois met en garde : 35,8 % des codes générés par Copilot présentent des vulnérabilités, et le C++ est devenu le « domaine le plus durement touché ».

Source originale : RPSC

Source de l'image : générée par Unbounded AI

GitHub Copilot est un outil de génération automatique de code basé sur de grands langages de modèles. Depuis son lancement, il a été bien accueilli par d'innombrables programmeurs. Ils ont tous dit qu'ils disposaient enfin d'un artefact de code qui ne nécessite pas d'heures supplémentaires !

Selon les données collectées à mi-parcours du « 2023 AI Developer Ecosystem Survey Questionnaire » récemment lancé par CSDN, 90 % des personnes interrogées ont déclaré avoir utilisé des outils de génération de code dans différents scénarios tels que la production, les tests, le divertissement, etc. ., dont 35% de personnes déclarent l'utiliser quotidiennement.

Cependant, il convient de noter que même si ces outils de codage améliorent l’efficacité du travail, vous êtes-vous déjà demandé si cela apporterait une bénédiction ou un désastre ? Le code généré est-il vraiment sûr sur la base du « prêt à l'emploi » ?

Récemment, afin d'étudier la sécurité du code généré par Copilot, six chercheurs universitaires de l'Université de Wuhan, de l'Université normale de Chine centrale, de l'Université Massey en Nouvelle-Zélande et du Royal Melbourne Institute of Technology ont mené une étude empirique sur les vulnérabilités de sécurité du code généré par Copilot. code sur GitHub, et un article universitaire intitulé « Faiblesses de sécurité du code généré par le copilote dans GitHub » a été publié, qui a récemment révélé la sécurité des futurs artefacts de programmation d'IA qui peuvent « terminer le codage en bougeant simplement la bouche ».

Adresse papier :

Exemple : 435 segments de code dans un environnement de production, couvrant 6 langages de programmation courants

Au cours de l'expérience, les chercheurs ont sélectionné 435 extraits de code générés par GitHub Copilot à partir des projets publics de GitHub, couvrant plusieurs langages de programmation courants tels que Python, Java, Java, C++, Go et C#.

Dans le même temps, il utilise CodeQL, un outil d'analyse statique open source qui prend en charge plusieurs langages (dont Java, Java, C++, C# et Python), pour effectuer une analyse de sécurité et une analyse des fragments de code, et utilise Common Vulnerability Enumeration ( CWE) pour classer les failles de sécurité du code dans le segment.

De plus, sur la base du processus de recherche suivant, les chercheurs ont soulevé des questions qui doivent être étudiées et vérifiées sous trois dimensions.

RQ1 : Le code généré par Copilot dans les projets GitHub est-il sûr ?

Raison de la question : Copilot peut générer des suggestions de code contenant des vulnérabilités de sécurité, et les développeurs peuvent accepter ces suggestions, laissant potentiellement le programme vulnérable. Les réponses au QR1 aident à comprendre à quelle fréquence les développeurs rencontrent des failles de sécurité lorsqu'ils utilisent Copilot en production.

RQ2 : Quelles failles de sécurité existent dans les extraits de code générés par Copilot ?

Raison de soulever cette question : le code généré par Copilot peut contenir des failles de sécurité, et les développeurs doivent effectuer un examen de sécurité strict avant d'accepter le code généré par Copilot. Comme le précise clairement la documentation de GitHub Copilot, « les utilisateurs de Copilot sont responsables d’assurer la sécurité et la qualité de leur code ». Les réponses au QR2 peuvent aider les développeurs à mieux comprendre les éventuelles vulnérabilités de sécurité dans le code généré par Copilot afin qu'ils puissent prévenir et corriger ces vulnérabilités plus efficacement.

RQ3 : Combien de vulnérabilités de sécurité appartiennent au Top-25 MITRE CWE ?

Raison de la question : Cette liste contient les 25 vulnérabilités de sécurité les plus dangereuses. Les réponses au QR3 peuvent aider les développeurs à comprendre si le code généré par Copilot contient des types de vulnérabilités de sécurité largement reconnus et la capacité de Copilot à gérer ces vulnérabilités les plus courantes.

Étape 1 : Identifiez le « vrai » code généré par l'IA sur GitHub

La raison pour laquelle nous souhaitons utiliser GitHub comme principale source de données pour répondre aux questions de recherche est que, selon les chercheurs, GitHub contient des millions de référentiels de codes publics et a accès à un grand nombre de ressources de code, ce qui lui permet de couvrir une variété de domaines. langages de programmation et projets de type recherche.

Cependant, il n’est pas facile d’obtenir directement le code généré par Copilot dans GitHub, car même avec l’aide de nombreux outils, il est difficile de distinguer si le code est écrit par l’IA ou par des ingénieurs humains.

Face à ce dilemme, six chercheurs ont choisi d'identifier de nombreux extraits de code en recherchant dans la description du référentiel et les commentaires fournis dans le code, tels que « par GitHub Copilot », « utiliser GitHub Copilot » et « avec GitHub Copilot ». a obtenu les résultats suivants :

Le nombre de résultats de recherche dans différentes langues obtenus à partir des balises de code :

Ensuite, entrez dans l’étape de filtrage. Ici, les chercheurs ont souligné dans l’article qu’ils suivaient principalement trois règles :

  1. Pour les résultats de recherche sous la balise Repository, les chercheurs ont déterminé quels projets étaient entièrement générés par Copilot sur la base des déclarations contenues dans la description du projet ou des fichiers Lisez-moi associés. De plus, il conserve les fichiers de code pour les principaux langages pris en charge par Copilot tels que Python, Java, Java, C++, C# et Go.

2 Pour les résultats de recherche sous la balise code, il conserve les commentaires du fichier qui montrent le code généré par Copilot.

  1. Les objets de cette étude sont principalement des extraits de code utilisés dans des projets réels. Pour cette raison, les fichiers de code utilisés pour résoudre des problèmes d'algorithmes simples sur la plateforme LeetCode seront exclus.

Après avoir terminé l'annotation des données pilotes, le premier auteur de l'article a examiné les résultats de recherche restants et a obtenu un total de 465 extraits de code. Après avoir supprimé les résultats en double, nous nous sommes retrouvés avec 435 extraits de code différents. 249 d'entre eux proviennent de balises de référentiel et 186 proviennent de balises de code, comme détaillé ci-dessous :

Étape 2 : Analyse des données

Au cours du processus de test, afin d'améliorer la couverture et la précision des résultats, les chercheurs ont utilisé deux outils d'analyse statique pour effectuer des contrôles de sécurité sur chaque segment de code (c'est-à-dire CodeQL plus des outils spécialisés pour des langages spécifiques).

Dans cette étude, les chercheurs ont d’abord utilisé CodeQL pour analyser le code de l’ensemble de données. La suite de requêtes par défaut dans le package de requêtes standard CodeQL est codeql-suites/-code-scanning.qls. Chaque package contient plusieurs suites de requêtes utiles dans le répertoire codeql-suite.

Dans le même temps, il utilise la suite de tests -security-and-quality.qls pour analyser les extraits de code liés aux vulnérabilités de sécurité. Ces suites de tests peuvent vérifier plusieurs propriétés de sécurité, couvrant de nombreux CWE. Par exemple : la suite de tests Python fournit 168 contrôles de sécurité ; la suite de tests Java fournit 203 contrôles de sécurité ; la suite de tests C++ fournit 163 contrôles de sécurité.

En outre, les chercheurs ont sélectionné d’autres outils d’analyse de sécurité statique populaires pour chaque langage de programmation afin d’analyser les fichiers. Par exemple, Python utilise Bandit, Java utilise ESLint, C++ utilise Cppcheck, Java utilise Findbugs, C# utilise Roslyn et Go utilise Gosec. Si l'ID CWE lié au problème de sécurité ne peut pas être obtenu directement à partir des résultats de l'analyse, les chercheurs mapperont également manuellement les attributs de sécurité fournis par les résultats de l'analyse au CWE correspondant.

35,8 % des segments de code présentent des vulnérabilités de sécurité, le code C++ présente le plus de vulnérabilités, couvrant 42 types CWE

Après analyse, les chercheurs sont parvenus à la conclusion finale basée sur les trois questions soulevées ci-dessus.

RQ1 : Le code généré par Copilot dans les projets GitHub est-il sûr ?

Sur les 435 extraits de code générés par Copilot, 35,8 % contenaient des failles de sécurité, créant des problèmes de sécurité quel que soit le langage de programmation utilisé.

Il existe une proportion légèrement plus élevée de failles de sécurité dans le code Python et Java, qui sont les langages dans lesquels les développeurs utilisent le plus souvent Copilot. Parmi les 251 extraits de code Python collectés, 39,4 % présentent des risques de sécurité. Sur les 79 extraits de code Java, 27,8 % présentent des risques de sécurité. Parmi tous les langages de programmation, **C++ présente la plus forte proportion de vulnérabilités de sécurité dans les segments de code, atteignant 46,1 %. **Go présente également un ratio de risque de sécurité relativement élevé de 45,0 %. En comparaison, la proportion de fichiers problématiques de sécurité dans le code C# et Java est inférieure, à 25 % et 23,2 % respectivement.

RQ2 : Quelles failles de sécurité existent dans les extraits de code générés par Copilot ?

Pour répondre à RQ2, les chercheurs ont traité les résultats des analyses effectuées par RQ1 et éliminé les problèmes de sécurité en double détectés au même emplacement de segment de code. Au total, 600 failles de sécurité ont été identifiées dans 435 extraits de code.

Les types de vulnérabilités de sécurité détectées étaient divers et liés à 42 CWE différents, dont CWE-78 (injection de commandes du système d'exploitation), CWE-330 (utilisation de vulnérabilités de valeurs aléatoires non sécurisées) et CWE-703 (vérification de conditions anormales ou de problèmes incorrects). manipulation) est le plus fréquent.

RQ3 : Combien de vulnérabilités de sécurité appartiennent au Top-25 MITRE CWE ?

Sur les 42 CWE identifiés, 11 sont actuellement reconnus comme étant les 25 principales vulnérabilités du CWE 2022.

Écrit à la fin

À cet égard, certains internautes ont également plaisanté en disant que leur capacité à écrire des bogues pourrait être supérieure à celle de GitHub Copilot.

Bien entendu, cette étude n'a pas pour but de persuader les développeurs de ne pas utiliser les outils de codage assistés par l'IA dans leur travail quotidien, mais de montrer que l'utilisation de Copilot pour générer du code dans le développement réel peut améliorer l'efficacité du développement et de rappeler à chacun de mener ses propres évaluations de sécurité. .

Dans le même temps, effectuez les contrôles de sécurité appropriés lorsque vous acceptez les suggestions de code de Copilot pour éviter efficacement certains risques potentiels et réduire les pertes.

Pour plus de détails, voir le document :

Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • Commentaire
  • Partager
Commentaire
0/400
Aucun commentaire
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)