Stratégies de chaîne d'approvisionnement logicielle pour parer les attaques de confusion de dépendances

Stratégies de chaîne d'approvisionnement logicielle pour parer les attaques de confusion de dépendances

Stratégies de chaîne d'approvisionnement logicielle pour parer aux attaques de confusion de dépendance PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

"Qu'est-ce qu'il y a dans un nom? Ce que nous appelons une rose sous un autre nom aurait une odeur aussi douce. Lorsque Shakespeare écrivait ces mots (Roméo et Juliette, acte 2, scène 2) en 1596, il disait qu'un nom n'est qu'une convention. Cela n’a aucune signification intrinsèque. Juliette aime Roméo pour qui il est, pas pour son nom.

Mais sans le savoir, Shakespeare décrivait aussi des crises de confusion et de dépendance.

La confusion des dépendances survient lorsque les packages que vous utilisez dans votre code ne vous appartiennent pas. Ils portent le même nom, mais ce n’est pas votre code qui s’exécute en production. Même nom, mais un paquet sent la rose et l’autre… pue.

Des rapports de recherche récents estiment que 41 à 49 % des organisations sont exposées à des attaques de confusion de dépendances. Une nouvelle étude d'OX Security montre que lorsqu'une organisation est exposée à une attaque de confusion de dépendances, 73 % de ses actifs sont vulnérables. La recherche s'est concentrée sur les moyennes et grandes organisations (1K+, 8K+, 80K+ employés) dans un large éventail de secteurs (finance, jeux, technologie et médias) et a constaté le risque dans chaque secteur et dans les organisations de toutes tailles. L'étude a également révélé que presque toutes les applications comptant plus d'un milliard d'utilisateurs utilisent des dépendances vulnérables à la confusion des dépendances.

Cet article vise à vous aider à comprendre la confusion des dépendances et comment l'éviter.

Double double

Les dépendances (également appelées packages) sont les éléments constitutifs de votre logiciel. Généralement, ces logiciels, qu'ils soient développés par des communautés entières ou au sein d'une entreprise, effectuent une tâche commune et nécessaire.

Les gestionnaires de packages sont fréquemment utilisés pour installer des dépendances et les maintenir à jour. Ils analysent les registres publics et privés pour trouver le nom du package et, toutes choses égales par ailleurs, sélectionnent le numéro de version le plus élevé. Les attaquants en profitent en plaçant un package « factice » dans le registre public avec le même nom mais une version supérieure.

Lorsqu'un gestionnaire de packages rencontre deux packages identiques, l'un dans un registre public et l'autre dans un registre privé, cela provoque une confusion, d'où le nom de « confusion des dépendances ». Les deux packages étant identiques, le gestionnaire choisira automatiquement d'installer celui avec une version supérieure. - dans ce cas, il s'agit du package malveillant de l'attaquant.

Cela donne aux pirates de l’air une porte dérobée vers votre logiciel. À partir de ce moment, ils peuvent commettre des violations de données, commettre des vols de propriété intellectuelle et compromettre la chaîne de confiance d’approvisionnement en logiciels. Ils peuvent également introduire des violations de conformité qui entraîneront de sévères sanctions réglementaires.

Labeur et ennui

Il existe différentes approches pour une attaque de confusion de dépendances.

  • Espacement de noms. En téléchargeant une bibliothèque de logiciels malveillants dans un registre public, comme le Python Package Index (PyPI) ou celui de JavaScript registre npm - c'est nommé de la même manière vers une bibliothèque fiable utilisée en interne, les systèmes qui omettent une vérification d'espace de noms/d'URL ou ne forcent pas la récupération à partir d'un registre privé peuvent extraire par erreur le code malveillant. Le incident récent de confusion entre les dépendances de PyTorch en est un exemple.
  • Usurpation DNS. En utilisant une technique telle que l'usurpation d'identité DNS, les systèmes peuvent être amenés à extraire les dépendances de référentiels malveillants tout en affichant ce qui ressemble à des URL/chemins internes légitimes.
  • Script. En modifiant les scripts de build/installation ou intégration continue / livraison continue (CI/CD), les systèmes peuvent être amenés à télécharger des dépendances logicielles à partir d'une source malveillante plutôt que d'un référentiel local.

Des choses bien faites et avec soin

Pour vous protéger contre la confusion des dépendances, instituez ces pratiques.

  • Définissez des politiques dans le gestionnaire de packages. Interdire aux gestionnaires de packages de donner la priorité à un package public par rapport à un package privé.
  • Incluez toujours un fichier .npmrc. Si vous utilisez le populaire NPM en tant que gestionnaire de packages, incluez toujours un fichier .npmrc qui spécifie où récupérer les packages dans une portée d'organisation spécifique.
  • Réservez le nom du package dans un registre public. Une autre façon de se protéger contre les attaques par confusion de dépendances consiste à réserver le nom du package dans un registre public afin que les pirates de l'air ne puissent pas l'utiliser et, par conséquent, ne puissent pas « tromper » le gestionnaire de packages pour qu'il installe un package malveillant.

Pour se protéger pleinement contre les attaques de confusion de dépendances, les organisations doivent toujours utiliser portées d'organisation pour tous les packages internes, même lors de la publication dans votre registre interne. Les portées de l'organisation doivent également être enregistrées dans le registre public de NPM, empêchant ainsi quiconque de détourner la portée et de profiter de la confusion.

Les noms de packages doivent également être enregistrés publiquement. Si une organisation utilise le populaire PIP comme gestionnaire de packages pour les dépendances Python, par exemple, elle doit créer des packages internes avec un suffixe strict reconnaissable et fonctionnera sur tous les projets. Téléchargez un package vide portant le même nom dans le registre public PyPI en tant qu'espace réservé.

Une autre raison de réserver le nom du package dans un registre public est que si quelqu'un d'autre le réserve (malveillant ou non), les développeurs devront remplacer tous les noms de packages dans le registre privé par un nom qui n'a pas encore été réservé dans le registre public. Cela peut être un processus long et fastidieux.

Il est important de noter que tous les registres de packages ne permettent pas aux utilisateurs de réserver des noms de packages, alors assurez-vous d'en trouver un qui le permet.

Sortie, poursuivi par un ours

Les attaques par confusion de dépendances constituent une menace de cybersécurité grave et imminente pour les organisations du monde entier. Environ la moitié de toutes les organisations sont exposées à des risques et 73 % de leurs actifs sont exposés. Pour contrer cette menace croissante, les organisations doivent mettre en œuvre des mesures préventives robustes et adopter les meilleures pratiques en matière de cybersécurité.

Les roses de Shakespeare ont peut-être présagé le risque d'attaques de dépendance et de confusion pendant des centaines d'années, mais une autre citation du barde peut contenir une certaine sagesse pour s'en protéger : « Que chacun négocie pour lui-même et ne fasse confiance à aucun agent. » (Beaucoup de bruit pour rien, acte 2, scène 1)

Horodatage:

Plus de Lecture sombre