Skip to main content
Seb's blog
logo PassionGNU/Linux

news.opensuse.org: Ce que nous devons retenir de la porte dérobée XZ / What we need to take away from the XZ Backdoor

xz-backdoor-supply-chain.png

On a beaucoup écrit sur XZ Backdoor au cours des dernières semaines, il est donc temps de regarder vers l’avenir. Avant de le faire, nous partageons plus de détails sur ce qui s’est passé concernant openSUSE. Pour un aperçu de la manière dont cela a affecté les utilisateurs d’openSUSE, veuillez voir le message précédent.

Dans les coulisses #

Quelques jours avant la divulgation publique de la porte dérobée XZ, l’équipe de sécurité des produits SUSE a eu un indice selon lequel il y avait quelque chose d’étrange dans les versions XZ 5.6.x. Je suis l’employé de SUSE et le packager openSUSE qui mettait à jour et incluait cette version dans openSUSE Tumbleweed, je me suis donc impliqué assez tôt. À ce moment-là, aucun contexte ni aucune information partagée lors de la divulgation publique initiale n’étaient disponibles. Cependant, cet indice était toute l’information dont nous avions besoin. Cela a changé notre façon de considérer un projet open source central et établi. Sans cela, les petites différences étranges dans l’étape de « configuration » du système de construction auraient été facilement ignorées.

Un jour avant la divulgation, jeudi soir, la sécurité des produits SUSE a reçu un rapport plus long et détaillé d’Andres Freund via la liste de divulgation de sécurité des distributions partagées. La liste de distribution est une liste de diffusion cryptée où les distributeurs collaborent et se coordonnent sur la divulgation de problèmes de sécurité. Ce rapport a apporté de nouvelles connaissances selon lesquelles la porte dérobée XZ ciblait spécifiquement OpenSSH, qui est l’une des parties réseau de presque tous les systèmes Linux. Cela a encore accru notre niveau de menace d’être une porte dérobée d’accès à distance et nous a également amené à élargir nos efforts de communication prévus.

L’équipe de sécurité SUSE et moi avons commencé à analyser. La sécurité des produits SUSE est membre de divers forums de sécurité privés, comme la liste des distributions et CERT VINCE et autres, qui nous permettent de coordonner les correctifs entre les fournisseurs de logiciels et de préparer les mises à jour aux dates de divulgation. Avec les premières informations indiquant qu’il y avait quelque chose de suspect, il était relativement facile de trouver des éléments plus suspects sans ordre particulier :

Une enquête plus approfondie a permis de trouver l’ « étape zéro » intégré dans le système de construction et, grâce à cela, nous avons pu franchir les couches d’obscurcissement pour démêler les deuxième et troisième étapes. En quelques minutes, il nous est apparu clairement que des efforts très importants avaient été consacrés à son développement. Ce n’était pas le travail d’un seul développeur par un dimanche après-midi pluvieux. En outre, la deuxième étape a laissé entendre qu’il s’agissait d’une porte dérobée spécifiquement destinée à des environnements spécifiques, aux builds de packages Debian ou RPM utilisant GCC et glibc. Un utilisateur normal construisant à partir des sources, soit à partir de l’archive tar détournée, soit à partir de git n’aurait jamais été affecté. Cela a sonné l’alarme. Ainsi, avant d’aller plus loin dans l’ingénierie inverse, nous avons évalué l’impact.

Depuis un certain temps, openSUSE n’utilise pas XZ pour la compression de nos packages RPM de distribution ; nous sommes passés à Zstd il y a quelque temps. Cependant, XZ est très largement utilisé dans la distribution, entre autres pour décompresser les sources de notre compilateur GCC que nous utilisons pour construire tout le reste de la distribution. Nous avons vérifié et constaté que la version potentiellement malveillante de XZ était utilisée pour créer notre compilateur actif openSUSE GCC, qui est utilisé dans toutes les autres versions de la distribution. Le pire des cas auquel penser ici est que le déballage des sources de construction du compilateur GCC a été modifié par le XZ malveillant et que nous avons un compilateur système qui n’est plus digne de confiance. Bien que nous ayons des vérifications de signature sur les sources (et que nous ayons sécurisé des copies de chaque entrée de source que nous avons utilisée n’importe où dans un magasin de confiance), nous ne vérifions pas si les sources décompressées sont réellement les sources dont la signature a été vérifiée avant le déballage.

