
MiTM 공격을 실험하기 위해 랩 환경을 만들려고 합니다. 저도 docker를 배우고 싶어서 docker로 하기로 결정했습니다. 저는 2개의 이미지(공격자, 피해자)를 만들었습니다.
피해자 - Curl이 설치된 Alpine 기반
공격자 - iputils-ping iproute2가 설치된 Ubuntu 기반 컬 iptables vim ettercap-text-only dsniff 및 tshark.
둘 다 브리지된 네트워크에 있으므로 여기서 라우터는 docker0 인터페이스(기본값: 172.17.0.1)입니다.
ettercap 사용을 활성화하기 위해 --privileged 플래그를 사용하여 공격자 컨테이너를 실행하고 있습니다.
따라서 두 이미지가 모두 실행 중일 때 다음을 사용하여 공격자 컨테이너에서 ettercap(arpspoof 도구로도 시도, 동일한 효과)을 실행합니다.
ettercap -T -i eth0 -M arp:remote //victim_ip/ //172.17.0.1/
피해자의 트래픽이 공격자를 통과하고 있는데, 피해자가 google.com에 ping을 시도하면 응답이 없는 문제가 있습니다. 피해자 컨테이너에서 이 트래픽을 볼 수 있지만 무언가가 이를 차단하고 있기 때문에 MiTM 공격이 작동하고 있습니다.
여기서 문제가 무엇인지 알아냈습니다. 내 호스트에서 2개의 WireShark를 열었습니다. 하나는 docker0 인터페이스에 있고 다른 하나는 기본 Wi-Fi 인터페이스에 있습니다. 공격 전에 글로벌 네트워크에서 무언가를 핑할 때 도커가 자신의 도커 IP 주소를 내 호스트 IP 주소로 변환하고 있는데 제대로 작동하지만 arpspoofing 후에는 제대로 작동하지 않습니다. 호스트가 IP 소스가 다음과 같은 패킷을 보내고 있습니다. 도커 피해자 컨테이너(172.17.0.3). 또한 이상한 점은 다른 컨테이너(공격자)가 문제 없이 외부 네트워크에 ping을 보내고 있다는 것입니다(docker0은 docker ip를 호스트 ip로 올바르게 변환합니다). 아래 두 Wireshark의 사진입니다.
iptables를 확인하면 이 규칙(아래 그림에서 선택됨)이 내 docker IP 주소를 호스트 IP 주소로 변환하지만 공격 후에 이 규칙이 작동하지 않습니다(arp 스푸핑 공격 후 pkts가 증가하지 않음). 몇 가지 추가 iptables 규칙을 추가하려고 시도했지만 효과가 없습니다. 나는 iptables 마스터가 아니므로 누군가 확인해야 할 다른 아이디어가 있으면 힌트를 주십시오.
어쩌면 누군가가 docker가 브리지 네트워크의 IP 주소를 호스트 IP 주소로 정확히 변환하는 방법과 arp 스푸핑 공격 후 올바른 변환을 복원하기 위해 할 수 있는 작업에 대해 설명하거나 추가 소스를 제공할 수 있습니다. 모든 조언을 부탁드립니다.
답변1
- Docker가 설치되면 각 컨테이너를 연결하기 위한 네트워크 인터페이스가
docker0
생성됩니다. - Docker가 컨테이너를 생성하면 기본적으로 이름이 로 시작하는 가상 네트워크 인터페이스가 제공됩니다
veth
. 그런 다음 Docker는 iptables 규칙을 통해 호스트 네트워크 인터페이스의 트래픽을 가상 네트워크 인터페이스로 전달합니다. - 명령을 사용하여 컨테이너를 생성하면
docker run --network=host ...
컨테이너가 호스트의 네트워크 인터페이스를 사용하게 됩니다. 이 시점에서 컨테이너의 IP 주소는 호스트와 동일합니다.