Explorer le pipeline DevOps sécurisé

Effectué

L’objectif d’un pipeline DevOps sécurisé est de permettre aux équipes de développement de travailler rapidement sans introduire de vulnérabilités de sécurité indésirables dans leurs projets. Cet équilibre entre la vélocité et la sécurité nécessite l’incorporation de pratiques de sécurité tout au long du pipeline plutôt que de traiter la sécurité comme une phase distincte.

Flux de travail de pipeline DevOps sécurisé

Un pipeline DevOps sécurisé complet intègre des vérifications de sécurité à plusieurs étapes du processus de remise de logiciels :

Diagramme montrant le flux de travail Azure Pipelines sécurisé avec 10 étapes interconnectées organisées dans un cercle continu représentant le processus de livraison intégré à la sécurité.

Le flux de travail garantit que la vérification de la sécurité est effectuée en continu à partir de la validation du code jusqu'au déploiement en production. Chaque étape inclut les contrôles de sécurité appropriés qui s’exécutent automatiquement sans nécessiter d’intervention manuelle pour les vérifications de routine.

Fonctionnalités de sécurité essentielles au-delà des pipelines standard

Les pipelines DevOps sécurisés incorporent des fonctionnalités de sécurité supplémentaires qui ne sont généralement pas trouvées dans les pipelines CI/CD standard. Ces fonctionnalités répondent aux vulnérabilités de sécurité courantes manquées par les pipelines traditionnels :

Gestion des packages avec approbation de sécurité

Le défi : Les applications modernes dépendent de nombreux packages, bibliothèques et composants tiers. Ces dépendances présentent des risques de sécurité :

  • Vulnérabilités connues : Les packages tiers peuvent contenir des vulnérabilités de sécurité connues que les attaquants peuvent exploiter.
  • Packages malveillants : Les attaquants publient parfois des packages malveillants avec des noms similaires aux packages populaires, espérant que les développeurs les installeront par erreur (typosquatting).
  • Attaques de chaîne d’approvisionnement : Les dépôts de packages compromis ou les comptes de maintenance peuvent entraîner la distribution de code malveillant via des canaux de mise à jour légitimes.
  • Conformité des licences : Certaines licences de package peuvent ne pas être compatibles avec votre utilisation prévue, ce qui crée des risques juridiques.
  • Packages non gérés : Les packages qui ne sont plus gérés ne recevront pas de mises à jour de sécurité, créant ainsi des vulnérabilités à long terme.

La solution : La gestion des packages avec des processus d’approbation ajoute des portes de sécurité pour les dépendances :

Étapes du flux de travail d’approbation :

  1. Demande de package : Les développeurs demandent l’approbation pour ajouter de nouveaux packages ou mettre à jour des packages existants.
  2. Analyse de la sécurité : Les outils automatisés analysent les packages pour détecter les vulnérabilités connues à l’aide de bases de données de vulnérabilité telles que CVE (Vulnérabilités courantes et exposition) et NVD (Base de données des vulnérabilités nationales).
  3. Révision de licence : Les outils automatisés vérifient les licences de package par rapport aux stratégies organisationnelles.
  4. Analyse des dépendances : Les outils analysent les dépendances transitives (dépendances des dépendances) pour les problèmes de sécurité.
  5. Révision manuelle : L’équipe de sécurité examine les packages ou packages à haut risque qui demandent des autorisations élevées.
  6. Approbation ou rejet : Les packages sont approuvés pour être utilisés, rejetés ou marqués pour la correction avant l’approbation.
  7. Surveillance continue : Les packages approuvés sont surveillés en permanence pour détecter les vulnérabilités nouvellement découvertes.

Avantages de l’identification anticipée : Ces étapes doivent être implémentées tôt dans le pipeline pour identifier les problèmes plus tôt dans le cycle de développement :

  • Les problèmes détectés tôt sont moins coûteux à résoudre que ceux trouvés en production.
  • Les développeurs peuvent choisir d’autres packages avant de créer des fonctionnalités significatives autour des dépendances vulnérables.
  • Les révisions de sécurité ne deviennent pas des goulots d’étranglement lorsqu’ils se produisent de manière incrémentielle plutôt que tous à la fois avant la mise en production.

Exemples d’outils :

  • Artefacts Azure : Fournit la gestion des packages avec des sources en amont et une analyse des vulnérabilités.
  • GitHub Dependabot : Détecte automatiquement les dépendances vulnérables et crée des pull requests pour les mettre à jour.
  • Snyk : Analyse les dépendances pour détecter les vulnérabilités et les problèmes de licence.
  • WhiteSource : Fournit une analyse de composition logicielle pour les composants open source.

Analyse de la sécurité du code source

