L’IA est-elle capable d’écrire du code sécurisé ?
Frank Fischer
3 mai 2023
0 minutes de lectureL’IA connaît des progrès phénoménaux. De nouveaux outils et cas d’usage apparaissent chaque semaine, de l’écriture de poèmes à la sécurisation de réseaux.
Les chercheurs ne savent pas encore jusqu’où les nouveaux modèles d’IA comme GPT-4 peuvent aller, ce qui a d’ailleurs poussé certains d’entre eux, ainsi que quelques grands noms du secteur, comme Elon Musk et Steve Wozniak, à demander un moratoire sur l’entraînement de modèles plus puissants pendant 6 mois, le temps de développer des protocoles de sécurité et réglementations appropriés.
L’une des plus grandes inquiétudes concernant GPT-4 réside dans l’incertitude autour de ses capacités réelles. De nouveaux exploits, jailbreaks et comportements apparaîtront au fil du temps, et il est difficile de les empêcher en raison de l’opacité des grands modèles de langage. Dans son livre blanc sur GPT-4, OpenAI explique :
OpenAI a déployé divers processus et mesures de sécurité tout au long du développement et du déploiement de GPT-4 pour limiter sa capacité à générer du contenu dangereux. Pour autant, GPT-4 reste vulnérable aux attaques, et les exploits ou autres « jailbreaks » ne constituent pas la véritable source du risque. L’affinage d’un modèle modifie à la marge son comportement, mais ses fonctionnalités fondamentales, comme la capacité à générer du contenu dangereux, ne disparaissent pas.
GPT-4 vient seulement d’être publié, mais nous disposons de beaucoup d’informations sur son prédécesseur, GPT-3, qui constituait la base de ChatGPT. Depuis son lancement, ChatGPT a fait couler tellement d’encre que les autres géants de la tech, comme Google et Adobe, s’agitent en tout sens pour proposer eux aussi des solutions d’IA.
De l’optimisation de la productivité à la création de contenu, la liste des compétences de ChatGPT est sans fin. Toutefois, son utilisation par les développeurs pour générer du code a suscité la controverse en raison des problèmes de confidentialité, des risques pour la cybersécurité et de l’impact potentiel sur la posture de sécurité des applications qui en découlent.
Risques liés à la confidentialité et à la propriété intellectuelle lors de l’utilisation d’outils de codage par IA
Grand public et professionnels font part de leurs inquiétudes pour la confidentialité des données internes des entreprises communiquées à ChatGPT depuis le lancement de cette IA l’année dernière.
Un rapport récent de Cyberhaven a montré que 3,1 % des employés ont divulgué des informations confidentielles à ChatGPT, un chiffre qui illustre l’importance de créer des politiques régissant l’utilisation des outils d’IA en interne. Samsung a récemment alerté ses collaborateurs sur les dangers de l’utilisation de l’IA après que du code source sensible et des notes de réunion ont été communiqués à ChatGPT. Ces données font désormais partie des données d’entraînement d’OpenAI, et on ignore encore s’il est possible de les récupérer.
Les outils d’IA pour renforcer la cybersécurité
Tout n’est pas noir pour autant pour les professionnels de la sécurité. Si l’IA présente des inconvénients et problèmes en matière de confidentialité, elle fournit aussi davantage d’outils aux équipes de sécurité pour faire face aux menaces émergentes.
Les red teams d’OpenAI sont ainsi parvenues à utiliser GPT-4 pour détecter et exploiter des vulnérabilités, mais aussi réaliser de l’ingénierie sociale, ce qui confirme que le modèle facilitera la détection et le signalement de nouvelles vulnérabilités.
Les entreprises de sécurité continuent de trouver de nouveaux moyens d’intégrer l’IA dans leurs produits. Nous avons par exemple récemment annoncé notre nouvelle fonctionnalité de correction automatique, qui repose sur une technologie d’IA hybride pour générer et recommander des correctifs dont la sécurité a été validée par le moteur de Snyk Code.
Risques du codage assisté par IA pour la sécurité des applications
Si ChatGPT peut aider les utilisateurs à écrire du code, il ne génère le plus souvent que de brefs extraits. En l’utilisant pour produire de grandes quantités de code, les développeurs prennent un risque, car le logiciel ne tient pas compte des problèmes où les composantes sont réparties entre plusieurs fichiers ou niveaux. La plupart du temps, l’IA ne comprend même pas ces scénarios et est incapable de résoudre les problèmes concernés.
La performance des produits de génération de code dépend des données sur lesquelles ils ont été entraînés. Or, il est quasiment impossible de créer du code sans bug ou vulnérabilité. Par conséquent, les suggestions de ces outils incluent souvent des failles. Une statistique publiée par Microsoft rend cette faiblesse encore plus inquiétante : 40 % du code publié par les développeurs est désormais généré par des IA et n’est pas modifié.Cette situation pose un vrai problème aux équipes d’AppSec, car les entreprises doivent s’assurer que leurs logiciels sont aussi sûrs que possible.
L’outil d’IA de GitHub, Copilot, est entraîné sur le code issu de sources publiques, notamment les dépôts publics de GitHub. Par conséquent, ses suggestions ressemblent à ce code existant. Si les données d’entraînement incluent du code non sécurisé, les suggestions peuvent elles aussi comprendre des vulnérabilités classiques. Un chercheur d’Invicti a mis à l’épreuve cette théorie en créant une application Python et une application PHP avec Copilot, puis en recherchant les vulnérabilités qu’elles contenaient. Son essai s’est avéré fructueux, car il y a trouvé des failles XSS, des injections SQL et des vulnérabilités de fixation de session.
GitHub a parfaitement conscience de ces problèmes de sécurité et a récemment ajouté une fonction de filtrage des vulnérabilités :
Les identifiants codés en dur, les injections SQL et les traversées de chemin sont les patterns de codage les plus courants filtrés par le modèle. Cette solution est un véritable atout pour les développeurs, car elle les aide à sécuriser leur code.
La mise à jour de GitHub Copilot filtre les vulnérabilités de sécurité | InfoWorld
Conversations sur Reddit autour du codage avec ChatGPT
Après nous être penchés sur le cas de Copilot, nous avons voulu déterminer si ChatGPT suivait le même principe.
Pour le savoir, nous nous sommes tournés vers Reddit. Ce site de discussion et d’agrégation est fréquenté par de nombreux professionnels des technologies, notamment des développeurs, qui souhaitent échanger avec leurs pairs.
Il s’agit donc de l’endroit idéal pour savoir comment ChatGPT est utilisé pour coder : Cherchent-ils des conseils d’utilisation ? Invitent-ils leurs pairs à ne pas l’utiliser pour coder ? Au contraire, vantent-ils sa fiabilité ?
Nous avons commencé par analyser un fil de discussion Reddit traitant du codage et de ChatGPT réunissant près de 350 messages. Nous avons ensuite évalué le sentiment de ces commentaires en nous concentrant sur leur contenu et pas seulement sur leur titre.
Messages positifs
Après élimination des publications sans description ou non pertinentes, nous avons déterminé que 17,9 % des messages exprimaient un sentiment positif. Un utilisateur a publié une image du code sur lequel il travaillait en disant « J’étais sur le point d’abandonner. Je venais de passer 30 minutes à chercher une solution. J’ai fini par demander à ChatGPT et il m’a fourni la réponse parfaite en quelques secondes... »
Un autre utilisateur chante les louanges de ChatGPT : « Pour des problèmes complexes, si je dois faire une refonte du code ou manipuler des tableaux ou listes de manière inhabituelle, je demande à ChatGPT de s’en charger. Après 20 ans à me creuser la tête sur ces tâches sans intérêt, je peux enfin les refiler à une IA ! Qu’est-ce que cela dit de moi comme programmeur ?»
Parmi ces messages positifs, un thème revient néanmoins souvent, les subtilités escamotées par ChatGPT :
« C’est vrai que ChatGPT est très impressionnant. Le code est plausible et relativement précis, et surtout, il l’écrit très vite. Par contre, c’est la catastrophe lorsque l’on regarde le détail… »
« J’adore coder avec ChatGPT la plupart du temps. Il n’a pas toujours la bonne réponse, mais ce n’est pas très grave. En général, il n’est pas loin de la vérité. C’est comme avoir un stagiaire très intelligent, mais pas parfait, à sa disposition en permanence... »
« ...ChatGPT semble savoir où se trouvent les problèmes de son code, mais n’arrive parfois pas à les corriger... »
Les commentaires positifs sur ChatGPT ne sont donc pas exempts de critiques sur son manque d’attention aux détails, détails qui font toute la différence en matière de sécurité. Si cet outil est utilisé par un développeur peu expérimenté, ces erreurs ne seront pas corrigées.
Messages négatifs
Nous avons déterminé que les messages négatifs sont moins nombreux que les positifs. 10,3 % des descriptions sont négatives, beaucoup d’utilisateurs exprimant leurs frustrations vis-à-vis des imprécisions de ChatGPT.
Un utilisateur explique ainsi : « ...Je trouve les suggestions de ChatGPT vraiment peu fiables. Ses requêtes génèrent sans arrêt des erreurs... »
Un autre utilisateur fait part d’un problème similaire, et cherche des prompts pour faciliter le codage : « Quand je demande à ChatGPT de modifier du code, il me redonne l’intégralité du code, même s’il n’a changé qu’une seule ligne. J’ai essayé de lui dire " Ne me donne que les lignes de code qui ont été modifiées ", mais il m’ignore et me ressort tout. Cela me fait perdre du temps. J’aimerais trouver un prompt qui permet de récupérer uniquement les lignes modifiées. »
Recherche d’aide et de conseils
Nous avons constaté que la majorité des publications sur Reddit en lien ChatGPT et le codage étaient des demandes d’aide et de conseils (44,6 %).
Ces demandes allaient des questions sur l’exhaustivité du code généré par ChatGPT à la conversion de code d’un langage à l’autre.
En entrant dans le détail, nous avons constaté que ces messages portaient sur les ressources de formation (51,4 %), les demandes aux pairs (14,3 %), les questions/demandes sur la qualité (14,3 %), les créations d’utilisateurs (11,4 %), les prédictions (5,7 %) et l’expérience utilisateur (2,9 %).
Nos conclusions
Les développeurs qui comprennent vraiment leur code trouvent encore un peu à redire sur le détail des propositions de ChatGPT. Cet outil est exceptionnellement puissant pour les tâches simples, mais ne générera pas toujours exactement le code dont vous avez besoin.
A contrario, les personnes qui ne comprennent pas leur code sont très impressionnées et enthousiastes, car elles parviennent à créer du code leur permettant d’atteindre leurs objectifs en ayant peu de connaissances.
Ces deux groupes ignorent probablement les problèmes de sécurité générés par l’IA. Cette lacune doit être encore plus prononcée chez les personnes débutant dans le développement. Il y a donc toutes les chances que les développeurs qui utilisent l’IA sans s’inquiéter de la sécurité introduisent des vulnérabilités dans leur base de code.
Ce point est particulièrement important au regard des tendances d’utilisation de l’IA. 42 % des entreprises interrogées par IBM l’année dernière cherchaient ainsi à intégrer l’IA, et il est donc essentiel de penser à la sécurité.
Points clés pour la sécurité des applications en lien avec l’IA
Les outils basés sur l’IA comme ChatGPT et Copilot peuvent accélérer le développement, mais ils doivent être associés à des outils de sécurité complets pour garantir que le code qu’ils génèrent est sûr. Les LLM ne sauraient se substituer à un compilateur ou à un interpréteur pendant le développement, pas plus qu’à des outils de sécurité dédiés.
Des politiques internes régissant l’utilisation des outils basés sur l’IA doivent être mises en place. Ces politiques doivent notamment couvrir les points suivants :
Définition claire des cas d’usage autorisés : indiquez clairement dans quels cas il est acceptable de faire appel à l’IA et quels types de décisions peuvent être pris avec ce type d’outil.
Choix des données et des usages : indiquez le type et la qualité des données pouvant être utilisées dans les modèles d’IA et quelles sources de données peuvent être utilisées.
Confidentialité et sécurité des données : assurez-vous que toutes les données utilisées dans les modèles d’IA sont protégées correctement et que des mesures appropriées ont été mises en place pour garantir leur confidentialité et leur sécurité.
Obligations de conformité : assurez-vous que l’utilisation d’outils basés sur l’IA répond aux exigences légales, réglementaires et éthiques applicables.
Mises à jour régulières : mettez à jour vos politiques en permanence pour tenir compte du développement des nouveaux outils et de l’évolution de vos besoins métier.
Cette liste ne constitue pas une liste exhaustive des politiques devant régir l’IA dans votre entreprise, mais elle constitue un bon point de départ.
Les équipes de sécurité doivent suivre les développements de l’IA qui donnent naissance à de nouveaux outils à la fois pour les équipes de sécurité et les acteurs malveillants. Les outils d’IA peuvent jouer un rôle clé face à la multiplication des exploits en donnant aux équipes de sécurité des outils plus efficaces, en particulier à une période où les entreprises ont encore du mal à recruter des spécialistes de la sécurité. Nous anticipons l’apparition de nouveaux cas d’usage des outils basés sur l’IA au cours de l’année, et il est donc essentiel de suivre les développements du domaine. Les équipes de sécurité doivent également garder l’œil sur l’utilisation que les développeurs font de l’IA, la quantité de code généré par l’IA et ajouté à votre base de code, et la présence de contrôles de sécurité permettant d’assurer la gestion de ce code.
La sécurité du code n’est qu’une facette du développement. En effet, le développement logiciel associe des talents, des processus et des technologies. Certes, l’IA peut jouer un rôle sur l’aspect technologique, mais elle ne permet pas de se passer des autres facteurs. En matière de codage, la qualité est essentielle. L’humain jouera toujours un rôle clé.
Les meilleures options pour la sécurité des applications selon Snyk
Que votre code soit écrit par des humains de A à Z ou principalement issu de l’IA, il est important de respecter des principes de sécurité de base pour réduire votre surface d’attaque. Vous devez absolument évaluer votre sécurité des applications pour protéger votre code contre les acteurs malveillants qui souhaitent l’exploiter. Une évaluation de la sécurité des applications consiste à tester les applications pour détecter les menaces et mettre au point des stratégies permettant de s’en prémunir. Ce processus permet aux entreprises d’évaluer leur posture actuelle et de deviser des moyens d’optimiser la protection de leurs logiciels contre les attaques à venir Les développeurs doivent conduire des évaluations de la sécurité des applications régulières pour s’assurer que leurs mesures de sécurité sont toujours pertinentes et efficaces.
Cinq étapes pour évaluer votre sécurité des applications :
Identifier les acteurs malveillants potentiels
Déterminer quelles données sensibles doivent être protégées
Définir la surface d’attaque des applications
Évaluer les failles actuelles du processus AppSec
Créer une feuille de route de la sécurité pour éliminer les points faibles
Les outils basés sur l’IA comme ChatGPT peuvent ne pas voir les faiblesses et vulnérabilités. Une plateforme pour la sécurité des développeurs comme Snyk est bien plus à l’aise dans ce domaine. Avec Snyk, vous pouvez identifier et corriger automatiquement les vulnérabilités de votre code, les dépendances open source, les conteneurs et les environnements cloud.
Notre plateforme peut même s’intégrer directement à vos outils de développement, pipelines d’automatisation et workflows de codage pour vous offrir une sécurité fluide et efficace.
Développement sécurisé et accéléré
Snyk réunit développeurs et équipes de sécurité pour assurer une progression rapide et sécurisée de tous les projets.