(Open Source) Software Supply Chain (VT)
(Open Source) Software Supply Chain
Lavigne Joseph (INFO5 à Polytech Grenoble) : prénom POINT nom AT etu.univ-grenoble-alpes.fr
Benhamed Abdelhakim (INFO5 à Polytech Grenoble) : prénom POINT nom AT etu.univ-grenoble-alpes.fr
- Résumé (Français) :
Dans ce rapport, vous trouverez l’explication des software supply chain utilisés par beaucoup de logiciels open-source. Le but de cette méthode est de programmer de manière sécurisée sans bug ni faille dans le code final que l’utilisateur installera sur sa machine. Cette méthode de programmation possède plusieurs acteurs qui doivent se coordonner afin de ne pas casser cette chaîne. Cette méthode possède des enjeux de sécurité conséquents afin de ne pas avoir de faille de sécurité importante. Dans ce rapport, vous trouverez aussi les avantages de cette méthode. Et pour finir à la fin du rapport, vous trouverez un exemple de faille introduite par le passé dans un logiciel open-source utilisé par des millions d’ordinateur, le logiciel XZ.
- Summary (English) :
In this report, you will find an explanation of the software supply chain used by many open-source programs. The goal of this method is to program securely, without any bugs or breach in the final code that users install on their machines. This programming method involves several actors who must coordinate their efforts to avoid breaking the chain. This method has significant security implications, so as to avoid any major security loopholes. In this report, you will also find the advantages of this method. And finally, at the end of the report, you will see an example of a breach introduced in the past in open-source software used by millions of computers, the XZ software.
I ) Définition
Pour bien comprendre les enjeux de cette méthode de réalisation de logicielle, il faut d’abord se référer à sa définition. D’après wikipedia , voici la définition d’une software supply chain : “Software Supply Chain Security ou SSCS est une approche holistique pour sécuriser l’ensemble du processus impliqué dans la création et le déploiement de logiciels. Couvrant chaque étape du cycle de vie du développement logiciel (SDL), il garantit l’intégrité, l’authenticité et la fiabilité des composants logiciels, du codage au déploiement.”. Avec cette définition nous comprenons que le but premier de cette méthode est de rendre fiable le développement d’un programme informatique.
Pour cela, il a quatres acteurs qui sont dans l’ordre les bibliothèques et frameworks appelés des dépendances, les IDE et systèmes de contrôle de version (comme git) dans la catégories outils de développements, les gestionnaires de code (comme npm, pip, Maven) et enfin les sources de distribution comme Docker Hub ou GitHub. Chacun de ces acteurs possède un rôle majeur, ce qui signifie que si un des acteurs n’est plus dans la chaîne, celle-ci s’écroule et ne peut plus garantir la fiabilité et l’authenticité du logiciel. En effet, chaque acteur est responsable de ce qui se passe dans la chaîne, et chaque acteur fait confiance aux autres.
Évoquons les rôles de chacun des acteurs. Premièrement, les bibliothèques et frameworks tiers se doivent de rester à jour contre les failles de sécurité et se doivent de chercher leur propre vulnérabilité afin de ne pas compromettre l’ensemble de la chaîne. Deuxièmement, les outils de développement doivent garantir les signatures de code pour éviter l’introduction de code malveillant. Troisièmement, les gestionnaires de code doivent assurer l’intégrité des paquets envoyés et limiter les dépendances utiles. Dernièrement, les sources de distribution doivent garantir l’accessibilité du code aux membres autorisés mais aussi scanner le code afin de vérifier qu’il ne possède pas de failles connues. Après avoir vu les rôles de chacun, nous pouvons comprendre les défis et enjeux de cette méthode.
2) Défis et enjeux
De nos jours, de très nombreux utilisateurs utilisent des bibliothèques populaires, elles aussi open source, le risque est que si une de ces bibliothèques possède une faille de sécurité alors le logiciel qui utilise celle-ci se retrouve également avec une faille pouvant être exploitée par des attaquants. Il y a donc un enjeu de sécurité très important dans les logiciels open sources. Cet enjeu est lié à la gestion des bibliothèques qui peut être induit par exemple par des dépendances transitives qui sont des dépendances de dépendances. Cela veut dire que parfois en utilisant une bibliothèque, nous ne savons même pas que celle-ci utilise une autre bibliothèque qui peut parfois avoir des failles. A cause de cela, il peut être difficile de savoir les dépendances complètes d’un logiciel, le choix des bibliothèques et la recherche des dépendances transitives sont donc très importants afin de comprendre toutes les utilisations d’un logiciel afin de savoir si celui-ci peut avoir des failles ou non.
Dans cette idée, il existe quelques solutions à ce problème. Première solution, éviter l’utilisation de bibliothèques, celle-ci est envisageable mais devient complexe dans les gros projets, le but de la software supply chain est d’éviter de réinventer la roue, surtout si c’est pour y apporter des failles et des bugs. Dans la même idée, il est nécessaire d’éviter d’inclure des bibliothèques inutiles ou rarement utilisées, sauf si celles-ci sont indispensables au bon fonctionnement du projet car moins de dépendances signifient moins de failles potentielles. Quand cela est possible, la dernière solution est de choisir des bibliothèques plus récentes et toujours maintenues. En effet, si une faille est détectée sur une bibliothèque toujours maintenue alors celle-ci sera rapidement corrigée alors que sur une qui ne l’est plus il est possible que la brèche ne soit jamais corrigée. L’utilisation de bibliothèques toujours d’actualité est un bonus non négligeable.
3) Avantages de l’open source dans la supply chain
Le premier avantage de l’open source est la sécurité. Bien que les problèmes de sécurité restent possibles, ils sont largement diminués par la transparence totale offerte par cette méthode. En effet, tous les développeurs du monde entier peuvent lire et analyser le code, ce qui limite la possibilité d’y introduire du code malveillant à l’insu des utilisateurs. Cette transparence joue un rôle crucial dans la confiance accordée aux logiciels open source, car les failles ou comportements suspects peuvent être détectés et signalés rapidement par la communauté.
De plus, l’open source possède une très grande communauté active composée de développeurs, débutants ou experts. Celle-ci surveille en permanence les projets, identifie les vulnérabilités et développe des correctifs ainsi que des mises à jour régulières pour une grande variété de logiciels. Cela permet de diminuer les délais en cas de faille de sécurité mais aussi d’assurer un maintien constant des meilleures pratiques en matière de développement.
Deuxième avantage, cette méthode représente un avantage en termes de temps dans le développement logiciel. La collaboration entre développeurs du monde entier crée un gain de temps car chacun peut contribuer à perfectionner les outils existants. Par conséquent, cela permet des évolutions plus rapides et continues des bibliothèques, frameworks et solutions open source, réduisant les délais nécessaires pour obtenir des versions stables et performantes.
Troisième avantage, cette méthode permet à tout le monde, y compris les développeurs moins expérimentés, de créer des frameworks ou logiciels complexes. Grâce à l’accès ouvert au code source, ces projets peuvent être examinés, corrigés et améliorés par des développeurs plus expérimentés. Cette collaboration garantit une meilleure réalisation du logiciel et contribue à réduire les erreurs. L’open source instaure un environnement d’apprentissage et d’entraide où chacun peut partager ses connaissances et compétences, ce qui améliore la qualité globale des projets.
4) Exemple d’une menace (XZ Backdoor)
Tout d’abord, faisons une présentation de xz. Xz est un logiciel open-source disponible sur la plupart des distributions Linux comme Ubuntu ou Fedora. Ce logiciel est utilisé sur ces distributions afin de compresser des fichiers afin de les rendre moins volumineux. Xz est une dépendance très utilisée par beaucoup d’autres programmes comme SSH. Ce logiciel est d’envergure mondiale, il est installé partout et celui-ci est automatiquement mis à jour lors de l’installation des mises à jours de votre distributions linux. Avoir une faille de sécurité dans un logiciel comme celui-ci est catastrophique, car des millions d’ordinateurs et serveurs pourraient être affectés automatiquement. Cette backdoor a été découverte le 29 mars 2024. Une backdoor est une méthode permettant d’accéder à la machine hôte sans en avoir les autorisations. Ce qui signifie que le pirate possède peut exécuter des codes et lire les fichiers de la machine hôte. Comme nous l’avons vu précédemment, XZ est un logiciel open-source, ce qui veut dire qu’il possède la chaîne précédemment expliquée. Par conséquent, celui-ci peut être observé par tous les développeurs de la planète. Comment cette backdoor est-elle arrivée ?
Première étape du plan du pirate, il fallait qu’il devienne mainteneur du projet, ce qui signifie qu’il a la possibilité d’accepter ou non une demande d’ajout de code. Or si ce pirate possède les accès il peut ajouter son propre code mais pas sans vérification car les autres développeurs du monde entier peuvent toujours le consulter, il a donc caché cette faille dans les jeux de test.
Deuxième étape du plan, le pirate a caché son script dans les fichiers de test corrompu. Puis il a créé un code qui répartit ces fichiers de test afin d’avoir son script fonctionnel dans ce logiciel mais ce code n’est toujours pas caché des développeurs du monde entier. Le pirate a donc réfléchi à comment contourner les milliers de développeurs qui pourraient voir la faille de sécurité.
Dernière étape du plan, afin de vérifier l’intégrité des versions, les éditeurs de distribution demandent en fichier compresser les mises à jour des logiciels très utilisés comme XZ. Par conséquent, le pirate a envoyé un fichier compressé avec le code malveillant échappant donc au contrôle des développeurs du monde entier, qui n’ont pas pu analyser ce code et donc observer la faille développée par le pirate.
Cette faille a été découverte assez tôt avant de faire des dégâts mais étant donné que le logiciel XZ est installé sur bon nombre de machines, nous aurions pu avoir une attaque qui aurait pu être dévastatrice et très dangereuse.