Informations techniques / Secure Software Supply Chain

Chaîne logistique logicielle sécurisée : mettre le logiciel en production rapidement et en toute sécurité

La mise en place d’une chaîne logistique logicielle sécurisée fait partie intégrante de la sécurité du développement logiciel et de l’accélération des capacités DevSecOps.


Qu’est-ce qu’une chaîne logistique logicielle sécurisée ?

Une chaîne logistique logicielle sécurisée désigne l’ensemble des processus utilisés pour mettre un logiciel (et ses dépendances) en production, de manière sécurisée, fiable et cohérente par le biais de mises à jour régulières du code source et de contrôles définis pour la gouvernance de la plate-forme.

Une chaîne logistique logicielle sécurisée permet de s’assurer que votre code et ses dépendances sont fiables, conformes, mis à jour et prêts à être publiés. Elle assure que des analyses régulières sont réalisées pour détecter, signaler et éliminer les vulnérabilités. Un ensemble défini de règles appliqué de manière cohérente dans tous les systèmes de la chaîne évite les accès non autorisés et empêche l’exécution de packages non signés.




Meilleures pratiques en matière de chaîne logistique logicielle sécurisée

Pour développer une chaîne logistique logicielle sécurisée, vous avez besoin d’un ensemble d’outils et de pratiques qui permettent à votre entreprise de déployer vos packages logiciels (propriétaires et tiers) en les faisant passer du code source à la production rapidement et avec une qualité correspondant au niveau de risque acceptable.

