# 5353/UDP Multicast DNS (mDNS) 및 DNS-SD {{#include ../banners/hacktricks-training.md}} ## 기본 정보 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 ``` - 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 -f "udp port 5353" -Y mdns # DNS-SD 서비스 목록 쿼리만 sudo tshark -i -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 -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 -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: {{#ref}} ../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} ### 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-discovery` 및 `broadcast-dns-service-discovery`. - Pholus: 능동 스캔, 역 mDNS 스윕, DoS 및 스푸핑 도우미. ```bash # Passive sniff (timeout seconds) sudo python3 pholus3.py -stimeout 60 # Enumerate service types sudo python3 pholus3.py -sscan # Send generic mDNS requests sudo python3 pholus3.py --request # Reverse mDNS sweep of a subnet sudo python3 pholus3.py -rdns_scanning 192.168.2.0/24 ``` - bettercap zerogod: mDNS/DNS-SD 서비스를 발견하고, 저장하고, 광고하고, 사칭합니다(위의 예를 참조하십시오). ## Spoofing/MitM 이 서비스에서 수행할 수 있는 가장 흥미로운 공격은 클라이언트와 실제 서버 간의 통신에서 MitM을 수행하는 것입니다. 민감한 파일(프린터와의 통신을 MitM)이나 자격 증명(Windows 인증)을 얻을 수 있을지도 모릅니다.\ 자세한 내용은 확인하십시오: {{#ref}} ../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} ## References - [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}}