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
b684260c43
commit
8c4dab151d
@ -65,7 +65,7 @@ def ref(matchobj):
|
|||||||
dir = path.dirname(current_chapter['source_path'])
|
dir = path.dirname(current_chapter['source_path'])
|
||||||
rel_path = path.normpath(path.join(dir,href))
|
rel_path = path.normpath(path.join(dir,href))
|
||||||
try:
|
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:
|
if "#" in href:
|
||||||
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
|
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
|
||||||
title = " ".join(href.split("#")[1].split("-")).title()
|
title = " ".join(href.split("#")[1].split("-")).title()
|
||||||
|
@ -2,60 +2,152 @@
|
|||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#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
|
PORT STATE SERVICE
|
||||||
5353/udp open zeroconf
|
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**
|
- skanowanie celu nmap (bezpośredni mDNS na hoście):
|
||||||
|
|
||||||
#### **Użycie nmap**
|
|
||||||
|
|
||||||
Przydatne polecenie do skanowania lokalnej sieci w poszukiwaniu usług mDNS to:
|
|
||||||
```bash
|
```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.
|
- odkrywanie broadcastowe nmap (nasłuchuj segmentu i enumeruj wszystkie typy/instancje DNS-SD):
|
||||||
|
|
||||||
#### **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:
|
|
||||||
```bash
|
```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
|
## 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
|
```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ź:
|
Aby uzyskać więcej informacji, sprawdź:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||||
{{#endref}}
|
{{#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)
|
- [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}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user