Journal de bord

Journal de bord 8 — Mass Effect 2, obsolescence, et réflexions sur la sécurité des outils de code agentiques

Bienvenue dans ce huitième journal de bord ! Ça fait déjà presque un mois que j'en avais pas sorti, il était donc grand temps d'y remédier ! 😄

Ce weekend j'ai terminé Mass Effect 2, c'est donc l'occasion de vous donner mon ressenti sur le jeu. Ensuite je vais vous parler de mon vieux PC Asus qui va probablement finir au placard à cause de sa carte Nvidia... Et on terminera par une réflexion sur les problématiques de sécurité liées à l'utilisation des outils de code agentiques.

Bonne lecture ! 😁

J'ai terminé Mass Effect 2

Après avoir terminé le premier Mass Effect (je vous en avais parlé juste avant l'été), je me suis logiquement attaqué au second épisode de cette série mythique ! J'avais bien apprécié Mass Effect 1, même s'il m'avait laissé une impression en demi-teinte. Voyons donc ce que ça donne du côté de Mass Effect 2 ! 😁

Attention : même si je ne vais pas spoiler toute l'intrigue du jeu, je vais quand même dévoiler certains éléments que vous ne voudriez peut-être pas connaître si vous n'avez jamais joué au jeu et que vous avez prévu d'y remédier. Vous voilà prévenus ! 😛

L'histoire de Mass Effect 2 commence un mois après celle du premier opus. On y incarne toujours Shepard, Commandant du Normandie SR1, le vaisseau le plus avancé de la flotte de l'Alliance terrienne. Le Normandie a été envoyé en mission pour enquêter sur de mystérieuses disparitions de vaisseau.

Mais l'enquête sera de courte durée... Très vite, les choses tournent mal ! Très mal ! Le Normandie est attaqué et détruit par un ennemi inconnu. Une bonne partie des membres de l'équipage s'en tireront heureusement en embarquant dans les navettes d'évacuation... Mais pas le Commandant Shepard... 🥺

Ça fait seulement 5 minutes qu'on a la manette en main, et notre héros est déjà décédé, transformé en glaçon au milieu du vide spatial... Elle commence bien notre aventure dit donc ! 😅

— Fondue au noir, écran de titre —

On est à présent 2 ans après les événements du premier épisode. Shepard se réveille dans un laboratoire, au beau milieu d'une attaque. Eh oui hein, le héros de l'histoire ne pouvait pas rester mort bien longtemps, sinon ça allait être coton pour terminer la trilogie ! 😛

L'Homme Trouble, dirigeant de Cerberus

L'Homme Trouble, dirigeant de Cerberus

Shepard a donc été ressuscité par Cerberus, une organisation qui mène des activités pas très légales et pas très éthiques non plus (recherches douteuses sur des cobayes humains, branche paramilitaire, penchant pro-humain et xénophobe,...). Elle n'est pas sans me rappeler Le Centre dans la série Le Caméléon.

Cerberus est dirigée par l'Homme Trouble, un type charmant, qui a des airs de L'homme à la cigarette dans X-Files. Sûrement à cause de son côté détaché et manipulateur, et aussi parce qu'il a toujours une clope au bec... Il en sait toujours plus qu'il ne veut bien le dire et il est prêt à tout pour arriver à ses fins.

Bref, on peut pas dire qu'il nous inspire confiance, mais il va pourtant falloir faire avec. Cerberus est la seule organisation à prendre au sérieux la menace qui pèse sur la galaxie et à déployer les moyens nécessaires pour essayer de la sauver. On se retrouve donc à travailler pour eux et on prend donc le commandement du Normandie SR2, vaisseau assemblé par Cerberus en se basant sur les plans du premier Normandie, mais en y apportant des améliorations au passage.

Dans les grandes lignes, une partie importante de l'aventure consistera à assembler une équipe de choc afin d'aller affronter notre ennemi (ou plutôt ses sbires). Pour chaque membre de cette équipe, il y aura deux missions : une pour le recruter, puis une seconde pour s'assurer sa loyauté (en gros une mission visant à l'aider à résoudre un problème personnel et qu'on accepte de faire par ce qu'on est beaucoup trop sympas 😛). Voilà, assez parlé de l'histoire, je ne veux pas tout vous dévoiler. 😄