Ainsi, même sans plus d’informations sur la porte dérobée, nous avons compris que l’impact dans le pire des cas pourrait être désastreux. Nous avons donc commencé à identifier les projets, produits et distributions concernés. Heureusement, cette liste s’est avérée assez restreinte. Une équipe ad hoc a été constituée pour gérer la suppression de la porte dérobée.

Suppression initiale de la porte dérobée pour nos utilisateurs #

openSUSE Tumbleweed fournit un canal de mise à jour d’urgence que nous pouvons utiliser pour récupérer des régressions fatales dans les instantanés Tumbleweed réguliers. Ces phénomènes sont extrêmement rares grâce à notre pipeline de tests automatisés, mais ils surviennent. Nous avons injecté une rétrogradation de XZ dans ce canal de mise à jour d’urgence et avons commencé à créer une version intermédiaire d’instantané openSUSE dans laquelle la mise à jour malveillante de XZ a été supprimée. Cependant, en raison de la nature inconnue de la porte dérobée obscurcie, nous avions prévu la pire hypothèse. Nous avons commencé à collecter le nombre de packages qui ont été construits et publiés avec la construction du compilateur GCC suspect dans l’environnement de construction. C’était une très longue liste. De plus, comprendre l’inversion du code objet malveillant de la porte dérobée dans Ghidra nous prendrait encore quelques heures. Après une courte synchronisation, nous avons décidé d’opter pour la voie sûre et de jeter tous les paquets construits avec XZ/GCC potentiellement malveillants et avons commencé à les reconstruire tous avec uniquement les paquets provenant d’une sauvegarde sécurisée, pour restaurer l’intégrité de notre distribution le plus rapidement possible. openSUSE teste régulièrement ce “mode bootstrap” dans le cadre du développement de notre distribution et s’appuie sur l’automatisation de la reconstruction fournie par Open Build Service, ce n’était donc pas beaucoup de travail humain. C’était juste beaucoup de charge pour notre cluster de build. Nous avons attendu quelques heures devant nous, ce qui a permis une analyse plus approfondie de la porte dérobée.

Analyse de la porte dérobée #

L’analyse du code objet s’est avérée prendre beaucoup de temps. Même si la deuxième étape qui vérifiait les bonnes conditions de build (s’agit-il d’une version de distribution, dispose-t-elle de l’environnement de compilateur attendu, etc.) était facile à décoder et nous a aidé à comprendre l’impact potentiel, au départ, nous ne savions pas vraiment quoi. le code objet obscurci qui a été injecté lors de la construction fonctionnait.

En utilisant Ghidra, nous avons pu récupérer du code C quelque peu lisible à partir du code machine injecté, nous avons donc commencé à essayer de déchiffrer le puzzle. Repérer le point d’entrée dans la fonction _get_cpuid qui faisait partie de la gestion IFUNC a été l’une des premières découvertes. Le simple fait de rechercher cette combinaison de mots sur Google a conduit à une discussion en amont, à la désactivation d’ifunc dans le projet oss fuzz et à un rapport de bug intéressant dans la communauté Fedora où des problèmes de Valgrind ont été signalés avec XZ 5.6.0 et apparemment, l’amont les corrigeait en mettant à jour. des choses sans rapport, y compris “les fichiers de test” dans le référentiel. Il y avait non seulement des commits dans le dépôt, mais aussi une communication trompeuse autour du problème directement lié à ces commits, ce qui montrait évident que nous ne trouvions pas un accident malheureux provoqué par un responsable innocent qui aurait pu être piraté, mais une action planifiée de la part du responsable actuel, responsable en amont. Juste au cas où les sonnettes d’alarme ne seraient pas déjà assez fortes, cela a doublé leur niveau sonore.

