Gérer la sécurité des containers avec l’analyse de containers et d’autres solutions
Si aujourd’hui le thème de la sécurité des containers s’articule autour des exigences de sécurité des plateformes d’orchestration comme Kubernetes, tous les risques de sécurité des containers ne peuvent cependant pas être traités au niveau de l’orchestration. Vous devez également gérer les menaces qui pèsent au niveau des containers.
Le meilleur moyen d’y parvenir est de suivre les pratiques de sécurité standard de Docker qui remontent aux premiers jours des containers Docker, devenus accessibles au public en 2013. Bien que l’écosystème des containers ait évolué et dépasse aujourd’hui largement Docker (en effet, même Docker ne fait plus partie de nombreuses piles d’applications en containers, qui utilisent plutôt d’autres runtimes et d’autres solutions d’orchestration), les principes fondamentaux de la sécurité de Docker – comme l’analyse des containers, la gestion de la vulnérabilité des containers et le contrôle de l’accès aux containers – sont toujours d’actualité.
Dans ce contexte, cet article revient aux fondamentaux en donnant un aperçu des principales catégories de vulnérabilités des containers, et présente les mesures que les entreprises peuvent prendre pour les gérer.
Vulnérabilités des images de containers
Les vulnérabilités d’images restent le type de menace de sécurité le plus répandu pour les containers individuels. La vulnérabilité d’une image de container consiste en un risque de sécurité intégré à une image de container. Les images vulnérables en elles-mêmes ne constituent pas une menace active. En revanche, si des containers sont créés à partir d’une image vulnérable, ils introduiront la vulnérabilité dans un environnement réel.
Les vulnérabilités des images de containers proviennent généralement de bibliothèques non sécurisées ou d’autres dépendances qui sont importées dans une image de container. Les images peuvent également contenir du code malveillant inséré lors d’une attaque de la pile logicielle ou d’une violation similaire de l’environnement de développement.
Détecter les vulnérabilités d’images avec l’analyse des containers
Heureusement, la plupart des vulnérabilités des images de containers peuvent être détectées relativement facilement par le biais de l’analyse des containers. L’analyse des containers consiste à déployer des outils automatisés qui comparent le contenu de chaque container à une base de données de vulnérabilités connues. Si ces outils déterminent qu’une bibliothèque ou une autre dépendance d’une image de container est en proie à une vulnérabilité connue, ils signalent l’image comme non sécurisée.
La principale limite de l’analyse des containers est qu’elle ne parvient pas à détecter les vulnérabilités inconnues, c’est-à-dire celles qui n’ont pas encore été divulguées publiquement ou mises à la disposition des analystes de sécurité. Autrement dit, si votre image de container utilise une bibliothèque qui présente un bogue de sécurité mais que les équipes de sécurité n’ont pas encore détecté cette anomalie, les analyseurs d’images de containers ne repéreront rien d’anormal. En effet, le bogue ne sera pas enregistré dans les bases de données de vulnérabilités qu’elles utilisent. Par ailleurs, les vulnérabilités qui s’attaquent à du code personnalisé et propriétaire ne sont pas détectées parce que ces vulnérabilités ne font l’objet d’aucune traque publique.
Si l’analyse des images de containers est une étape essentielle pour sécuriser les containers, il est important de garder à l’esprit qu’il ne s’agit que d’une étape, et non d’une solution complète de gestion des vulnérabilités.
Images de containers corrompues
Bien que les images de containers légitimes puissent contenir (et contiennent souvent) des vulnérabilités, les images corrompues que les personnes mal intentionnées conçoivent délibérément pour se faire passer pour des images légitimes représentent un risque encore plus grand pour la sécurité des images Docker. En téléchargeant une image contenant des logiciels corrompus dans un registre public de containers comme Docker Hub et en lui donnant un nom (comme mysqldatabase ou nginxserver) qui semble légitime, les cybercriminels peuvent inciter des administrateurs peu méfiants à déployer des versions malveillantes de logiciels accessibles au public.
Éviter les images corrompues
Les analyseurs d’images Docker peuvent ne pas détecter ces images si elles contiennent des logiciels malveillants qui ne sont pas associés à une vulnérabilité divulguée publiquement. C’est pourquoi la meilleure façon de se protéger des images corrompues est de s’assurer que vous ne téléchargez que des images provenant de sources fiables. Évitez les registres non officiels de Docker Hub ou les dépôts GitHub.
Vous devez également éviter d’utiliser le tag « latest » (le plus récent) lorsque vous recherchez des images de containers. Spécifiez plutôt une version d’image. Cela permet d’atténuer le risque que des personnes mal intentionnées glissent une image malveillante dans un registre de containers par ailleurs légitime et, en lui donnant un numéro de version plus récent que les autres images, incitent les personnes à l’utiliser.
Menaces relatives à l’élévation de privilèges
Même si toutes les images de containers que vous déployez sont exemptes de vulnérabilités, une violation peut se produire en raison d’une attaque par élévation de privilèges.
Dans une attaque par élévation de privilèges, les processus qui sont censés pouvoir accéder uniquement aux ressources à l’intérieur d’un container donné « s’échappent » du container et accèdent aux ressources d’autres containers ou du serveur hôte.
Empêcher l’élévation de privilèges
Les bogues dans le logiciel du moteur d’exécution des containers, qui est responsable de l’exécution des containers, ou dans le système d’exploitation hôte, constituent les principaux vecteurs des attaques par élévation de privilèges.
Ainsi, le principal moyen de défense contre ce type de menace consiste à sécuriser le moteur d’exécution du container et le système d’exploitation hôte. Pour ce faire, vous devez surtout vous assurer que tous les logiciels exécutés sur votre ou vos serveurs hôtes sont à jour et exempts de vulnérabilités connues.
Vous pouvez également réduire le risque d’une attaque par élévation de privilèges en déployant un framework de durcissement du noyau, comme AppArmor ou SELinux. Ces frameworks imposent des contrôles d’accès supplémentaires (basés sur des politiques que vous configurez et appliquez) au système d’exploitation hôte, fournissant ainsi une deuxième couche de défense contre les processus qui s’échappent des containers dans lesquels ils sont censés rester.
Enfin, le choix d’un système d’exploitation minimaliste, comme Alpine Linux, peut atténuer le risque d’élévation des privilèges des containers en réduisant le nombre de bibliothèques et de services qu’un cybercriminel pourrait potentiellement exploiter. Un conseil : votre OS hôte ne devrait inclure aucun autre logiciel que le strict minimum requis pour déployer, orchestrer, surveiller et sécuriser les containers. Si vous souhaitez exécuter d’autres workloads avec vos containers, faites-le sur un autre serveur ou une autre VM.
Vulnérabilités des applications
Quelle que soit la sécurité de vos images de containers et de l’environnement dans lequel elles s’exécutent, vous serez confronté à des problèmes de sécurité si l’application que vous hébergez à l’aide de containers contient des failles dans son code source.
Par exemple, une validation insuffisante des données saisies pourrait entraîner des attaques telles que l’injection SQL, permettant aux cybercriminels de s’en prendre à des informations sensibles. Ou encore, une vulnérabilité de type dépassement de tampon pourrait permettre aux cybercriminels d’exécuter du code arbitraire et de prendre le contrôle de votre container (et, éventuellement, de l’hôte tout entier).
Gérer les vulnérabilités des applications
Comme les vulnérabilités des applications se produisent dans le code de l’application plutôt que dans les processus ou les outils associés aux containers, vous devrez gérer les vulnérabilités des applications au niveau de l’application.
Analysez le code source de vos applications à la recherche de vulnérabilités dans le cadre de votre pipeline CI/CD à l’aide d’un test de sécurité d’application statique, qui peut identifier les mauvaises pratiques en matière de codage susceptibles de favoriser les menaces. Testez à nouveau l’application avant de la déployer à l’aide du test dynamique de sécurité des applications, une méthode qui surveille une application s’exécutant dans un environnement de type sandbox afin de détecter un comportement susceptible de représenter une vulnérabilité de sécurité.
Là encore, les frameworks de durcissement du noyau comme SELinux et AppArmor peuvent également contribuer à réduire le risque de vulnérabilité des applications en rendant les exploits plus difficiles à exécuter. Mais ces ressources ne s’attaquent pas à la cause profonde de l’insécurité des applications.
Utiliser les critères CIS Docker
Bien qu’il n’y ait aucun moyen de garantir une absence totale de menaces à la sécurité des containers, un moyen utile d’établir une base de référence est de mesurer les configurations de vos containers par rapport aux critères de sécurité Docker du Center for Internet Security, ou CIS.
Les critères de sécurité des containers du CIS portent sur toutes les couches de la pile logicielle des containers. Ils établissent les meilleures pratiques pour la sécurisation de l’hôte, la configuration des autorisations dans les images de containers, la configuration du moteur d’exécution des containers, et bien plus encore.
Ainsi, même si le fait de se conformer aux recommandations du CIS ne garantit pas la sécurité de Docker, cela vaut la peine de prendre le temps de parcourir les critères et de s’assurer que vous répondez à chacun d’entre eux.
Le déploiement de containers sécurisés dans un environnement sécurisé nécessite des outils et des pratiques capables d’atténuer une variété de menaces. Des analyseurs d’images de containers aux frameworks de durcissement du noyau, en passant par la sécurité des applications et bien plus, vous aurez besoin d’un large ensemble de remparts pour réduire le risque de vulnérabilités de sécurité au sein des environnements d’applications en containers.