
Exploita a configuração padrão do IPv6 do Windows para falsificar DNS via DHCPv6, redirecionando o tráfego da vítima para relay de credenciais e ataques man-in-the-middle durante testes de penetração.
mitm6 é uma ferramenta de pentest que explora a configuração padrão do Windows para assumir o controle do servidor DNS padrão. Isso é feito respondendo a mensagens DHCPv6, fornecendo às vítimas um endereço IPv6 link-local e definindo o host do invasor como servidor DNS padrão. Como servidor DNS, mitm6 responderá seletivamente a consultas DNS escolhidas pelo invasor e redirecionará o tráfego das vítimas para a máquina do invasor em vez do servidor legítimo. Para uma explicação completa do ataque, veja nosso blog sobre mitm6. Mitm6 é projetado para funcionar em conjunto com ntlmrelayx do impacket para falsificação de WPAD e retransmissão de credenciais.
mitm6 é compatível tanto com Python 2.7 quanto com 3.x. Você pode instalar os requisitos para sua versão com pip install -r requirements.txt. Em ambos os casos, mitm6 usa os seguintes pacotes:
Para python 2.7, ele usa o módulo backport ipaddress.
Você pode instalar a versão mais recente do PyPI com , ou a versão mais recente a partir do código fonte com após clonar este repositório git.
pip install mitm6python setup.py installApós a instalação, mitm6 estará disponível como um programa de linha de comando chamado mitm6. Como ele usa captura de pacotes brutos com Scapy, deve ser executado como root. mitm6 deve detectar suas configurações de rede por padrão e usar sua interface primária para sua falsificação. A única opção que você provavelmente precisará especificar é o domínio AD que você está falsificando. Para ajustes avançados, as seguintes opções estão disponíveis:
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.
Você pode substituir manualmente a maioria das opções de autodetecção (embora substituir o endereço MAC possa quebrar as coisas). Se a rede possui algum hardware que bloqueia ou detecta mensagens Rogue Router Advertisement, você pode adicionar a flag --no-ra para não transmiti-las. Router Advertisements não são necessários para o funcionamento do mitm6, pois ele depende principalmente de mensagens DHCPv6.
Várias opções de filtragem estão disponíveis para selecionar quais hosts você deseja atacar e falsificar. Primeiro, existem as opções --host-allowlist e --host-blocklist (ou -hw e -hb para abreviar), que aceitam um domínio (parcial) como argumento. As requisições DHCPv6 recebidas serão filtradas contra esta lista. A propriedade verificada é a opção DHCPv6 FQND, na qual o cliente fornece seu nome de host.
O mesmo se aplica para requisições DNS, para isso a opção --domain (ou -d) está disponível, onde você pode fornecer qual(is) domínio(s) deseja falsificar. Bloquear domínios específicos também é possível com --blocklist/-b. Ambos os parâmetros podem ser especificados várias vezes para incluir/bloquear múltiplos domínios (por exemplo -d domain.local -d otherdomain.local -b somehost.domain.local -b somehost.otherdomain.local).
Tanto para a filtragem de host quanto de DNS, é realizada uma correspondência simples de string. Portanto, se você escolher responder a wpad, também responderá a consultas para wpad.corpdomain.com. Se você deseja uma filtragem mais específica, use ambas as opções de allowlist e blocklist, pois a blocklist tem precedência sobre a allowlist.
Por padrão, o primeiro domínio especificado será usado como domínio de busca DNS. Se você deseja explicitamente especificar este domínio por conta própria, use a opção --localdomain.
mitm6 é projetado como uma ferramenta de teste de penetração e, portanto, deve impactar a rede o mínimo possível. Esta é a principal razão pela qual o mitm6 atualmente não implementa um ataque completo de homem-no-meio, como vemos, por exemplo, no ataque SLAAC. Para minimizar ainda mais o impacto, os endereços IP atribuídos têm valores baixos de time-to-live (TTL). A concessão expirará em 5 minutos quando o mitm6 for interrompido, o que removerá o servidor DNS da configuração das vítimas. Para evitar que respostas DNS sejam armazenadas em cache, todas as respostas são enviadas com um TTL de 100 segundos, o que garante que o cache seja limpo em minutos após a saída da ferramenta.
mitm6 é projetado para ser usado com ntlmrelayx. Você deve executar as ferramentas lado a lado. Neste cenário, mitm6 falsificará o DNS, fazendo com que as vítimas se conectem ao ntlmrelayx para conexões HTTP e SMB. Para isso, você deve garantir que o ntlmrelayx seja executado com a opção -6, que fará com que ele escute tanto em IPv4 quanto em IPv6. Para obter credenciais para WPAD, especifique o nome de host WPAD a ser falsificado com -wh HOSTNAME (qualquer nome de host inexistente no domínio local funcionará, pois o mitm6 é o servidor DNS). Opcionalmente, você também pode usar o parâmetro -wa N com um número de tentativas para solicitar autenticação para o próprio arquivo WPAD, caso suspeite que as vítimas não tenham o patch MS16-077 aplicado.
Você também pode usar mitm6 para retransmitir autenticação Kerberos, especialmente via DNS. Para fazer isso, use o parâmetro --relay e especifique um host para o qual deseja retransmitir. Este host será personificado, e mitm6 tentará convencer suas vítimas a enviar atualizações dinâmicas autenticadas usando autenticação Kerberos para krbrelayx. Mais informações sobre este ataque estão disponíveis no seguinte blog: https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/
A equipe Fox-IT Security Research Team team lançou assinaturas Snort e Suricata para detectar tráfego DHCPv6 malicioso e respostas WPAD sobre IPv6. As assinaturas estão disponíveis aqui: https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f