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

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Informazioni di base

Multicast DNS (mDNS) permette la risoluzione di nomi simile a DNS e la scoperta dei servizi all’interno di un link locale senza un server DNS unicast. Usa UDP/5353 e gli indirizzi multicast 224.0.0.251 (IPv4) e FF02::FB (IPv6). DNS Service Discovery (DNS-SD, tipicamente usato con mDNS) fornisce un modo standardizzato per enumerare e descrivere i servizi tramite record PTR, SRV e TXT.

PORT     STATE SERVICE
5353/udp open  zeroconf

Dettagli chiave del protocollo che sfrutterai spesso durante gli attacchi:

  • I nomi nella zona .local vengono risolti tramite mDNS.
  • Il bit QU (Query Unicast) può richiedere risposte unicast anche per query multicast.
  • Le implementazioni dovrebbero ignorare i pacchetti non provenienti dal link locale; alcuni stack li accettano ancora.
  • Le fasi di probing/annuncio impongono nomi host/service unici; interferire qui crea condizioni di DoS/“name squatting”.

Modello di servizio DNS-SD

I servizi sono identificati come _._tcp o _._udp sotto .local, per esempio _ipp._tcp.local (printers), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge), ecc. Scopri i tipi con _services._dns-sd._udp.local, poi risolvi le istanze scoperte in SRV/TXT/A/AAAA.

Esplorazione e enumerazione della rete

  • nmap target scan (mDNS diretto su un host):
nmap -sU -p 5353 --script=dns-service-discovery <target>
  • nmap broadcast discovery (ascolta il segmento ed enumera tutti i tipi/istanze DNS-SD):
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 con 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\""

Suggerimento: Alcuni browser/WebRTC usano hostname mDNS effimeri per mascherare gli IP locali. Se vedi candidati random-UUID.local sul wire, risolvili con mDNS per pivotare sugli IP locali.

Attacchi

Interferenza durante il probing dei nomi mDNS (DoS / name squatting)

Durante la fase di probing, un host verifica l’unicità del nome. Rispondere con conflitti spoofati lo costringe a scegliere nuovi nomi o a fallire. Questo può ritardare o impedire la registrazione e la scoperta del servizio.

Esempio con Pholus:

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

Spoofing e impersonazione dei servizi (MitM)

Impersonate advertised DNS-SD services (stampanti, AirPlay, HTTP, file shares) per costringere i client a connettersi a te. Questo è particolarmente utile per:

  • Catturare documenti tramite spoofing di _ipp._tcp o _printer._tcp.
  • Adescare i client verso servizi HTTP/HTTPS per raccogliere token/cookie o consegnare payload.
  • Combinare con le tecniche di relay NTLM quando i client Windows negoziano l’autenticazione verso servizi spoofati.

Con il modulo zerogod di 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

Also see generic LLMNR/NBNS/mDNS/WPAD spoofing and credential capture/relay workflows:

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

Notes on recent implementation issues (useful for DoS/persistence during engagements)

  • I bug di reachable-assertion di Avahi e di crash di D-Bus (2023) possono terminare avahi-daemon sulle distribuzioni Linux (es. CVE-2023-38469..38473, CVE-2023-1981), interrompendo la discovery dei servizi sugli host target fino al riavvio.
  • Il DoS del gateway mDNS su Cisco IOS XE Wireless LAN Controller (CVE-2024-20303) consente ai client WLAN adiacenti di inviare inondazioni di mDNS appositamente costruiti, saturando la CPU del WLC e facendo cadere i tunnel AP — utile se devi forzare il roaming dei client o i reset del controller durante un engagement.
  • Un errore logico di mDNSResponder di Apple che causa DoS (CVE-2024-44183) permette a un processo locale sandboxed di far crashare Bonjour per sopprimere temporaneamente la pubblicazione/ricerca dei servizi su endpoint Apple; corretto nelle release correnti di iOS/macOS.
  • Una problematica di correttezza di mDNSResponder di Apple (CVE-2025-31222) consentiva escalation locale di privilegi tramite mDNSResponder; utile per persistenza su Mac/iPhone non gestiti, corretto negli aggiornamenti recenti di iOS/macOS.

Browser/WebRTC mDNS considerations

I moderni Chromium/Firefox offuscano gli host candidates con nomi mDNS casuali. Puoi riesporre gli IP LAN su endpoint gestiti applicando la policy Chrome WebRtcLocalIpsAllowedUrls (o attivando/disattivando chrome://flags/#enable-webrtc-hide-local-ips-with-mdns/equivalente Edge) così ICE espone gli host candidates invece di mDNS; impostabile via HKLM\Software\Policies\Google\Chrome.

Quando gli utenti disabilitano manualmente la protezione (comune nelle guide di troubleshooting WebRTC), i loro browser ricominciano ad annunciare host candidates in chiaro, che puoi catturare tramite mDNS o signaling ICE per accelerare la scoperta degli host.

Defensive considerations and OPSEC

  • Confini di segmento: Non instradare 224.0.0.251/FF02::FB tra zone di sicurezza a meno che un mDNS gateway non sia esplicitamente richiesto. Se devi consentire la discovery tra segmenti, preferisci allowlists e rate limits.
  • Endpoint/server Windows:
  • Per disabilitare completamente la risoluzione dei nomi via mDNS imposta il valore di registro e riavvia:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
  • Negli ambienti gestiti, disabilita la regola integrata “mDNS (UDP-In)” del Windows Defender Firewall (almeno sul profilo Domain) per prevenire l’elaborazione mDNS in ingresso preservando la funzionalità home/roaming.
  • Sulle build più recenti di Windows 11/template GPO, usa la policy “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol” e impostala su Disabled.
  • Linux (Avahi):
  • Restringi la pubblicazione quando non necessaria: imposta disable-publishing=yes e limita le interfacce con allow-interfaces= / deny-interfaces= in /etc/avahi/avahi-daemon.conf.
  • Prendi in considerazione check-response-ttl=yes ed evita enable-reflector=yes a meno che non sia strettamente necessario; preferisci allowlists reflect-filters= quando rifletti.
  • macOS: Restringi il traffico mDNS in ingresso a livello di host/firewall di rete quando la discovery Bonjour non è necessaria per subnet specifiche.
  • Monitoring: Allerta su picchi insoliti di query _services._dns-sd._udp.local o cambiamenti improvvisi in SRV/TXT di servizi critici; sono indicatori di spoofing o impersonificazione di servizi.

Tooling quick reference

  • nmap NSE: dns-service-discovery and broadcast-dns-service-discovery.
  • Pholus: active scan, reverse mDNS sweeps, DoS and spoofing helpers.
# 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: discover, save, advertise, and impersonate mDNS/DNS-SD services (vedi esempi sopra).

Spoofing/MitM

L’attacco più interessante che puoi eseguire su questo servizio è un MitM nella comunicazione tra il client e il server reale. Potresti ottenere file sensibili (ad es. MitM della comunicazione con la stampante) o addirittura credenziali (autenticazione Windows).
Per maggiori informazioni consulta:

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

References

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks