Skip to main content

Sécurité de la chaîne d’approvisionnement logicielle

Sécurisez votre chaîne d’approvisionnement logicielle moderne

Écrit par:
0 minutes de lecture

Les vulnérabilités des chaînes d'approvisionnement, y compris logicielles, ont été mises en évidence lors de la pandémie. Les entreprises étant toujours plus présentes en ligne, vous devez absolument protéger vos chaînes logicielles contre les acteurs malveillants qui cherchent à en exploiter les vulnérabilités. Violations ou piratages peuvent entraîner la compromission de données personnelles, des pertes financières, des amendes et des dommages irréparables à votre image de marque.

Cet article explique tout ce que vous devez savoir sur la sécurité de la chaîne d'approvisionnement logicielle, son importance pour les organisations et le rôle que peut jouer Snyk.

Qu’est-ce que la sécurité de la chaîne d’approvisionnement logicielle ?

La sécurité de la chaîne d'approvisionnement logicielle fait référence aux pratiques, aux outils et aux technologies utilisés pour protéger le processus de développement et de déploiement des logiciels contre les vulnérabilités et les menaces pour la sécurité. Elle englobe diverses activités, notamment la modélisation des menaces, l'analyse de la composition des logiciels, la signature du code et d'autres efforts visant à atténuer les risques de sécurité. 

Aujourd'hui, la plupart des logiciels que nous utilisons reposent sur du code open source et des composants tiers créés par des développeurs ou des organisations externes. Si l'utilisation de codes ou de composants de ce type accélère le cycle de développement, elle introduit également des risques de sécurité. C'est pourquoi la sécurité de la chaîne d'approvisionnement logicielle est si importante.

Il s'agit également d'évaluer la sécurité des composants logiciels tiers et des bibliothèques open source utilisés dans le processus de développement et de s'assurer qu'ils sont exempts de failles, de logiciels malveillants et d'autres cyber-risques. La sécurité de la chaîne d'approvisionnement logicielle est une approche globale visant à protéger l'intégrité et la confidentialité des logiciels tout au long de leur cycle de vie.

Pourquoi la sécurité de la chaîne d'approvisionnement logicielle est-elle importante ?

Les menaces qui pèsent sur la chaîne d'approvisionnement logicielle sont bien réelles. Selon un rapport de 2022, les attaques la visant ont augmenté de 742 % au cours des trois dernières années. Voici quelques exemples d'incidents récents :

  • Attaque contre SolarWinds : en décembre 2020, un groupe de pirates informatiques financé par la Russie s'est infiltré dans le réseau de SolarWinds, un éditeur de logiciels de gestion informatique pour les grandes entreprises. Les pirates ont glissé un malware dans une mise à jour logicielle qui a été distribuée à des milliers de clients de SolarWinds (agences gouvernementales et entreprises privées), gagnant ainsi accès à leurs réseaux.

  • Opération ShadowHammer : en 2019, des pirates ont utilisé des mises à jour logicielles compromises pour distribuer un logiciel malveillant appelé ShadowHammer sur des ordinateurs ASUS. Pas moins d'un million d'utilisateurs ont été touchés par l'attaque. 

  • Huawei : les autorités américaines ont averti que les logiciels fournis par l'entreprise chinoise de télécommunications Huawei pouvaient être exploités par la Chine à des fins d'espionnage ou pour d’autres actions malveillantes.

Lisez notre guide sur les attaques de la chaîne d'approvisionnement pour plus d'exemples.

En sécurisant la chaîne d'approvisionnement logicielle, vous pouvez contrecarrer les cyberattaques, en atténuer les effets ou même prévenir l'inclusion de vulnérabilités dans vos applications. Une sécurité robuste peut également protéger le développement et le déploiement des logiciels contre l'introduction de composants malveillants ou compromis tels que les malwares, les failles et d'autres menaces. Enfin, c’est aussi la garantie de respecter les réglementations et normes en vigueur, tout en favorisant la confiance dans les logiciels que vous développez et déployez.

La question de la sécurité de la chaîne d'approvisionnement est tellement essentielle qu'en septembre 2022, le président Joe Biden a créé l’Executive Order M-21-30, un décret qui insiste sur l’importance des lignes directrices du NIST pour sécuriser tout logiciel vendu au gouvernement américain. Ce décret dispose que le formulaire d'attestation doit comporter les éléments suivants :

  • Nom du créateur du logiciel

  • Nom du logiciel

  • Déclaration du vendeur ou de l'agence attestant du respect de pratiques de développement sécurisées

Qu’est-ce qu’une attaque de la chaîne d’approvisionnement logicielle ?

Une attaque de la chaîne d'approvisionnement logicielle se produit lorsqu'une personne cible une vulnérabilité au sein de la chaîne de développement pour y insérer un code malveillant ou un malware. Une telle attaque peut se produire à n'importe quel moment du développement d'un logiciel, que ce soit lors de son codage, de ses tests ou de sa distribution et de son installation. Une fois qu’ils ont accédé au logiciel, les acteurs malveillants peuvent activer le malware pour voler des ressources informatiques ou des informations sensibles, perturber les opérations ou prendre le contrôle des systèmes compromis. 

Les attaquants ont à leur disposition de nombreux vecteurs (méthodes et tactiques) pour cibler les failles d’une chaîne d'approvisionnement logicielle. Parmi ces vecteurs, notons les suivants :

  • Composants tiers : les acteurs malveillants ciblent les composants tiers (par exemple, les bibliothèques ou les frameworks) pour trouver une porte par laquelle faire passer des malwares dans le logiciel.

  • Outils de développement compromis : les acteurs malveillants ciblent les compilateurs, les systèmes de build ou d'autres outils de développement afin d'y introduire des malwares.

  • Comptes de développeurs compromis : les acteurs malveillants cherchent à exploiter les vulnérabilités des comptes de développeurs, comme ceux de GitHub ou d'autres plateformes de partage de code.

  • Infrastructure de mise à jour logicielle compromise : les acteurs malveillants ciblent fréquemment l'infrastructure de mise à jour des logiciels pour diffuser des malwares, comme ils l'ont fait dans le cadre de l'opération ShadowHammer.

  • Ingénierie sociale : des acteurs malveillants contactent des employés ou des développeurs pour accéder par la ruse à des informations ou à des systèmes sensibles.

4 meilleures pratiques pour atténuer les attaques de la chaîne d’approvisionnement logicielle

La sécurisation de la chaîne d'approvisionnement logicielle est essentielle pour toute organisation qui développe ou déploie des logiciels, qu'ils soient destinés à un usage interne ou externe. Pour vous aider, nous avons dressé une liste des quatre meilleures pratiques à mettre en œuvre immédiatement pour réduire le risque d'attaque sur votre chaîne d'approvisionnement. Les voici : 

  1. Limiter la possibilité d’attaque par confusion de dépendance

  2. Désactiver les commandes d’installation arbitraires des paquets open source

  3. Activer l’authentification multifactorielle sur l’ensemble de la chaîne d’approvisionnement logicielle

  4. Éviter l’exposition d’informations sensibles

1\. Atténuer les attaques par confusion de dépendance

Il est facile pour des acteurs malveillants de lancer des attaques par confusion de dépendance afin d'exploiter les faiblesses de la chaîne d'approvisionnement logicielle des entreprises. Voici comment protéger votre organisation :

  • Utilisez un espace de noms délimité : les paquets délimités verrouillent l'espace de noms et l'associent à un utilisateur ou à une organisation spécifique. L’absence de remplacement d’un paquet sous-jacent par rapport à l’intention initiale de l’utilisateur et d’un autre référentiel en amont permet d’atténuer l’attaque par confusion de dépendance. 

  • Utilisez une configuration spécifique au référentiel pour une définition explicite du registre en amont : les gestionnaires de paquets, tels que pip et npm, font de leur mieux pour résoudre les problèmes de recherche d'informations sur les paquets en l'absence de directives explicites. Ils consultent généralement les registres publics (p. ex., npmjs, PyPI) pour trouver des versions plus récentes d'un paquet, et peuvent accidentellement insérer un paquet malveillant. Lorsque vous utilisez un référentiel de paquets interne ou un proxy, comme Artifactory ou Verdaccio, assurez-vous que vous ne transférez pas les demandes de paquets privés vers des registres publics.

