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 :
- Sécurité et DevOps : enjeux et défis
- Qu’est-ce que le DevSecOps ?
- Une évolution logique du DevOps
- 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.
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