Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierMiniMachines.net

La menace XZ ou comment le ciel a failli tomber sur nos têtes

2 avril 2024 à 09:53

Minimachines.net en partenariat avec TopAchat.com

Asseyez vous confortablement, prenez une boisson chaude et fermez vos réseaux sociaux. Il y a quelques jours, dans l’indifférence générale du grand public, un internaute découvre qu’une des brique logicielle de la sécurisation des données du web mondial est infectée : XZ. La grande majorité des sites web auraient pu être gravement menacés par une backdoor, une porte d’entrée cachée, qui aurait pu servir à injecter des logiciels espions, bloquer les sites, lire le données transférées ou détruire purement et simplement ces données.

L’histoire de cette infection XZ n’est pas forcément très complexe mais elle demande de saisir quelques éléments importants pour en mesurer la gravité. C’est une excellente parabole au passage sur la manière dont est gérée la plateforme internet aujourd’hui.

Pour bien comprendre ce qu’il s’est passé avec XZ, il faut commencer par le comprendre ce qu’est XZ. Il s’agit d’un composant logiciel utilisé par OpenSSH sur certains systèmes Linux. OpenSSH qui n’est rien d’autre qu’un des outils les plus massivement employés dans la sécurisation des connexion internet. C’est avec OpenSSH que de nombreux gestionnaires de serveurs pilotent leurs machines à distance. Vous savez que les serveurs, les ordinateurs qui gèrent les données des sites web que vous utilisez au quotidien, sont regroupés dans des endroits spécialisés. Des bien nommées « salles serveur » maintenues par des hébergeurs qui louent leurs machines. On utilise donc OpenSSH comme une passerelle de communication pour prendre la main sur une de ces machines à distance. Comme si on était devant en utilisant son clavier et son écran et un « tunnel » sécurisé et chiffré pour  ses données et éviter toute intrusion. OpenSSH est également intégré par défaut dans une grande majorité de distributions Linux.

XZ est une petite brique de OpenSSH, un élément qui sert à gérer la compression des données de manière sécurisée. OpenSSH ayant été construit en assemblant divers éléments regroupés ensemble dans une suite logicielle. En installant OpenSSH (ou en utilisant un système Linux intégrant OpenSSH), on dispose d’un ensemble d’outils pour communiquer de manière sécurisée avec un autre réseau distant. XZ a été infecté par une Backdoor mettant en péril la très très grande majorité des liaisons sécurisées de la planète web. Voilà, c’est fini pour les présentations, passons à l’histoire.

 

XZ, un développement amateur sur… 22 ans

Le « coupable » est donc XZ. Ou plutôt un programmeur derrière XZ. Et c’est là que cela commence à devenir intéressant. OpenSSH c’est une tour de Jenga, vous savez ces petits blocs de bois empilés les uns sur les autres qui forment un ensemble cohérent et structuré. Et le jeu consiste à en retirer des morceaux tout en faisant en sorte que la tour tienne toujours debout. XZ est un des blocs de bois de la tour, un de ceux qui tient bon malgré un parcours assez chaotique.

Parce que XZ a été développé et maintenu par une seule personne. Lasse Collin, un développeur qui lance ce projet de compression de données sécurisé en 2000, tout seul et de manière totalement désintéressée. Il travaille dessus en le mettant à jour, l’améliorant, le faisant évoluer tout aussi bénévolement pendant deux décennies. Vous avez bien lu, une partie de la sécurité du web mondial, le truc qui permet de piloter des ordinateurs à distance de manière fiable, tient en partie au travail d’un unique et obscur bénévole sur son temps libre. Si il doit y avoir un côté grisant à se sentir partie d’un morceau du pilier qu’est OpenSSH mais aussi de milliers d’autres projets qui utilisent cette ressource de compression. De tenir à bout de bras une telle responsabilité. Je ne doute pas une seule seconde qu’il doit y avoir un côté usant également. Et, en juin 2022, Lasse Collin craque. Il annonce dans l’email ci-dessus qu’il a besoin d’aide pour continuer à s’occuper de XZ. Il est usé. Il annonce ne plus avoir l’énergie pour gérer cette brique d’OpenSSH. Vous imaginez vos Week-Ends, vacances, soirées et tout moment de la journée avec une sorte d’astreinte permanente en cas de pépin pendant des dizaines d’années ? De manière bénévole ? Dans l’ombre et en gérant sa vie personnelle et professionnelle en parallèle ? Lasse Collin est exténué et il le fait savoir avec cet email. 

