7 bonnes pratiques en matière de sécurité des conteneurs

juillet 18, 2023

Les conteneurs sont couramment utilisés dans le cycle de vie des applications. Ils résolvent le problème de la situation selon laquelle « ça marche sur ma machine » en permettant l’exécution fiable d’une application dans différents environnements informatiques. La sécurité des conteneurs vise à protéger ces derniers contre les compromissions de sécurité à chaque étape du cycle de vie de développement de l’application.

Cet article aborde le concept de sécurité des conteneurs, ses principaux défis et les bonnes pratiques pour développer des applications conteneurisées sécurisées.

Qu’est-ce que la sécurité des conteneurs ?

La sécurité des conteneurs est le processus continu de protection des environnements conteneurisés contre les risques à l’aide de contrôles de sécurité. Les environnements conteneurisés comprennent non seulement les conteneurs et les applications qui s’y exécutent, mais aussi l’infrastructure sous-jacente comme le runtime de conteneur, le noyau et le système d’exploitation hôte.

Selon l’enquête CNCF 2021, 93 % des entreprises utilisaient déjà des conteneurs en production ou prévoyaient de le faire. Parallèlement à cette tendance, les entreprises basculent vers des architectures cloud natives et doivent répondre aux exigences d’une fourniture plus rapide des applications. En d’autres termes, l’intégration des bonnes pratiques de sécurité des conteneurs tout au long du cycle de vie DevOps est essentielle pour garantir des applications de conteneurs sécurisées et prévenir les compromissions de sécurité sévères et leurs conséquences.

2023 Cloud Risk Report

Download this new report to find out which top cloud security threats to watch for in 2023, and learn how best to address them to stay protected through 2024.

Download Now

Les défis liés à la sécurité des conteneurs

Les conteneurs offrent de nombreux avantages pour accélérer la fourniture des applications, notamment la portabilité entre différentes plateformes et l’autorisation donnée à des applications autonomes d’exécuter des processus dans des environnements isolés tout en partageant le noyau sous-jacent. Cependant, les conteneurs sont dépourvus de toute capacité de sécurité propre. Au lieu de cela, ils obtiennent l’accès au matériel par l’intermédiaire du système d’exploitation hôte. Un seul conteneur peut également comporter plusieurs images de conteneur sous-jacentes, ce qui ajoute de nouvelles surfaces d’attaque qui présentent des défis de sécurité uniques dont nous examinerons quelques exemples dans cet article.

Erreurs de configuration des conteneurs

Un écueil courant du développement avec conteneurs se situe au niveau de la mentalité de certains développeurs, qui ont une tendance au « set-and-forget » (configurer et oublier). De ce fait, il existe peut-être des configurations par défaut non sécurisées dont ils n’ont pas connaissance. Voici quelques exemples d’erreurs de configuration de sécurité les plus courantes :

  • Ports non sécurisés exposés qui ne sont pas nécessaires à l’application
  • Fuite de secrets et d’identifiants, comme les mots de passe et les jetons d’authentification
  • Privilèges de runtime de conteneur trop permissifs, tels que l’exécution des conteneurs en tant que racine

En cas de négligence avant déploiement, ces erreurs de configuration peuvent exposer les conteneurs à une compromission de sécurité ou laisser la porte ouverte à des attaques par élévation des privilèges.

Vulnérabilités dans l’infrastructure des conteneurs

Un ensemble d’infrastructure de conteneurs se compose généralement de code d’application, de configurations, de bibliothèques et de packages intégrés dans une image de conteneur. Celle-ci s’exécute à l’intérieur d’un conteneur sur le noyau du système d’exploitation hôte par l’intermédiaire d’un runtime de conteneur.

Chaque étape du cycle de vie des conteneurs peut potentiellement générer des compromissions de sécurité dans l’infrastructure de conteneurs, ce qui augmente ainsi la surface d’attaque exploitable pendant l’exécution. Ces vulnérabilités peuvent également provenir de dépendances externes intégrées à l’image du conteneur, voire exister dans l’hôte et le runtime du conteneur au sein de l’ensemble.

Les images de conteneur peuvent en outre hériter des vulnérabilités de sécurité des bibliothèques et packages open source qui font partie de l’application, ce qui les expose aux attaques. Les développeurs peuvent construire des images de conteneurs à partir d’images de base provenant de registres de conteneurs tiers. Celles-ci peuvent involontairement contenir des vulnérabilités de sécurité ou se voir intentionnellement remplacées par une image compromise par des cyberpirates.

Enfin, les conteneurs et les hôtes peuvent contenir des vulnérabilités exploitables via les réseaux, les hôtes et les endpoints lorsque le conteneur s’exécute sur le noyau du système d’exploitation de l’hôte. Les vulnérabilités d’échappement des conteneurs dans le noyau hôte et le runtime du conteneur, notamment, pourraient ouvrir la porte à des vecteurs d’attaque qui s’appuient sur l’élévation des privilèges locaux afin d’exploiter les vulnérabilités de l’hôte et d’effectuer un mouvement latéral sur le réseau, compromettant ainsi l’ensemble de votre infrastructure cloud.

Visibilité des workloads des conteneurs

Le principal défi de sécurité des conteneurs est la visibilité des workloads des conteneurs. Au vu du dynamisme élevé des workloads des conteneurs et de leur nature généralement éphémère, il peut s’avérer difficile pour les équipes de sécurité de surveiller et de suivre les anomalies dans l’activité des conteneurs.

Étant donné que les problèmes de sécurité des conteneurs peuvent se propager rapidement à d’autres conteneurs et applications, il est essentiel de cultiver la visibilité des informations de runtime des conteneurs comme des hôtes afin que les protecteurs puissent identifier et atténuer les vulnérabilités dans les environnements conteneurisés.

Problèmes liés à la sécurisation des pipelines CI/CD

La sécurité des conteneurs nécessite de sécuriser toutes les phases du pipeline CI/CD, du code de l’application au workload du conteneur en passant par son infrastructure. Cependant, les développeurs ont tendance à appliquer les protocoles de sécurité vers la fin du cycle de vie d’une application. Cela laisse souvent très peu de temps pour les tests de sécurité étant donné que les développeurs sont pressés par des calendriers serrés de livraison des applications.

7 bonnes pratiques pour la sécurité des conteneurs

Heureusement, il existe des moyens établis pour surmonter ces défis à tout moment afin d’optimiser la sécurité de votre environnement conteneurisé et du cycle de vie de vos applications.

1. Sécurisez vos images

Lors du développement des applications conteneurisées avec des images de base provenant d’un registre de conteneurs externe, sélectionnez les images de sources fiables et stockez-les dans un registre privé sécurisé afin de minimiser le risque de piratage. Les cyberattaquants peuvent toujours compromettre les images des registres de confiance, assurez-vous donc de vérifier les signatures d’images via Notary ou autre outil similaire.

De plus, les balises des images sont modifiables, ce qui vous confronte par exemple à plusieurs images dotées d’une balise « dernière version » à différents moments. Utilisez des balises d’image fixes et immuables, comme le condensé d’image, pour garantir des générations automatisées cohérentes et empêcher les attaques qui exploitent la mutabilité des balises.

2. Gérez les secrets en toute sécurité

Évitez de stocker des secrets et des identifiants dans du code ou des fichiers de configuration, même un fichier Docker. Autrement, ces données sensibles seront copiées dans les conteneurs et mises en cache dans les couches de conteneurs intermédiaires, même en cas de suppression du conteneur. Une bonne pratique courante de gestion sécurisée des secrets consiste à utiliser un gestionnaire de secrets dédié, tel que Vault ou AWS Secrets Manager, pour stocker et gérer les secrets ainsi que les identifiants.

3. Restreignez les privilèges des conteneurs au niveau du runtime

Le principe du moindre privilège consiste à accorder uniquement le niveau minimum d’autorisation nécessaire à un utilisateur pour effectuer une tâche donnée. Il s’agit d’un aspect essentiel en matière de sécurité, qui s’applique également à la sécurité des conteneurs au niveau du runtime.

Les conteneurs s’exécutent généralement sous la forme d’un utilisateur doté des privilèges de racine afin d’autoriser diverses opérations système au sein du conteneur, comme l’installation de packages et les opérations de lecture-écriture dans les fichiers de configuration système. Toutefois, l’exécution de conteneurs avec des privilèges racine présente un risque de sécurité majeur, car elle permet aux cyberattaquants d’exploiter l’élévation des privilèges au sein du conteneur si le runtime du conteneur est compromis.

Il est donc essentiel de restreindre les privilèges des conteneurs au niveau du runtime en vue d’atténuer les vulnérabilités du noyau hôte et du runtime du conteneur. Vous pouvez y parvenir en exécutant les conteneurs en mode sans racine, ce qui vous permet de les exécuter en tant qu’utilisateurs non racine. Autrement, vous pouvez limiter les capacités du noyau Linux au strict nécessaire en abandonnant toutes les capacités par défaut et en ajoutant uniquement celles qui sont nécessaires au workload du conteneur.

4. Identifiez et résolvez les erreurs de configuration de sécurité

Identifier les erreurs de configuration de sécurité lors de la génération des images de conteneurs vous permet de résoudre les vulnérabilités avant de mettre en production les applications conteneurisées. Ce processus implique de vérifier les paramètres de configuration par le biais d’une analyse statique de la configuration. Ceci peut s’avérer fastidieux et facteur d’erreurs humaines en cas d’exécution manuelle.

