Récemment, j'ai entendu parler d'une nouvelle technologie de virtualisation appelée conteneurs. Supposons que le conteneur ait été compromis, cela signifie-t-il que l'hôte est également compromis (puisque le conteneur est un processus sur un hôte)? En termes de sécurité, un VM (machine virtuelle) est-il plus sûr que les conteneurs?
Si le noyau est compromis dans le conteneur, l'hôte est compromis.
En apparence, un conteneur compromis ne devrait pas être en mesure de nuire à l'hôte. Cependant, la sécurité des conteneurs n'est pas excellente et il existe généralement de nombreuses vulnérabilités qui permettent à un utilisateur de conteneur privilégié de compromettre l'hôte. De cette façon, les conteneurs sont souvent moins sécurisés que les machines virtuelles complètes. Cela ne signifie pas que les machines virtuelles ne peuvent pas être piratées . Ils ne sont tout simplement pas tout à fait aussi mauvais.
Si le noyau est exploité dans une machine virtuelle, l'attaquant doit toujours trouver un bogue dans l'hyperviseur. Si le noyau est exploité dans un conteneur, l'ensemble du système est compromis, y compris l'hôte. Cela signifie que les bogues de sécurité du noyau, en tant que classe, sont beaucoup plus graves lorsque des conteneurs sont utilisés.
Les conteneurs sont souvent implémentés en utilisant namespaces :
Un espace de noms enveloppe une ressource système globale dans une abstraction qui fait apparaître au processus dans l'espace de noms qu'ils ont leur propre instance isolée d'une ressource globale. Les modifications apportées à la ressource globale sont visibles pour les autres processus membres de l'espace de noms, mais invisibles pour les autres processus.
Malheureusement, les espaces de noms Linux exposent généralement une plus grande surface d'attaque du noyau. Beaucoupnoyavulnérabilitéssontexploitable dans les espaces de noms. Bien que toutes les solutions de conteneurs n'utilisent pas les espaces de noms Linux, elles utilisent toutes le même type de technologie, avec les mêmes problèmes de sécurité . Certains conteneurs, comme Docker, sont capables d'utiliser un cadre de filtrage syscall appelé seccomp pour réduire la surface d'attaque du noyau. C'est une amélioration, mais ce n'est pas toujours suffisant.
De Daniel Shapira :
[...] les exploits du noyau peuvent être dévastateurs pour les environnements conteneurisés. En effet, les conteneurs partagent le même noyau que l'hôte, donc faire confiance aux seuls mécanismes de protection intégrés n'est pas suffisant.
Parce que les conteneurs ne sont pas aussi isolés que les VM, oui, d'une certaine manière, ils sont moins sécurisés. Voir la réponse de forest.
Cela dit, je pense qu'il convient de noter que les conteneurs offrent également certains avantages du point de vue de la sécurité des applications. Parce qu'ils exécutent généralement un seul processus, ils limitent la surface d'attaque, il n'y a pas de moniteur cron ou de démon ssh exécuté à l'intérieur du conteneur, par exemple. Les images de conteneur sont immuables: au redémarrage, elles se chargent à partir des fichiers binaires d'origine. Vous ne pouvez pas remplacer l'application. La plupart des technologies de conteneurs permettent également un contrôle précis sur quels ports sont ouverts et à qui. Vous pouvez avoir un conteneur pour une base de données qui n'est pas accessible à partir d'autre que vos autres conteneurs.
Tout cela suppose que ces fonctionnalités fonctionnent comme annoncé et n'ont pas de défauts, bien sûr. Et si un attaquant parvient à s'échapper du conteneur, rien de ce qui précède ne s'applique. Cela ajoute un peu de surcharge mais une approche par ceinture et bretelles est possible: des conteneurs au-dessus des VM.