Isaac Schlueter, cofondateur de npmjs, a rassemblé quelques exemples et références de configuration élaborés pour les contre-mesures susmentionnées à la confusion des dépendances. Vous pouvez également consulter ce livre blanc de Microsoft, qui contient des recommandations pour atténuer ce type d'attaques sur la chaîne d'approvisionnement logicielle.

2\. Désactiver les commandes d’installation arbitraires des paquets open source

Certains gestionnaires de paquets, tels que npm, permettent à tout paquet installé ou désinstallé d’exécuter des commandes arbitraires. De nombreux paquets malveillants exploitent ce paramètre par défaut à des fins de piratage. Cela peut aussi se faire via une attaque de type typosquattage, où, soit par le biais d’une arborescence de dépendances, soit en saisissant un nom de paquet erroné dans la ligne de commande, la victime installe un paquet malveillant. 

Il est facile de créer la confusion parmi les noms de dépendances. Par exemple, lequel des éléments suivants est malveillant et lequel est le véritable paquet ?

coffeescript

cofeescript

Il est compréhensible de se faire piéger par des attaques par confusion de dépendance. Pour s’en prémunir, la clé est de ne jamais installer des paquets sans réfléchir ou en faisant aveuglément des copier-coller, mais plutôt de les analyser et valider avec soin. Nous recommandons d'utiliser Snyk Advisor pour évaluer la santé du paquet.

Qu’est-ce que la confusion de dépendance ?

L'un des vecteurs d'attaque les plus courants et les plus faciles à mettre en œuvre est la confusion des dépendances. Avec cette technique, les acteurs malveillants cherchent à exploiter les vulnérabilités dans la façon dont les organisations gèrent leurs dépendances logicielles. Les attaquants importent des versions malveillantes de paquets open source sur des systèmes publics de gestion de paquets (npm ou PyPI) en utilisant des noms similaires à ceux de paquets légitimes : on parle dans ce cas de typosquattage ou de brandjacking. Les développeurs peuvent accidentellement mettre à jour ou installer des versions malveillantes de paquets, compromettant ainsi leurs systèmes.

3\. Activer l’authentification multifactorielle sur l’ensemble de la chaîne d’approvisionnement logicielle

Dans la communauté open source, nous sommes plus que jamais dépendants les uns des autres. L'authentification devient plus que jamais cruciale pour s'assurer que les autres peuvent nous faire confiance et faire confiance aux logiciels que nous maintenons. On pourrait donc penser que les développeurs seraient les premiers à activer la 2FA, car ils comprennent les risques liés à son absence. Malheureusement, c’est loin d’être le cas. 

En janvier 2020, un rapport a révélé que moins de 10 % des développeurs sur npmjs activaient la fonction 2FA, alors qu’elle existe pourtant depuis fin 2017. 

Nous vous recommandons vivement, ainsi qu'à toute personne travaillant dans un environnement logiciel, de renforcer la sécurité de vos comptes dans les registres et les écosystèmes (comme npmjs, RubyGems, Docker et GitHub) en activant l'authentification multifactorielle.

4\. Éviter l’exposition d’informations sensibles

Avec la popularité des logiciels open source, les développeurs et les contributeurs collaborent au grand jour. C'est une bonne chose pour l'innovation, mais c'est une mauvaise chose pour les informations confidentielles, qui peuvent être divulguées par inadvertance. Faites attention à ne pas exposer des informations sensibles, car il est extrêmement difficile de les dissimuler une fois qu'elles ont été partagées. Voici nos conseils : 

  • Ne stockez pas d’informations sensibles dans un référentiel, dans la configuration ou dans le code. Nous avons détaillé 10 meilleures pratiques de sécurité GitHub pour vous permettre d’approfondir chacune des pratiques de sécurité.

  • Évitez de publier des paquets ou des images de conteneur contenant des informations potentiellement sensibles qui sont susceptibles de se retrouver dans des registres publics. Vous pouvez suivre les directives sur les 10 meilleures pratiques de sécurité NPM pour configurer les paquets npm avec une configuration .npmignore appropriée.

