Maison  >  Article  >  Opération et maintenance  >  Qu'est-ce que l'évasion du conteneur Docker

Qu'est-ce que l'évasion du conteneur Docker

WBOY
WBOYoriginal
2022-07-25 17:13:574059parcourir

L'échappement du conteneur Docker fait référence au processus et au résultat dans lesquels l'attaquant a obtenu la capacité d'exécution de commandes sous certaines autorisations dans le conteneur en détournant la logique métier conteneurisée ou le contrôle direct, car Docker utilise la technologie d'isolation, donc à l'intérieur du conteneur, le processus ne peut pas ; voir le processus extérieur, mais le processus extérieur peut voir à l'intérieur, donc si un conteneur peut accéder à des ressources extérieures, ou même obtenir les autorisations de l'hôte hôte, cela s'appelle « évasion Docker ».

Qu'est-ce que l'évasion du conteneur Docker

L'environnement d'exploitation de ce tutoriel : système linux7.3, docker version 19.03, ordinateur Dell G3.

Qu'est-ce que Docker Container Escape

"Container escape" fait référence à un tel processus et résultat :Tout d'abord, l'attaquant détourne la logique métier conteneurisée ou contrôle directement (CaaS et autres scénarios où le contrôle du conteneur est obtenu légalement) Grâce à d'autres méthodes, la capacité d'exécution de commande sous certaines autorisations dans le conteneur a été obtenue.

L'attaquant utilise cette capacité d'exécution de commande et utilise certains moyens pour obtenir davantage la machine hôte directe sur laquelle se trouve le conteneur (on voit souvent que "Une machine physique exécute une machine virtuelle", la machine virtuelle exécute ensuite le scénario "conteneur", l'hôte direct dans ce scénario fait référence à la capacité d'exécution de commandes sous certaines autorisations sur la machine virtuelle en dehors du conteneur).

Étant donné que Docker utilise la technologie d'isolation, le processus à l'intérieur du conteneur ne peut pas voir le processus extérieur, mais le processus extérieur peut voir à l'intérieur, donc si un conteneur peut accéder aux ressources extérieures, il peut même obtenir les autorisations de l'hôte hôte, c'est appelé « Évasion Docker ».

Il y a actuellement trois raisons pour lesquelles Docker s'échappe :

  • causée par des vulnérabilités du noyau.

  • Causé par la conception du logiciel Docker.

  • Causé par un mode privilégié et une configuration incorrecte.

Ce qui suit est une brève explication de ces trois méthodes d'évasion.

1. Échapper en raison d'une vulnérabilité du noyau

Étant donné que Docker est un noyau hôte directement partagé, lorsqu'il existe une vulnérabilité de sécurité dans le noyau de l'hôte hôte, cela affectera également la sécurité de Docker, ce qui peut entraîner la fuite de Docker. . Le processus spécifique est le suivant :

  • Utiliser une vulnérabilité du noyau pour entrer dans le contexte du noyau

  • Récupérer la structure de tâche du processus en cours

  • Revenir en arrière sur la liste des tâches pour obtenir la structure de tâche avec pid = 1, copier ses données associées

  • Changer l'espace de noms actuel

  • Ouvrez le shell racine et terminez l'échappement

2 Échappement causé par la conception du logiciel Doker

Un exemple typique est le moteur d'exécution de conteneur standardisé de Docker. ---runc. Runc a été exposé à une vulnérabilité d'échappement Docker CVE-2019-5736 en février 2019. Le principe de la vulnérabilité est que Docker, Containerd ou d'autres programmes basés sur runc sont sujets à des vulnérabilités de sécurité au moment de l'exécution. Un attaquant peut obtenir le descripteur de fichier lorsque le runc hôte exécute le fichier via une image de conteneur spécifique ou une opération d'exécution et modifie le runc. fichier binaire. , obtenant ainsi l'autorisation d'exécution root de la machine hôte, provoquant l'échappement de Docker.

3. Échappement provoqué par mode privilégié + montage de répertoire

Cette méthode d'échappement est plus utilisée que les deux autres. Le mode privilégié a été introduit dans Docker dans la version 6.0. Sa fonction principale est de permettre à l'utilisateur root du conteneur d'avoir les autorisations root sur la machine physique externe. Auparavant, l'utilisateur root du conteneur disposait uniquement des autorisations des utilisateurs ordinaires sur la machine physique externe. .

Après avoir démarré le conteneur en mode privilégié (docker run --privileged), le conteneur Docker est autorisé à accéder à tous les appareils sur l'hôte, peut obtenir des droits d'accès à un grand nombre de fichiers de périphérique et peut exécuter la commande mount pour monter .

Lors du contrôle d'un conteneur en mode privilégié, l'administrateur Docker peut monter le périphérique de disque hôte externe dans le conteneur via la commande mount pour obtenir des autorisations de lecture et d'écriture de fichiers pour l'ensemble de l'hôte. De plus, il peut également écrire des tâches planifiées, etc. . La méthode exécute la commande sur la machine hôte.

En plus d'utiliser le mode privilégié pour démarrer Docker, ce qui entraînera l'échappement de Docker, l'utilisation de mécanismes fonctionnels entraînera également l'échappement de Docker. Le noyau Linux a introduit des fonctionnalités (Capabilities) depuis la version 2.2, brisant les concepts de super-utilisateurs et d'utilisateurs ordinaires dans les systèmes d'exploitation UNIX/LINUX, permettant aux utilisateurs ordinaires d'exécuter des commandes qui ne peuvent être exécutées qu'avec les privilèges de super-utilisateur. Par exemple, lorsque le conteneur est démarré avec --cap-add=SYSADMIN, le processus Conteneur est autorisé à exécuter une série de commandes de gestion du système telles que mount et umount si l'attaquant monte le répertoire du périphérique externe dans le conteneur à ce moment-là. , l'échappement de Docker se produira.

Apprentissage recommandé : "Tutoriel vidéo Docker"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn