Pour garantir la meilleure expérience de navigation, veuillez activer JavaScript dans votre navigateur web. Sans cela, de nombreuses fonctionnalités du site seront inaccessibles.


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

Temps de lecture:3 min.

Docker est un outil formidable qui peut vous faire gagner beaucoup de temps et d'efforts.
Apprenez à utiliser Docker de manière aussi sécurisée que possible et détectez les menaces potentielles à l'avance afin de garantir la sécurité des conteneurs Docker.

Qu'est-ce que la sécurité des conteneurs Docker?
Qu'est-ce que la sécurité des conteneurs Docker?
Demo

Nous vous avons déjà expliqué comment sécuriser la solution populaire d'orchestration de conteneurs Kubernetes. Cette fois-ci, nous allons approfondir le sujet et, dans cet article, vous découvrirez comment assurer la sécurité de la plateforme de conteneurisation bien connue Docker. Si vous recherchez toujours les différences entre ces deux technologies, nous vous suggérons de lire cet article Kubernetes vs Docker publié par Ubuntu.

Vous souhaitez avoir une compréhension approfondie de tous les aspects modernes de la sécurité des conteneurs Docker? Lisez attentivement cet article et ajoutez-le à vos favoris pour y revenir plus tard, nous mettons régulièrement cette page à jour.

Docker a rapidement fait irruption dans le monde des conteneurs et, en quelques années, est passé d’un simple module complémentaire à un système permettant de lancer, d’orchestrer, de regrouper, de configurer, de fournir et de créer des conteneurs avec des logiciels. La question de la sécurité des conteneurs Docker est donc devenue très pertinente. Docker dispose également d’une interface simple pour contrôler les contraintes de ressources. Docker est basé sur les espaces de noms Linux, qui permettent d’isoler et de virtualiser les ressources système telles que le réseau, les processus, les points de montage et les utilisateurs.

Nous pouvons ainsi lancer n'importe quel processus de manière totalement isolée, tant du système lui-même que des autres conteneurs, dans notre environnement logiciel unique, avec notre propre réseau, notre propre arborescence de processus, notre propre système de fichiers et notre propre réseau. Tout d'abord, il convient de comprendre ce que sont les conteneurs. Il s'agit d'un objet durable qui résiste aux contraintes liées au stockage, au chargement et au transport, et qui protège son contenu.

Vous pouvez également imaginer un port maritime où des milliers de conteneurs sont empilés les uns sur les autres. La plupart des marchandises sont livrées dans de tels conteneurs, car ils sont non seulement résistants, mais aussi standardisés, faciles à stocker et à transporter, tandis que la majorité des personnes impliquées dans la livraison n'ont aucune idée de leur contenu, car cela n'a aucune importance pour la livraison.

Le concept de conteneurs logiciels est similaire, car il s'agit d'images isolées et immuables contenant des logiciels, dont la fonctionnalité est le plus souvent accessible via une API. Il s'agit d'une solution moderne pour exécuter des logiciels de manière fiable dans presque tous les environnements. La virtualisation de conteneurs basée sur Docker est extrêmement populaire, car elle permet de déployer rapidement des outils de développement et de test de logiciels, voire des projets entiers composés de nombreux composants.

Tout irait bien s’il n’y avait pas toute une classe de menaces spécifiques. Il s’agit de la possibilité d’évasion du conteneur vers le système hôte, de l’arrêt de l’instance en raison d’un déni de service, des cas d’exploitation de vulnérabilités du noyau du système d’exploitation, ainsi que du dépôt d’images de référence pré-compromises dans le référentiel, et d’attaques similaires.

Qu'est-ce qu'un conteneur Docker?

Docker est un logiciel permettant d'automatiser le déploiement et la gestion d'applications au sein d'environnements conteneurisés. Ce logiciel permet de packager n'importe quelle application, avec son environnement et ses dépendances, dans un conteneur dédié.

Ainsi, chaque conteneur que nous créons comprend déjà tout ce qui est nécessaire au fonctionnement de l'application: bibliothèques, outils système, code et environnement d'exécution. Avec Docker, les administrateurs DevOps et les développeurs peuvent rapidement déployer, échelonner et exécuter leurs applications dans n'importe quel environnement, tout en s'assurant que le code qu'ils écrivent fonctionnera correctement.