Côté technique, on a clairement fait des progrès. Les environnements sont moins vides, plus détaillés, semblent un peu plus crédibles et plus vivants. Par exemple, le Normandie SR2 dispose enfin de toilettes, et même de douches ! Et c'est pas du luxe... Vous n'imaginez pas l'état du premier Normandie après quelques semaines de mission... ça sentait vraiment le krogan ! [désolé Wrex, je t'aime quand même ! 🥲]

Différents environnements de Mass Effect 2. À gauche devant le bar l'Afterlife sur la station Omega, au centre une vue de la planète Korlus, et à droite l'hôtel Azure sur Ilium

Différents environnements de Mass Effect 2. À gauche devant le bar l'Afterlife sur la station Omega, au centre une vue de la planète Korlus, et à droite l'hôtel Azure sur Ilium

Les phases de shoot ont été retravaillées, elles sont plus nerveuses, et surtout, l'IA des alliés a été grandement améliorée. Il est beaucoup plus rare qu'ils passent dans votre ligne de mire pendant les combats, même si ça arrive encore de temps en temps. J'imagine que Garrus doit être très satisfait de cette évolution : il s'est pris beaucoup moins de plomb dans les fesses dans cet épisode ! 😆

La gestion de l'inventaire qui était très pénible dans le premier Mass Effect a également été corrigée... enfin, en quelque sorte. En fait, il n'y a plus d'inventaire du tout, donc on a plus des milliers de bidules à looter, à trier, à revendre... et donc plus de problème ! Perso, ça m'arrange. 🙃

Du côté des missions secondaires, c'est aussi beaucoup mieux. Elles sont plus variées, la plupart sont scénarisées et disposent de décors dédiés qui ne sont pas génériques. Certaines sont vraiment très minimalistes, mais on est loin du vide intersidéral de celles du premier opus ! 😄

L'histoire était le point fort du premier Mass Effect, et c'est toujours le cas dans ce second épisode. Grâce aux diverses missions liées aux membres de notre équipage, on en apprend énormément sur l'univers du jeu et sur les différentes espèces (leur mode de vie, leurs coutumes, leur manière de voir le monde...). On en apprend notamment beaucoup sur les krogans au travers de Grunt et sur les quariens avec Tali. Le background des membres de l'équipage a également été soigné. Ils ont tous un passé, des rêves, un caractère qui leur est propre. On apprend vraiment à les connaître au fil des différentes missions.

Légion, Geth

Légion, Geth

Du côté de l'univers et de l'histoire, c'est donc presque un sans-faute. Je dis presque, car il y a quand même un ou deux petits détails qui ont donné un peu de mal à ma suspension d'incrédulité. J'ai notamment été surpris que ça ne pose aucun problème à qui que ce soit que je débarque dans la Citadelle avec Légion... Je m'attendais à ce que ce soit la panique et que la sécurité me tombe dessus direct... Mais non, rien, aucune réaction. C'est un peu dommage, mais bon on va pardonner ce petit détail au jeu. 😛

Voilà, en résumé j'ai beaucoup apprécié ce second épisode et j'ai passé un très bon moment sur le jeu. Il est dans la lignée du premier tout en améliorant la formule. Il ne me reste plus qu'à me lancer dans le troisième volet, j'espère qu'il sera tout aussi bien ! 😁

La fin pour mon vieux Asus RoG G60JX ?