La communauté Open-Source est grande et pleine de talents. Son appel ne reste pas lettre morte et un volontaire se présente alors pour venir reprendre le flambeau. Son pseudo/nom est Jia Tan et si on peut s’interroger sur la motivation d’une personne à s’intéresser bénévolement à une telle « galère » il ne faut pas oublier les défis qu’elle représente. Outre le côté très motivant de reprendre un tel élément de la tour Jenga qu’est OpenSSH pour améliorer un éventuel CV. Il y a un énorme défi intellectuel à se mesurer avec ce genre de projet.

Jia Tan semble être la personne de la situation. Il n’est pas un « vieux » programmeur avec un long CV public mais semble motivé. Son compte GitHub1 a été ouvert en 2021 seulement et rien n’a été publié dessus. Mais il dialogue avec Lasse et en juin 2022, il publie sa première participation au projet XZ sous le pseudo JiaT75. Début 2023, il prend du galon et teste des nouveautés qu’il apporte lui même au code de XZ. Relâchant la pression sur son mainteneur principal. Peu à peu, il fait « ce qu’il veut » de XZ pendant que Lasse Collin s’efface et prend du repos. Plus personne ne vérifie le code en amont avant que cela soit implémenté dans XZ en général. Et donc personne ne contrôle ce qui a, petit à petit, basculé dans la « suite » OpenSSH.

En mars 2023, un changement important est fait, l’ancien email de contact du projet passe de Lasse à Jia. Désormais les requêtes, bugs et autres questions seront remontés directement vers lui. Le flambeau est passé. Plus tard dans l’année les choses avancent dans l’ombre. Des éléments sont modifiés dans le code de manière à rendre opaques de futures manipulations, des fichiers dont la vocation n’a plus rien à voir avec l’objectif de XZ sont ajoutés. Ils servent à préparer quelque chose mais cela reste totalement sous le radar. 

XZ infection

Cliquez pour agrandir : image de @fr0gger

En février 2024, avec des stratagèmes techniques élaborés2, Jia Tan implante dans le code de XZ une porte dérobée permettant de trouer la sécurité d’OpenSSH. Les fichiers sont cachés et chiffrés. Ils sont très difficiles à débusquer car ils fonctionnent comme un poison dont on obtiendrait les effets qu’en mélangeant deux éléments à la préparation. A l’état natif, dans le code source de XZ, ils sont inoffensifs. Ils ont été ajoutés petit à petit au code dans la durée de mise à jour en mise à jour.

Pour que personne ne se rende compte du changement, puisque le code est open source et publié sur Github, la méthode employée se doit d’être d’une discrétion absolue. Ce n’est pas tous les matins qu’un programmeur émérite se lève en se disant « Tiens si j’allais auditer du code OpenSource !? » mais il suffirait qu’un curieux se penche sur le code pour que tout le plan tombe à l’eau. Autant utiliser des subtilités techniques. Le code de XZ est donc totalement propre. Il ne s’infecte que lorsqu’il est mis en place sur un serveur. XZ va alors piocher dans des fichiers annexes et se modifier pour devenir dangereux une fois en place. Vous pouvez analyser XZ de fond en comble sans rien trouver mais une fois intégré sur une machine dans OpenSSH, XZ devient la porte d’entrée du pirate. Mieux encore, le code malicieux est prévu pour être éventuellement mis à jour. Le ver est alors dans le fruit.

