hacktricks/network-services-pentesting/5353-udp-multicast-dns-mdns.md

8.5 KiB

5353/UDP Multicast DNS (mDNS) e DNS-SD

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Informações Básicas

Multicast DNS (mDNS) é um protocolo de configuração zero que permite realizar operações semelhantes ao DNS na rede local na ausência de um servidor DNS unicast convencional. O protocolo utiliza a mesma API, formatos de pacotes e semânticas de operação que o DNS, permitindo resolver nomes de domínio na rede local. DNS Service Discovery (DNS-SD) é um protocolo que permite aos clientes descobrir uma lista de instâncias nomeadas de serviços (como test._ipps._tcp.local ou linux._ssh._tcp.local) em um domínio usando consultas DNS padrão. DNS-SD é mais frequentemente usado em conjunto com mDNS, mas não depende dele. Ambos são usados por muitos dispositivos IoT, como impressoras de rede, Apple TVs, Google Chromecast, dispositivos de armazenamento conectados à rede (NAS) e câmeras.
Porta padrão: 5353/UDP

PORT     STATE SERVICE
5353/udp open  zeroconf

Como o mDNS Funciona

Dispositivos usam mDNS quando a rede local carece de um servidor DNS unicast convencional. Para resolver um nome de domínio para um endereço local usando mDNS, o dispositivo envia uma consulta DNS para um nome de domínio terminado em .local para o endereço multicast 224.0.0.251 (para IPv4) ou FF02::FB (para IPv6). Você também pode usar mDNS para resolver nomes de domínio globais (não terminados em .local), mas as implementações de mDNS devem desativar esse comportamento por padrão. Solicitações e respostas mDNS usam UDP e porta 5353 como porta de origem e destino.

As respostas mDNS contêm várias flags importantes, incluindo um valor de Time-to-Live (TTL) que indica quantos segundos o registro é válido. Enviar uma resposta com TTL=0 significa que o registro correspondente deve ser apagado. Outra flag importante é o bit QU, que indica se a consulta é uma consulta unicast ou não. Se o bit QU não estiver definido, o pacote é uma consulta multicast (QM). Como é possível receber consultas unicast fora do link local, implementações seguras de mDNS devem sempre verificar se o endereço de origem no pacote corresponde à faixa de endereço da sub-rede local.

Como o DNS-SD Funciona

DNS-SD permite que clientes descubram serviços disponíveis na rede. Para usá-lo, clientes enviam consultas DNS padrão para registros de ponteiros (PTR), que mapeiam o tipo de serviço para uma lista de nomes de instâncias específicas desse tipo de serviço.

Para solicitar um registro PTR, clientes usam o formato de nome "<Serviço>.<Domínio>". A parte <Serviço> é o nome do serviço precedido por "_" (por exemplo, _ipps, _printer ou _ipp) e _tcp ou _udp. A parte <Domínio> é ".local".
Respondentes então retornam os registros PTR que apontam para os acompanhantes registros de serviço (SRV) e texto (TXT). Aqui está um exemplo de um registro PTR:

_ipps._tcp.local: type PTR, class IN, test._ipps._tcp.local

A parte do registro PTR à esquerda do dois pontos é o seu nome, e a parte à direita é o registro SRV ao qual o registro PTR aponta. O registro SRV lista o host alvo e a porta onde a instância do serviço pode ser alcançada. Por exemplo, a próxima imagem mostra um registro SRV "test._ipps._tcp.local" no Wireshark no host ubuntu.local e porta 8000:

Portanto, o nome do registro SRV é semelhante ao registro PTR precedido pelo nome da <Instância> (test neste caso). O registro TXT tem o mesmo nome que o registro SRV e contém as informações necessárias quando o endereço IP e o número da porta (contidos no registro SRV) para um serviço não são suficientes para identificá-lo.

Enumeração

nmap

nmap -Pn -sUC -p5353 192.168.1.2

Starting Nmap 6.46 (http://nmap.org) at 2015-01-01 10:30 GMT
Nmap scan report for 192.168.1.2
PORT     STATE SERVICE
5353/udp open  zeroconf
| dns-service-discovery:
|   9/tcp workstation
|     Address=192.168.1.2
|   22/tcp ssh
|     Address=192.168.1.2
|   22/tcp sftp-ssh
|     Address=192.168.1.2
|   445/tcp smb
|     Address=192.168.1.2

Enumeração de Rede

Você pode aprender muito sobre a rede local simplesmente enviando solicitações mDNS e capturando o tráfego mDNS multicast.

Você pode usar a ferramenta Pholus para enviar solicitações mDNS (-rq) na rede local e capturar o tráfego mDNS multicast (por -stimeout 10 segundos):

sudo python3 pholus3.py eth0 -rq -stimeout 10

Ataques

Abusando da Fase de Sondagem mDNS

Quando um respondedor mDNS inicia ou altera sua conectividade, ele pergunta à rede local se há algum recurso com o nome que planeja usar. Se a resposta contiver o registro em questão, o host de sondagem deve escolher um novo nome. Se 15 conflitos ocorrerem em 10 segundos, o host deve então esperar pelo menos cinco segundos antes de qualquer tentativa adicional. Além disso, se passar um minuto durante o qual o host não conseguir encontrar um nome não utilizado, ele relata um erro ao usuário.

O seguinte comando impedirá que qualquer novo dispositivo obtenha qualquer novo nome, pois indicará que qualquer nome já está em uso:

sudo python pholus.py eth0 -afre -stimeout 1000

Spoofing/MitM

O ataque mais interessante que você pode realizar sobre este serviço é realizar um MitM na comunicação entre o cliente e o servidor real. Você pode ser capaz de obter arquivos sensíveis (MitM na comunicação com a impressora) ou até mesmo credenciais (autenticação do Windows).
Para mais informações, confira:

{% content-ref url="../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}

Referências

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: