Les Risques de Coder avec l’IA Générative

Regardez la vidéo!

Si vous codez avec ChatGPT ou Copilot, vous risquez de créer des failles de sécurité assez grave !

Une étude récente de Stanford a révélé que, dans 4 tâches sur 5, les participants assistés par l'IA écrivaient un code moins sécurisé que ceux sans IA. C’est une augmentation de 80 % par rapport aux programmeurs sans assistance générative de l'IA ayant la même expérience de programmation. Pire encore, ils étaient beaucoup plus susceptibles de surestimer la sécurité de leur code, soulignant une augmentation de 3,5 fois de la fausse confiance en la sécurité du code.

Ces failles de sécurité étaient principalement des erreurs d'authentification, des injections SQL, et autres vulnérabilités qui pouvaient être utilisées pour faire planter le programme, exécuter du code arbitraire ou tromper un programme pour qu'il lise ou écrive à un emplacement non prévu.

Voyons comment éviter ces menaces tout en profitant des avantages de l'utilisation de l'IA générative lorsqu’on code. Mais d'abord, j’aimerais aborder un point que certains d'entre vous se demandent peut-être encore : d'où vient l'IA générative dans le monde de la programmation, et les avantages de les utiliser l'emportent-ils vraiment sur les risques ?

Pourquoi les IA sont-elles bonnes à coder ? Qu'est-ce qui existe comme système d’IA en programation ?

La relation de l’IA avec les développeurs a évolué de suggestions de syntaxe de base à des outils comme GitHub Copilot, alimenté par OpenAI Codex. Sorti en 2021, Codex peut générer des fonctions entières et traduire le langage naturel en code dans diverses langues, améliorant ainsi considérablement la productivité des développeurs. On peut désormais automatiser les tâches répétitives, effectuer des analyses de code en temps réel et suggérer des améliorations automatiquement, aidant les développeurs à se concentrer sur la résolution de problèmes complexes tout en maintenant une haute qualité de code. Beaucoup plus est à venir grâce aux Agents et systèmes complexes ayant un accès complet à votre code, à Internet et aux fonctionnalités de débogage dans les IDEs.

Pourquoi utiliser l’IA en tant que développeur ?

Donc, comme on peut voir, utiliser l'IA pour coder sert principalement à augmenter la productivité grâce à l'automatisation des tâches répétitives, comme générer automatiquement des fonctions ou des lignes simples que nous savons faire et que nous pouvons demander clairement, mais qu’on ne veut pas réécrire manuellement pour un nouveau projet. C’est utilisé pour coder à notre place.

C'est cool, cela démocratise la programmation en fusionnant la recherche et l'adaptation d'exemples de code. C'est similaire à ce que font les développeurs sur Stack Overflow ou GitHub avec le code open-source, cherchant des problèmes ou des bugs similaires et les adaptant, mais de manière plus efficace, car les outils d'IA adaptent déjà le code à votre problème et à vos variables actuelles.

Cela vous aide même à apprendre de nouveaux langages de programmation en traduisant facilement vos idées en lignes de code dans des langages que vous ne maîtrisez pas, vous aidant à devenir rapidement compétent, bien que loin d'être sécuritaire.

Grâce à cela, le codage assisté par IA transforme complètement les parcours professionnels en développement logiciel, devenant des parties intégrantes des programmes éducatifs et de formation professionnelle. Demandez à n'importe quel étudiant en génie logiciel actuel ce qu'il pense de Copilot ou ChatGPT, et vous verrez.

Mais la question est : est-ce que ça va créer un excès de confiance, vous amenant potentiellement à créer des failles de sécurité ? La réponse est oui, et pour une raison simple : tout comme le code open-source, vous ne l'avez pas écrit, quelqu'un d'autre ou, dans ce cas, quelque chose d'autre l'a fait.

Les risques de la programmation avec l’IA

De telles fuites de sécurité peuvent arriver à tout le monde, ou à tout entité, disons. Comprendre les risques associés au codage en utilisant l'IA est la première étape pour les corriger. On ne va pas chercher de fuites ou de bugs si on fait entièrement confiance au système, comme nos participants trop confiants de l'étude de Stanford. Alors avant de plonger dans les solutions, jetons un coup d'œil rapide aux plus grands risques de l'utilisation de l'IA générative pour coder...

Le plus évident est que l'utilisation des systèmes d'IA actuels pour générer du code conduit souvent à des informations obsolètes, car le système peut avoir été entraîné avec des données désormais obsolètes. Ce n'est pas nouveau ; les mêmes problèmes existaient en utilisant du code provenant de Stack Overflow.

Même si c'est souvent assez bon, le code généré par l'IA non vérifié peut manquer de documentation appropriée, utiliser des noms de variables confus et employer des algorithmes et des modèles de conception sous-optimaux, ce qui peut nuire à la qualité globale du code.

L'utilisation d'outils d'IA générative peut exposer les entreprises à des risques de propriété intellectuelle (PI), en particulier en ce qui concerne les secrets commerciaux et les droits d'auteur. Nous voyons OpenAI et d'autres entreprises être poursuivies en justice tout le temps.

Cela peut également nuire à la crédibilité technique de l'entreprise lors de fusions, d'acquisitions ou d'investissements qui ne peuvent être négligés. Dans le cadre d’acquisitions, la présence de code généré par l'IA est scrutée de la même manière que l'utilisation de composants open-source, avec des impacts potentiels sur la sécurité de la propriété intellectuelle et la viabilité commerciale. Si cela n'est pas fait correctement, cela peut nuire à toute l'entreprise.

