· Guide · 3 min de lecture

Protéger son code des paquets malveillants

Les paquets malveillants et les dépendances compromises peuvent entrer par les flux normaux de développement. Voici des contrôles pratiques.

Les projets logiciels reposent sur des paquets tiers. C’est utile, mais cela veut aussi dire qu’une commande d’installation normale peut faire entrer du code externe dans une compilation, un poste de travail ou un déploiement de production.

Des attaquants peuvent abuser des écosystèmes de paquets avec des noms ressemblants, des comptes d’éditeurs compromis ou des mises à jour malveillantes. La question pratique n’est pas de savoir si une équipe peut éviter toute dépendance. C’est de savoir si les changements de dépendances sont visibles, reproductibles et révisables.

Utiliser un processus d’installation reproductible

Pour les projets npm, conservez le fichier package-lock.json. npm indique que le fichier de verrouillage enregistre l’arbre exact des dépendances afin que les collègues, les déploiements et l’intégration continue reproduisent le même état d’installation.[1]

Pour les déploiements Python qui demandent une assurance plus forte, pip prend en charge le mode de vérification par hachage avec --require-hashes. Cette option exige des exigences épinglées et des hachages pour les dépendances concernées.[2]

Un fichier de verrouillage ou une installation avec hachages ne rend pas automatiquement une dépendance sûre. Il rend toutefois les changements inattendus plus faciles à voir et à examiner.

Réviser avant d’installer

Traitez un nouveau paquet comme du code qui entre dans votre environnement. Avant de l’ajouter, vérifiez :

  • Le nom du paquet est-il exactement celui recherché?
  • L’éditeur, le dépôt et l’historique des versions sont-ils crédibles?
  • Le paquet est-il nécessaire ou une dépendance existante peut-elle répondre au besoin?
  • Quelqu’un a-t-il révisé le changement dans le contrôle de version?
  • Le paquet s’exécutera-t-il pendant l’installation, la compilation ou la production?

Évitez d’installer un paquet à partir d’une commande copiée sans vérifier son nom et sa source. Une petite faute d’orthographe peut suffire à créer le risque.

Surveiller les dépendances déjà utilisées

Utilisez les fonctions de sécurité offertes dans votre flux de développement. npm audit peut évaluer les dépendances par rapport à des avis connus, et npm prend en charge la vérification des signatures et de la provenance du registre lorsqu’elles sont disponibles.[3] Les alertes Dependabot de GitHub peuvent aviser un dépôt lorsqu’une dépendance vulnérable connue est détectée.[4]

Ces outils sont des signaux utiles, pas un remplacement pour la révision. Ils ne peuvent pas déterminer si un paquet convient à votre architecture, si une dépendance est réellement atteignable dans votre application ou si une mise à niveau brise un flux important.

Mettre en place une règle simple

  1. Ajoutez les dépendances par demande de tirage ou révision documentée.
  2. Conservez les fichiers de verrouillage ou utilisez des exigences épinglées et hachées pour les installations de production.
  3. Révisez les mises à jour de dépendances à fort impact avant le déploiement.
  4. Gardez les alertes actives et donnez à quelqu’un la responsabilité du triage.
  5. Retirez les paquets qui ne sont plus nécessaires.

SB Software peut aider les équipes à évaluer leurs pratiques de chaîne d’approvisionnement logicielle et à bâtir un plan d’amélioration concret. Contactez-nous ou consultez notre service de conseil en cybersécurité.

Références

  1. npm Docs, “package-lock.json”
  2. pip documentation, “Secure installs”
  3. npm Docs, “npm audit”
  4. GitHub Docs, “Dependabot alerts”
Retour au blogue