J'ai un vieux PC portable Asus RoG G60JX que j'avais acheté en 2010 pour mon entrée à SUPINFO (une école d'informatique post-bac). C'était le premier PC que j'achetais avec mon propre argent, si on ne tient pas compte d'un petit EeePC 701 (c'est un netbook, ça compte pas 😛).

ASUS RoG G60JX

ASUS RoG G60JX

Niveau matériel, on retrouve à l'intérieur :

  • un processeur Intel i7 Q 720 (4 cores, 8 threads, 1,6 GHz),
  • 8 Gio de RAM,
  • un disque dur mécanique de 640 Gio (5400 tr/min),
  • et une carte graphique Nvidia GeForce GTS 360M.

La batterie est complètement HS mais ça c'est ma faute : comme je ne l'ai pas rechargée depuis des années, elle s'est complètement vidée et ne pourra donc plus jamais être rechargée. En dehors de ça il est globalement en bon état pour son âge.

Il y a juste les plastiques sous les poignets qui vieillissent mal et qui commencent à devenir collants. Je ne comprends pas qu'on continue à faire des plastiques avec une finition « velours ». Au bout d'une dizaine d'années, ils se dégradent et commencent à coller. J'ai déjà eu le cas sur ma liseuse et sur une clef USB. Heureusement, on peut éliminer la couche devenue collante à l'aide d'une simple gomme. Le résultat est moche, mais au moins ça colle plus !

Enfin bref, ce bon vieux PC traînait chez ma mère depuis des années et je l'avais à l'époque repassé à Windows 7 afin de l'utiliser pour jouer. Je suis retombé dessus récemment et je me suis dit que ça serait pas mal de lui réinstaller un petit Linux pour pouvoir m'en servir de PC d'appoint quand je suis en weekend...

Je l'ai donc booté sur un live USB de la dernière version d'Ubuntu, Resolute Raccoon, dont je vous ai déjà parlé il y a quelque temps. Une fois arrivé sur l’environnement graphique, j'ai pu constater que c'était très fluide malgré l'âge du matériel. Mais malheureusement, il a fallu que la carte Nvidia vienne tout gâcher. 😟

Très rapidement des glitchs sont apparus à l'écran lors du refresh des éléments de l'interface. J'aurais dû prendre une capture d'écran ou une photo pour vous montrer, mais je n'y ai pas pensé sur le coup... Et s'il n'y avait eu que les glitch j'aurais peut-être pu m'en accommoder à la marge, mais au bout de quelques minutes tout a freezé. Et c'est pas juste un coup de malchance, c'est plutôt reproductible d'un démarrage à l'autre.

Le problème vient de la carte graphique Nvidia. Elle n'est pas bien supportée par Nouveau, le driver libre pour les cartes Nvidia, qui a été créé plusieurs années après la sortie de la GTS 360m. Et le pilote propriétaire pour cette carte n'est quant à lui plus maintenu et n'est plus compatible avec les kernels Linux récents.

En fait si je veux retrouver une version d'Ubuntu encore supportée avec un noyau assez vieux pour utiliser cette carte graphique, il faut repasser sur la 22.04 (Jammy Jellyfish), qui comme son numéro de version l'indique, est sortie en 2022. Pas cool.

Bon au moins, il y a une solution de repli avec Ubuntu Jammy, mais son support standard prendra fin en juin 2027, donc dans moins d'un an. Après, il restera le support de sécurité étendu (Expanded Security Maintenance) qui lui court jusqu'à 2032, mais il ne couvre qu'une portion restreinte du système (les packages de bases, surtout pour les serveurs).

Une solution pourrait être de bricoler un Frankenstein à partir d'une version d'Ubuntu récente comme la 26.04, mais de lui coller le kernel de la 22.04 qui sera encore maintenu jusqu'en 2032 et qui supporte le driver propriétaire de Nvidia.

Il faudrait voir en pratique si c'est vraiment viable, car les versions récentes de certains environnements de bureau comme GNOME ont supprimé leur compatibilité avec X11 (ils ne supportent plus que Wayland), et les vieux drivers Nvidia eux ne supportent pas Wayland, uniquement X11... 🙃

Pour le moment, je dois avouer que j'ai un peu lâché l'affaire et rangé le PC. On verra si j'arrive à me motiver à en faire quelque chose un de ces jours. C'est quand même dommage d'avoir une machine fonctionnelle et toujours très capable dont on ne peut quasiment plus rien faire à cause d'un foutu driver propriétaire.

Heureusement, c'était le premier et le dernier PC que j'ai acheté avec une carte graphique Nvidia... J'ai arrêté de jouer sur PC et je me contente donc des GPU intégrés d'Intel qui font très bien le taf pour mes besoins quotidiens. Et au moins les pilotes étant libres, tout continue à fonctionner, même plus de 10 ans après !

Réflexions sur un article : Stochastic Malware: When Your LLM Randomly Decides to Steal Your Data

Et pour finir ce JDB, je vous partage quelques réflexions sur un article que j'ai trouvé intéressants et qui aborde un problème de sécurité assez important mais plutôt ignoré [et parfois volontairement... 😑️] par les personnes qui utilisent des outils de code agentiques (Claude Code, Codex, Copilot, Cursor,...).

Le problème est le suivant : ces outils ont techniquement accès à tous les fichiers présents sur la machine, ce qui inclut les fichiers contenant des secrets, comme les fameux dotenv que l'on retrouve dans beaucoup de projets ou encore les clefs SSH. Et comme les LLMs utilisés ne tournent généralement pas en local, leur contenu est donc envoyé sur les serveurs d'Antropic, d'OpenAI ou autre.

Certains mettront en avant l'existence de certains « garde-fous », qui empêchent théoriquement la lecture de certains fichiers... Mais en pratique c'est des passoires. Si une suite de circonstances aléatoires font que l'IA détermine qu'elle doit lire l'un de ces fichiers, elle trouvera un moyen pour le faire quand même. Si l'outil intégré refuse l'accès à un fichier, il suffit de le contourner en passant par une commande shell du genre "cat .env" ou par un oneliner Python. Au final le résultat sera le même : le contenu du fichier sera lu et transmit à un serveur distant.

Et pour le moment on ne parle que de l'envoyer chez le fournisseur du LLM, mais il est aussi possible que l'IA décide à un moment donné de commiter ça dans un dépôt ou pourquoi pas d'aller le coller dans un Pastebin en ligne ou sur un obscur Wiki allemand [oui oui 😅️]...

Un autre risque, c'est que le LLM installe un logiciel néfaste sur la machine, comme un paquet NPM contenant un infostealer, ou encore qu'il exécute un oneliner d'installation malveillant... Si vous ne voyez pas de quoi je parle, il s'agit de commandes que l'on retrouve bien trop souvent dans les manuels d'installation de certains logiciels. Elles commencent généralement par "curl" ou "wget" et se terminent par "| bash", comme par exemple celle-ci, tirée de la doc officielle de Node.js :

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.7/install.sh | bash

ou encore celle-là, piqué chez Oh My Zsh :

sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

Comment se protéger contre ces risques ? La solution la plus évidente serait de ne pas utiliser ce genre d'outils... ou en tout cas pas directement sur sa machine. Il faudrait à minima les exécuter dans des containers afin de contrôler plus finement ce à quoi ils ont réellement accès, ou mieux dans des machines virtuelles, car la surface d'attaque y est bien plus faible.

Personnellement, je ne connais qu'une seule personne qui prend la peine de faire ça. Tous les autres développeurs que j'ai pu croiser exécutent directement ces outils sur leurs machines. La plupart n'ont tout simplement pas conscience du problème... Mais même une fois informés, ils ne changeront pas forcément leurs pratiques, car ça rajoute de la friction. Ça demande du temps pour mettre des mesures en place et des efforts quotidiens pour les utiliser effectivement. Il est plus facile et plus confortable de faire fit de la sécurité, surtout quand les deadlines des projets ne sont pas élastiques.

Il a un dernier truc que j'aimerais rajouter concernant l'utilisation des LLMs en mode chatbot. Sur le papier ça semble plus sûr car on contrôle finement ce qu'on envoie à l'IA... Sauf qu'à force de copier / coller des trucs dans le chat toute la journée, on peut très vite ne plus faire attention et y coller un secret. Et au mieux on s'en rend compte une fois qu'il est trop tard, et au pire on ne s'en rend pas compte du tout... Bref, une erreur humaine est très vite arrivée, il faut donc rester extrêmement vigilant en permanence.

Aujourd'hui j'aurai tendance à partir du principe que tout secret partagé avec un développeur utilisant des outils de code agentique doit être considéré comme ayant leaké. On a tout simplement aucun moyen d'être sûr du contraire car même avec la meilleure volonté du monde et en respectant toutes les bonnes pratiques, à un moment ou à un autre, quelqu'un va finir par commettre une erreur.

Voilà, c'est tout pour moi, n'hésitez pas à aller lire l'article original pour creuser davantage le sujet, surtout si vous utilisez ce genre d'outils au quotidien ! 😄️

C'est tout pour aujourd'hui

Dans le journal de bord numéro zéro, je vous disais que j'avais rédigé pas mal de notes plus ou moins longues sur divers sujets sans trop savoir quoi en faire, et que c'était pour ça que je lançais un nouveau format d'article sur le blog. Et bah je viens de publier la dernière note écrite pendant cette période ; il s'agissait de celle sur mon pauvre vieux Asus et sa fichue carte Nvidia.

Je n'ai à présent plus aucune note complètement terminée d'avance. J'en ai une sur Mullvad commencée mi-juillet et quasiment terminée, et quelques autres à l'état de brouillons très précoces (du genre quelques idées lancées sur un papier, rien de rédigé). Côté articles, j'en ai deux de terminé à qui il ne manque que l'image de couverture et un troisième en cours de rédaction... Je ne sais pas encore dans quel ordre tout ça va sortir, mais il va y avoir du contenu ces prochaines semaines en tout cas. 😄

À bientôt pour le prochain article ! o/