Un dernier point qui s'appliquera sûrement à vous, si ce n'est déjà le cas, est le développement d'une dépendance excessive à l'IA pour les tâches de codage. Cela entraînera une diminution de la capacité d'un développeur à coder de manière indépendante et à innover de manière créative, affectant la compétence globale en programmation. Bien sûr, nous aurons toujours accès à l'aide de l'IA générative à partir de maintenant, mais nous devons toujours comprendre et suivre ce qui se passe. Sinon, qui va nous aider à déboguer le code ?

Comment atténuer ces risques tout en utilisant l’IA pour plus d’efficacité lors du codage ?

Les premières étapes pour atténuer tous ces risques sont (1) de continuer à apprendre et à comprendre ce qui se passe en examinant et en comprenant chaque ligne de code écrite ou générée et (2) d'être totalement transparent sur ce qui est généré et non généré lors du partage avec vos collègues et gestionnaires. La transparence sera essentielle pour prévenir de nombreux problèmes, notamment ceux liés à la propriété intellectuelle ou à la sécurité.

Au-delà de ces étapes initiales, il est crucial de combiner le code généré par l'IA avec une supervision humaine. Demandez à l'IA d'expliquer ses modifications ; prenez le temps de comprendre en profondeur sa sortie pour vous assurer qu'elle est conforme aux objectifs du projet et respecte les normes de sécurité. Testez les fonctionnalités et voyez ce qui ne fonctionne pas, ne supposez pas que ça fonctionnera parce que le code a l'air bon. Souvent, ce n'est pas le cas, et l’IA ne vous le dira pas. Comme toujours, l'IA peut halluciner, et cela ne va pas changer.

En parlant de cela, travaillez sur vos techniques de prompt. C'est simple, mais très utile. Spécifiez clairement les instructions d’une tâche, incluez des déclarations de fonction détaillées et des fonctions qui sont utilisés par le bout de code envoyé à l’IA, et donnez plus de contexte. Nous avons maintenant des fenêtres de contexte de millions de tokens, donc vous êtes bien à ce niveau. La plupart des approches d'IA générative utilisent le RAG, que j’ai couvert dans une vidéo,  pour explorer votre code, ce qui facilite encore plus le processus. Vous devez simplement utiliser des prompts clairs et précis pour obtenir ce que vous voulez. Vous pouvez également jouer avec des paramètres comme la température de l'IA, ce qui peut avoir un impact significatif sur la sécurité et la justesse du code, minimisant les risques et améliorant la fiabilité.

Ensuite, ayant fait le maximum pour réduire les hallucinations et les risques de bugs, je pense que la dernière étape est de traiter le code généré par l'IA avec la même rigueur que le code écrit par des développeurs humains, et pas n'importe quel développeur, traitez-le comme lorsque vous examinez une PR d'un collègue aux compétences discutables. Ajoutez un peu de pensée critique, en vous demandant si cette ligne est vraiment utile ou si cette fonction est excessive. Lorsque vous repérez quelque chose de bizarre, vous pouvez commencer par demander à l'IA à quoi cela sert, si elle peut simplifier cette partie ou simplement revenir à la documentation pour confirmer que c'est la bonne fonction à utiliser.

En ce qui concerne les entreprises, établir des lignes directrices organisationnelles claires pour l'utilisation du code généré par l'IA est également nécessaire. Définissez des politiques transparentes qui dictent comment et où l'IA peut être utilisée ou même doit être utilisée, en veillant à ce que ces lignes directrices soient comprises et suivies par toute l'équipe, et que les gens se sentent en sécurité et non jugés en l'utilisant. Parce qu'ils le feront.

Enfin, l'une des choses les plus importantes à faire, comme toujours avec l'IA, est de la surveiller. Surveiller l'utilisation du code généré par l'IA à l'aide d'un système tel que le AI Code Monitor de Sema peut fournir des informations précieuses sur l'étendue et l'impact du code généré par l'IA dans vos projets. De tels outils aident les équipes à suivre les métriques d'utilisation de l'IA, à identifier les problèmes potentiels et à affiner leur approche d'intégration de l'IA dans le codage. Par exemple, Sema vient de lancer une fonctionnalité qui vérifie automatiquement la présence de code généré par l'IA lors des demandes de tirage (Pull Requests).

C'est particulièrement utile et important pour les grandes entreprises ou lorsque vous travaillez avec plusieurs développeurs si vous essayez de construire une base de code fiable et de valeur.

Conclusion

Donc, bien que les outils d'IA offrent des avantages significatifs pour améliorer l'efficacité du codage, ils introduisent également divers risques, tels qu'une vulnérabilité accrue aux failles de sécurité et une dépendance excessive aux systèmes automatisés. 

Des outils comme l'AI Code Monitor de Sema peuvent aider à identifier et à corriger les vulnérabilités, garantissant une meilleure qualité et sécurité du code, mais rien ne vaut une double vérification et une compréhension approfondie du code généré que vous utilisez.

J'ai mis tous les liens vers les ressources dans la description ci-dessous si vous êtes intéressé par en savoir plus sur les risques ou les solutions potentielles pour coder avec des modèles génératifs.

Merci d'avoir lu ce blogue en entier, et je vous retrouve dans le prochain !

Louis-François Bouchard

Hello! Je suis Louis-François Bouchard, de Montréal, Canada, aussi connu sous le nom de 'What's AI' et j'essaie de partager et de vulgariser tout ce qui est en lien avec l'intelligence artificielle. Mon objectif est de démystifier la «boîte noire» de l'IA pour tous et de sensibiliser les gens aux risques de son utilisation.

https://www.youtube.com/channel/UCIUgms0TE2WhQijbU-IMYyw
Précédent
Précédent

Comment on Évalue les LLMs

Suivant
Suivant

Créer un LLM Multimodal (inspiré par Chameleon de Meta)