De la même manière que le test est devenu incontournable dans le développement logiciel, on parle désormais de sécurité. Et ce, d’autant plus depuis l’avènement du Cloud, des démarches comme le DevOps, et du respect nécessaire des règles RGDP en Europe. Dans ce contexte, la volonté d’intégrer aux équipes DevOps, les équipes en charge de la sécurité se fait de plus en plus présente avec comme objectif d’initier une démarche plus globale ‘DevSecOps’.

Dans cet article, nous verrons :

  1. Sécurité et DevOps : enjeux et défis
  2. Qu’est-ce que le DevSecOps ?
  3. Une évolution logique du DevOps
  4. Comment intégrer la sécurité au DevOps

Sécurité et DevOps : enjeux et défis

Malgré ses nombreux avantages, le DevOps s’accompagne de changements culturels et de risques potentiels liés à la sécurité. Cela peut représenter un défi difficile à relever avec des pratiques traditionnelles de gestion de la sécurité, notamment pour soutenir l’automatisation de la chaine CI/CD. Parmi ces défis, on peut relever :

La gestion des secrets centrée sur les outils

Bien que les outils DevOps disposent de fonctionnalités de protection, elles ne sont pas forcément les mieux adaptées pour un partage sécurisé entre les outils, les clouds et les plateformes. Les développeurs ont donc tendance à utiliser les fonctionnalités intégrées à leurs outils pour gérer les secrets ce qui complique la gestion homogène ainsi que la bonne protection contre les éventuelles attaques.

Cyber attaque

Les processus DevOps requièrent des identifiants dit ‘à privilèges’, accès spéciaux très puissants, censés être sécurisés qui sont la cible des cyberattaques. La gestion de ces accès est un enjeu, que ce soit :

  • Les accès humains dans les environnements de développement et de production.
  • Les accès machine pour accéder aux ressources sans intervention humaine. Exemples :
    • Outils d’automatisation : Ansible, Puppet ou Chef
    • Outils CI/CD : Jenkins, Azure DevOps et Bamboo
    • Outils de gestion de conteneurs : Docker et Linux Containers (LXC)
    • Outils d’orchestration de conteneurs : Kubernetes, Red Hat OpenShift, Pivotal, Cloud Foundry

Les outils comme Ansible et Jenkins, par exemple, ont accès à des identifiants utilisés par de nombreux autres outils.

L’accès à ces identifiants peut présenter, pour les hackers, la porte ouverte à :

  • Tous les pipelines DevOps,
  • Des bases de données sensibles,
  • L’ensemble du cloud de l’organisation cible.

Les hackers le savent, et recherchent de plus en plus les identifiants de type mots de passe, clés d’accès, clés SSH ou tokens, mais aussi les certificats, les clés de chiffrement ou les clés API pour effectuer des attaques de type minage frauduleux de cryptomonnaies, fuites de données et destruction de propriété intellectuelle.

Manque de sensibilisation des développeurs

Les équipes DevOps sont bien souvent plus focus sur la livraison du code en prod que sur la sécurité : il peut leur arriver de laisser des secrets et des identifiants dans les applications et dans les fichiers de configuration, de réutiliser du code tiers sans vraiment de précautions, d’adopter de nouveaux outils sans évaluer les problèmes de sécurité potentiels, ou encore de ne pas protéger suffisamment les outils et l’infrastructure DevOps. Toutes ces pratiques échappent au champ d’action des équipes de sécurité alors qu’elles sont critiques pour la sécurité.

Qu’est-ce que le DevSecOps ?

Le DevSecOps consiste à intégrer la sécurité dans la démarche DevOps. Il s’agit non seulement de la mise en place d’environnements de tests et gestion de tests en continu (que ce soit les tests unitaires menés par le développeur, les tests d’intégration menés par un testeur dédié, les tests du système complet ou encore les tests d’acceptation, menés avec des utilisateurs pilotes) mais aussi et surtout d’intégrer la sécurité en amont.

L’équipe de sécurité (qui peut être un architecte ou un développeur senior spécialisé dans la sécurité) définit d’emblée les règles nécessaires pour l’équipe à savoir

  • Normes de codage sécurisé,
  • Normes ou spécifications liées au règlement RGDP
  • Règles permettant d’éviter les API non sécurisées et un chiffrement faible,
  • Instructions pour l’utilisation des analyses statiques et dynamiques et des instructions de test…

