Résumé

Effectué

Dans ce module, vous avez découvert comment intégrer la sécurité à chaque étape du cycle de vie du développement logiciel via les principes et pratiques DevSecOps . Les approches traditionnelles qui traitent la sécurité comme un point de contrôle final avant la mise en production créent des goulots d’étranglement, augmentent les coûts et ne parviennent souvent pas à intercepter les vulnérabilités critiques jusqu’à la production. En déplaçant la sécurité vers la gauche et en en faisant la responsabilité de tous, les organisations peuvent maintenir la vitesse de développement tout en améliorant considérablement leur posture de sécurité.

Attaques par injection SQL

Vous avez appris comment l’injection SQL reste l’une des vulnérabilités d’application web les plus dangereuses et les plus courantes :

  • Mécanisme d’attaque : Les attaquants insèrent du code SQL malveillant dans des entrées d’application, exploitant une validation d’entrée insuffisante pour manipuler des requêtes de base de données.
  • Dommages potentiels : Les attaques réussies peuvent contourner l’authentification, récupérer tout le contenu de la base de données, modifier ou supprimer des enregistrements, exécuter des commandes du système d’exploitation ou provoquer un déni de service.
  • Impact généralisé : L’injection SQL affecte tous les principaux systèmes de base de données, notamment MySQL, Oracle Database, Microsoft SQL Server, PostgreSQL et SQLite.
  • Éléments essentiels de la prévention : Protégez-vous contre l’injection SQL à l’aide de requêtes paramétrables, de validation et d’assainissement des entrées, d’application de principes de privilège minimum, d’exécution de tests de sécurité réguliers et de surveillance de l’activité de base de données.

Principes DevSecOps

Vous avez découvert comment DevSecOps transforme la sécurité d’un obstacle en un enabler :

  • Lacunes de sécurité dans les applications cloud : De nombreuses applications ont des lacunes de chiffrement pour les données au repos et en transit, et manquent de mécanismes de protection de session appropriés comme les en-têtes de sécurité HTTP.
  • Problèmes traditionnels : Les approches conventionnelles créent des travaux non planifiés à la fin des cycles de développement, des remaniements coûteux, des goulots d’étranglement dans les processus de mise en production et la déprioritisation des problèmes de sécurité.
  • Solution DevSecOps : Intégrez la sécurité dès le début du développement, ce qui en fait une responsabilité partagée entre les équipes de développement, d’exploitation et de sécurité.
  • Étendue de sécurité étendue : Au-delà du contrôle d’accès traditionnel et de la protection de périmètre, DevSecOps sécurise l’ensemble du pipeline, notamment les référentiels, les serveurs de build, le stockage d’artefacts, les outils de déploiement, l’infrastructure en tant que code, gestion de la configuration et gestion des secrets.
  • Sécurité en tant que code : Automatisez la sécurité de l’infrastructure (analyse IaC, stratégie en tant que code, vérification de conformité) et la sécurité des applications (SAST, DAST, SCA, analyse de conteneur) pour activer la validation continue de la sécurité.

Pipeline DevOps sécurisé

Vous avez examiné comment les pipelines sécurisés étendent le CI/CD standard avec des fonctionnalités de sécurité critiques :

  • Gestion des packages avec approbation de sécurité : Implémentez des flux de travail d’approbation qui analysent les packages pour détecter les vulnérabilités connues, passez en revue les licences, analysez les dépendances et surveillez en permanence les nouveaux problèmes de sécurité avant d’autoriser les composants tiers dans votre codebase.
  • Analyse de sécurité du code source : Déployez des tests de sécurité d’application statiques (SAST) pour analyser le code sans l’exécuter, l’analyse secrète pour empêcher l’exposition des informations d’identification et l’analyse de la qualité du code pour identifier les problèmes qui entraînent des vulnérabilités.
  • Timing de l’analyse : Exécutez des vérifications de sécurité après l’achèvement de la construction, mais avant le test et le déploiement, en fournissant une détection anticipée lorsque les coûts de correction sont les plus bas.
  • Intégration des outils : Utilisez des outils tels que GitHub CodeQL, SonarQube, Checkmarx, Veracode et Microsoft Security Code Analysis intégrés directement à votre pipeline.

Points de validation clés

Vous avez découvert des points de contrôle de sécurité critiques tout au long du processus de développement :

  • Vérifications de sécurité au niveau de l’IDE : Interceptez les vulnérabilités pendant l’écriture de code avec des commentaires en temps réel, des opportunités d’apprentissage immédiates et des correctifs avant la validation, ce qui réduit la boucle de commentaires en secondes.
  • Contrôles de validation du référentiel : implémentez des stratégies de branche Git nécessitant des révisions de code, une liaison d’élément de travail pour les pistes d’audit et des builds CI réussies avant de fusionner les modifications.
  • Exigences de révision du code : Vérifiez manuellement les problèmes de sécurité, notamment la validation d’entrée, l’authentification et les mécanismes d’autorisation, la gestion des données sensibles, l’utilisation de la bibliothèque de sécurité et l’absence de secrets codés en dur.
  • Vérifications automatisées dans les demandes de tirage : Exécutez l’analyse statique, les vérifications des vulnérabilités des dépendances, la détection des secrets et l’analyse de la qualité du code avec les résultats affichés directement dans l’interface de demande de tirage.
  • Implémentation progressive : Pour les produits matures, adoptez progressivement des points de validation, hiérarchisant les points de contrôle à impact élevé et créant une culture de sécurité au fil du temps.