Le défi : Le code source de l’application peut contenir des vulnérabilités de sécurité qui ne sont pas immédiatement évidentes pendant le développement :

  • Défauts d’injection : Injection SQL, injection de commandes et autres vulnérabilités d’injection.
  • Problèmes d’authentification : Mécanismes d’authentification faibles, informations d’identification codées en dur ou gestion incorrecte des sessions.
  • Exposition des données sensibles : Inclusion accidentelle de secrets, de clés API ou d’informations personnelles dans le code.
  • Configuration incorrecte de la sécurité : Configurations par défaut non sécurisées, fonctionnalités inutiles activées ou correctifs de sécurité manquants.
  • Utilisation de composants avec des vulnérabilités connues : Bibliothèques ou frameworks obsolètes présentant des problèmes de sécurité.
  • Journalisation et surveillance insuffisantes : Absence de journalisation adéquate des événements de sécurité pour la détection et la réponse aux incidents.

La solution : L’analyse du code source ajoute une analyse de sécurité automatisée au processus de génération :

Test de sécurité des applications statiques (SAST) :

  • Analyse le code source sans l’exécuter.
  • Identifie les vulnérabilités de sécurité potentielles dans le code.
  • Détecte les modèles de vulnérabilité courants tels que l’injection SQL, les scripts intersites (XSS) et les dépassements de mémoire tampon.
  • Fournit des emplacements de code spécifiques et des directives de correction.
  • S’exécute assez rapidement pour fournir des feedbacks pendant le processus de compilation.

Analyse des secrets :

  • Détecte les secrets validés accidentellement, tels que les clés API, les mots de passe et les certificats.
  • Empêche le déploiement d’informations d’identification en production.
  • Alerte les développeurs immédiatement quand des secrets sont détectés.
  • Peut révoquer automatiquement les informations d’identification détectées lorsqu’elles sont intégrées aux systèmes de gestion des secrets.

Analyse de la qualité du code :

  • Identifie les problèmes de qualité du code qui peuvent entraîner des vulnérabilités de sécurité.
  • Détecte les chemins de code complexes difficiles à sécuriser correctement.
  • Met en évidence les domaines qui ont besoin d’un examen supplémentaire de la sécurité.

Timing de l’analyse : L’analyse du code source se produit après la construction de l’application, mais avant les tests de mise en production et les tests de préversion.

  • Après la génération : Le code complet de l’application est disponible pour l’analyse, y compris le code généré.
  • Avant de tester : Les vulnérabilités sont identifiées avant que les ressources de test de sécurité ne soient investies.
  • Avant le déploiement : Les problèmes sont détectés avant d’atteindre des environnements intermédiaires ou de production.

Avantages de la détection anticipée :

  • L’analyse de source identifie les vulnérabilités de sécurité plus tôt dans le cycle de développement.
  • Les développeurs reçoivent des commentaires immédiats sur les problèmes de sécurité dans leur code.
  • Les problèmes de sécurité sont résolus alors que le code est nouveau dans l’esprit des développeurs.
  • Le coût de la correction des vulnérabilités est considérablement inférieur à celui de leur correction en production.

Exemples d’outils :

  • GitHub CodeQL : Moteur d’analyse de code sémantique qui détecte les vulnérabilités dans une base de code.
  • SonarQube : Outil d’inspection continue qui détecte les bogues, les odeurs de code et les vulnérabilités de sécurité.
  • Checkmarx : Plateforme de test de sécurité des applications statiques.
  • Veracode : Plateforme d’analyse de la sécurité avec des fonctionnalités SAST.
  • Analyse du code de sécurité Microsoft : Extension pour Azure DevOps qui exécute des outils d’analyse de sécurité.

Intégration avec la livraison continue

L’approbation de gestion des packages et l’analyse du code source s’intègrent en toute transparence dans les pipelines de livraison continue :

Portes automatisées : Les contrôles de sécurité deviennent des portes de pipeline automatisées qui doivent passer avant que le pipeline ne se poursuive. Les vérifications de sécurité ayant échoué empêchent l’avancement du code non sécurisé.

Commentaires rapides : Les développeurs reçoivent des commentaires de sécurité en quelques minutes au lieu de jours ou de semaines. Ce retour rapide permet des correctifs rapides avant la perte du contexte.

Visibilité de la sécurité : Les équipes de sécurité bénéficient d’une visibilité sur tous les codes et dépendances déployés sans avoir à passer en revue manuellement chaque modification.

Documentation de conformité : Les vérifications de sécurité automatisées créent des pistes d’audit documentant la validation de la sécurité à chaque étape du pipeline.

Résolution du cycle de vie complet

Dans les sections suivantes de ce module, nous allons explorer en détail ces fonctionnalités de sécurité essentielles :

  • Points de validation clés où les vérifications de sécurité doivent se produire.
  • Stratégies de validation de sécurité continue.
  • Approches d’implémentation pour différents types de pipelines.
  • Outils et techniques pour l’automatisation efficace de la sécurité.
  • Comment équilibrer la rigueur de la sécurité avec la vitesse de livraison.