Pour aller plus loin, consultez cette présentation vidéo sur l’atténuation des risques pour la chaîne d'approvisionnement logicielle

Comment la sécurité de la chaîne d'approvisionnement est-elle liée à l'AppSec et au DevSecOps ?

La sécurité de la chaîne d'approvisionnement, l’AppSec (sécurité des applications) et le DevSecOps (développement, sécurité et opérations) impliquent tous la protection des composants et des systèmes pour développer, distribuer et maintenir les logiciels. 

  • La sécurité de la chaîne d’approvisionnement : assure que les logiciels et les composants utilisés dans le développement et la distribution d'un produit proviennent de sources fiables et sont dépourvus de vulnérabilités.

  • L’AppSec : sécurise le logiciel et les systèmes sur lesquels il fonctionne tout en protégeant les données qu'il traite. 

  • Le DevSecOps : intègre la sécurité dans le processus de développement des logiciels en impliquant les équipes de sécurité et leurs processus à un stade précoce des phases de développement, de test et de déploiement. L'objectif est de régler les éventuels problèmes de sécurité au plus tôt.

La sécurité de la chaîne d'approvisionnement, l'AppSec et le DevSecOps fonctionnent ensemble pour garantir la sécurité globale d'un produit ou d'un système.

Automatisation de la sécurité de la chaîne logicielle

L'automatisation des processus et des tâches liés à la protection des logiciels et des composants utilisés dans le développement et la distribution d'un produit peut contribuer à maintenir une posture de cybersécurité solide. Non seulement elle permet d'identifier et d'atténuer efficacement les menaces, mais elle garantit également que les contrôles de sécurité sont appliqués de manière cohérente à tous les systèmes et composants, réduisant ainsi les risques liés à l'erreur humaine.

Parmi les technologies de sécurité automatisée de la chaîne d'approvisionnement, citons :

  • Analyse automatisée des vulnérabilités : des outils qui analysent automatiquement les logiciels et les composants tiers pour détecter les vulnérabilités et les menaces de sécurité connues. Ces outils peuvent s’appuyer sur les politiques établies par les équipes de sécurité pour gérer, signaler et bloquer les vulnérabilités critiques afin qu'elles ne pénètrent pas dans vos applications.

  • Gestion automatisée des dépendances : des outils qui suivent et gèrent automatiquement les dépendances d'un produit (par exemple, les bibliothèques, les frameworks), puis alertent les développeurs lorsqu'une dépendance contient des vulnérabilités connues ou nouvellement découvertes.

  • Analyse automatisée de la chaîne d'approvisionnement : des outils qui analysent automatiquement l'approvisionnement logiciel pour détecter les risques de sécurité potentiels (par exemple, les composants tiers non fiables).

  • Gestion automatisée de la configuration : des outils qui gèrent et appliquent automatiquement les configurations de sécurité sur les systèmes (par exemple, les logiciels, les serveurs, les ressources cloud).

Atténuer les attaques de la chaîne d’approvisionnement logicielle avec Snyk

Snyk peut contribuer à sécuriser votre chaîne d'approvisionnement logicielle en vous aidant à identifier, corriger et bloquer les paquets vulnérables et malveillants risquant de se glisser dans votre base de code, y compris les paquets et les conteneurs open source utilisés pour créer des applications. 

Sécurité open source

Snyk effectue des recherches actives, procède à des divulgations responsables et aide les organisations à détecter et à corriger les paquets malveillants dans les dépendances open source intégrées à votre base de code. Rien qu'en 2020, nous avons détecté plus de 700 paquets malveillants dans les registres open source. 

Notre expérience en matière de découverte et de détection de ces paquets malveillants, mais aussi d’assistance dans leur gestion, n’est plus à prouver. Nous avons par exemple détecté l’attaque par confusion de dépendance electron-native-notify sur npmjs et l’exécution de code à distance dans la gemme Ruby de strong_password. Récemment, notre équipe de recherche en sécurité a également publié ses conclusions sur la fraude publicitaire et la fuite de données de SourMint qui ont impacté des milliers d’applications mobiles par le biais d’un SDK malveillant.

