
Эксплуатирует стандартную конфигурацию IPv6 в Windows для подмены DNS через DHCPv6, перенаправляя трафик жертвы для перехвата учётных данных и атак типа «человек посередине» во время тестов на проникновение.
mitm6 — это инструмент для пентеста, который использует стандартную конфигурацию Windows для захвата DNS-сервера по умолчанию. Он делает это, отвечая на DHCPv6-сообщения, предоставляя жертвам link-local IPv6-адрес и устанавливая хост атакующего в качестве DNS-сервера по умолчанию. В роли DNS-сервера mitm6 выборочно отвечает на DNS-запросы по выбору атакующего и перенаправляет трафик жертвы на машину атакующего вместо легитимного сервера. Полное описание атаки см. в нашем блоге о mitm6. Mitm6 предназначен для совместной работы с ntlmrelayx из impacket для подмены WPAD и ретрансляции учётных данных.
mitm6 совместим как с Python 2.7, так и с 3.x. Вы можете установить зависимости для вашей версии с помощью pip install -r requirements.txt. В обоих случаях mitm6 использует следующие пакеты:
Для Python 2.7 используется модуль обратной совместимости ipaddress.
Вы можете установить последний релиз из PyPI командой , или последнюю версию из исходников командой после клонирования этого репозитория Git.
pip install mitm6python setup.py installПосле установки mitm6 будет доступен как программа командной строки с именем mitm6. Поскольку она использует захват сырых пакетов с помощью Scapy, её следует запускать от root. По умолчанию mitm6 должен автоматически определить настройки вашей сети и использовать основной интерфейс для подмены. Вероятно, единственный параметр, который вам понадобится указать, — это домен AD domain, который вы подменяете. Для более тонкой настройки доступны следующие опции:
usage: mitm6 [-h] [-i INTERFACE] [-l LOCALDOMAIN] [-4 ADDRESS] [-6 ADDRESS] [-m ADDRESS] [-a] [-r TARGET] [-v] [--debug]
[-d DOMAIN] [-b DOMAIN] [-hw DOMAIN] [-hb DOMAIN] [--ignore-nofqdn]
mitm6 - pwning IPv4 via IPv6
For help or reporting issues, visit https://github.com/dirkjanm/mitm6
optional arguments:
-h, --help show this help message and exit
-i INTERFACE, --interface INTERFACE
Interface to use (default: autodetect)
-l LOCALDOMAIN, --localdomain LOCALDOMAIN
Domain name to use as DNS search domain (default: use first DNS domain)
-4 ADDRESS, --ipv4 ADDRESS
IPv4 address to send packets from (default: autodetect)
-6 ADDRESS, --ipv6 ADDRESS
IPv6 link-local address to send packets from (default: autodetect)
-m ADDRESS, --mac ADDRESS
Custom mac address - probably breaks stuff (default: mac of selected interface)
-a, --no-ra Do not advertise ourselves (useful for networks which detect rogue Router Advertisements)
-r TARGET, --relay TARGET
Authentication relay target, will be used as fake DNS server hostname to trigger Kerberos auth
-v, --verbose Show verbose information
--debug Show debug information
Filtering options:
-d DOMAIN, --domain DOMAIN
Domain name to filter DNS queries on (Allowlist principle, multiple can be specified.)
-b DOMAIN, --blocklist DOMAIN, --blacklist DOMAIN
Domain name to filter DNS queries on (Blocklist principle, multiple can be specified.)
-hw DOMAIN, -ha DOMAIN, --host-allowlist DOMAIN, --host-whitelist DOMAIN
Hostname (FQDN) to filter DHCPv6 queries on (Allowlist principle, multiple can be specified.)
-hb DOMAIN, --host-blocklist DOMAIN, --host-blacklist DOMAIN
Hostname (FQDN) to filter DHCPv6 queries on (Blocklist principle, multiple can be specified.)
--ignore-nofqdn Ignore DHCPv6 queries that do not contain the Fully Qualified Domain Name (FQDN) option.
Вы можете вручную переопределить большинство автоматически определяемых параметров (хотя переопределение MAC-адреса может нарушить работу). Если в сети есть оборудование, которое блокирует или обнаруживает поддельные объявления маршрутизатора (Router Advertisement), вы можете добавить флаг --no-ra, чтобы не отправлять их. Объявления маршрутизатора не обязательны для работы mitm6, так как он в основном опирается на DHCPv6-сообщения.
Доступно несколько параметров фильтрации для выбора хостов, которые вы хотите атаковать и подменять. Во-первых, это опции --host-allowlist и --host-blocklist (или сокращённо -hw и -hb), которые принимают (частичное) имя домена в качестве аргумента. Входящие DHCPv6-запросы будут фильтроваться по этому списку. Проверяемым свойством является опция DHCPv6 FQDN, в которой клиент указывает своё имя хоста.
То же самое относится к DNS-запросам, для этого доступна опция --domain (или -d), где можно указать, какой домен(ы) вы хотите подменять. Блокировка конкретных доменов также возможна с помощью --blocklist/-b. Оба параметра можно указывать несколько раз для включения/блокировки нескольких доменов (например, -d domain.local -d otherdomain.local -b somehost.domain.local -b somehost.otherdomain.local).
Для фильтрации как по хосту, так и по DNS используется простое сравнение строк. То есть, если вы решите отвечать на wpad, он также будет отвечать на запросы для wpad.corpdomain.com. Если вам нужна более точная фильтрация, используйте одновременно опции разрешённого и запрещённого списков, так как запрещённый список имеет приоритет над разрешённым.
По умолчанию первый указанный домен используется в качестве поискового домена DNS. Если вы хотите явно указать этот домен самостоятельно, используйте опцию --localdomain.
mitm6 разработан как инструмент для пентеста и поэтому должен минимально влиять на сеть. Это основная причина, по которой mitm6 в настоящее время не реализует полную атаку «человек посередине», как, например, в случае SLAAC-атаки. Чтобы ещё больше снизить влияние, присваиваемые IP-адреса имеют малое время жизни (TTL). Аренда истечёт в течение 5 минут после остановки mitm6, что удалит DNS-сервер из конфигурации жертвы. Чтобы предотвратить кэширование DNS-ответов, все ответы отправляются с TTL 100 секунд, что гарантирует очистку кэша в течение нескольких минут после завершения работы инструмента.
mitm6 предназначен для использования с ntlmrelayx. Запускать инструменты следует параллельно: в этом сценарии mitm6 будет подменять DNS, заставляя жертв подключаться к ntlmrelayx для HTTP- и SMB-соединений. Для этого необходимо запустить ntlmrelayx с опцией -6, что заставит его прослушивать как IPv4, так и IPv6. Чтобы получить учётные данные для WPAD, укажите имя хоста WPAD для подмены с помощью -wh HOSTNAME (подойдёт любое несуществующее имя хоста в локальном домене, так как mitm6 является DNS-сервером). При желании вы также можете использовать параметр -wa N с количеством попыток, чтобы запросить аутентификацию для самого WPAD-файла, если вы подозреваете, что на жертвах не установлено исправление MS16-077.
Вы также можете использовать mitm6 для ретрансляции аутентификации Kerberos, особенно через DNS. Для этого используйте параметр --relay и укажите хост, на который хотите ретранслировать. Этот хост будет выдаваться за себя, и mitm6 попытается убедить ваших жертв отправить аутентифицированные динамические обновления с использованием аутентификации Kerberos в krbrelayx. Дополнительная информация об этой атаке доступна в следующем блоге: https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/
Команда Fox-IT Security Research Team выпустила сигнатуры Snort и Suricata для обнаружения поддельного DHCPv6-трафика и WPAD-ответов через IPv6. Сигнатуры доступны здесь: https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f