Explorer la sécurité (manquante) des installations typiques de Docker et Kubernetes

Explorer la sécurité (manquante) des installations typiques de Docker et Kubernetes
Je travaille dans l'informatique depuis plus de 20 ans, mais je n'ai jamais abordé les conteneurs. En théorie, j'ai compris comment ils étaient structurés et comment ils fonctionnaient. Mais comme je ne les avais jamais rencontrés en pratique, je ne savais pas exactement comment les engrenages sous leur capot tournaient et tournaient.

De plus, je n'avais aucune idée de leur sécurité. Mais encore une fois, la théorie semble intéressante, et la vieille chanson « à mesure que la sécurité augmente, la convivialité diminue » me reste en tête. J'ai donc pensé que puisque tout est si simple à faire avec des conteneurs, la sécurité y est en dessous de la moyenne. Il s’avère que j’avais raison.

Pour démarrer rapidement, je me suis inscrit à des cours Black Hat 2020 intitulé «Des haillons à la richesse : pénétration et protection des environnements Docker Swarm et Kubernetes».

Le cours, dispensé par Sheila A. Berta et Sol Ozzan, a immédiatement commencé par une description du fonctionnement des conteneurs Docker et du parcours qu'ils effectuent lorsqu'ils sont déployés sur Kubernetes. Il s'agissait d'un cours entièrement pratique - les étudiants devaient installer Docker et microk8 sur leurs machines avant le cours - un excellent moyen de voir comment les outils interagissent les uns avec les autres, de trouver les points faibles et, surtout, d'essayer de les bloquer.

Malheureusement, même si les cours promettaient de devenir un « prince » au bout de deux jours, j'avais l'impression que tout ne faisait que commencer et que j'avais encore beaucoup à apprendre.

Explorer la sécurité (manquante) des installations typiques de Docker et Kubernetes

Avant de plonger dans mes nobles observations, il est important d’expliquer ce qu’est un conteneur. Dans le monde du développement, il est considéré comme normal que le code écrit sur votre machine personnelle fonctionne parfaitement, mais lorsque vous essayez de l'exécuter sur un serveur quelque part, cela ne fonctionne tout simplement pas. Les conteneurs tentent de surmonter ce problème en fournissant des machines autonomes que vous pouvez facilement déplacer d'un serveur à un autre, sachant qu'elles fonctionneront toujours. Comme leur nom l'indique, ils contiennent le code, les bibliothèques et d'autres logiciels nécessaires pour effectuer le travail. Kubernetes, en revanche, est plateforme d'orchestration pour conteneurs. En principe, il peut être utilisé pour gérer de manière transparente des centaines, voire des milliers de conteneurs différents.

Vous trouverez ci-dessous quelques-unes de mes conclusions du point de vue de l'équipe rouge et bleue.

équipe rouge

La plupart du contenu du conteneur s'exécute en tant que root: Cela signifie que si le conteneur est compromis, vous aurez un accès complet au conteneur. Cela rend les prochaines étapes beaucoup plus faciles.

Monter docker.sock à l’intérieur d’un conteneur est dangereux: Si vous avez root dans un conteneur et que vous avez également installé Docker dans un conteneur doté d'un socket Docker (/var/run/docker.sock), vous avez la possibilité d'explorer l'intégralité du cluster, y compris l'accès à tout autre conteneur. Un tel accès ne peut pas être empêché par l'isolation du réseau ou par d'autres moyens.

Les variables d'environnement contiennent souvent des données secrètes: Dans la plupart des cas, les utilisateurs envoient des mots de passe au conteneur en utilisant des variables d'environnement normales. Ainsi, si vous avez accès au compte, vous pouvez espionner ces variables d'environnement afin d'étendre ultérieurement vos pouvoirs.

L'API Docker peut fournir de nombreuses informations: L'API Docker, lorsqu'elle est configurée par défaut, s'exécute sans autorisation et peut produire une tonne d'informations. En utilisant Shodan, vous pouvez facilement trouver une liste de ports ouverts, puis obtenir des informations détaillées sur le cluster et procéder à sa capture complète. TrendMicro a écrit à ce sujet article le plus intéressant.

L'équipe bleue

Ne pas exécuter le contenu du conteneur en tant que root: Même s'il est plus facile de l'exécuter en tant que root, vous ne devriez pas le faire. Au lieu de cela, exécutez les applications avec des autorisations de réinitialisation en affichant l'uid, soit en utilisant l'option --user lors de l'exécution à partir de la CLI, soit en spécifiant USER dans le Dockerfile.

Ne pas autoriser l'installation de logiciels dans des conteneurs: Presque toutes les attaques commencent par planter quelque chose. De nmap à ifconfig en passant par Docker lui-même (à l'intérieur d'un conteneur), installer quoi que ce soit dans un conteneur est monnaie courante. Pour la même raison, vous devez toujours bloquer tous les ports inutilisés. Cela permet également d'empêcher la transmission de commandes de contrôle lorsque votre machine est infectée. En plus d'empêcher l'installation de programmes, il convient de s'assurer que le nombre minimum d'applications requis pour accomplir la tâche est installé dans le conteneur lui-même.

Protéger docker.sock: Il doit être protégé car la communication entre le conteneur et le cluster se fait via ce socket. Puisque je ne veux pas entrer dans les détails dans cet article, lisez note de Docker, que peut-il arriver et comment tout bloquer.

Utilisez les secrets Docker au lieu des variables d'environnement: Il y a des secrets depuis 2017 environ. Bien que cela ne soit pas sécurisé, c'est toujours mieux que les variables d'environnement pour transmettre des données secrètes au conteneur.

Si l'article a éveillé votre intérêt pour les conteneurs, vous pouvez facilement installer Docker ou microk8s (une petite version de Kubernetes). il est il existe des instructions pour installer Docker pour Linux et MacOS, et ici — instructions d'installation de microk8s pour Windows, Linux et MacOS.

Après l'installation, vous pouvez aller ceci est un guide de démarrage rapide depuis Docker, option similaire proposé et pour les microk8.

Si vous souhaitez ou devez suivre un cours complet sur Docker, dans lequel des intervenants pratiques examinent tous ses outils : des abstractions de base aux paramètres réseau, en passant par les nuances du travail avec divers systèmes d'exploitation et langages de programmation, alors essayez «Cours vidéo Docker" Vous vous familiariserez avec la technologie et comprendrez où et comment utiliser au mieux Docker. Et en même temps, obtenez des cas de bonnes pratiques - il est préférable d'apprendre en toute sécurité et avec le soutien de praticiens à partir d'histoires sur les râteaux plutôt que personnellement auprès des râteaux eux-mêmes dotés de poignées à pointes.

Source: habr.com

Ajouter un commentaire