Published Date: March 1, 2021
La sécurité des conteneurs est le processus consistant à utiliser des outils et définir des stratégies pour assurer la protection des conteneurs contre les menaces et la sécurité de leur environnement d’exécution, tout en protégeant l’infrastructure de l’entreprise contre les attaques.
La sécurité des conteneurs est cruciale pour la même raison que celle du réseau et des applications : des conteneurs compromis par un tiers malveillant peuvent non seulement corrompre les processus et les tâches qu’ils exécutent, mais aussi ouvrir la porte à une chaîne d’attaques supplémentaires visant le réseau de l’entreprise.
La sécurité des conteneurs est un domaine complexe par nature en raison de la complexité générale de l’environnement des conteneurs. La stratégie de sécurité des conteneurs doit sécuriser les conteneurs et le code qui s’exécute en leur sein, leurs dépendances et leurs bibliothèques, le déploiement des conteneurs, le développement des applications, les plateformes DevOps et d’orchestration, ainsi que l’infrastructure plus large sur laquelle toutes ces technologies fonctionnent.
Pour protéger l’entreprise, la sécurité des conteneurs doit être un élément clé dès le processus de développement, en grande partie parce qu’elle est beaucoup plus difficile à mettre en œuvre après le déploiement de l'environnement de conteneurs. Dans cet article, nous allons explorer les bonnes pratiques de sécurisation des conteneurs et des applications conteneurisées, et aborder les défis liés à la sécurisation des grandes plateformes de conteneurs du marché.
Qu’est-ce qu’un conteneur ?
Un conteneur est un code compact, léger et normalisé conçu pour être modulaire et portable, ce qui permet de le déployer facilement dans n’importe quel environnement informatique. Les conteneurs portent ce nom parce qu’ils contiennent le code d’une application ainsi que les dépendances du code qui permettent son exécution, notamment les bibliothèques système et divers paramètres. En revanche, les conteneurs ne contiennent pas de code de système d’exploitation et opèrent sur un système d'exploitation partagé : ils sont donc particulièrement légers et rapides. Un conteneur type ne pèse que quelques centaines de mégaoctets, tandis que la taille d'une machine virtuelle classique (qui inclut le code du système d’exploitation) peut facilement atteindre 80 gigaoctets ou plus.
Les conteneurs sont un aspect clé du développement des microservices, qui décomposent le code en modules à fonction unique, lesquels sont connectés de façon souple et peuvent être déployés indépendamment. Conceptuellement, les microservices permettent un développement rapide et une gestion plus aisée des applications complexes. IDC a récemment prédit que « d’ici 2023, plus de 500 millions de nouvelles applications logiques seront créées, soit l’équivalent du nombre d’applications créées au cours des 40 dernières années » et que les conteneurs seraient un élément essentiel de cette tendance.
La technologie des conteneurs s’est agrégée autour de deux plateformes principales, Docker et Kubernetes. En outre, tous les principaux fournisseurs de services cloud proposent une gamme d’outils conçus pour rationaliser le développement, le déploiement et la gestion des conteneurs.
Qu'est-ce qui pousse les entreprises à investir dans la sécurité des conteneurs ?
La conteneurisation devenant l’environnement dominant pour le déploiement des applications, sa sécurisation est elle aussi devenue impérative. L’un des arguments de vente des conteneurs est précisément qu’ils sont largement considérés comme plus sûrs que les applications traditionnelles. En réalité, ils ne le sont ni plus ni moins.
Le problème majeur de la sécurité des conteneurs est attribué à la nature des conteneurs. Si le code s’exécute plus rapidement sur les conteneurs, leur fonctionnement interne reste relativement invisible pour les opérations. Des problèmes de sécurité surgissent lorsque les équipes d’opérations ou de sécurité négligent involontairement les menaces, les problèmes de contrôle d’accès et d’autres défauts de sécurité, et que les développeurs de conteneurs ignorent les vulnérabilités de leur code.
La sécurité des conteneurs est un sujet plus complexe encore en raison de son impact sur l’environnement : elle ne concerne pas seulement l’exécution du conteneur, mais aussi les environnements de développement, de création et d’orchestration, ainsi que les stratégies de sécurité associées. Sécuriser un conteneur implique de s’assurer qu’il ne contient pas de code malveillant tout en protégeant l’écosystème plus vaste contre les attaques.
Pourquoi la sécurité des conteneurs est-elle si importante ?
La sécurisation des conteneurs devient d’autant plus impérative que la migration du développement vers cette technologie s’intensifie. En raison de l’opacité relative des conteneurs évoquée ci-dessus, la sécurité et les outils de sécurité associés jouent un rôle crucial dans le développement initial. Et comme les technologies de conteneurs en général – et les techniques requises pour les sécuriser – sont relativement nouvelles, leur sécurité doit être mise en œuvre correctement dès le début, avant qu’un incident majeur ne se produise.
La sécurité reste une préoccupation importante (si ce n’est la plus grande) pour toute personne impliquée dans le développement et le déploiement de conteneurs. Beaucoup estiment que la sécurité des conteneurs accuse déjà un retard que l’industrie est aujourd’hui contrainte de rattraper par des mesures de remédiation. De plus, bien que de nombreux outils permettent de renforcer la sécurité, il manque encore à de nombreuses entreprises une véritable stratégie de sécurité des conteneurs.
Quels sont les principaux composants de la sécurité des conteneurs ?
La sécurité des conteneurs s’articule autour de cinq domaines clés : le développement, les registres, l’environnement d’exécution, l’orchestration, ainsi que le réseau et l’architecture sous-jacents.
- Environnement de développement/compilation des conteneurs : comme dans tout projet de développement, un code malveillant ou mal écrit représente un risque de sécurité s’il parvient à se glisser dans le produit final, et peut exposer l’entreprise à des attaques. Autre menace commune au sein de l’environnement de développement, l’utilisation de bibliothèques système non sécurisées ou obsolètes : les composants sont souvent copiés et réutilisés à partir d’anciens projets ou téléchargés à partir du Web sans tenir compte de la sécurité.
- Registre de conteneur : les registres de conteneurs – ces multiples dépôts qui stockent des images de conteneurs – constituent un aspect clé de la sécurité des conteneurs, car ils permettent aux développeurs de stocker et de sécuriser leurs images tout en recherchant les vulnérabilités. En traitant les images de conteneur comme des artefacts, les entreprises peuvent imposer l’immuabilité et éviter les modifications de configuration non testées en production, qui représenteraient un risque pour les services. Cette approche renforce également la capacité d’une entreprise à rétrograder ou à remplacer les conteneurs à haut risque par des conteneurs à jour ayant reçu tous les correctifs nécessaires.
- Environnement d’exécution des conteneurs : de nouveaux types de risques de sécurité peuvent apparaître une fois qu’un conteneur est publié dans l’environnement d’exécution. Les stratégies de sécurité régissant le comportement des conteneurs pendant l’exécution, y compris celles qui avertissent les administrateurs des violations, jouent un rôle crucial dans la sécurisation de l’environnement de conteneurs. Les administrateurs doivent également gérer et superviser les ressources utilisées par le conteneur pour s’assurer que la pile n’est pas exposée aux attaques.
- Environnement d’orchestration des conteneurs : l’un des composants les plus importants de la sécurité des conteneurs concerne l’environnement d’orchestration, à savoir Kubernetes. En raison de la complexité de l’environnement de conteneurs, les outils d’orchestration sont essentiels à l’exploitation et à l’évolutivité de l’environnement. Cette complexité fait également de l’environnement une cible de choix pour les exploits de sécurité, la gestion des configurations et des permissions étant les problématiques les plus courantes. Et comme l’environnement peut être distribué sur plusieurs nœuds, les attaquants peuvent cibler chacun d’eux individuellement.
- Infrastructure réseau et serveur sous-jacente : dernier point de vulnérabilité, l’infrastructure sur laquelle tous les éléments ci-dessus reposent. Les conteneurs dépendent du système d’exploitation d’un serveur ou de la machine virtuelle, qui sont eux aussi des vecteurs d’attaque. Les vulnérabilités de sécurité sous-jacentes englobent notamment les serveurs Windows ou Linux, les instances de système d’exploitation virtualisé, les fournisseurs de services cloud, les périphériques réseau et les machines utilisées pour gérer l’environnement de conteneur, entre autres. Les attaques ciblant l’infrastructure sous-jacente de l’entreprise peuvent facilement neutraliser n’importe quelle plateforme de conteneur qui s’exécute dessus.
Les conteneurs cloud sont-ils sécurisés ?
Les conteneurs ne sont pas intrinsèquement plus ou moins sécurisés que les environnements non conteneurisés, mais leur complexité crée des défis de sécurité que les équipes doivent gérer avec soin. Bon nombre de ces vulnérabilités sont dues à des erreurs de configuration : dans une étude récente menée par Security Boulevard, 67 % des personnes interrogées avaient de graves erreurs de configuration dans leur environnement de conteneurs ou Kubernetes, et 90 % des personnes interrogées avaient subi un incident de sécurité dans leur environnement de conteneurs ou Kubernetes au cours des 12 derniers mois.
Les conteneurs résidant dans un environnement natif du cloud peuvent et doivent être aussi sécurisés que tout autre type d’infrastructure informatique, mais comme à chaque fois qu’il s’agit du cloud, la sécurisation de l’environnement est souvent une tâche sans fin.
Quelles sont les menaces pesant sur la sécurité des conteneurs ?
Les environnements de conteneurs sont exposés à un large éventail de menaces. Voici quelques exemples des attaques et vulnérabilités les plus courantes :
- Vulnérabilités des images de conteneurs : l’intégration de programmes malveillants dans les images de conteneurs, en particulier les images disponibles publiquement dans les dépôts en ligne, constituent l’une des menaces les plus courantes pour les conteneurs. Un incident récent et largement médiatisé implique le piratage de 17 images Docker accessibles au public, où avait été dissimulé un logiciel de minage de cryptomonnaie. Il est également fréquent de voir des adversaires utiliser des images de base pour détourner un environnement de conteneurs et le transformer en membre d’un réseau zombie en vue d’une attaque DDoS.
- Vulnérabilités d’authentification : menaces courantes mais problématiques, certaines attaques visant les environnements de conteneurs s’en prennent directement à l’orchestrateur. Si l’environnement Kubernetes n’est pas correctement sécurisé, un compte administrateur compromis peut permettre à des pirates d’infiltrer facilement l’entreprise. Ces attaques leur permettent d’accéder à des informations privées, d’injecter du code malveillant ou de faire des ravages en infectant les conteneurs au sein de l’environnement d’exploitation.
- Vulnérabilités des applications : comme nous l’avons vu précédemment, le code des conteneurs reste du code, et des défauts (ou des injections malveillantes) au niveau de la programmation ou du développement d’application représentent des risques importants pour la sécurité des environnements conteneurisés.
- Vulnérabilités du réseau : les conteneurs pouvant communiquer entre eux et avec l’environnement d’orchestration via le réseau, les attaques telles que les injections SQL et les attaques XSS ciblant les services réseau sont tout aussi dangereuses pour les environnements conteneurisés que pour les environnements classiques.
En quoi les menaces de sécurité pesant sur les conteneurs sont-elles différentes des menaces de cybersécurité dans un environnement IT ? En quoi la sécurité des conteneurs est-elle différente de la cybersécurité ?
La sécurité des conteneurs et les solutions associées, comme la cybersécurité, sont des disciplines différentes qui font appel à des compétences distinctes, principalement parce que les outils utilisés par les équipes pour développer, gérer et orchestrer les conteneurs sont différents de ceux utilisés pour gérer le réseau. Bien que les deux environnements servent probablement de base aux opérations de conteneur, la sécurité dans Kubernetes est une réalité bien différente de la sécurité dans un serveur Linux open source ou un environnement AWS (Amazon Web Service).
Toutefois, la quasi-totalité des menaces pouvant affecter l’environnement réseau de l’entreprise représente également une menace potentielle pour l’environnement du conteneur. Et un conteneur n’est sécurisé que si l’infrastructure sur laquelle il s’exécute l’est aussi.
Les conteneurs Docker sont-ils sécurisés ?
Docker considère que la sécurité repose sur quatre facteurs : la sécurité intrinsèque du noyau, la surface d’attaque du démon Docker, les erreurs ou les failles de configuration des conteneurs, et les fonctions de sécurité de renforcement du noyau. Si vous abordez ces questions de manière réfléchie, vos conteneurs Docker doivent être aussi sécurisés que tout autre type de code.
Est-ce que Kubernetes est sûr ?
Kubernetes étant un outil de gestion et d’orchestration, sa « sécurité » revêt un sens différent de celle de l’environnement Docker. La sécurité de Kubernetes s’articule autour du ou des serveurs sur lesquels le cluster Kubernetes s’exécute, de l’infrastructure du cluster, ainsi que des composants et de la configuration du cluster lui-même. Elle s’apparente donc davantage à la cybersécurité basée sur le réseau qu’à la sécurité intégrée dans le développement du code. Bien qu’on considère généralement que Kubernetes a amélioré la sécurité des environnements conteneurisés, il ne peut pas être plus sécurisé que les politiques et les principes des personnes qui le gèrent.
Quelles sont les bonnes pratiques de sécurité des conteneurs ?
Vous pouvez appliquer plusieurs bonnes pratiques pour donner des fondations solides à votre stratégie de défense des conteneurs.
- Vérifiez que tous les fichiers d’image de conteneur téléchargés sont fiables et sûrs : téléchargez uniquement des images de conteneur à partir d’une source fiable et veillez à ce que tous les conteneurs que vous utilisez soient à jour et exempts d’anciens composants non sécurisés. Le système Docker Content Trust est une bonne piste pour obtenir des conteneurs sûrs et sans malware.
- Réduisez la taille et la durée de vie des conteneurs autant que possible : mettez des conteneurs en service quand vous en avez besoin et éteignez-les dès qu’ils ont accompli leur mission. Un adversaire ne peut pas accéder à un conteneur qui n’est pas en cours d’exécution. Par conséquent, pour des raisons de sécurité, faites en sorte que la création de conteneurs de courte durée soit un principe de conception et d’exploitation standard dans votre entreprise.
- Tenez les plateformes de conteneurs à jour : vous devez impérativement appliquer les mises à jour et les correctifs dès qu’ils sont disponibles. Mettez fréquemment à jour les composants de base comme Docker Engine, au moins une fois par semaine.
- Créez de la visibilité sur le cycle de vie des conteneurs : on ne peut pas corriger ce que l’on ne voit pas. Il est donc essentiel d’avoir une visibilité sur l’ensemble du cycle de vie d’un conteneur, de sa définition à la production. Des capacités d’automatisation de la recherche de vulnérabilités et d’analyse du pipeline sont également essentielles.
- Soumettez régulièrement votre environnement à un audit : des outils tels que Docker Bench for Security et Kubernetes Auditing offrent aux administrateurs un meilleur accès aux outils de sécurité des conteneurs qui permettent de contrôler les activités des utilisateurs et les transactions d’applications, entre autres fonctionnalités.
- Définissez soigneusement les privilèges des conteneurs : en définissant le contrôle des accès et en limitant les privilèges sur les conteneurs à des sources fiables, vous réduirez, voire éliminerez, le risque d’attaque par escalade.
- Verrouillez votre environnement hôte : il est fort probable que votre environnement hôte, et en particulier votre système d’exploitation hôte, soit uniquement dédié à l’exécution de conteneurs et n’ait pas besoin de beaucoup de services supplémentaires, comme les services d’impression qui peuvent être vulnérables aux attaques. Vous pouvez désactiver vous-même ces services supplémentaires dans votre OS hôte ou utiliser une distribution légère conçue pour les environnements conteneurisés.
- Supervision du réseau en temps réel : il reste possible qu’une attaque parvienne à s’infiltrer, et c’est pourquoi vous devez superviser l’activité du réseau en temps réel pour repérer les comportements suspects, et en particulier ceux qui exploitent les API de votre environnement de conteneurs. La supervision est un aspect crucial du processus de sécurité des conteneurs.
Quels sont les grands défis de la sécurité des conteneurs ?
Les plus grandes difficultés en matière de sécurité des conteneurs consistent à faire de la sécurité une partie intégrante de l’environnement. Cette démarche implique d’appliquer les pratiques ci-dessous aux processus des opérations, de la chaîne logistique et de gestion de l’organisation :
- Garantir que les composants réutilisés ne sont pas compromis et utiliser des pratiques de développement sûres pour les composants internes, afin d’assurer la sécurité des images de conteneurs
- Gérer la communication et les workflows entre les conteneurs de manière à respecter les règles de comportement sur le réseau et de pare-feu
- Éviter les processus indésirables en limitant les capacités des conteneurs à ce qui est absolument nécessaire
- Mettre à jour et renforcer toutes les plateformes et applications de gestion contre les attaques
- Affiner les compétences de développement logiciel en interne afin que les développeurs et les administrateurs d’exploitation sachent sécuriser les conteneurs et reconnaître une attaque le cas échéant
Comment les développeurs peuvent-ils mieux sécuriser les conteneurs ?
L’adoption progressive des conteneurs a donné aux développeurs une plus grande responsabilité en matière de sécurité. Dans ce contexte, les développeurs doivent prendre le temps de comprendre ce que signifie réellement le développement d’images de conteneur fiables, et apprendre à évaluer correctement la sécurité du code, à adopter des tactiques d’évaluation continue de la sécurité, et à minimiser la surface d’attaque globale du conteneur en supprimant les composants inutiles. Pour garantir véritablement la sécurité des conteneurs, les développeurs doivent également disposer d’une visibilité de bout en bout sur l’ensemble de leur environnement, afin de détecter et de bloquer immédiatement les programmes malveillants et autres menaces de sécurité avant qu’elles ne causent des dommages importants. En accordant la plus grande attention à certaines bonnes pratiques de sécurité de base et aux valeurs de référence, les administrateurs peuvent sécuriser les conteneurs aussi solidement que n’importe quel type de code.
La sécurité des conteneurs mérite de plus en plus de réflexion et d’attention, surtout dans le contexte de l’hégémonie croissante de cette technologie dans l’entreprise. Le paysage informatique évolue et révèle constamment de nouvelles menaces et vulnérabilités : les professionnels de la sécurité ont donc la responsabilité d’intégrer explicitement la sécurité des conteneurs dans leurs bonnes pratiques et dans leur posture. La protection de l’environnement conteneurisé constitue la première étape de la protection de l’entreprise, de son infrastructure et de ses clients.
Les 5 pratiques fondamentales du DevOps
Qu’est-ce qui distingue les équipes DevOps performantes de celles qui échouent ? Ces 5 pratiques fondamentales.