Aikido

Détection et prévention des malwares dans les chaînes d'approvisionnement logicielles modernes

Ruben CamerlynckRuben Camerlynck
|
#
#

Les dépendances open source sont l'épine dorsale des logiciels modernes, mais elles constituent également une surface d'attaque privilégiée. Les acteurs malveillants ciblent de plus en plus les registres de paquets et les flux de travail des développeurs pour injecter des malwares qui s'exécutent dès l'installation d'une dépendance. Cet article explique comment fonctionnent ces campagnes de malwares de la chaîne d'approvisionnement, pourquoi les scanners traditionnels les manquent, et les défenses pratiques que vous pouvez appliquer dès aujourd'hui.

Le paysage des menaces : pourquoi la chaîne d'approvisionnement est une cible privilégiée

Les acteurs de la menace — y compris les groupes parrainés par des États — exploitent activement les écosystèmes open source. Les attaques vont des comptes de mainteneurs compromis aux vers automatisés qui se propagent automatiquement à travers les registres. L'impact est amplifié par la réutilisation généralisée des packages : un seul module compromis peut être téléchargé des millions, voire des milliards de fois, à travers différents projets et organisations.

Comment les attaquants injectent des malwares

Il existe plusieurs techniques courantes utilisées par les attaquants pour introduire du code malveillant dans vos builds. Comprendre ces schémas facilite leur détection et leur blocage.

  • Prise de contrôle de compte — Un attaquant hameçonne un mainteneur ou vole des jetons de développeur pour des registres comme npm ou PyPI, puis publie un malware dans un package de confiance. Lorsque ce package est installé, chaque consommateur intègre le code malveillant.
  • Typosquatting — Les adversaires publient un package dont le nom est très similaire à celui d'un module populaire (par exemple, CCTVX vs CCXT). Une simple faute de frappe lors de l'installation peut vous faire récupérer un package malveillant au lieu du légitime.
  • Confusion de dépendances — Si le nom d'un package interne n'est pas strictement limité à un registre privé, les gestionnaires de packages peuvent préférer un package public portant le même nom. Les attaquants publient un package public qui surcharge votre dépendance interne.
  • Squatting par hallucination — Les grands modèles linguistiques (LLM) inventent parfois des dépendances qui n'existent pas. Les attaquants découvrent ce que les LLM ont tendance à halluciner, publient ces packages inventés et attendent les victimes qui copient le code généré dans leurs projets.
Diagramme comparant un « Package populaire » nommé Requests à un « Package mal orthographié » nommé Reqeusts pour illustrer le typosquatting.
Typosquatting : un package mal orthographié usurpe l'identité d'un module populaire.

Exemples concrets qui montrent l'ampleur du phénomène

Des incidents très médiatisés ont vu des packages largement utilisés être compromis, entraînant une exposition massive à travers l'écosystème. Dans d'autres cas, des vers auto-propageants ont volé des jetons de développeur pour propager automatiquement l'infection à d'autres packages — transformant une seule compromission en une campagne d'expansion.

Diagramme illustré de packages et de nœuds de dépendance infectés montrant les chemins de propagation
Diagramme montrant comment une dépendance infectée peut se propager à travers les packages.

Pourquoi les malwares sont pires qu'une vulnérabilité typique

Contrairement à une vulnérabilité qui doit être découverte et exploitée, un malware est intentionnellement conçu pour agir. De nombreux packages malveillants incluent des scripts de pré-installation ou de post-installation qui s'exécutent immédiatement lorsque la dépendance est installée. Les comportements malveillants courants incluent :

  • Contacter un serveur de commande et contrôle (C2) pour exfiltrer des données ou recevoir des commandes
  • Installer des portes dérobées ou obtenir l'exécution de code à distance sur les systèmes de build
  • Voler les jetons des mainteneurs de packages pour se propager à travers les registres

L'ampleur : des milliers de packages malveillants chaque mois

Les malwares dans les registres ne sont pas rares. Les équipes de recherche qui surveillent les registres trouvent des milliers de packages malveillants chaque mois. La plupart ne sont actifs que quelques heures avant d'être retirés, ce qui signifie que la détection doit être rapide et continue.

Capture d'écran de la page d'accueil d'Aikido Intel avec des compteurs affichant les vulnérabilités et un nombre de malwares de 28 992
Compteurs de veille sur les menaces en temps réel affichant des dizaines de milliers de détections de malwares.

Détection des malwares en temps réel

