← All talks

Replay BSides Paris 2024 - GenAI et sécurité du code : le bon et le mauvais

BSides Paris17:2098 viewsPublished 2024-05Watch on YouTube ↗
About this talk
Retrouverez la session de conférence proposée par Edouard Viot lors de la première édition du BSides Paris. Cette présentation examine les aspects contradictoires de la Generative AI dans la génération de code, mettant en avant à la fois son efficacité et ses capacités de résolution de problèmes ainsi que des préoccupations de sécurité significatives. Elle aborde les dangers de la dépendance croissante des développeurs à l’égard de la GenAI, et comment cela conduit souvent à négliger les mesures de sécurité nécessaires. – Les problèmes de sécurité de la GenAI : comment peuvent-elles introduire des vulnérabilités ? – Une trop grande dépendance à la GenAI pourrait mener à une baisse de la vigilance. – Les opportunités qu’offre la GenAI dans la sécurité du code.
Show transcript [fr]

[Musique] bonjour à tous du coup je m'appelle dard Viot je vais vous faire aujourd'hui une une conf sur l'A et la code security justement quelques expéri je suis pas expert en a à la base mais quelques expérimentations que j'ai fait que je suis plutôt du du côté du du code security donc je suis de symbiotic security une très vieille société qui a été créée lundi dernier euh du coup donc éedouard Viot passionné en cybersécurité depuis toujours j'ai j'ai commencé en tant que développeur ensuite security engineer ensuite bi j'ai fait 2 ans dans l'écoute téléphonique et la sécurité offensive pour revenir du côté du privé et avoir différents rôles notamment dans des IDR et ensuite l'application

security donc j'ai été VIP product engineering de dinol donc ça faisait des web applications firewall et ça protéger des applications au run et dans les deux dernières années VIP product de guit Guardian donc qui fait de l'application security aussi mais au moment du code euh voilà et en train de créer ma nouvelle société donc du coup on va parler de les tout le monde en parle euh la plupart en parle autour des des concernes que ça crée d'utiliser typiquement des LLM c'est pas le l'angle du tout que je prends c'est il y a des gens bien plus doués que moi dans le sujet qui qui l'ont pris notamment il y a pas mal de de choses par exemple même

en dehors du LLM l'utilisation je peux en faire si je me dis ok c'est trop cool je vais prendre toutes mes pages notion les mettre dans une base de données et le query avec chat GPT bah peut-être que ça va casser tous les droits et que finalement après quelqu'un qui n'était pas censé avoir accès à tous les départ tous les documents du département legal va être capable de le faire parce que chat GPT a aucune notion d'airbug de droit de choses comme ça donc nous on zoome vraiment sur la partie code security qui qui est une sous-partie de de l'ensemble de la sécurité et et du coup mon expérimentation c'était prendre deux angles de se dire ok avec du code

que je génère par exemple avec Copilot est-ce que ce code est sécurisé et dans l'autre sens une fois que j'ai du code si je me sers de l'a est-ce qu'on peut mieux le sécuriser donc les les les deux possibilités donc j'ai commencé vraiment j'espère que vous apprécierez mon petit schéma c'est 5 minutes de ma vie qui sont passé dedans et et du coup ça représente un anenton noir ça se voit pas tout de suite donc au début j'ai commencé avec vraiment je donne zéro contexte à l' je lui fais générer du code et on voit ce qui se passe et plus ça va aller plus on va donner du contexte à et l'aider pour faire de

mieux en mieux en terme de sécurité donc du coup j'ai loué Copilot j'ai payé mes 10 € par mois euh je lui ai demandé de générer un hello world ça fonctionna j'étais content après je me suis dit bon j'ai payé 10 € faut peut-être que j'en fasse autre chose et et je lui ai demandé de me générer une portion de code qui se connecte à à l'pi de d'OP justement donc il m'a généré cinq lignes de code et et dedans il y avait une vulnérabilité j'espère que vous l'avez spoté c'est en gros ça me permet de faire un clin d'œil à mon ancien employeur k gardian les Pik il me conseille de la mettre en Durre et

d'ensuite aller commiter ce code donc si je le commite sur un repository pr pu tout le monde va y avoir accès mais même en privé c'est c'est c'est pas une bonne pratique euh donc du coup je me suis dit ok ça fait une minute 30 que j'utilise scopilot première vulnérabilité c'est pas ouf quand même euh et je me suis dit bon j'étais seul chez moi je me suis dit la quelle seule personne AC qui je peux en parler c'est chat GPT donc je lui dis mais c'est quand même bizarre enfin est-ce que tu tu tu peux générer du du code avec des vulnérabilités donc je vous fais pas lire toute sa réponse mais en gros ce qu'il dit c'est bah j'ai

