web-dev-qa-db-fra.com

Le trafic réseau entre les conteneurs Docker peut-il être détecté?

Sur les réseaux normaux, l'envoi de données en clair représente un risque pour la sécurité, car les attaquants peuvent détecter ou même manipuler tout le trafic. Le cryptage est requis pour une communication sécurisée. Lorsque vous utilisez des conteneurs Docker, ceux-ci peuvent être connectés ensemble à l'aide d'interfaces réseau virtuelles. Ceux-ci souffrent-ils des mêmes problèmes de sécurité ou les connexions réseau Docker sont-elles protégées contre le reniflement? Est-il nécessaire de crypter le trafic sur le réseau Docker?

Edit: je suis intéressé à savoir si le trafic entre deux conteneurs docker peut être intercepté par un troisième conteneur docker, lorsque tous sont sur le même réseau de pont sur le même hôte.

10
Sjoerd

Oui, vous devez sécuriser le trafic.

Lecture de docs.docker.com:

"Si vous avez besoin que Docker soit accessible via le réseau de manière sûre, vous pouvez activer TLS en spécifiant l'indicateur tlsverify et en pointant l'indicateur tlscacert de Docker vers un certificat CA de confiance. En mode démon, il autorise uniquement les connexions des clients authentifiés par un certificat signé par cette autorité de certification. En mode client, il se connecte uniquement aux serveurs avec un certificat signé par cette autorité de certification. "

Dans l'article Top 20 Docker Security Tips par Jeff Hale, l'auteur écrit

"Docker fournit également la mise en réseau de conteneurs privés. Cela empêche un conteneur d'accéder de manière privilégiée aux interfaces réseau d'autres conteneurs sur le même hôte. Un environnement Docker est donc quelque peu isolé, mais il peut ne pas être suffisamment isolé pour votre cas d'utilisation."

L'article apporte plus d'idées pour renforcer la sécurité de Docker, notamment:

  1. limitation des privilèges
  2. éviter d'exécuter en tant que root
  3. à l'aide d'images de confiance et signées
  4. en utilisant un minimum d'images et de ressources
  5. gestion sécurisée des clés
  6. mise à jour des bibliothèques
  7. considérant Docker Enterprise

La source:

7
Refineo

La réponse, comme pour la plupart des choses en matière de sécurité, cela dépend. Voici quelques informations pertinentes pour voir si cela vous intéresse.

Docker fournit un réseau de pont par défaut (docker0 dans une installation par défaut). Il s'agit simplement d'un réseau de pont Linux standard. votre modèle de menace est probablement l'un des deux scénarios

  1. L'attaquant a accès à un autre conteneur sur le même pont
  2. L'attaquant a accès à l'hôte sous-jacent.

Dans les deux cas, l'attaquant aura besoin de suffisamment de privilèges pour détecter le trafic et/ou l'usurpation ARP sur ce réseau. Cela revient généralement à disposer des privilèges root sur l'hôte ou à disposer des NET_RAW capacité qui est celle qui s'applique au reniflement du trafic et à l'ARP Spoofing.

Dans le premier cas, malheureusement (du point de vue de la sécurité) Docker donne à tous les conteneurs le NET_RAW capacité par défaut, donc une installation par défaut, sans renforcement, permettra à un attaquant ayant accès à un conteneur d'attaquer d'autres conteneurs sur ce réseau. Vous pouvez atténuer cela en supprimant NET_RAW à partir des privilèges du conteneur.

Dans le deuxième cas, si l'attaquant a un accès privilégié à l'hôte exécutant les conteneurs, il peut accéder à ce réseau, mais il peut également accéder à tous vos conteneurs, vous n'avez donc probablement pas à vous soucier du trafic renifler :)

Tout cela suppose un réseau Docker standard, si vous utilisez Kubernetes, il y a plus de variables en jeu car il existe une variété d'options de réseau disponibles.

Du bon matériel supplémentaire sur ce sujet. Il y a un livre blanc ici qui parle de ce problème. Liz Rice a fait un bon exposé sur ce sujet à Kubecon cette année (vidéo ici ).

Une autre remarque est que sur le réseau Docker par défaut, mais pas sur les autres réseaux créés par Docker, vous pouvez définir --icc=false qui empêche toute communication entre conteneurs qui n'est pas explicitement mise sur liste blanche par les liens entre les conteneurs. Il s'agit d'une option héritée, donc je ne m'y fierais pas pour aller de l'avant.

4
Rory McCune

Vous devez tenir compte du fait que les conteneurs Docker peuvent partager un périphérique de pont, de sorte que tout le trafic provenant d'un conteneur peut être détecté par un autre si les deux résident sur le même hôte.

Les bogues sont une autre variable à prendre en considération. L'hôte docker peut avoir un bogue qui permet à une instance de docker de flairer le trafic qui ne devrait pas être autorisé. Le mieux est donc de crypter le trafic si vous envisagez ce scénario.

1
camp0