
☠ Man-in-the-middle точка беспроводного доступа внутри Docker-контейнера 🐳
Превратите любой компьютер с Linux в публичную сеть Wi-Fi, которая незаметно перехватывает весь HTTP-трафик. Работает внутри Docker-контейнера с использованием hostapd, dnsmasq и mitmproxy для создания открытой honeypot-беспроводной сети с именем «Public». Для дополнительного веселья смените имя сети на «xfinitywifi» — это автоматически подключит любого, кто когда-либо подключался к таким сетям… они повсюду.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Данное программное обеспечение предназначено только для образовательных целей. Его не следует использовать для незаконной деятельности. Автор не несет ответственности за его использование. Не будьте мудаком.
# клонируем репозиторий
git clone https://github.com/brannondorsey/mitm-router
cd mitm-router
# собираем образ; этот шаг можно пропустить, если вы предпочитаете вытянуть
# образ из репозитория Docker Hub
docker build . -t brannondorsey/mitm-router
Запустите следующую команду, заменив AP_IFACE и INTERNET_IFACE на ваше беспроводное устройство и подключённое к интернету ethernet/беспроводное устройство соответственно. Вы можете увидеть имена ваших сетевых устройств, выполнив ifconfig.
# запускаем контейнер
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 прозрачно перехватывает весь HTTP-трафик, отправленный на маршрутизатор по адресу 10.0.0.1:80. Он не перехватывает HTTPS-трафик (порт 443), так как это предупредило бы пользователя о возможной атаке «человек посередине». Трафик между URL, начинающимися с https://, не будет захвачен.
Папка mitm-router/data/ является общей с Docker-контейнером, чтобы мы могли просматривать файлы захвата, которые он туда помещает, на нашей хост-машине. По умолчанию вы найдёте файл захвата mitmdump в mitm-router/data/http-traffic.cap.
Вы также можете подключить ваш INTERNET_IFACE к хотспоту на телефоне для mitm-взлома на ходу ;)
Если что-то пошло не так, обратитесь к странице устранения неполадок.
Остановите Docker-контейнер, чтобы сбросить правила маршрутизации iptables.
# получите имя вашего контейнера
docker ps
# подключитесь к контейнеру
docker stop <ИМЯ_КОНТЕЙНЕРА>
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 рандомизирует MAC-адрес вашего AP_IFACE для анонимизации сетевого устройства. Это можно отключить с помощью переменной окружения MAC="unchanged". Вы также можете явно задать MAC-адрес AP_IFACE с помощью MAC="XX:XX:XX:XX:XX:XX".
Поддерживаемые переменные окружения перечислены ниже с их значениями по умолчанию:
# имя беспроводного устройства, которое будет использоваться для точки доступа
AP_IFACE="wlan0"
# имя устройства, используемого для внутреннего подключения маршрутизатора к интернету
# пакеты с AP_IFACE будут перенаправляться на это устройство
INTERNET_IFACE="eth0"
# имя беспроводной сети
SSID="Public"
# опциональный пароль WPA2; если оставить пустым, сеть будет открытой
PASSWORD=""
# опциональная рандомизация MAC-адреса AP_IFACE
# можно задать конкретное значение, например "XX:XX:XX:XX:XX:XX"
# или "unchanged", чтобы оставить MAC-адрес устройства без изменений
MAC="random"
# расположение выходного файла tcpdump внутри контейнера
CAPTURE_FILE="/root/data/http-traffic.cap"
# опциональный фильтр mitmproxy
# см. http://docs.mitmproxy.org/en/stable/features/filters.html
FILTER=""
См. страницу устранения неполадок для получения дополнительной информации.
Эта точка доступа работает внутри Docker для изоляции, что гарантирует: любые уязвимости, которые могут быть использованы в точке доступа, не позволят злоумышленнику получить доступ к вашему компьютеру или домашней сети. Тем не менее, следует учитывать несколько моментов:
--net host предоставляет все сетевые интерфейсы и записи iptables хост-машины Docker-контейнеру. Предполагается, что уязвимый Docker-контейнер будет иметь root-доступ к этим устройствам.--privileged даёт расширенные разрешения Docker-контейнеру.ufw в Linux) для блокировки входящего трафика на всех портах, чтобы компьютеры в сети "Public" не имели доступа к открытым службам вашей машины.Для дополнительной безопасности я предпочитаю запускать этот Docker-контейнер на выделенном компьютере, например Raspberry Pi.
Этот код начинался как жёсткий форк rpi-hostapd от simonschuang. Код был сильно модифицирован для целей mitm.