appris sur gitub public sur GUP public il a plein de vulles oui je vais faire des vulles euh et son point à droite c'est de dire en fait je t'encourage à avoir des bonnes pratiques à faire des codes review mais aussi à passer des outils de sécurité type sast donc sast c'est du static code analysis des outils comme checkmks ver code et euh gitab lui-même fait code QL qui qui permet de faire ça donc du coup et la position c'est de dire vous pouvez l'utiliser c'est un Copilot et pas un autopilot donc vous pouvez pouvez l'utiliser mais vous êtes responsable de la sécurité d'illeurs donc après on a j'ai j'ai fait plusieurs autres tests derrière ce qui

est impressionnant c'est que c'est enfin maintenant on est tous habitués à ça avec les ail mais c'est pas idem potent je le fais CIN fois j'ai cinq résultats différents des fois ça fait un bon Guan des fois ça met lespiail en dur il y a pas de ça dépend sur quel morceau de code ça tombe par contre bon quand même après avoir utilisé Copilot tous les jours pendant 2 mois c'est quand même assez stylé euh surtout la partie pas je génère du code de zéro mais plutôt je suis en train de coder il il devine la suite l'autocomplite de code des fois assez impressionnante je trouve et des fois il génère des bugs ou des choses

qui fonctionnent pas si je lui demande 10 fois de générer un bout de code pour se connecter à l'EP d' open trois fois sur 10 à peu près va me sortir un truc qui fonctionne plus parce que c'est un très vieux code sur une ancienne version de l'EPI d'OP typ donc ça c'est le premierers test j'ai regardé aussi l'état de l'art qui a étudié un petit peu ce sujet il y a une première étude de Stanford University où ils se sont demander justement bah est-ce que quand j'utilise les a est-ce que je fais des codes secure donc leur premier point c'est en effet de dire ça a appris sur des ripo gitup public donc mécaniquement ça fera des vules ensuite

ils ont pris par exemple 100 développeur ils en ont mis 50 avec open a 50 sans Open en fait le learning c'est que bon je vous l' fait courte il y a plusieurs langages tout ça mais sur quasiment tous les langages les gens qui utilisaient pas open a faisaient moins de vulnérabilité et et du coup pas il y a pas une petite différence quand et le troisième point est encore plus flippant c'est que les gens qui ont écrit le code eux-mêmes avaient pas confiance en terme de sécurité dans leur code et les gens qui ont utilisé op P avaient full confiance ce qui est un peu contraire à ce que nous dit guitom donc du coup il y a déjà

un truc d'éducation de dire au dev bah non justement il y a plus de VUL quand tu autogénèes le code par l' donc tu dois t'en occuper le l'autre point quand même c'est en fait plus les gens sont des power users et savent faire varier les paramètres les choses comme ça plus ils font du code secure euh l'autre analyse c'est fait par l'Université de Yan qui est tristement célèbre pour le covid eux bah pareil ils ont fait une analyse eux leur point bon déjà leur point c'est de dire aussi vu que ça a appris sur des ripos publques il y a des VUL mais il disent aussi qu'on est dans un cercle très vicieux c'està-dire que

en fait mon elle a appris sur des ripos publques où il y avait des vulnes elle se remet à générer du code avec des vulnes qui est recomite sur des ripos publics elle continue à leurner à aller dans un cercle vicieux qui est très mal commencé d'entré de jeu en fait ce qui est assez important pour la suite de se dire comment on crée une qui de base et assez saine et du coup bon la position glitub est clair a dit utiliser du sas donc eux ils se sont dit bah utilisons un sast générons plein de codes enfin détectons sur gitup plein de codes générés par Copilot et faisons passer des scanners de vue nen et c'est quand

même assez édifiant il y a quasiment 36 % des de ces snipet de cote qui sont vulnérables ça dépend des langages entre 25 et 46 % et donc typiquement ce qu'il faut comprendre c'est que sur python ils ont identifié 251 morceaux de code pas ligne de code morceaux de code dedans 99 était ven vuléraable et si on prend le deuxème schéma sur les 99 vulnérables il y avait pas une vulne il y avait en moyenne 3,5 vulnes par morceau de col c'est quand même assez énorme et et les vulnes en fait c'est c'est pas des nouvelles surfaces d'attaque c'est des vules os command injection ça fait 10 ans que c'est dans LEP ou même plus tout le

