Même si les processus encapsulés s’exécutent sur le même noyau, Docker utilise toute une gamme de techniques d’isolation pour les protéger les uns des autres. L’accent est mis sur des fonctions du noyau Linux, tel que Cgroups et Namespaces. Chaque conteneur dispose de son propre nom, ses propres identifiants de processus, et sa propre interface réseau. De plus, chaque conteneur voit seulement la partie du fichier qui lui est assignée. Les ressources système telles que la mémoire, le processeur et la bande passante sont distribués grâce à un mécanisme Cgroup. Celui-ci s’assure que chaque conteneur puisse seulement prétendre à la partie qui lui est due.
Toutefois, les conteneurs n’offrent pas le même niveau d’isolation que les machines virtuelles. Si un attaquant rencontre une machine virtuelle, il a peu de chance d’interagir avec le noyau du système d’hébergement sous-jacent. Les conteneurs, en tant qu’unités encapsulées d’un noyau hébergeur commun, laissent beaucoup plus de liberté aux attaquants.
En dépit des techniques d’isolation décrites, d’importants sous-systèmes de noyaux, tels que les Cgroups et les interfaces de noyaux en /sys et /proc dans les registres peuvent être obtenus à partir des conteneurs. Ceci permet aux attaquants de surmonter les barrières de sécurité de l’hébergeur. De plus, tous les conteneurs tournent sur un système d‘hébergement dans le même espace de nom. Par conséquent, un conteneur qui bénéficie de privilèges root les retient même lorsqu’il interagit avec le noyau hébergeur.
Le démon Docker, qui est responsable de la gestion des conteneurs sur le système d’hébergement, dispose également de privilèges root. Un utilisateur qui a accès au démon Docker accède automatiquement à tous les registres accessibles par ce démon, et est également capable de communiquer en HTTP via un API REST. Par conséquent, la documentation Docker recommande d’autoriser uniquement les utilisateurs de confiance à accéder au démon.
L’équipe de développement de Docker a admis que ces failles de sécurité constituent un frein à l’établissement des technologies de conteneurs sur les systèmes de production. Outre les techniques d’isolation basiques du noyau Linux, les nouvelles versions du moteur Docker sont donc compatibles avec les frameworks AppArmor, SELinux et Seccomp, qui agissent comme une sorte de pare-feu pour les ressources du noyau.
- AppArmor : AppArmor peut être utilisé pour réguler les droits d‘accès des conteneurs au fichier système.
- SELinux : SELinux propose un système de règles complexe, pouvant être utilisé pour l’implémentation des contrôles d’accès aux ressources du noyau.
- Seccomp : Seccomp (Secure Computing Mode) permet d’activer et de contrôler Systemcalls.
Docker utilise en outre les capacités de Linux, qui peuvent servir à restreindre les privilèges root avec lesquels le moteur Docker démarre les conteneurs.
Il existe d’autres problèmes de sécurité, relatifs à la vulnérabilité de l’application dans le cadre de la distribution des composants à travers le registre Docker. Puisqu’en principe chacun peut créer des images Docker et les rendre accessibles à la communauté grâce au Docker hub, il existe un danger d’intégrer, à travers ces images, du code malveillant qui endommagerait le système. Les utilisateurs de Docker doivent donc s’assurer, avant de déployer une application, que l’intégralité du code fourni avec une image provient d’une source sûre. Avec son édition d’entreprise (EE), Docker offre depuis début 2017 un programme de certification, grâce à laquelle les fournisseurs d’infrastructures, de conteneurs et de plugins peuvent tester et récompenser votre application. Pour obtenir le certificat, il faut remplir les conditions suivantes :
- Certification d’infrastructure : les développeurs d’applications qui souhaitent fournir des composants d’infrastructure certifiés pour l’écosystème Docker doivent prouver, grâce aux tests adaptés, que leur produit est optimisé pour un travail en équipe sur la plateforme Docker.
- Certification de conteneur : un conteneur reçoit la certification officielle de Docker uniquement s’il a été conçu selon les meilleures méthodes et a réussi tous les tests de vulnérabilité et de sécurité.
- Plugins : un plugin pour Docker EE n’est éligible au certificat Docker que s’il a été développé selon les meilleurs pratiques et a réussi les tests de conformité API et de vulnérabilité.
Les certificats Docker sont conçus pour renforcer la sécurité des utilisateurs, et offrent aux développeurs la possibilité de faire remarquer leur projet parmi la multitude de ressources disponibles sur le marché.