Si on regarde en arrière, on a donc un internaute sous le pseudo de Jia Tan qui reprend le travail de bénévole d’un autre programmeur au bout du rouleau pour maintenir un engrenage d’un des éléments de sécurité les plus importants du web mondial. Cela sans aucun autre contrôle puisque tout le monde travaille de manière décentralisée et de son propre chef. Pendant des mois, voir des années, Jia ne fait rien d’autre que ce qu’il s’était plus ou moins engagé à faire. Maintenir XZ. Il ne gagne pas d’argent, il travaille gratuitement et prépare son coup. Il semble peu probable que Jia soit un vrai nom et une vraie personne. Et c’est encore pire.

Le nom Jia Tan semble correspondre à un internaute d’origine Asiatique. Mais plusieurs experts ont noté que les fuseaux horaires de ses interventions sur le code ne collaient pas avec ceux de cette région du globe. Ils semblent plutôt viser des pays d’Europe de l’Est. On aurait voulu forger un pseudo à consonnance asiatique pour cacher un travail effectué par un groupe mafieux des pays de l’Est que l’on n’aurait pas fait autrement. Car il faut des ressources pour préparer une opération dormante sur plusieurs années. Si les intentions d’un Jia Tan étaient de simplement « faire un coup » rapide pour se faire de l’argent, il y a bien plus simple que cette opération XZ. Deux ans et demi de travail pour capter l’attention du programmeur en chef avec un compte dormant, reprendre le flambeau et intégrer un code malicieux, ce n’est pas un projet de « pirate du dimanche ». C’est une opération commanditée par un structure beaucoup plus vaste. Soit un groupe mafieux, soit un état, soit l’un employé par l’autre.

La découverte du problème XZ

Comment cette faille a-t-elle été découverte est un miracle. OpenSSH est utilisé en permanence à travers le globe, les banques, sites de eCommerce, organismes publics, armées et autres utilisateurs privés comme public emploient ce système en permanence. Et malgré cela, la faille  a été découverte par « hasard » via un développeur. Si le web est gigantesque et utilisé par des milliards d’individus, le nombre d’internautes capables de trouver cette faille XZ est évidemment beaucoup plus restreint. Et, sur le total d’utilisateurs du web, un seul a su la déceler : Andres Freund.

Andres est un salarié de Microsoft, il est développeur évidemment, et c’est quelqu’un de vraisemblablement très attentif. Il travaille à l’amélioration d’un logiciel et effectue des tests variés pour cela. En faisant une mise à jour de OpenSSH – elles sont régulières – il note que sa connexion sécurisée est plus lente qu’avant. Alors pas vraiment beaucoup plus lente mais Andres est quelqu’un d’attentif et il a les outils pour le remarquer. Avant la mise à jour, la connexion sécurisée était 500 millisecondes plus rapide. Cette évolution vers la lenteur le surprend et il cherche à savoir ce qu’il se passe.

En analysant méticuleusement OpenSSH, il découvre que XZ a été modifié et qu’il contient désormais la fameuse porte dérobée mis en place par « Jia »3. Devant l’ampleur du problème, il rédige d’abord un message d’alerte à la communauté sur OpenWall qui sert à alerter les divers responsables réseau et webmestres du monde entier. Ce type de message d’alerte critique fait vite le tour du monde et des mesures de sécurité sont immédiatement prises.

Deux versions de XZ sont concernées, la 5.6.0 et la 5.6.1. Et elles ne sont pas déployées en masse. Les responsables réseaux prenant en général le temps de vérifier le bon fonctionnement des mises à jour avant de basculer les machines de production. Cette mise à jour de février n’a pas été énormément installée.  « Jia » comptait probablement sur une dissémination plus ample avant de passer à l’attaque. Andres publie également sa découverte sur Mastodon. Github qui héberge le code de XZ le désactive très rapidement pour éviter qu’il ne soit exploité ou installé inopinément.

Le résultat de cette découverte évite donc le pire, les serveurs qui avaient basculé vers les dernières versions de XZ rétropédalent. Les particuliers sous une distribution Linux infectée font un retour en arrière et tout rentre dans l’ordre… On l’espère tout du moins.

Les leçons à retenir de cette histoire XZ

La première leçon est plutôt un constat. Celui d’un web mondial qui tient sur les épaules de particuliers. Quand je parle de web mondial, je ne plaisante pas. En installant une porte dérobée dans OpenSSH, les personnes derrière « Jia » avaient une arme logicielle terrifiante. Outre la possibilité de récupérer des données évidemment , il y a le risque de faire tomber des serveurs en cascade. Imaginez si plus aucun système bancaire, ferroviaire ou de santé ne fonctionnaient en même temps. Si des machines protégeant des intérêt nationaux comme de la production d’Energie ou l’armée étaient inopérantes. Si tous les hopitaux de France étaient sous le  coup d’un Ransomware4.

Ce scénario est catastrophique et il est totalement plausible si l’objectif du groupe derrière « Jia » n’est pas l’argent mais plutôt à visée politique. La déstabilisation d’un pays est très facile avec une faille de cette ampleur.

Ce qui est ahurissant, c’est de se dire que la responsabilité de OpenSSH est portée par de simples particuliers. Des personnes comme Lasse Collin qui porte pendant 22 ans XZ, tout seul et sans y gagner un centime, alors que son code sert à des millions d’entreprises, établissement financiers, états et autres. Je ne pense pas que Lasse ait jamais demandé un salaire pour son travail mais cela semblerait logique qu’il soit en partie rétribué. Que les organismes qui utilisent des outils Linux mettent en pace un système de fondation permettant de maintenir les projets ne serait-ce que pour les sécuriser. Si Andres Freund n’avait pas perçu cette différence d’une demie seconde et fait le rapprochement de la mise à jour d’OpenSSH, cela aurait été un massacre. Et pourtant XZ a passé la main de son développement d’un internaute à un l’autre sans même connaitre son identité.

Andres Freund explique avoir eu énormément de chance de trouver cette Backdoor sur Mastodon.

Je ne suis pas sûr que les développeurs d’OpenSSH ou les programmeurs du monde des logiciels libres en général aient envie de devenir salariés d’une ONG globale travaillant au maintien de leur code. Je pense que beaucoup sont bien dans la situation actuelle que représente leur statut de développeurs libres. Mais il serait peut être prudent de constituer un moyen de pouvoir venir en aide ponctuellement à certains d’entre eux. Pour éviter qu’ils ne craquent comme Lasse Collin, qu’ils ne passent la main à un compte qui n’a eu à présenter aucune pièce d’identité pour devenir le rouage principal d’un élément aussi critique. Pour que l’audit des codes employés par tous les services d’assurance ou d’analyse médicale du monde soit fait régulièrement par des experts et non pas au petit bonheur en comptant sur la chance d’un programmeur attentif.

Avoir été à deux doigts d’infecter le web mondial, de récupérer toutes les données et même d’attaquer les smartphones, objets connectés et autres machines du genre, devrait faire réfléchir le monde entier sur le fonctionnement actuel du web. Le célèbre dessin de XKCD ci-dessus n’est pas neuf mais il illustre bien la situation. Toute l’infrastructure moderne du web ne tient en équilibre uniquement parce qu’un internaute le maintient seul, gratuitement et sans même un seul coup de projecteur, son bout de code dans son coin sur son temps libre. Le « gag » de cette image parle d’un internaute lambda qui ferait cela depuis 2003… La réalité c’est que Lasse Collin l’a fait pour XZ de 2000 à 2022… La réalité est plus crue que la plaisanterie et pourtant rien n’a jamais bougé.

Si cela ne vous fait pas peur, imaginez votre travail et votre vie demain si le web était par terre. Et maintenant imaginez combien d’autres pièces de ce Jenga moderne sont dans la même situation de précarité que XZ. Saisissez bien qu’une nouvelle tentative de ce genre passera par la case optimisation du code afin que ces 500 millisecondes soient ramenées au minimum également. Rendant l’acuité d’un analyste curieux inopérante. Imagines tout cela et faites de beaux rêves.

On me signale cet article de ArsTechnica qui entre dans les détails techniques de l’opération si cela vous intéresse.

Sources : 


La menace XZ ou comment le ciel a failli tomber sur nos têtes © MiniMachines.net. 2024.

❌
❌