1 votes

Comment docker traduit-il l'adresse ip de l'interface docker0 en adresse ip de l'hôte ?

J'essaie de créer un environnement de laboratoire pour expérimenter les attaques MiTM. Je veux apprendre docker aussi, donc j'ai décidé de faire cela avec docker. J'ai créé 2 images (attaquant, victime) :

Victime - basé sur Alpine, avec boucle installée
Attaquant - basé sur Ubuntu, avec iputils-ping iproute2 curl iptables vim ettercap-text-only dsniff et tshark installés.

Ils sont tous les deux en réseau ponté, donc le routeur ici serait l'interface docker0 (par défaut : 172.17.0.1)
J'exécute le conteneur de l'attaquant avec le drapeau --privileged, pour permettre l'utilisation d'ettercap.

Donc, lorsque les deux images sont en cours d'exécution, j'exécute ettercap (j'ai essayé avec l'outil arpspoof aussi, même effet.) à partir du conteneur de l'attaquant avec :
ettercap -T -i eth0 -M arp:remote //victim_ip/ //172.17.0.1/

Le trafic de la victime passe par l'attaquant, mais il y a un problème : lorsque la victime essaie de faire un ping sur google.com, il n'y a pas de réponse. L'attaque MiTM fonctionne car je peux voir ce trafic sur les conteneurs de la victime mais quelque chose le bloque.

J'ai trouvé quel est le problème ici. J'ai ouvert 2 wiresharks sur mon hôte, un sur l'interface docker0 et un sur mon interface wifi par défaut. Avant l'attaque, lorsque j'envoie un ping à partir du réseau global, le docker traduit son adresse IP de docker en mon adresse IP d'hôte et cela fonctionne bien, mais après l'arpspoofing, cela ne fonctionne pas correctement - l'hôte envoie des paquets avec la source IP du conteneur victime du docker (172.17.0.3). De plus, ce qui est étrange, c'est qu'un autre conteneur (l'attaquant) envoie des paquets au réseau externe sans problème (docker0 traduit correctement l'ip du docker en ip de l'hôte). Image des deux wiresharks, ci-dessous.

Picture from both wiresharks

J'ai vérifié iptables et cette règle (sélectionnée sur l'image ci-dessous) traduit mon adresse ip docker en adresse ip hôte, mais après l'attaque, cette règle ne fonctionne pas (les pkts ne s'incrémentent pas après l'attaque arp spoofing). J'ai essayé d'ajouter des règles iptables supplémentaires mais sans effet. Je ne suis pas un maître d'iptables donc si quelqu'un a d'autres idées sur ce qu'il faut vérifier, donnez-moi un indice.

enter image description here

Peut-être que quelqu'un pourrait m'expliquer ou me donner des sources supplémentaires sur la façon dont docker traduit exactement son adresse IP à l'adresse IP de l'hôte sur le réseau de pont et ce que je peux faire pour rétablir la traduction correcte après une attaque arp-spoofing. Tout conseil sera apprécié.

0voto

LeoHsiao Points 1
  • Lorsque Docker est installé, une interface réseau nommée docker0 est créé pour connecter chaque conteneur.
  • Lorsque Docker crée un conteneur, une interface réseau virtuelle lui est attribuée par défaut avec un nom commençant par veth . Ensuite, Docker transmet le trafic de l'interface réseau de l'hôte à l'interface réseau virtuelle par le biais de règles iptables.
  • Si vous créez le conteneur avec la commande docker run --network=host ... vous demanderez au conteneur d'utiliser l'interface réseau de l'hôte. À ce stade, l'adresse IP du conteneur est la même que celle de l'hôte.

0 votes

Mon objectif est de le faire fonctionner en réseau bridge. Dans le réseau hôte docker, je ne peux pas créer cette configuration MITM qui m'intéresse. Chaque conteneur doit avoir une autre adresse IP et ils doivent être dans le même réseau (ou réseau virtuel) pour que ce MITM fonctionne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X