VMware a identifié cinq axes stratégiques pour un développement de logiciels sécurisé. Ils permettront aux entreprises d’intégrer la sécurité au développement de logiciels agile et de réduire les attaques dirigées contre la chaîne logistique logicielle.

  1. 1. Sécuriser le code source de l’application

    Le code que vous écrivez est la partie du cycle de vie du développement de logiciels sur laquelle vous avez le plus de contrôle. Inutile d’avoir une chaîne logistique sécurisée, si le code n’est pas lui-même sécurisé. En mettant en place des stratégies pour garantir la sécurité du code, vous pouvez réduire les attaques dirigées contre la chaîne logistique.

    Meilleures pratiques

    • Vous devez permettre aux développeurs de prendre en charge la sécurité dans les environnements de production.
    • Utilisez un contrôle d’accès pour les référentiels de code afin d’éviter les changements de codes interdits et non souhaités.
    • Utilisez les méthodes de linting/d’accès au code statique. Elles peuvent vous aider à identifier des erreurs de programmation courantes pendant le développement. Ainsi, elles ne se transforment pas en bugs de production qui peuvent être ciblés par des attaques.
    • Faites vérifier le code par un pair pour éviter les vulnérabilités non souhaitées introduites par erreur, et les vulnérabilités intentionnelles et malveillantes introduites par un cybercriminel.
    • Renforcez la gestion des secrets pour que le code ne comporte pas d’informations d’authentification et de configurations sensibles. Vous pouvez ainsi éviter une attaque en cas de fuite de code, d’ingénierie inverse ou de toute autre forme de divulgation.
    • Utilisez la méthode SAST (Static App Security Testing), un type de test de sécurité logicielle, pour analyser le code source et rechercher les schémas de code qui correspondent à des pratiques de codage médiocre.
    • Utilisez l’analyse SCA (Source Composition Analysis) pour vérifier les bibliothèques, les structures et les composants tiers utilisés dans l’application.

    Résultats

    • Les développeurs d’applications peuvent écrire du code de qualité en suivant les meilleures pratiques en matière de sécurité.
    • Les référentiels sont fiables.
    • Le code source ne comporte aucun secret ni données d’environnement sensibles.
  2. 2. Gérer les dépendances des applications

    En général, les développeurs ne démarrent pas de zéro lorsqu’ils créent leurs versions. Pour gagner du temps et accélérer le développement, ils peuvent utiliser un code préétabli provenant d’environnements open source ou d’autres catalogues. Le logiciel doit donc prendre en compte les morceaux de code préétabli intégrés dans la version finale lors des vérifications et des corrections de vulnérabilités dans l’application en production.

    Pour sécuriser la conception et le développement du logiciel, vos équipes doivent visualiser les dépendances des applications. Pour réduire le risque qu’une dépendance soit exploitée, il est important de procéder à des analyses régulières afin de s’assurer que toutes les bibliothèques sont corrigées et exemptes de vulnérabilités et expositions communes (CVE).

    Meilleures pratiques

    • Analysez régulièrement les vulnérabilités des dépendances pour vous assurer que toutes les bibliothèques sont corrigées et exemptes de CVE.
    • Corrigez les dépendances vulnérables rapidement.
    • Épinglez les dépendances (lockfiles) sur des versions vérifiées spécifiques afin d’éviter l’introduction de nouvelles vulnérabilités en mettant à jour une dépendance par inadvertance.
    • Prenez plutôt des dépendances provenant de sources connues et fiables, utilisées par de nombreux développeurs. Elles sont moins susceptibles d’être compromises que les sources moins fiables.
    • Sachez exactement quelles sont les dépendances utilisées. Les applications modernes comportent en général des dizaines de dépendances, ce qui crée un vecteur d’attaque où les vulnérabilités sont introduites loin dans la hiérarchie de la dépendance.
    • Déterminez quel est le bon moment pour prendre une nouvelle dépendance. Dans certains cas, vous pouvez réduire la surface d’attaque en évitant de prendre des dépendances importantes.
    • Évaluez les mises à jour des dépendances existantes. Les fournisseurs de logiciels distribuent souvent les mises à jour à partir d’un serveur centralisé dans le cadre d’une maintenance de routine. Si un cybercriminel s’infiltre dans le réseau du fournisseur, il peut insérer un logiciel malveillant qui ressemble à une mise à jour normale du produit.
    • Pratiquez la gestion des risques.

    Résultats

    • Les développeurs peuvent valider en toute confiance la provenance des dépendances tierces et internes.
    • Les équipes responsables des applications visualisent la nomenclature logicielle de leurs applications.
    • Les parties prenantes peuvent identifier rapidement les applications vulnérables aux CVE.
    • Vous profitez d’une application de correctifs sur les vulnérabilités des dépendances des applications.
  3. 3. Sécuriser les systèmes d’intégration et livraison continues (CI/CD)

    La gouvernance joue un rôle important dans le contrôle de votre pipeline d’intégration et livraison continues (CI/CD). La mise en place et la bonne configuration des autorisations pour l’utilisation du système peuvent contribuer à sécuriser votre chaîne logistique logicielle. Cela inclut le principe du privilège minimum.

    Meilleures pratiques

    • Mettez en place un contrôle d’accès pour les pipelines CI/CD et évitez les contournements en supprimant les portes latérales.
    • Utilisez des comptes système avec le principe du privilège minimum pour exécuter des travaux, des tâches et des scripts dans les pipelines d’automatisation.
    • Effectuez des déploiements en mode pull et non en mode push. Lorsque vous effectuez des déploiements en mode push, vous devez exposer les informations d’authentification en dehors du système cible. Dans les déploiements en mode pull, les informations d’authentification du système cible ne sont pas exposées. Les contrôleurs synchronisent les modifications de statut des référentiels Git (GitOps) ou des registres d’images.
    • Gérez les informations d’authentification pour les pipelines CI/CD et assurez-vous que vos outils de déploiement demandent des informations d’authentification pour accéder aux environnements les plus sensibles.
    • Générez et stockez des journaux de version et des pistes d’audit.

    Résultats

    • Les développeurs peuvent valider en toute confiance la provenance des dépendances tierces et internes.
    • Les équipes responsables des applications visualisent la nomenclature logicielle de leurs applications.
    • Les parties prenantes peuvent identifier rapidement les applications vulnérables aux CVE.
    • Vous profitez d’une application de correctifs sur les vulnérabilités des dépendances des applications.
  4. 4. Sécuriser les versions et registres d’images

    Lorsque vous sécurisez les images de conteneur, le but est de réduire le nombre de CVE graves dans le registre de l’image et de diminuer le temps nécessaire à la correction des CVE. Pour ce faire, il faut que les images de base soient fiables et signées, et que les règles de contrôle soient appliquées au référentiel d’images.

    Meilleures pratiques

    • Mettez en place des règles de contrôle/d’accès pour les référentiels d’images. Toutes les références de l’image doivent être autorisées et validées par un processus CI automatisé afin de réduire au minimum les accès extérieurs.
    • Utilisez un petit ensemble d’images de base approuvées pour réduire la surface d’attaque. Assurez-vous que les images de base sont signées et versionnées. Les images de base fiables sont identifiées, disponibles et utilisées pour la version.
    • Stockez les images et/ou les objets d’application dans un endroit sécurisé. Appliquez les règles de contrôle pour les référentiels d’images et assurez-vous que les images sont signées lorsqu’elles sont stockées dans un registre.
    • Mettez à jour la base de données des vulnérabilités et utilisez-la pour les analyses régulières fréquentes des vulnérabilités des images.
    • Utilisez une version d’image sécurisée et reproductible, produite à l’aide d’un ensemble connu d’objets fiables. Assurez-vous que l’introduction de portes dérobées pendant la création de la version est difficile et détectable.
    • Tracez les objets qui sont mis en production pour vous assurer que ces mêmes objets utilisés pour les tests sont transférés dans des environnements supérieurs. Les pistes d’audit sont disponibles.
    • Balisez les images.
    • Validez les attestations.

    Résultats

    • Les images d’application sont signées pour garantir leur intégrité.
    • Les images sont stockées dans un registre sécurisé.
    • Les objets déployés sont fiables.
    • Vous avez une visibilité sur les vulnérabilités des images.
    • Il existe une correction opérationnelle des vulnérabilités des images.
  5. 5. Sécuriser le runtime

    La mise en place d’une architecture zéro confiance, de l’approche SIEM (gestion des informations et des événements de sécurité) et d’outils de détection des menaces avancées crée un environnement plus sécurisé pour vos applications et votre plate-forme de développement des applications. L’intégration de l’observabilité au sein de vos opérations de plate-forme vous aidera à surveiller votre runtime et à comprendre le fonctionnement de vos applications.

    Meilleures pratiques

    • Les ingénieurs en sécurité doivent être en mesure de détecter les attaques en mettant en corrélation un certain nombre d’événements, avec un outil SIEM ou d’autres outils de détection des menaces qui permettent d’identifier certains événements indiquant qu’un cybercriminel a obtenu l’accès.
    • Analysez les vulnérabilités du runtime pour vous aider à identifier les vulnérabilités dans les environnements Kubernetes.
    • Sécurisez vos communications réseau pour empêcher les cybercriminels d’avoir accès à un réseau, puis de passer facilement aux autres réseaux et environnements de confiance. Sécuriser les données en transit par le biais de communications sécurisées est essentiel pour empêcher les cybercriminels de détecter le trafic réseau.
    • Adoptez une stratégie mutualisée sécurisée. Utilisez un espace de nommage et une stratégie de cluster pour l’isolation pour ajouter un contrôle d’accès basé sur les rôles.
    • Configurez correctement votre environnement de développement afin d’éviter les violations de sécurité, souvent causées par une infrastructure mal configurée.
    • Gérez les secrets pour garantir qu’ils sont correctement distribués aux applications et services qui en ont besoin. Ces applications et services doivent uniquement avoir accès aux secrets dont ils ont besoin pour fonctionner. Cela permet de réduire la surface d’attaque et l’impact d’une potentielle violation.
    • Mettez en place un accès sécurisé à l’environnement pour que seuls les utilisateurs autorisés aient accès à votre environnement. Pour ce faire, il peut être opportun d’utiliser différents contrôles de sécurité. Les accès non autorisés doivent être détectables.
    • Faites des tests de sécurité des applications dynamiques (test de la « boîte noire ») pour trouver des vulnérabilités et des failles de sécurité dans une application en fonctionnement.
    • Faites en sorte que les images non signées ne soient pas exécutées dans un environnement de production.
    • Réduisez le temps nécessaire pour corriger les vulnérabilités de sécurité dans votre chaîne logistique.
    • Appliquez les règles de façon cohérente. Déterminez, appliquez et testez les règles de sécurité, les audits de journaux, les règles de conformité et les règles du réseau.
      • Les règles de sécurité et d’accès doivent être appliquées avec cohérence.
      • Le système refuse d’exécuter un code qui ne provient pas d’une chaîne logistique logicielle sécurisée.
      • Il est facile de faire des erreurs en écrivant les règles (Rego). Vous devez donc les développer avec soin et en effectuant les tests appropriés.
      • Testez les règles intégrées pour vérifier qu’il n’y a pas de conflit.

    Résultats

    • L’isolation des charges de travail est garantie, de sorte qu’aucune charge de travail voisine ne puisse les impacter, y avoir accès ou interférer avec elles.
    • La communication entre les services sur le réseau est sécurisée et fiable.
    • Les développeurs peuvent visualiser rapidement les CVE des applications.
    • La plate-forme d’hébergement des charges de travail est actualisée, à jour et sécurisée.


L’importance d’une chaîne logistique logicielle sécurisée

L’accent mis sur le développement des logiciels est devenu très important au cours de ces dernières années, car les attaques qui visent la chaîne logistique se multiplient. Dernièrement, l’Executive Order on Improving the Nation’s Cybersecurity a identifié les meilleures pratiques en matière de sécurité pour la chaîne logistique des entreprises. Ce document vise à résoudre les failles de la chaîne logistique dans lesquelles les cybercriminels s’engouffrent pour accéder au processus de développement et insérer un logiciel malveillant dans le code source. Ce logiciel malveillant est capable de se propager en aval dans le logiciel publié. Les cybercriminels peuvent alors voler les informations des entreprises qui utilisent l’application. L’Executive Order crée un élan pour que les entreprises des États-Unis développent plus de chaînes logistiques logicielles sécurisées et évitent les failles qui pourraient perturber les fonctions essentielles de l’infrastructure.

Comprendre et atténuer les vulnérabilités de votre voie vers la production permet de réduire les risques liés aux investissements commerciaux, offre des opportunités de fournir des logiciels plus sécurisés aux utilisateurs à un rythme soutenu et supprime les frictions pour les développeurs qui déploient le code. Tanzu propose des solutions pour sécuriser les outils avec des dispositifs définis par l’opérateur que les développeurs aimeront utiliser. Les experts de Tanzu Labs travaillent avec vous afin d’établir des processus pour votre entreprise qui favorisent la collaboration entre les équipes de développement et de sécurité. Nous vous aiderons à améliorer vos pratiques DevSecOps avec nos solutions éprouvées et à sécuriser votre processus de développement d’applications sur une plate-forme où vous pouvez mettre en place des idées qui apportent de la valeur à votre entreprise.