Étant donné que les versions malveillantes peuvent être actives pendant une très courte période, les outils de détection doivent fonctionner en quasi temps réel et s'intégrer aux workflows des développeurs. Deux capacités clés sont essentielles :

  • Renseignement sur les menaces en temps réel — Une base de données de paquets malveillants qui se met à jour en continu afin que les installations puissent être vérifiées par rapport aux derniers indicateurs.
  • Vérifications au niveau de l'installateur — Un petit wrapper à faible friction autour des gestionnaires de paquets qui valide les paquets avant leur installation, sans perturber le flux de travail du développeur.
Sortie du terminal : « Modifications malveillantes détectées : unused‑imports@0.0.1‑security. Voulez-vous continuer l'installation malgré les risques ? (o/N) »
Avertissement du wrapper au moment de l'installation qui bloque un paquet malveillant avant son installation.

Les outils qui se trouvent dans le chemin d'installation (par exemple, en encapsulant les installations npm, yarn ou pip) sont particulièrement efficaces car ils peuvent bloquer les malwares avant qu'ils n'atteignent une build ou une machine de développeur.

Comment les systèmes de renseignement sur les menaces repèrent les paquets malveillants

La détection des malwares de la chaîne d'approvisionnement est délicate car chaque indicateur peut également être bénin. Parmi les exemples d'indicateurs suspects, on trouve une forte obfuscation en base64, des appels sortants vers des domaines inhabituels et des caractères Unicode invisibles intégrés dans le code. N'importe lequel de ces signaux pourrait être légitime.

Pour distinguer le bruit des menaces réelles, les flux modernes utilisent une approche par couches :

  1. Analyse automatisée de centaines d'indicateurs sur les paquets nouvellement publiés.
  2. Des modèles d'IA ou de ML qui combinent les signaux d'indicateurs pour attribuer un score de probabilité de malveillance.
  3. Examen humain pour les cas à risque moyen, et suppression ou blocage automatisé pour les détections à haute confiance.

Contrôles pratiques que vous pouvez déployer dès aujourd'hui

Voici les étapes concrètes que les équipes de développement et de sécurité devraient prendre pour réduire les risques liés aux malwares de la chaîne d'approvisionnement :

  • Mettre en œuvre des registres privés/à portée limitée pour les paquets internes — Assurez-vous que les noms de paquets internes ne peuvent pas être confondus avec des paquets publics et configurez les gestionnaires de paquets pour qu'ils préfèrent toujours les registres privés pour les dépendances internes.
  • Enrober les commandes d'installation — Ajoutez une vérification au moment de l'installation dans la CI et sur les machines de développeur qui interroge un flux de menaces en direct avant d'autoriser l'installation du paquet.
  • Renforcer la sécurité des comptes de développeurs — Exigez l'authentification multifacteur pour les comptes de registre, faites pivoter les jetons et surveillez les connexions suspectes.
  • Réduire la dépendance aux paquets fraîchement publiés — Envisagez des politiques qui exigent un âge minimal pour les paquets lors des installations directes dans la CI afin de limiter l'impact des versions malveillantes publiées le jour même.
  • Intégrer le renseignement sur les menaces dans votre pipeline — Intégrez des listes de paquets malveillants en temps réel dans vos outils CI/CD, vos scanners de dépendances et vos outils IDE pour bloquer les paquets risqués dès le début.
  • Se préparer aux hallucinations de l'IA — Traitez les dépendances suggérées par les outils de génération de code comme non fiables tant qu'elles ne sont pas vérifiées ; évitez de copier aveuglément les noms de paquets générés dans les manifestes.

Réflexions finales

Les malwares de la chaîne d'approvisionnement sont une menace active et évolutive. Ils exploitent à la fois les erreurs humaines (hameçonnage, fautes de frappe) et l'automatisation (comportement des registres, hallucinations des LLM). Les combattre nécessite un renseignement sur les menaces en temps réel, des outils qui s'intègrent aux workflows normaux des développeurs, et une hygiène de base comme les registres à portée limitée et la MFA pour les mainteneurs.

Détecter et bloquer les paquets malveillants avant leur exécution protège non seulement votre base de code, mais aussi l'écosystème open source au sens large. Rendez la détection rapide, intégrez-la aux installations et traitez chaque nouvelle dépendance comme non fiable tant qu'elle n'est pas vérifiée.

« Les malwares dans la chaîne d'approvisionnement agissent immédiatement — vos défenses doivent agir plus vite. »

Essayez Aikido Security dès aujourd'hui !

4.7/5

Sécurisez votre logiciel dès maintenant.

Essai gratuit
Sans CB
Planifiez une démo
Vos données ne seront pas partagées - Accès en lecture seule - Pas de CB nécessaire

Sécurisez-vous maintenant.

Sécuriser votre code, votre cloud et votre runtime dans un système centralisé unique.
Détectez et corrigez les vulnérabilités rapidement et automatiquement.

Pas de carte de crédit requise | Résultats du scan en 32 secondes.