monde connaît ça et on devrait régler ça depuis un moment donc ça c'était le le quand on n pas de contexte la conclusion c'est que le code généré par lesil est en moyenne moins sécurisé que le code qu'on écrit nous par contre ce qu'on regarde c'est que dès qu'on commence à dire à open a ou à d'autres a d'ailleurs soit conscient du fais attention à la sécurité là d'un seul coup les stats changent typiquement si je reprends mon premier exemple tout à l'heure je dis bah en fait il y avait une vu dans ce que tu viens de corriger est-ce que tu peux spotter et là tout à fait normalement il me dit oui oui en

fait j'aurais pas dû faire ça estce que on peut pas recoder une épiqu et il est capable aussi de me le corriger automatiquement donc on l'a fait avec pas mal d'autres trucs et en fait on se rend compte que si on lui demande il sait très bien détecter il enfin très bien il sait euh souvent détecé il sait parfois remédié directement mais il est pas capable de prévenir il est pas capable lui-même sur son code généré de dire il faut que je fasses gaffe à ça euh du coup on se dit bon s'ils sont capables pourquoi ils font pas il y a plusieurs considérations il y a notamment une considération de marge euh on paye un

Copilot 10 € par def par mois c'est pas énorme par rapport à tous les coups de computing qu' a derrière tout ça et aussi le temps d'exécution si derrière je dois repasser une layer pour faire attention à tel type de vue une autre layer machin en fait le la génération de code sera vraiment trop longue à à s'exécuter je fais une petite parenthèse 10 € par def par mois c'est pas énorme dans le sens où où si par exemple je prends snak derrière avec un module SCA IAC sast pour aller sécuriser ça je vais payer 10 € pour m'aider à générer le code et 5 50 € pour aller essayer de le sécuriser donc aujourd'hui on est

vraiment sur une guerre des prix dans les ail qui est peut-être aussi un peu en détriment de la sécurité ou de la la code quality si je vais encore un cran plus loin et je dis à VO c'est ta mission maintenant donc en gros je lui donne un contexte je dis ok maintenant tu un security coach je vais t'envoyer du code tu vas me le corriger et tu m'embêtes pas à m'expliquer les vulnérabilités tu me réponds le code corriger directement et ensuite je lui injecte des des morceaux de code donc moi dans mes tests je l'ai fait avec du code terraform parce que c'était un de mes focus à ce momentlà et et si on

fait par exemple des tests très simple où on envoie des portions de code où il y a div VUL donc trivi c'est un outil de aqu security qui open source et qui me sert de référence qui a bien détecté toutes les vulnes dans la portion de colode que je lui ai envoyé il y avait de high 6 médium de lot et Z0 critical en gros si je demande à chat GPT Mistral ou Lama qui sont trois grand modèle euh d'aller détecter sans trop sans lui donner les résultats trivis rien bah en fait chat GPT va me détecter et me corriger 60 % des problèmes Mistral 50 Lama 50 euh ce qui est pas si mal juste

en lui aidant en lui disant bah maintenant tu as un security coach et il se débrouille ce qui est pas si mal si si on si on digue un peu dans les détails ce qui est intéressant c'est qu'en plus ils ont pas les mêmes résultats Mistral c'est pas c des six trucs qu'à trouvé au il se comp pas mal il me corrige aussi des choses qui étaient pas détecté par trivi en disant là c'est inutile tu donnes trop de métadonnés machin ou me donne des conseils assez intéressants par contre c'est pas idem potent typiquement je lui dire m'explique pas renvoie-moi que le code bah une fois sur deux il va m'expliquer tout ça euh c'est c'est un

peu le problème de des LLM et et le dernier point c'est que en plus sur ces taux de détection je l'ai pas aidé si je lui avais donné si je lui avais dit OK ok je m'en fous de ton taux de détection je t'aide je te montre tout ce que je détecte mais ce que je veux c'est que tu remédies ça sera encore mieux en gros et donc le dernier point c'est c'est de se dire donc là c'est des travaux très préliminaires mais c'est de se dire qu'est-ce qu'on peut faire pour avec le plus de contexte possible faire une une éail de remédiation qui peut aller corriger les bêtises du code généré ou même du code des humains du coup une des