Docker possède de nombreuses fonctionnalités propres aux systèmes de virtualisation traditionnels, telles que l'indépendance, qui permet de déplacer un conteneur vers n'importe quel système d'exploitation sur lequel le service Docker a été préalablement installé et de le démarrer à l'aide d'une seule commande, ainsi que l'autosuffisance, qui permet au conteneur d'exécuter toutes les fonctions qui lui sont assignées, où qu'il soit démarré, sans configuration ni service supplémentaire.

Cependant, contrairement à la virtualisation traditionnelle, où nous construisons généralement l’image nous-mêmes, Docker fonctionne avec des images provenant de référentiels. Il existe des référentiels publics et privés d’images officielles et non officielles. Dans la documentation, ils sont appelés «docker registry» et le référentiel le plus populaire et le plus fréquemment utilisé aujourd’hui est Docker Hub.

Comparaison entre Docker et VM

Une image Docker est un ensemble séquentiel de couches logicielles. Chaque couche est le résultat d'une commande dans le Dockerfile. Autrement dit, l'image est le modèle à partir duquel on lance le conteneur. Tout ce qui est lancé à partir de cette image est le conteneur lui-même. Ainsi, Docker dispose d'une fonctionnalité très utile permettant d'exécuter plusieurs copies identiques de cette image à partir d'une image préparée, c'est-à-dire des conteneurs.

La sécurité des conteneurs Docker présente ses propres vulnérabilités et failles, qui peuvent malheureusement être exploitées par des pirates, comme tout autre logiciel. Des comptes root mal configurés exposant les conteneurs à une compromission, des images légales contenant des portes dérobées préparées, des exploits PoC fonctionnels, et un bug critique très récent pour lequel aucun correctif n’est encore disponible.

Problèmes de sécurité courants liés à Docker

1. Sécurité du système hôte. L'une des questions de sécurité les plus simples et en même temps les plus importantes pour Docker est la sécurité de la machine hôte, en particulier du noyau du système d'exploitation. En effet, dans un système déjà compromis, l'isolation et les autres mécanismes de sécurité des conteneurs que nous pourrions utiliser ont peu de chances de nous aider. Si le système d'exploitation hôte n'est pas correctement sécurisé, le conteneur dans Docker ne sera pas non plus sécurisé. Par conséquent, les meilleures pratiques en matière de sécurité du système d'exploitation hôte doivent être respectées.

Il serait utile d'effectuer plusieurs vérifications pour détecter la présence de vulnérabilités. En effet, Docker est conçu de telle manière que tous les conteneurs en cours d'exécution utilisent le noyau de l'hôte. Par conséquent, l'hôte doit être une distribution Linux corrigée et mise à jour, sans vulnérabilités connues ni signes d'infection par des logiciels malveillants.

Un exemple classique de ce type de cas est l’évasion d’un conteneur Docker. Dans la documentation officielle, ce bug est appelé «container breakout» et décrit une situation dans laquelle un programme s’exécutant à l’intérieur d’un conteneur parvient à contourner les mécanismes d’isolation et à obtenir des privilèges root ou l’accès à des informations importantes stockées sur l’hôte. Pour mettre en œuvre une protection contre de telles situations, la règle consistant à réduire le nombre de privilèges accordés par défaut au conteneur est utilisée. Ainsi, si le démon Docker s’exécute sous root, nous créons pour lui un espace de noms au niveau utilisateur avec des privilèges minimaux.

2. Épuisement des ressources, ou DDoS par conteneur. En comparant les conteneurs aux machines virtuelles, les premiers sont plus légers. Même sur un matériel ancien et faible, on peut exécuter de nombreux conteneurs. Cependant, des erreurs dans la configuration des démons, de la pile réseau, des failles architecturales peuvent entraîner un Denial of Service.

Par exemple, un certain conteneur ou un ensemble complet de conteneurs peut consommer toutes les ressources CPU de l'hôte et dégrader ses performances. Une situation similaire peut survenir avec les interfaces réseau lorsque le nombre de paquets générés dépasse la bande passante réseau normale. Mais la solution ici est assez simple: il suffit de configurer correctement les limites de ressources pour le conteneur.

