← L'édition
DevNouveau2 min de lecture

L'attaque Trusting-Trust démontrée sur GNU strip : toute une distribution Linux compromise

Des chercheurs en sécurité ont prouvé qu'une attaque de type Trusting-Trust ne se limite pas aux compilateurs. En altérant simplement l'utilitaire GNU strip dans la chaîne d'amorçage de NixOS, ils ont infecté la quasi-totalité des binaires d'une distribution Linux complète sans modifier le moindre fichier source.

Fil « Extension de l'attaque Ken Thompson Trusting-Trust à l'utilitaire strip sous Linux »

Illustration de l'article — arxiv.org
Image : arxiv.org

L'attaque dite du Trusting-Trust, théorisée en 1984 par Ken Thompson, repose historiquement sur un compilateur altéré : celui-ci insère une porte dérobée (backdoor, un accès non autorisé) dans tous les programmes qu'il compile, tout en réinjectant cette faille dans les futures versions du compilateur lui-même. Jusqu'à présent, cette menace était considérée par la communauté de sécurité comme spécifique aux seuls compilateurs de code source.

Une étude publiée par Julien Malka, Aman Sharma, Martin Monperrus, Stefano Zacchiroli et Théo Zimmermann démontre que cette hypothèse est fausse. Les chercheurs ont réussi à construire une attaque complète de type Trusting-Trust sans altérer le moindre compilateur ni inspecter une seule ligne de code source.

Un utilitaire de binaire comme vecteur d'infection

L'attaque repose entièrement sur GNU strip, un outil de build ordinaire utilisé pour manipuler des fichiers au format ELF (Executable and Linkable Format, le format binaire standard sous Linux) afin de supprimer leurs symboles de débogage et réduire leur taille sur le disque.

# Nettoyage classique des symboles d'un binaire avant distribution
strip --strip-unneeded ./bin/mon-application

Dans le processus d'amorçage (bootstrap, la chaîne de construction initiale à partir de binaires de départ appelés seeds) de la distribution NixOS, les chercheurs ont altéré l'exécutable strip présent dans le seed binaire. La charge utile (payload, le code malveillant) s'est alors propagée d'une génération de strip à la suivante, survivant dans l'environnement standard final même après l'élimination du seed initial de la fermeture de dépendance (dependency closure, le graphe complet des dépendances).

Un système complet compromis à l'insu de la CI

Les tests menés sur une révision réelle du dépôt nixpkgs (le catalogue de paquets de NixOS) ont permis de compiler un installateur graphique complet sans la moindre erreur de build. La quasi-totalité des binaires générés ont été piégés, offrant la possibilité de déclencher des comportements malveillants arbitraires sur le système final.

Cette démonstration bouscule les approches traditionnelles de la sécurité de la chaîne d'approvisionnement logicielle (software supply chain security). Inspecter le code source ou auditer les compilateurs ne suffit plus : les utilitaires de post-traitement binaire manipulés dans les pipelines de CI/CD (Continuous Integration / Continuous Deployment) constituent des cibles tout aussi critiques, rendant la généralisation des builds reproductibles (reproducible builds) plus essentielle que jamais.