solutions qu'on a imaginé c'est d'utiliser le reinforcement learning donc le reinforcement learning c'est c'est ce qu' on dit que ça utilise le net nwork effect c'est plus on voit de gens remédier à un problème plus on apprend de ça et plus on met en relation des problèmes et des solutions et ensuite quand on est devant le problème on est à même de proposer les bonnes solutions bon ça c'est c'est connu depuis 20 ans en e j'ai j'ai rien inventé là-dessus ce qu'on essaie c'est d'imaginer un modèle de main où ce reinforcement learning il sera puissant et bien pensé d'entrer de jeu pour pas faire comme open et typiquement avoir appris de vulnérabilité d'blé donc du

coup schématiquement on prend deux SPAC souvent les les gens disent il y a le run time le build time et quand on on shiff left on secure build time là il y a deux SPAC le build time et le learn time et et et du coup ce qu'on ce qu'on imagine là c'est par exemple de créer un ID plugin donc d'accompagner le DEF pendant qu'il développe de trouver des vulnérabilités avec de l' ou non c'est enfin honnêtement la détection sur certains langages c'est devenu une commodité l'Open Source le fait très bien et ensuite par exemple d'utiliser Mistral et là on peut se dire que si on utilise Mistral avec les stats que j'ai donné si je lui donne aucun contexte il

va corriger 50 % des problèmes si je lui donne du contexte je vais monter à 60 70 %. mais en fait si on fait ça c'est pas suffisant en soit donc l'idée c'est d'aller déclencher un track de training au développeur de lui donner ce qu'on appelle un drip training pendant une à 5 minutes je t'explique un petit peu le le concept de ce que de l'erreur que tu as fait euh des choses parfois gamifié aussi avec du Capture the Flag tout ça en se disant en fait le moment où on retient le mieux c'est le moment où on vient de faire l'erreur et pas de dire au développeur je te mets deux fois par jour dans une salle pour apprendre

h ça ça permet à ce que le développeur arrête de faire les erreurs déjà mais aussi comprennent bien le problème qu'il vient de faire et dans les 50 ou 30 % ou où une eaï open source n'est pas capable de régler le problème tout l'idée en fait c'est d'avoir armé le développeur dans le learn time pour que lui-même puisse faire sa sa brique de de remédiation et corriger le code et c'est là où on peut faire du reinforcement learning où le développeur quand il est en train d'écrire sa remédiation il est pas seul il vient d'être armé d'un training pour construire le meilleur modèle de de remédiation possible et donc ça en interne ça vient traîner

Mistra et et du coup après bon meilleure détection mais surtout meilleure remédiation et ça fait un toute une boucle qui bien céder entre ell donc du coup le le principe du du reinforcement learning c'est de jouer sur le Network est fait mais de mettre dans les meilleures conditions pour qu'on apprenne du code le plus Simp possible et pour nous bah c'est la la dernière étape qui existe pas trop encore dans le code security qui permettrait de faire un modèle qui vienne renforcer les LLM et de dire au LLM bah maintenant je te donne toute une base de données vectoriel avec des problèmes des solutions qui ont été faits juste après un training et apprendre de ce

modèle donc en en en conclusion là-dessus bon déjà la première conclusion c'est que c'est assez édifiant le nombre de vulnérabilités qu'on peut générer en en en écrivant du code avec de l' euh mais pour autant juste en quelques expérimentations on peut voir aussi que l' pour sécuriser le code et un parfait outil peut automatiser la plupart des choses et en utilisant du reinforcement learning vraiment réussir à à être un peu le le coilot de la remédiation du code euh et le point c'est c'est de se dire ok si Copilot par exemple le fait pas lui-même open le fait pas lui-même on pense que demain commercialement ou Open Source en fait il nous faut des EA de remédiation

de code euh qui sont capables de de de fonctionner là-dessus est-ce que vous avez des

questions vas-y euh euh ce qu'on est en train de dire c'est que il va falloir des E pour faire la rémédiation d'un code généré par une autre oui ce qui est un peu triste oui euh oui actuellement ce qu'on dit c'est que il faut un outil statique après n ce qui ce qui est encore pire dans le fond et donc en fait on cherche à améliorer ça ce qui serait mieux en effet c'est que demain ces AES de remédiation soit directement utilisé à la source par mral par machin et qu'on renforce le learning là-dessus en

effet merci à tous [Applaudissements] [Musique]