3. Une sortie en dehors du conteneur Docker. Cette situation est fréquente dans les conteneurs Docker contenant une grande quantité de logiciels tiers. En raison de la difficulté à analyser leur contenu et du faible intérêt porté à celui-ci, ils peuvent contenir du code malveillant capable de contourner toutes les restrictions et politiques de sécurité mises en œuvre.

C’est ainsi que les données à accès limité sont compromises. Pour remédier à ce problème de sécurité Docker, on peut adopter une approche sérieuse consistant à limiter les autorisations à chaque conteneur individuel, au détriment également d’un espace de noms personnalisé.

4. L'authenticité des images Docker. Soyez prudent en utilisant des images Docker disponibles sur le web. Elles peuvent contenir du code malveillant caché. Vérifiez toujours leur contenu.

Il convient de noter que la méthode d'encapsulation est inefficace dans ce cas. Même les images auto-construites peuvent être modifiées par des logiciels tiers après leur construction. Par conséquent, vérifiez toujours la construction finale.

Comment assurer la sécurité des conteneurs Docker

Transport Layer Security. Limitez les connexions au démon Docker pour les utilisateurs ayant accès aux comptes TLS du client. Spécifiez les commandes autorisées pour chaque utilisateur et créez le plugin d'autorisation approprié pour Docker. Lors du démarrage du démon Docker, pointez vers le plugin créé.

Secrets dans Docker. Les informations confidentielles doivent être conservées sous forme de secrets créés à l’aide de la commande `docker service create`. Si vous ajoutez l’option `"icc": false` au fichier de configuration situé dans `/etc/docker/daemon.json`, la communication entre les conteneurs sera désactivée afin d’éviter les fuites d’informations inutiles.

Paramètres du démon. Le démon Docker démarre avec un ensemble d'options par défaut.

  • live-restore- conteneurs sans démons pour maximiser la disponibilité après un arrêt ou un redémarrage. Cette option facilite l'installation des mises à jour et des correctifs en minimisant les temps d'arrêt.
  • userland-proxy = falseLorsque des hairpin NAT sont disponibles ou utilisés, les proxys personnalisés deviennent redondants et ne font qu'augmenter la portée des attaques.
  • seccomp-profile/path/to/profile- cette option permet d’ajouter un profil seccomp personnalisé.
  • no-new-privileges- interdire aux conteneurs d'obtenir des privilèges supplémentaires via suid ou sguid.

Fichier de configuration et conteneur. Assurez-vous qu’un utilisateur a été créé pour le conteneur et que celui-ci s’exécute sous cet utilisateur, et non sous root. Si un accès distant est nécessaire, sécurisez cet accès à l’aide de certificats, sinon n’autorisez pas l’accès distant au démon.

Isolation d'un espace de noms personnalisé. Il est particulièrement important de s'assurer que l'espace de noms personnalisé est isolé dans Docker, car il est partagé par défaut avec l'espace de noms hôte. Dans certains cas, une telle fonctionnalité peut être utilisée pour étendre les privilèges ou même pour quitter le conteneur. Vous pouvez isoler votre espace de noms personnalisé en modifiant le fichier de configuration comme décrit dans la section Fichier de configuration Docker ci-dessus. L'isolation est réitérée pour souligner l'importance de cette mesure.

Interfaces réseau. Par défaut, Docker écoute sur toutes les interfaces réseau. Puisque, dans la plupart des cas, le trafic est attendu sur une seule interface, la surface d'attaque est inutilement augmentée. Ainsi, lors du démarrage d'un conteneur, vous pouvez lier les ports du conteneur à des interfaces hôte spécifiques.

Socket. N’exécutez jamais de sockets Docker à l’intérieur d’un conteneur, car cela vous permettrait d’exécuter des commandes Docker dans le conteneur et, par conséquent, d’interagir avec et de gérer le système d’exploitation hôte.

Docker Trust. Cet utilitaire permet de générer des clés pour vérifier l’intégrité cryptographique des images. Ces clés peuvent être utilisées pour signer les images avec des clés privées, vérifiées à l’aide des clés publiques sur le serveur Notary.