Snyk analyse vos fichiers de manifestes de paquets et construit une arborescence complète des dépendances profondément imbriquées qui répertorie tous les paquets que vous intégrez dans votre application, y compris ceux intégrés par le biais de dépendances transitives. Ces dépendances sont ensuite mises en corrélation avec notre base de données des vulnérabilités Snyk Intel. Si Snyk identifie une référence à un paquet malveillant connu, celui-ci est signalé comme une vulnérabilité. 

Selon la manière dont vous déployez Snyk dans votre SDLC, notre technologie peut également faciliter l’automatisation de la prévention de l'utilisation de paquets ou d'images de base de conteneurs malveillants en arrêtant un processus de build ou de CI, en vous envoyant une notification ou en ouvrant un ticket Jira, selon ce qui convient à vos flux de travail.

Nomenclature des logiciels (SBOM)

Une nomenclature des logiciels (SBOM) est un registre formel des composants utilisés pour développer un logiciel et de ses relations avec la chaîne d'approvisionnement. Les SBOM permettent de découvrir les vulnérabilités dès le début du cycle de vie de la production logicielle, neutralisant les menaces avant qu'elles ne se concrétisent.

Snyk peut automatiser l’élaboration d'une SBOM afin que les organisations puissent facilement suivre les composants open source et les dépendances qu'elles utilisent. Notre solution de sécurité de la chaîne d'approvisionnement peut analyser ces composants pour identifier les vulnérabilités potentielles et offrir des recommandations utiles pour les corriger. Consultez notre article sur la création d’une SBOM.

Sécurité des conteneurs

Snyk détecte les paquets à l'intérieur des conteneurs - qu'ils soient hérités des images de base ou installés par les utilisateurs via les gestionnaires de paquets Linux. Snyk Container peut détecter si des vulnérabilités sont présentes dans l'image de base ou dans les paquets (ou dépendances) ajoutés au conteneur, et fournir des conseils pratiques pour remédier aux problèmes. Pour les images de base, Snyk Container fournit des correctifs en un clic qui permettent de passer rapidement à une version plus sûre de votre image de base, tandis que pour les composants ajoutés par les utilisateurs, il vous aide à sélectionner des versions de paquets plus sûres. Snyk Container peut également surveiller vos images de conteneur pour repérer des failles nouvellement découvertes. Notre solution vous alerte lorsqu'elles sont détectées dans vos images déjà générées et fournit les mêmes conseils de correction pour le flux de build normal.

Snyk détecte également d'autres fichiers binaires installés en dehors des divers gestionnaires de paquets Linux. Par exemple, supposons qu'un paquet particulièrement lourd se retrouve dans des images de base de conteneurs populaires, mais qu'il n'ait pas été installé via des gestionnaires de paquets. Dans ce cas, nous pourrions détecter ces paquets. Toutefois, il ne s’agit pas là d’un substitut à la détection des logiciels malveillants. 

Quelle est la prochaine étape pour la sécurité de la chaîne d’approvisionnement logicielle ?

Pour atténuer le risque d'attaques contre la chaîne d'approvisionnement logicielle, les organisations doivent agir afin d’internaliser le risque. Cela implique de comprendre la nature évolutive du développement logiciel et les nouveaux vecteurs d’attaque qui en découlent. Cela signifie également qu'il faut sensibiliser tous les membres de l'équipe de développement aux risques et précautions à prendre. 

Snyk détecte constamment des paquets malveillants dans les écosystèmes. Aussi, nous pouvons affirmer en toute confiance que les cyber-menaces ne font que s'aggraver avec le temps. Plus nous utilisons de logiciels, plus les menaces augmentent. Comprendre ces risques est la première étape pour les prévenir et les réduire.

Pour en savoir plus sur la manière d'améliorer votre position en matière de cybersécurité, consultez cet article sur la prévention des attaques de la chaîne d'approvisionnement avec NPM.