Préparation de la divulgation publique #

En combinant tout ce que nous avons appris jusqu’à présent, le tableau est devenu plus clair. Quelqu’un avait passé des années de préparation à préparer le terrain, à se bâtir une bonne réputation de mainteneur, à reprendre le projet, puis à choisir un moment qui était une fenêtre critique pour plusieurs projets de distribution et également au milieu du Nouvel An lunaire. comme d’autres jours fériés pour publier une nouvelle version avec de nouvelles fonctionnalités et une porte dérobée obscurcie qui a été bien conçue pour cibler uniquement des distributions spécifiques, à savoir celles utilisant GCC, Binutils, Glibc avec RPM ou les processus de construction Debian sur x86_64.

En gardant tout cela à l’esprit, nous avons réalisé que ce sujet allait faire l’objet d’une grande couverture publique. Cela fera la une des journaux pendant des jours, voire des semaines. Nous avons donc lancé un nouveau chantier pour nous y préparer avec les équipes de communication.

Divulgation publique #

Au moment de la divulgation publique, tous les axes de travail étaient déjà terminés. Nous avons identifié la liste des produits concernés et avons déjà publié toutes les mises à jour pour tous les produits concernés. La communication était prête à être mise en ligne et envoyée aux parties concernées. Tout cela a été possible parce que de nombreuses personnes se sont surpassées, ont mis tout le reste de côté pour réagir en temps opportun et avec beaucoup d’engagement pour s’assurer que nous n’avons rien manqué ou négligé ; tout cela alors qu’un long week-end férié avait déjà commencé. Félicitations à tous ceux qui ont travaillé 24 heures sur 24 pour préparer cela.

Héros de l’histoire #

Si rien de pire ne s’est produit, c’est uniquement grâce à Andres Freund, un développeur de la communauté PostgreSQL, qui n’a pas ignoré une étrange régression des performances des connexions SSH sur son installation instable Debian récemment mise à niveau. Un autre témoignage selon lequel ne pas abandonner quelque chose que tout le monde aurait probablement ignoré au cours des mois ou des années à venir est ce qui fait d’un héros un héros.

Toutefois, s’appuyer sur des héros n’est pas une stratégie durable et fiable. Donc, pour l’avenir, nous devons tous tirer les leçons de ce qui s’est passé et devenir une grande équipe de petits héros.

TLDR de ce qui s’est passé #

Les distributions Linux ont été utilisées à mauvais escient pour offrir une porte dérobée à leurs utilisateurs. Le but exact de la porte dérobée reste encore une spéculation. Il peut s’agir d’un individu souhaitant vendre l’accès à une puissance de calcul abondante via des machines virtuelles hébergées dans un cloud public et dotées d’un port SSH vulnérable ouvert au public. C’est là une extrémité plutôt improbable, mais toujours possible, du spectre. L’autre extrémité du spectre est une entreprise qui vend des portes dérobées à des acteurs étatiques qui les utilisent pour accéder à distance et secrètement à n’importe quelle machine Linux. Même si des erreurs ont été commises, cet objectif a presque été atteint. Où est la vérité ? Pour cela, d’autres preuves doivent être identifiées et analysées.

Il est temps d’attendre #

Après cet examen attentif des coulisses de ce qui s’est passé fin mars, le reste de cet article passe à l’avenir.

Loi Linus et les distributions #