Valide continue de la sécurité

Vous avez appris comment la validation continue maintient la sécurité tout au long du cycle de vie des logiciels :

  • Risques liés aux composants tiers : Les applications modernes dépendent fortement des packages open source et tiers, en introduisant des vulnérabilités de sécurité, des problèmes de conformité des licences et des vecteurs d’attaque de chaîne logistique.
  • Valeur de la détection anticipée : La recherche de vulnérabilités pendant les coûts de développement est de 10 à 100 fois moins que de les corriger en production, ce qui rend l’analyse automatisée critique sur le plan économique.
  • Analyse statique du code : Utilisez des outils tels que SonarQube, Visual Studio Code Analysis, Checkmarx, BinSkim et des analyseurs spécifiques au langage pour garantir que le code suit les règles de sécurité et de maintenance.
  • Analyse des vulnérabilités : Automatisez la détection des vulnérabilités connues dans les dépendances à l’aide d’outils tels que Mend (WhiteSource), GitHub Dependabot, Snyk et Azure Artifacts qui surveillent, hiérarchisent les risques et fournissent des conseils de correction.
  • Avantages de l’analyse de la composition logicielle : Bénéficiez d’une visibilité complète sur toutes les dépendances, effectuez le suivi des versions, identifiez les packages non gérés, hiérarchisez les risques avec les scores CVSS, maintenez la surveillance continue et générez la documentation de conformité.

Méthodologie de modélisation des menaces

Vous avez exploré la modélisation des menaces en tant qu’approche structurée pour comprendre les risques de sécurité :

  • Processus en cinq étapes : Définissez les exigences de sécurité (confidentialité, intégrité, disponibilité, conformité), créez des diagrammes d’application (composants, flux de données, limites de sécurité), identifiez les menaces à l’aide de la méthodologie STRIDE, développez des stratégies d’atténuation (éliminez, empêchez, détectez, répondez) et vérifiez que les atténuations restent efficaces.
  • Méthodologie STRIDE : Considérez systématiquement les menaces dans six catégories : usurpation d’identité, falsification des données, répudiation des actions, divulgation d’informations, déni de service et élévation de privilèges.
  • Menaces et atténuations courantes : Adressez l’injection SQL avec des requêtes paramétrables et la validation d’entrée, empêchez le détournement de session avec la gestion de session sécurisée et HTTPS, protégez-vous contre les attaques de type man-in-the-middle avec tls et l’épinglage de certificat, et atténuez les opérations DDoS avec les services de protection cloud et la limitation du débit.
  • Intégration du cycle de vie : Effectuez une modélisation complète des menaces lors de la conception initiale, répétez les nouvelles fonctionnalités importantes, effectuez des révisions périodiques, même sans modifications majeures, mettez à jour après les incidents de sécurité et réduisez progressivement les risques au fil du temps.
  • Outil de modélisation des menaces Microsoft : Utilisez cet outil gratuit pour visualiser les composants système avec une notation standard, générer automatiquement des menaces potentielles en fonction de la structure du système, documenter les décisions d’atténuation, suivre l’état de l’implémentation et s’intégrer à Azure DevOps.

Analyse automatisée de la sécurité CodeQL

Vous avez appris comment GitHub CodeQL permet une analyse de sécurité automatisée sophistiquée :

  • Analyse sémantique du code : CodeQL traite le code comme des données en les convertissant en une base de données interrogeable qui capture les arborescences de syntaxe, les graphiques de flux de contrôle et les chemins de flux de données, ce qui permet une détection précise des vulnérabilités qui comprend le contexte du code plutôt que simplement la correspondance de modèles.
  • Analyse en trois phases : Créez une base de données CodeQL représentant la structure de votre code, exécutez des requêtes sur la base de données pour rechercher des problèmes de sécurité et interpréter les résultats avec des priorités, des informations contextuelles et des conseils de correction.
  • Langage de requête CodeQL : écrivez des requêtes déclaratives à l’aide de la programmation logique orientée objet qui décrit ce qu’il faut rechercher plutôt que comment la trouver, avec des bibliothèques de requêtes standard étendues pour les principales vulnérabilités et catégories CWE OWASP.
  • Intégration de GitHub : Activez l’analyse du code en un clic, recevez des annotations inline sur les demandes de tirage affichant des lignes de code vulnérables, configurez CodeQL comme vérification requise qui doit passer avant la fusion et affichez toutes les conclusions de l’onglet Sécurité avec des explications détaillées.
  • Intégration du pipeline CI/CD : Utilisez CodeQL dans GitHub Actions, Azure Pipelines, Jenkins, GitLab CI/CD, CircleCI et des systèmes personnalisés via interface ligne de commande, en configurant des portes de sécurité qui provoquent l’échec des builds lorsque des vulnérabilités de gravité élevée sont détectées.
  • Outils de développement : Écrire et tester des requêtes dans Visual Studio Code avec l’extension CodeQL fournissant la mise en surbrillance de la syntaxe, la saisie semi-automatique, l’analyse locale et la prise en charge du débogage.