Les outils de sécurité dans le cloud tels que la gestion du niveau de sécurité du cloud (CSPM) CrowdStrike Falcon Horizon™ simplifient la gestion des configurations de sécurité en comparant les configurations à des points de référence et en fournissant une procédure de résolution qui permet aux développeurs d’atténuer les risques de sécurité liés aux erreurs de configuration constatées.

5. Automatisez la recherche et la gestion des vulnérabilités

L’automatisation de la recherche et de la gestion des vulnérabilités dans le pipeline CI/CD vous permet de détecter les vulnérabilités de sécurité à chaque étape du cycle de vie des conteneurs et ainsi d’atténuer les risques de sécurité avant qu’ils ne se produisent.

Le balayage du code consiste à analyser le code de l’application à la recherche de vulnérabilités de sécurité et de bugs de code. Les tests statiques de sécurité des applications (SAST) détectent les vulnérabilités dans le code de l’application. Quant à l’analyse de la composition du logiciel (SCA), elle offre une visibilité sur les composants open source de la structure de l’application en générant une nomenclature logicielle (SBOM) et en croisant les composants avec des bases de données de vulnérabilités open source connues.

L’analyse des images consiste à examiner le contenu et le processus de génération de ces images de conteneurs pour y déceler des vulnérabilités. Vous pouvez y parvenir grâce à des outils d’analyse statique, comme Clair, qui analysent chaque couche à la recherche de vulnérabilités de sécurité connues. Vous pouvez également utiliser des outils d’analyse dynamique comme CrowdStrike Container Security qui détecte les risques de sécurité en retraçant le comportement d’un conteneur en cours d’exécution.

Dernier élément, et non des moindres, l’analyse de l’hôte consiste à inspecter les composants de l’hôte du conteneur, notamment le noyau et le système d’exploitation de l’hôte, à la recherche de vulnérabilités au niveau du runtime et d’erreurs de configurations. Pour cela, les développeurs utilisent les tests dynamiques de sécurité des applications (DAST), un test en « boîte noire » qui détecte les vulnérabilités grâce à des attaques simulées sur l’application conteneurisée.

6. Configurez la journalisation, la surveillance et les alertes en temps réel

L’amélioration de la visibilité des workloads de conteneur nécessite le recours à des outils d’observabilité qui permettent la journalisation des événements, la surveillance et le test en temps réel afin de détecter les vulnérabilités de chaque composant de l’environnement conteneurisé. Vous pouvez détecter les cybermenaces envers la sécurité des conteneurs en effectuant un audit des logs et indicateurs provenant de différentes sources de l’infrastructure de conteneurs, ainsi qu’en analysant les détails et l’activité des conteneurs à la recherche d’anomalies de comportement dans le système.

La mise en place d’une journalisation, d’une surveillance et d’alertes en temps réel vous fournit de la visibilité, une capacité de détection continue des cybermenaces et une surveillance permanente de la conformité afin de garantir la correction des vulnérabilités et des erreurs de configuration dès leur détection.

7. Adoptez la sécurité « Shift Left »

Plutôt que d’adopter une approche « shift right » qui traite la sécurité des pipelines CI/CD comme une réflexion après coup, vous pouvez adopter une approche plus proactive en déplaçant la sécurité vers la gauche sur la chronologie.

La sécurité « Shift Left » fait référence au basculement des questions de sécurité vers les premières phases du cycle de vie de développement des applications. Elle permet aux développeurs de fournir des applications de conteneur sécurisées sans ralentir le processus de développement des applications. En effet, les équipes ont le temps d’identifier et de résoudre les problèmes ou vulnérabilités le plus tôt possible. L’intégration de l’analyse des vulnérabilités à chaque étape du pipeline CI/CD entraîne moins de problèmes de production et permet à DevOps et à la sécurité de travailler en parallèle, ce qui accélère la livraison des applications sans compromettre la sécurité des conteneurs.

EN SAVOIR PLUS

Découvrez comment utiliser un agent léger facile à déployer pour examiner les menaces potentielles. Lecture : Comment CrowdStrike augmente la visibilité des conteneurs

Conclusion

L’application des bonnes pratiques de sécurité des conteneurs implique de sécuriser chaque étape du cycle de vie du conteneur, à commencer par le code de l’application jusqu’au-delà du runtime du conteneur. Étant donné que la sécurité des conteneurs est un processus continu et que les cybermenaces de sécurité évoluent constamment, vous pouvez progressivement mettre en œuvre certaines de ces pratiques en intégrant les produits et services de sécurité des conteneurs CrowdStrike.