Avec suffisamment de globes oculaires, tous les insectes sont superficiels”. Dans les communautés open source, cela est souvent cité comme une raison pour laquelle on peut faire confiance à l’open source. Pour les projets open source qui attirent suffisamment l’attention de contributeurs suffisamment qualifiés, cette « loi » a probablement au moins un certain poids. Cependant, Heartbleed (Saignement de cœur – traduction ?–) nous a appris par exemple que ces conditions ne sont pas universellement remplies. Il existe de nombreux projets qui sont absolument essentiels et pourtant sont considérés comme ennuyeux et ne parviennent pas à attirer beaucoup de responsables ou de contributeurs, et ceux qui participent au projet sont déjà ensevelis sous une pile de travail et ne peuvent pas vraiment consacrer d’efforts significatifs à la montée en puissance. de nouveaux venus.

La porte dérobée XZ a été conçue pour cibler uniquement les distributions. D’abord, par les pré-vérifications que la porte dérobée exécutait avant son déploiement, mais aussi parce que les conditions nécessaires à l’implantation n’existaient qu’en aval dans ces distributions. Debian, ainsi que les autres distributions concernées comme openSUSE, contiennent une quantité importante de correctifs uniquement en aval pour des projets open source essentiels, comme dans ce cas OpenSSH. Avec le recul, cela devrait être un autre apprentissage au niveau Heartbleed pour le travail des distributions. Ces correctifs constituent les étapes essentielles pour intégrer la porte dérobée et ne font pas l’objet de l’examen minutieux qu’ils auraient probablement reçu de la part des responsables en amont respectifs. Que vous fassiez confiance ou non à la loi Linus, il n’a même pas eu l’occasion d’intervenir ici. L’amont n’a pas échoué sur les utilisateurs, les distributions ont échoué sur l’amont et leurs utilisateurs ici.

Open source et leurs communautés #

Être capable d’inspecter le code source des logiciels open source donne à la communauté un avantage imbattable par rapport aux alternatives propriétaires à fournisseur unique. Cependant, l’audit du code source prend beaucoup de temps et nécessite souvent des experts en domaine et en sécurité très expérimentés. Les distributions commerciales devraient jouer et jouent un rôle important à cet égard ; pourtant, ils ne l’ont pas identifié. Le projet XZ était en ce sens l’angle mort idéal quant à la manière dont les efforts sont généralement alloués aux audits de sécurité. Très profondément imbriqué et important pour chaque distribution pour des raisons non évidentes, et dans l’état d’un seul responsable et de très peu de contributeurs ou de réviseurs depuis des années. Ce n’est pas le nouveau projet open source brillant natif du cloud ou autrement sophistiqué qui attire des milliers de développeurs ou de chercheurs en sécurité, et pourtant il est tout aussi important pour l’intégrité et la sécurité de l’informatique moderne. S’il y a quelque chose à apprendre ici, c’est que les critères de sélection sur lesquels se concentrer doivent être ajustés en fonction de ces apprentissages.

Par ailleurs, d’autres ont déjà souligné que le vecteur d’attaque initial n’était pas technique. Ce n’était pas une archive tar archaïque. La véritable attaque initiale était une ingénierie sociale et utilisait un comportement toxique dans les communautés. Ceci est réel et n’affecte pas seulement dans ce cas les responsables existants des projets open source. De nombreuses histoires ont été racontées dans lesquelles le stress ou l’épuisement professionnel des responsables étaient liés à des participants toxiques dans les communautés du projet. Même si je pense que les distributions ne font pas partie de ces activités, nous ne sommes pas conçus pour empêcher que ces choses se produisent. Les développeurs de la distribution sont concentrés sur leurs problématiques et leurs utilisateurs et risquent, du fait de leur temps limité, de négliger les communautés open source (en amont). C’est une autre chose que nous devons garder à l’esprit.

Des initiatives telles que CHAOSS et Open Source Security Foundation ont été fondées car sinon, ces situations seraient trop faciles à ignorer. Ils fournissent un service essentiel dans l’analyse du « facteur bus » ou du « facteur de collusion » quant au nombre d’acteurs nécessaires pour renverser un projet et permettent ainsi à d’autres de se concentrer sur l’orientation de l’aide là où elle compte le plus.

Le coût de la liberté #

Le FLOSS n’est pas une question de coût, ni d’être libre d’utilisation, mais de liberté d’inspecter et de (ré)utiliser. Quel est le prix de cette liberté ? Dans le monde propriétaire, les logiciels sont payants. En open source, cette liberté doit recevoir la reconnaissance qu’elle mérite et doit être valorisée. Lorsque quelqu’un qualifie la porte dérobée XZ d’incident de sécurité de la chaîne d’approvisionnement logicielle, ce n’est pas une image complète. Une chaîne d’approvisionnement en logiciels serait l’endroit où il y a un fournisseur à une extrémité. Mais les projets et les communautés open source ne sont pas aujourd’hui des fournisseurs. Ils n’ont aucun contrat juridiquement contraignant avec aucun de leurs consommateurs et aucun échange d’argent n’est impliqué. Il existe une communauté, de taille variable, qui contribue et aide, soit en tant que bénévoles, soit en tant que travailleurs rémunérés. La plupart des projets n’en reçoivent pas suffisamment.

En guise de réflexion ouverte : les distributeurs devraient-ils activement développer et gérer leur chaîne d’approvisionnement et traiter “leurs fournisseurs” comme de véritables fournisseurs avec des termes et conditions mutuels juridiquement contraignants et des compensations convenues ?

Le Secure Web of Trust est la nouvelle sécurité de la chaîne d’approvisionnement #

Dans cet incident particulier, des archives tar signées ont été utilisées pour publier le lanceur de la porte dérobée. Beaucoup de choses ont été dites à ce sujet. Nous devons réaliser qu’il s’agit d’une distraction. Un piège. En termes de taille de code, 99,9 % de la porte dérobée se trouvait dans le référentiel de code source. Le lanceur dans l’archive tar devait limiter l’exposition de la porte dérobée aux seules victimes prévues, techniquement inutiles pour quoi que ce soit ou par quoi que ce soit. Il aurait été tout aussi facile à intégrer et tout aussi difficile à repérer, le reste des 0,1 % étant également engagé dans le référentiel de code du projet, juste d’une manière légèrement différente.

Pour la plupart des autres scénarios d’attaque imaginables, les artefacts de version signée offrent des qualités importantes. Ils répondent à l’attente d’expédier uniquement ce qui a été jugé prêt à être expédié. Ils fournissent une chaîne vérifiable de manière indépendante jusqu’à l’origine (le « Fournisseur »). Cependant, chaque distribution commence par cette première partie vérifiable de la chaîne, puis s’y ajoute. Souvent (ou presque toujours) avec un moyen transparent de vérifier également ces changements (sous la forme de procédures conformes au SLSA), le tout de manière isolée. Dans quelle mesure ces chaînes disjointes sont-elles fiables ? Actuellement, les distributions réutilisent occasionnellement des correctifs identiques ou similaires en plus des versions de projet en amont, mais sinon, la plupart du temps, elles fonctionnent de manière isolée et ne collaborent que rarement activement. L’élément essentiel du correctif en aval qui a activé la porte dérobée existait depuis près de 10 ans dans les distributions, mais n’a pas encore été vu en amont.

Nous reconnaissons que la porte dérobée du XZ est intelligemment construite. Pourtant, son exécution comportait des défauts surprenants. Quiconque souhaite intégrer d’autres portes dérobées a tiré les leçons de la large couverture publique de tout ce qui n’a pas fonctionné. Ces erreurs ont été signalées, publiées et tirées des leçons. Nous avons donné aux acteurs derrière cette porte dérobée une formation gratuite pour de futures attaques. Il est temps que les distributions en tirent également des leçons et suivent également des cours de formation. Nous devons collaborer activement et construire un réseau de confiance solide et fiable avec les projets open source et entre nous pour être prêts à relever les inévitables défis futurs à venir. Construisons ensemble un réseau de confiance sécurisé !

Commencer la discussion: Venez écrire un commentaire dans le forum.