Points clés à prendre

Lorsque vous implémentez DevSecOps dans votre organisation, n’oubliez pas ces principes essentiels :

La sécurité est la responsabilité de tous : Passez au-delà de l’état d’esprit que la sécurité appartient uniquement à une équipe de sécurité. Les développeurs, les ingénieurs opérationnels, les testeurs et les parties prenantes métier contribuent tous à la sécurité des applications. Lorsque la sécurité fait partie du travail quotidien de tout le monde plutôt que d’une fonction distincte, vous créez une culture où les pratiques sécurisées sont la valeur par défaut.

Déplacer la sécurité vers la gauche : résoudre les problèmes de sécurité au plus tôt possible. La recherche et la résolution d’une vulnérabilité pendant les coûts de développement sont nettement inférieures à la résolution en production, souvent de 10 à 100 fois moins. En intégrant des vérifications de sécurité dans l’IDE, le processus de révision du code et le pipeline CI, vous interceptez les problèmes lorsqu’ils sont les plus simples et les moins chers à résoudre.

Automatiser la validation de la sécurité : Les révisions de sécurité manuelles ne sont pas adaptées aux cadences de publication modernes. Automatisez les vérifications de sécurité pour l’analyse statique du code, l’analyse des vulnérabilités des dépendances, la détection des secrets et la qualité du code. Automation fournit une validation de sécurité cohérente pour chaque validation sans ralentir la vitesse de développement.

Validez en continu : La sécurité n’est pas une porte unique avant la mise en production. Implémentez la validation de sécurité à plusieurs étapes : dans l’IDE du développeur, pendant la révision du code, dans les builds CI, avant le déploiement et en production. La validation continue crée plusieurs opportunités d’intercepter les problèmes et fournit une défense en profondeur.

Utilisez la modélisation des menaces de manière proactive : N’attendez pas que les incidents de sécurité réfléchissent aux menaces. Utilisez la modélisation structurée des menaces lors de la conception initiale et lors de l’ajout de fonctionnalités significatives. La méthodologie STRIDE fournit une approche systématique que les experts non en sécurité peuvent appliquer pour identifier les menaces et planifier les atténuations avant d’écrire du code.

Tirez parti des outils d’analyse automatisés : Les outils tels que CodeQL, SonarQube et Snyk permettent une analyse de sécurité sophistiquée qui serait impraticable à effectuer manuellement. Ces outils comprennent la sémantique du code, le suivi du flux de données et recherchent des vulnérabilités complexes dans les bases de code volumineuses. Intégrez-les à votre pipeline pour effectuer une routine d’analyse de sécurité avancée.

Suivez et gérez les dépendances : Les applications modernes dépendent fortement des composants tiers. L’analyse automatisée des dépendances identifie les vulnérabilités connues et les problèmes de conformité des licences dans vos dépendances. L’analyse de la composition logicielle offre une visibilité sur votre chaîne d’approvisionnement et vous aide à répondre rapidement lorsque de nouvelles vulnérabilités sont divulguées.

Documenter les décisions de sécurité : Utilisez la documentation sur la modélisation des menaces, les exigences de sécurité et les sorties d’outils automatisés pour créer des pistes d’audit montrant comment les problèmes de sécurité ont été résolus. Cette documentation démontre une diligence raisonnable, aide les nouveaux membres de l’équipe à comprendre le contexte de sécurité et fournit des preuves pour les exigences de conformité.

Équilibrer la vitesse et la sécurité : DevSecOps n’est pas sur le ralentissement du développement pour ajouter des vérifications de sécurité : il s’agit d’intégrer la sécurité de façon efficace qu’elle n’empêche pas la vitesse. Les outils automatisés, les stratégies claires et la sécurité intégrées aux flux de travail normaux permettent aux équipes de se déplacer rapidement sans compromettre la sécurité.

Itérer et améliorer : Commencez par des pratiques de sécurité à impact élevé et développez-les au fil du temps. Vous n’avez pas besoin d’implémenter chaque contrôle de sécurité immédiatement. Commencez par l’analyse automatisée des dépendances ou les vérifications de sécurité des pull requests, démontrez la valeur et ajoutez progressivement des points de validation plus avancés. L’amélioration continue de la sécurité reflète l’approche itérative de DevOps elle-même.

En appliquant ces pratiques DevSecOps, vous créez des logiciels qui sont fournis rapidement et sécurisés par conception. La sécurité devient un enabler plutôt qu’un obstacle, ce qui permet à votre organisation d’innover en toute confiance.

En savoir plus