En intégrant dès le début dans le pipeline, les contrôles, les directives et les normes de codage… la sécurité fait partie intégrante du processus de développement logiciel.

L’objectif est de faire évoluer les développeurs vers des logiciels plus sécurisés dans le cadre de leur routine quotidienne et l’automatisation contribue à en faire une réalité.

DevSecOps, une évolution logique du DevOps

Il n’est pas forcément aisé d’introduire des correctifs de sécurité ou des normes de codage dans un projet considéré comme ‘terminé’, si l’on s’aperçoit des failles de sécurité lorsque le produit est sorti, dans le meilleur des cas, il faudra attendre une nouvelle version du produit pour les corriger.

Certaines équipes convaincues par le bien-fondé d’une démarche DevOps ont assez naturellement intégré la sécurité dans leur processus. Ils impliquent très tôt les équipes de sécurité dans le cycle de développement y compris dans les phases amont de planification et de conception.

Les organisations qui ont compris que la sécurité pouvait contribuer de manière non négligeable à l’atteinte d’objectifs communs ont potentiellement une longueur d’avance dans la mise en place des pratiques DevOps.

Livre Blanc - DevOps - SoftFluent

En fait, plus la culture de l’entreprise est ouverte, plus l’entreprise est à même de fournir des innovations au rythme de plus en plus rapide des exigences client.

Comment intégrer la sécurité au DevOps ?

Pour réussir l’intégration de DevOps de manière sécurisée dans son entreprise, il faut déjà de base respecter les principes DevOps à savoir : rapprocher les équipes, aligner les outils et les processus pour mieux répondre aux besoins métiers.

Les principaux points clés pour une mise en œuvre réussie de la sécurité dans une démarche DevOps sont les suivants :

  • Intégrer dès le départ les acteurs de la sécurité dans le projet et configurer les exigences de sécurité.
  • Instaurer un climat de confiance mutuelle avec une communication transparente : mise en place de tableaux de bords, rapports de sécurité, visibles par toutes les parties prenantes
  • Automatisez les garde-fous permettant de bloquer la génération d’exécutables en cas de risque important.
  • Standardiser la chaîne de production du logiciel et éviter les customisations non standards et privilégier l’utilisation d’environnements identiques pour les tests et la production
  • Validez en permanence avec une surveillance en temps réel des journaux de sécurité

Bonnes pratiques du DevSecOps

Former les développeurs aux menaces de sécurité et aux meilleures pratiques du DevSecOps.

Bien répartir les responsabilités. Dans une équipe DevOps, il est nécessaire de définir clairement des responsabilités et des rôles distincts :

  • Les développeurs doivent se concentrer sur la création d’applications pour développer les résultats commerciaux.
  • Les équipes opérationnelles doivent se concentrer sur le développement d’une infrastructure fiable et évolutive.
  • Les équipes de sécurité doivent se concentrer sur la protection des actifs et des données et sur la réduction des risques.

Tout en privilégiant les interactions et la collaboration, principe même du DevOps.

Intégrer la sécurité dans les pratiques CI/CD. Plutôt que de corriger les problèmes de sécurité, il est bien évidemment plus efficace de les anticiper et d’intégrer la sécurité en amont, très tôt dans le cycle et notamment

  • Réduire la concentration des privilèges dans les outils d’automatisation des versions et s’assurer que les référentiels de code n’exposent aucun secret.
  • Appliquer le principe du moindre privilège pour garantir que les machines et les personnels peuvent uniquement accéder aux ressources dont ils ont absolument besoin
  • Conserver les secrets utilisés par les machines et les personnes (mots de passe, certificats, clés API, tokens et clés SSH) dans un coffre-fort sécurisé et hautement disponible, en dehors du code source et en dehors des ordinateurs des développeurs et des systèmes de stockage accessibles par les utilisateurs. Renouveler régulièrement les secrets pour réduire l’exposition.
  • Établir une base de référence des modèles d’utilisation normaux afin de détecter les anomalies de telle sorte que les utilisateurs mal intentionnés puissent être retrouvés et qu’ils ne puissent pas voler d’identifiants.
  • Attribuer à chaque machine sa propre identité unique afin d’auditer et de superviser la façon dont elle accède aux différents secrets.
  • Exécuter des analyses de vulnérabilité et des tests de pénétration pour améliorer votre posture de cyber sécurité

