Le rapport de Sonatype sur l'état de la chaîne logistique logicielle en 2021 associe un large éventail de données publiques et privées afin de présenter des conclusions importantes sur l'open source et son rôle croissant dans l'innovation numérique.
Aujourd'hui, les quatre plus grands écosystèmes open source rassemblent un total combiné de 37 451 682 composants et paquets. L'an dernier, ces mêmes communautés ont publié en tout 6 302 733 versions de composants ou paquets et introduit pas moins de 723 570 nouveaux projets en collaboration avec 27 millions de développeurs aux quatre coins du monde.
Java
Javascript
Python
.Net
En 2021, les développeurs du monde entier demanderont plus de 2 200 milliards de paquets open source, ce qui représente une hausse de 73 % des téléchargements de composants open source par des développeurs en un an. Malgré le volume croissant de téléchargements, le pourcentage de composants disponibles utilisés dans les applications de production est incroyablement faible.
Si on considère les versions de projet OSS qui figurent parmi les 10 % les plus populaires, on s'aperçoit que, en moyenne, 29 % contiennent des vulnérabilités connues. À l'inverse, sur les 90 % restants, seulement 6,5 % contiennent des vulnérabilités connues. Ces statistiques combinées indiquent que la grande majorité des recherches en matière de sécurité (whitehat et blackhat) se concentre sur la recherche et la résolution (ou l'exploitation) de vulnérabilités dans les projets les plus utilisés.
Java (Maven)
JavaScript (npm)
Python (pypi)
.NET (Nuget)
Des pirates ont eu accès à l'infrastructure de développement de SolarWinds et ont injecté du code malveillant dans les binaires de mise à jour d'Orion. 18 000 clients ont automatiquement téléchargé des mises à jour contaminées, ce qui a eu pour effet d'installer des portes dérobées dans leur système et de permettre aux pirates d'exploiter des réseaux privés à leur guise.
Trois jours après l'annonce du piratage de 35 grandes entreprises technologiques par un chercheur éthique dans le cadre d'une attaque inédite de la chaîne logistique, plus de 300 attaques malveillantes d'imitateurs ont été observées. En un mois, plus de 10 000 imitateurs ont ainsi infiltré plusieurs écosystèmes, dont le npm, grâce à une attaque de confusion de l'espace de noms.
Un pirate a réussi à obtenir un identifiant grâce à une erreur dans la façon dont Codecov créait des images Docker. Cet identifiant a permis de modifier le script bash de téléchargement de Codecov, qui a été utilisé soit directement par ses clients, soit via les autres téléchargeurs de Codecov, comme leur Action GitHub. Le pirate a utilisé ce script modifié pour voler des identifiants dans les environnements CI de clients qui l'utilisent.
Le week-end suivant son lancement, le registre de logiciels de Winget a été inondé de pull requests pour des applications qui étaient soit en double, soit malformées. Des paquets en double récemment ajoutés étaient corrompus et ont écrasé les paquets existants, soulevant de grandes inquiétudes concernant l'intégrité de l'écosystème Winget.
Un groupe de ransomware a découvert et exploité une vulnérabilité zero day dans une plateforme de surveillance et de gestion à distance utilisée par des dizaines de fournisseurs de services de sécurité gérés. Étant donné que ces derniers ont des milliers de clients en aval, les pirates ont pu lancer une attaque de ransomware qui a fait 1 500 victimes.
Les membres de la communauté open source mondiale doivent faire face à une menace inédite et en pleine expansion provenant non pas de malfaiteurs à l'affût de vulnérabilités connues, mais de pirates virulents qui altèrent intentionnellement les projets open source pour infiltrer la chaîne logistique commerciale.
Entre février 2015 et juin 2019, 216 attaques ciblant les chaînes logistiques logicielles ont ainsi été enregistrées. Au cours des mois qui ont suivi cette période, entre juillet 2019 et mai 2020, le nombre d'attaques est cette fois passé à 929. Pire encore, au cours de l'année passée seulement, le nombre de ces attaques a été porté à 12 000, ce qui représente une augmentation de 650 %.
Confusion de dépendances, typosquattage et injection de code malveillant
Des pirates ont eu accès à l'infrastructure de développement de SolarWinds et ont injecté du code malveillant dans les binaires de mise à jour d'Orion. 18 000 clients ont automatiquement téléchargé des mises à jour contaminées, ce qui a eu pour effet d'installer des portes dérobées dans leur système et de permettre aux pirates d'exploiter des réseaux privés à leur guise.
Trois jours après l'annonce du piratage de 35 grandes entreprises technologiques par un chercheur éthique dans le cadre d'une attaque inédite de la chaîne logistique, plus de 300 attaques malveillantes d'imitateurs ont été observées. En un mois, plus de 10 000 imitateurs ont ainsi infiltré plusieurs écosystèmes, dont le npm, grâce à une attaque de confusion de l'espace de noms.
Un pirate a réussi à obtenir un identifiant grâce à une erreur dans la façon dont Codecov créait des images Docker. Cet identifiant a permis de modifier le script bash de téléchargement de Codecov, qui a été utilisé soit directement par ses clients, soit via les autres téléchargeurs de Codecov, comme leur Action GitHub. Le pirate a utilisé ce script modifié pour voler des identifiants dans les environnements CI de clients qui l'utilisent.
Le week-end suivant son lancement, le registre de logiciels de Winget a été inondé de pull requests pour des applications qui étaient soit en double, soit malformées. Des paquets en double récemment ajoutés étaient corrompus et ont écrasé les paquets existants, soulevant de grandes inquiétudes concernant l'intégrité de l'écosystème Winget.
Un groupe de ransomware a découvert et exploité une vulnérabilité zero day dans une plateforme de surveillance et de gestion à distance utilisée par des dizaines de fournisseurs de services de sécurité gérés. Étant donné que ces derniers ont des milliers de clients en aval, les pirates ont pu lancer une attaque de ransomware qui a fait 1 500 victimes.
Pour accélérer le rythme de l'innovation numérique sans sacrifier la qualité ou la sécurité, les responsables de l'ingénierie et de la gestion des risques doivent comprendre la dynamique de l'offre, de la demande et des risques associés aux écosystèmes open source tiers. De plus, ils doivent définir des politiques open source et les appliquer automatiquement à toutes les phases de la chaîne logistique logicielle.
Certains projets open source sont sans aucun doute meilleurs que d'autres. Mais comment le savoir ? Cette année, nous avons étudié trois méthodes différentes pour identifier ces projets open source de référence : le délai moyen de mise à jour Sonatype (MTTU), la criticité OpenSSF et le Sourcerank de Libraries.io. Nous avons constaté que le MTTU combiné à la criticité OpenSSF est fortement associé à des résultats de projet de référence en matière de sécurité et de productivité de développement.
Le délai moyen de mise à jour Sonatype offre une indication de la qualité d'un projet sur la base de sa réactivité aux mises à jour de dépendances. Plus le délai est faible, mieux c'est. Les composants qui réagissent systématiquement et rapidement aux mises à jour des dépendances ont un MTTU plus faible. À l'inverse, les composants pour lesquels ce délai est plus long ou sujet à des variations importantes sont caractérisés par un MTTU plus élevé.
La criticité OpenSSF mesure la communauté, l'utilisation et l'activité d'un projet. Cette information est représentée par un score qui vise à mesurer le degré de criticité du projet dans l'écosystème open source.
Le Sourcerank de Libraries.IO vise à mesurer la qualité des logiciels, en prenant principalement en compte la documentation, la maturité et la communauté du projet. Cet indicateur est calculé à travers un certain nombre de réponses oui/non, telles que « Le projet a-t-il plus de six mois ? » et un ensemble de questions numériques, telles que « Combien d'étoiles le projet possède-t-il ? » Ces réponses sont rassemblées dans un score unique, les questions oui/non ajoutant ou soustrayant un nombre fixe de « points » et les questions numériques étant converties en points à l'aide d'une formule, par ex. « log(num_stars)/2 ». Actuellement, le nombre maximal de points est d'environ 30.
Les composants qui réagissent systématiquement et rapidement aux mises à jour des dépendances ont un MTTU faible. À l'inverse, les composants pour lesquels ce délai est plus long ou sujet à des variations importantes sont caractérisés par un MTTU plus élevé.
Imaginons ainsi que notre projet comporte un composant A avec les dépendances B et C, toutes deux à la version 1.2. Supposons maintenant qu'une nouvelle version soit publiée pour chacune (1.3), puis, quelques temps après, qu'une nouvelle version soit cette fois publiée pour le composant A, ce qui entraîne la mise à jour de B et C vers la version 1.3. Le temps écoulé entre la publication de B version 1.3 et de A version 1.3 correspond au délai de mise à jour (TTU) associé à la migration de A vers la version 1.3 de B (il en va de même pour l'adoption de C version 1.3). En calculant la moyenne de ces délais de mise à jour, on obtient ainsi le MTTU.
Outre la hausse du nombre de projets, nous pouvons observer une tendance marquée vers l'accélération des MTTU. En 2011, le MTTU moyen à l'échelle de tous les projets était de 371 jours. En 2014, il avait été réduit à 302 jours puis, en 2018, à 158 jours. En 2021, au 1er août, le MTTU moyen était de 28 jours, soit moins de la moitié des 73 jours constatés en 2020.
Supposons qu'un projet A inclut une dépendance B et que B contienne une vulnérabilité divulguée à la date D1. A met à jour la version utilisée de B à la date D2. Le délai de correction (TTR) correspond alors au nombre de jours écoulés entre D1 et D2. Le MTTR désigne quant à lui le TTR moyen d'un projet pour toutes les vulnérabilités de sécurité rendues publiques.
Si le MTTU n'est pas un indicateur direct de la vitesse de correction des vulnérabilités rendues publiques, il est corrélé au délai moyen de correction (MTTR) d'un projet, lequel correspond au temps nécessaire pour mettre à jour les dépendances associées à des vulnérabilités publiques. C'est pourquoi nous considérons le MTTU comme le meilleur indicateur disponible pour déterminer l'impact d'un composant sur la sécurité des projets qui l'intègrent.
Le choix de projets open source de grande qualité devrait être considéré comme une importante décision stratégique pour les entreprises de développement logiciel.
Afin d'éviter les dépendances obsolètes et de minimiser les risques de sécurité liés à l'open source tiers, les équipes d'ingénierie logicielle doivent activement opter pour des projets qui présentent systématiquement un faible délai moyen de mise à jour et des scores de criticité OpenSSF élevés.
Cette année, nous avons passé en revue 4 millions de décisions de gestion des dépendances issues du monde réel, à l'échelle de 100 000 applications. Les enseignements que nous avons pu en tirer et qui sont présentés ci-dessous sont très instructifs.
En moyenne, les applications Java de production en entreprise utilisent 10 % des composants open source disponibles et les équipes d'ingénierie commerciale mettent à jour activement seulement 25 % des composants utilisés.
Actuellement, une application contient en moyenne 128 dépendances open source, et le projet open source moyen publie 10 versions par an. Cette réalité, associée au fait que quelques projets particulièrement actifs publient plus de 8 000 versions par an, crée une situation dans laquelle les développeurs doivent constamment décider quand mettre à jour les dépendances tierces au sein de leurs applications, mais aussi quand ne pas le faire. Compte tenu de ces circonstances, les chercheurs de Sonatype ont entrepris de répondre à la question suivante : les développeurs prennent-ils des décisions efficaces en matière de gestion des dépendances ? Nous avons étudié 100 000 applications et analysé plus de 4 000 000 migrations de composants (mises à niveau) et avons constaté que 69 % de ces décisions n'étaient pas optimales.
Le graphique ci-dessous fournit un résumé visuel des migrations réalisées pour spring-core, un composant unique du très populaire spring-framework, au cours de l'année écoulée. L'axe y montre les 52 dernières semaines d'activité de mise à niveau. La première ligne représente les décisions de migration prises il y a un an. La dernière ligne représente les décisions de migration prises au cours de la dernière semaine. L'axe x représente les 150 versions les plus récentes avec les versions antérieures à gauche et les versions plus récentes à droite. Consultez les observations clés en cliquant sur les points ci-dessous.
La version la plus récente de spring-core (5.3.x) sort environ toutes les 4 semaines.
Le projet gère activement ces 2 versions. Une teinte plus foncée indique que la majorité de la communauté utilise ces versions.
Le projet ne prend plus activement en charge ces versions. Les équipes devraient éviter ces versions obsolètes.
Les retardataires continuent à effectuer des mises à jour avec des versions plus anciennes, non prises en charge, voire vulnérables.
Les anciennes versions sont vulnérables, et les versions actuellement non vulnérables (4.3.15+) seront tôt ou tard sujettes à de nouvelles vulnérabilités.
La communauté évite généralement les versions 0 et préliminaires.
Ne choisissez pas une version alpha, bêta, jalon, candidat à la publication, etc.
Ne faites pas de mise à niveau vers une version vulnérable.
Passez à une version moins risquée si la version que vous utilisez est vulnérable.
Lorsqu'un composant est publié deux fois en très peu de temps, choisissez la version ultérieure.
Choose a migration path (from version to version) others have chosen.
Choisissez une version qui minimise les modifications de code avec rupture.
Choisissez la version utilisée par la majorité de la population.
Si aucune de ces options ne s'applique, choisissez la version la plus récente.
Une automatisation intelligente qui standardise les équipes d'ingénieurs travaillant sur des projets open source de référence pourrait éliminer 1,6 million d'heures et 240 millions de dollars de gaspillage concret sur notre échantillon de 100 000 applications de production. Extrapolées à l'ensemble du secteur du logiciel, ces économies se compteraient en milliards.
L'avant-garde est dangereuse. La position optimale se trouve juste derrière. En analysant les comportements de migration autour des pratiques de gestion des dépendances, nous avons observé trois modèles distincts de comportement d'équipe : les équipes qui fonctionnent dans la confusion, les équipes qui fonctionnent sur le fil et les équipes qui fonctionnent au plus près du fil.
Les développeurs qui travaillent dans ces équipes ne disposent pas de conseils automatisés. Ils mettent rarement à jour les dépendances. Quand ils le font, ils se fient à leur intuition et prennent généralement des décisions non optimales. Cette approche de la gestion des dépendances est très réactive, non évolutive et conduit à des logiciels obsolètes et un risque de sécurité accru.
Les développeurs qui travaillent dans ces équipes bénéficient d'une automatisation intelligente et contextuelle. Les dépendances sont automatiquement recommandées pour la mise à jour, mais seulement lorsqu'elles sont optimales. Ce type d'automatisation intelligente permet de maintenir les logiciels à jour, sans gaspiller les ressources ni accroître les risques de sécurité. Cette approche est proactive, évolutive et optimale en matière de rentabilité et de qualité.
Les développeurs qui travaillent dans ces équipes bénéficient d'une automatisation simple, mais non contextuelle. Les dépendances sont automatiquement mises à jour vers la dernière version, que celle-ci soit optimale ou non. Ce genre d'automatisation permet de maintenir les logiciels à jour, mais elle peut, par inadvertance, entraîner une augmentation des risques de sécurité et des coûts liés aux mises à jour inutiles et aux échecs de builds. Cette approche est proactive et évolutive, mais non optimale en matière de coûts ou de résultats.
Les équipes d'ingénierie logicielle doivent s'efforcer d'homogénéiser les décisions relatives à la gestion des dépendances.
Les responsables de l'ingénierie doivent optimiser les informations mises à la disposition des développeurs pour gagner du temps et de l'argent.
Ils doivent adopter des outils pour automatiser les décisions intelligentes en matière de gestion des dépendances.
Pour le rapport de cette année, nous avons interrogé 702 professionnels de l'ingénierie sur leurs pratiques de gestion de la chaîne logistique logicielle. Les questions portaient notamment sur les approches et les philosophies d'utilisation des composants open source, le design organisationnel, la gouvernance, les processus d'approbation et les outils utilisés.
De façon subjective, les participants de l'enquête pensent corriger les composants défectueux efficacement et affirment comprendre où se trouvent les risques. Cependant, des recherches objectives ont montré que les équipes de développement manquent de consignes structurées et prennent souvent des décisions contestables en ce qui concerne la gestion des chaînes logistiques logicielles.
Nous avons comparé toutes les réponses à l'enquête aux cinq étapes de maturité de la chaîne logistique logicielle et nous avons constaté que la majorité des participants ont obtenu une note inférieure au niveau « Contrôle », qui est considéré comme le point auquel une entreprise passe de la phase de « découverte » à un niveau minimal de maturité permettant d'obtenir des résultats de haute qualité.
Cliquez sur les points à droite pour obtenir des informations supplémentaires.
L'enquête laisse penser que les participants se sont eux-mêmes convaincus qu'ils faisaient du bon travail dans des domaines où, objectivement, ce n'était pas le cas. Ce constat doit servir de rappel et invite à être plus attentif à la situation perçue de votre entreprise et ce qui se passe réellement, pour comparer en continu les performances de votre flux de travail et vos systèmes aux résultats souhaités.
Suite à plusieurs attaques en 2020 ciblant des infrastructures cruciales, les gouvernements du monde entier ont commencé à respecter les réglementations et normes visant à améliorer la sécurité et la santé de la chaîne logistique logicielle.
En mai 2021, le président Biden a signé l'ordre exécutif d'amélioration de la cybersécurité de la Nation, présenté comme une étape importante pour le gouvernement américain à une époque où cyberespionnage et attaques ciblant des infrastructures cruciales atteignent des proportions critiques.
Le gouvernement du Royaume-Uni a annoncé être à la recherche de conseils sur la défense contre les attaques numériques visant les chaînes logistiques pour les entreprises qui consomment des services informatiques ou les fournisseurs de services de sécurité gérés qui fournissent des logiciels et des services.
L'Allemagne a adopté la loi sur la sécurité des technologies de l'information 2.0 pour mettre à jour la première loi et ainsi « renforcer la sécurité du numérique et de l'information afin de répondre aux cyberattaques de plus en plus fréquentes et complexes, mais aussi à la numérisation constante de la vie quotidienne ».
En juillet 2021, l'Agence de l'Union européenne pour la cybersécurité (ENISA) a publié un rapport intitulé « Comprendre l'augmentation du nombre d'attaques contre les chaînes logistiques logicielles ». Ce rapport portait sur 24 attaques contre des chaînes logistiques logicielles et partageait des recommandations destinées à aider les entreprises à se protéger contre les attaques.
Alors que les gouvernements reconnaissent enfin les risques associés aux chaînes logistiques logicielles non gérées, ils s'efforcent maintenant d'aligner le secteur des logiciels avec les autres secteurs de fabrication. Soyez attentif à ce qui se passe sur le plan législatif au sein de votre marché, participez aux débats publics et soyez prêt à modifier vos pratiques de développement en conséquence.
Les ingénieurs sont amenés à prendre toutes sortes de décisions numériques à chaque phase de la chaîne de valeur DevSecOps, décisions auxquelles ils n'avaient pas à réfléchir il y a un an. Comprendre comment optimiser ces décisions et comment elles affectent la chaîne logistique logicielle à plus grande échelle est primordial pour la réussite d'une entreprise.
Consultez le rapport complet pour obtenir plus d'informations, d'analyses et de conseils sur le développement de chaînes logistiques logicielles optimales.
Sonatype Headquarters - 8161 Maple Lawn Blvd #250, Fulton, MD 20759
Tysons Office - 8281 Greensboro Drive – Suite 630, McLean, VA 22102
Australia Office - 60 Martin Place Level 1, Sydney, NSW 2000, Australia
London Office -168 Shoreditch High Street, E1 6HU London
Copyright © 2008-présent, Sonatype Inc. Tous droits réservés. Inclut les codes de tiers listés ici. Sonatype et Sonatype Nexus sont des marques déposées de Sonatype, Inc. Apache Maven et Maven sont des marques déposées d'Apache Software Foundation. M2Eclipse est une marque déposée d'Eclipse Foundation. Toutes les autres marques déposées sont la propriété de leur détenteur respectif.
Conditions de service Politique de confidentialité Déclaration sur l'esclavage moderne Event Terms and Conditions Do Not Sell My Personal Information