Contrôles préventifs. Healthcheck est un outil puissant utilisé pour vérifier l'intégrité d'un conteneur et peut être configuré dans le fichier dockerfile. Vous pouvez également utiliser ImmuniWeb Discovery, un outil universel permettant de vérifier la surface d'attaque du système d'information de votre organisation. Ce type de contrôle doit être effectué périodiquement afin de vérifier que le conteneur fonctionne correctement et d'assurer la sécurité des conteneurs Docker.

Recherche de vulnérabilités. Docker Enterprise dispose d’un scanner de vulnérabilités intégré qui permet de télécharger la base de données CVE et de l’exécuter hors ligne pour analyser les images. L’analyse continue des images renforce la sécurité des conteneurs Docker en permettant de réagir rapidement à l’apparition de failles.

Politique. Choisir une politique spécifique en fonction de vos besoins, voire en utiliser plusieurs, est une excellente opportunité de détecter autant de vulnérabilités que possible. Cependant, toutes les vulnérabilités ne sont pas identiques et ne s'appliquent pas toutes aux applications, conteneurs ou environnements. Vous devez donc examiner non seulement leur gravité, mais aussi les facteurs à partir desquels cette gravité est calculée.

Cela inclut le vecteur d'attaque, la gravité de l'attaque, l'impact sur la confidentialité, l'impact sur l'intégrité, etc. Ces facteurs permettent ensuite de déterminer le score de gravité final à l'aide du calculateur CVSS. Les valeurs de ces indicateurs sont: aucun, faible, moyen, élevé et critique. Vous trouverez plus d'informations à ce sujet sur le site Web du NIST.

Certaines vulnérabilités de sécurité des conteneurs Docker sont faciles à corriger, mais ce n'est pas toujours le cas. Lorsqu'il s'agit de problèmes liés aux images de base ou aux paquets intégrés, la responsabilité incombe aux développeurs de ce logiciel. Cependant, vous devez empêcher ou au moins atténuer l'exploitation des vulnérabilités existantes et futures.

Résumé

Docker est un outil essentiel pour tout développeur moderne, car il constitue la base de la virtualisation des applications matérielles. Cette technologie offre de nombreuses fonctionnalités et capacités pour le contrôle des processus. Docker permet non seulement de déployer des conteneurs, mais aussi de les scaler rapidement, de travailler avec des applications Docker Compose multi-conteneurs et de combiner plusieurs hôtes Docker en un seul cluster Docker Swarm.

Docker se caractérise par une syntaxe assez simple, ce qui le rend facile à apprendre tant pour les professionnels IT expérimentés que pour les débutants. Le logiciel est compatible avec toutes les versions des systèmes d'exploitation Linux et Windows, ce qui rend le champ d'application de Docker pratiquement illimité. Cependant, n'importe quel composant peut créer une vulnérabilité: les paquets installés dans le conteneur Docker, les bibliothèques utilisées, et même l'image de base.

En matière de sécurité des conteneurs Docker, il est toujours préférable de s’en occuper à l’avance et d’essayer d’éviter les vulnérabilités avant qu’elles ne deviennent un véritable problème. Ces outils sont faciles à utiliser, de sorte que tout développeur peut les intégrer à son flux de travail quotidien ou les intégrer à son pipeline de construction et de déploiement.

Ressources supplémentaires

  • En savoir plus sur la gestion des surfaces d'attaque basée sur l'IA avec ImmuniWeb® Discovery
  • En savoir plus sur les tests de pénétration des applications basés sur l'IA avec ImmuniWeb
  • En savoir plus sur les opportunités du programme de partenariat ImmuniWeb
  • Suivez-nous sur LinkedIn, X, Telegram et WhatsApp
Démonstration gratuite Partager sur Twitter Partager sur LinkedIn

Réduisez vos risques cybernétiques maintenant

Veuillez remplir les champs surlignés en rouge ci-dessous.

Obtenez votre démonstration gratuite
d'ImmuniWeb® Plateforme
IA

  • Obtenez votre évaluation gratuite du risque cybernétique
  • Commencez un essai gratuit des produits ImmuniWeb
  • Recevez des prix personnalisés
  • Parlez avec nos experts techniques
  • Sans engagement
Gartner Cool Vendor
SC Media
IDC Innovator
*
*
*
*
Privé et confidentielVos données seront privées et confidentielles.
Parlez à un expert