Les microservices par exemple vont dans le sens de la simplification des contrôles de sécurité et la sécurité as Code, grâce notamment à l’automatisation des configurations

Automatisation de la sécurité

Le DevOps utilise l’automatisation pour accélérer la gestion du cycle de vie des applications et éliminer la latence des opérations humaines. De même, l’automatisation de la sécurité permet de réduire les interactions humaines et les interventions manuelles.

  • Appliquer le concept de Sécurité as Code. On parle de plus en plus d’infrastructure as Code comme l’un des piliers du DevOps. Iac est le fait d’appliquer les bonnes pratiques DevOps à l’infrastructure de sorte qu’elle soit automatisée, cohérente et reproductible. En appliquant le même concept à la sécurité, non seulement on rapproche les équipes mais surtout on élimine les processus de configuration manuels relatifs à la sécurité, particulièrement sources d’erreurs et on automatise la sécurité
  • Planifier la sécurité en amont avec toutes les parties prenantes : processus systématique et pratiques codifiées pour l’ensemble du cycle de vie du logiciel
  • Ecrire des user stories : sécurité des fonctionnalités essentielles et des exigences client
  • Répondre aux exigences de la livraison continue avec des contrôles et des tests de sécurité effectués très tôt dans le cycle
  • Automatiser les contrôles de conformité pour non seulement respecter les normes légales mais aussi les meilleures pratiques de sécurité avec par exemple, renouvellement automatique des identifiants en cas de détection d’une faille.
  • Effectuer des contrôles de sécurité dans l’environnement de tests

Lire aussi | La Supervision du DevOps, en route vers l’amélioration continue

Micaël, expert DevOps, s’exprime sur le sujet :

« L’intégration de la sécurité, qui devrait être une évidence, ne l’est malheureusement pas toujours, d’où ce terme « DevSecOps », extension du DevOps, comme pour insister davantage sur l’importance de sa mise en œuvre. Un des principes du DevOps est celui du « Shift Left ». Ce principe consiste à réaliser le plus tôt possible tout ce qui peut l’être dans le cadre du cycle de vie d’un logiciel, d’une application ou d’un service.

Tout comme le développeur est invité à s’assurer que son code compile et que les tests unitaires s’exécutent sans erreur sur son poste de développement avant de le pousser vers le contrôle de source, ce principe doit aussi s’appliquer à la sécurité, dès la conception. Ainsi, une réflexion générale doit être menée sur le stockage et le chiffrement des données sensibles, sur la qualité d’écriture du code, sur la mise en place et l’exécution de multiples tests et d’outils capables d’analyser le code et de ses dépendances et de suggérer des corrections et améliorations.

Si votre application est destinée à être hébergée sur le Cloud, il peut être intéressant de regarder les solutions proposées vous permettant de sécuriser le stockage de vos identifiants, mots de passe, tokens et autres secrets. Sur Azure, on peut par exemple s’appuyer sur Azure Key Vault. Afin d’éviter de stocker les clés d’accès à Azure Key Vault ou à d’autres ressources faisant partie de votre infrastructure dans le code, Azure propose également Managed Service Identities qui s’appuie sur Azure Active Directory.

La prise en compte de la sécurité ne doit pas se faire qu’au niveau du code. Elle doit aussi s’appliquer à l’ensemble de la chaîne d’outils exploités par le DevOps. Il faut donc également aborder la question de l’autorisation d’accès à ces outils. En effet, la majorité de ces outils peut interagir avec le code, à commencer par l’outil de contrôle de source. Si son accès n’est pas suffisamment contrôlé et sa configuration mal construite, il est probable que du code non validé soit poussé sur la branche principale. De même, il ne faut pas se contenter des configurations par défaut des outils. Il est nécessaire d’interroger les experts de la sécurité de l’entreprise pour qu’elles deviennent conformes aux règles définies par la gouvernance. »

Automatisez le déploiement de vos applications

Ne ratez plus aucune actualité avec la newsletter mensuelle de SoftFluent

Newsletter SoftFluent