From e275557a04b135a01e4eab5a14c9f82d3b1ddddc Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 20 Aug 2025 14:17:28 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/5353-udp-multicast-dns-mdns --- hacktricks-preprocessor.py | 2 +- .../5353-udp-multicast-dns-mdns.md | 144 ++++++++++++++---- 2 files changed, 119 insertions(+), 27 deletions(-) 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 de0d88f6b..3a3390245 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}} -## **基本情報** +## 基本情報 -**マルチキャスト DNS (mDNS)** は、従来の DNS サーバーを必要とせずにローカルネットワーク内で **DNS のような操作** を可能にします。これは **UDP ポート 5353** で動作し、デバイスが互いにおよびそのサービスを発見することを可能にし、さまざまな IoT デバイスで一般的に見られます。**DNS サービス発見 (DNS-SD)** は、mDNS と一緒に使用されることが多く、標準 DNS クエリを通じてネットワーク上で利用可能なサービスを特定するのに役立ちます。 +マルチキャスト 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の動作** +攻撃中によく利用される主要なプロトコルの詳細: +- .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\"" +``` + +ヒント:一部のブラウザ/WebRTC は、ローカル IP をマスクするためにエフェメラル mDNS ホスト名を使用します。ワイヤ上で random-UUID.local の候補が見られた場合、mDNS で解決してローカル IP にピボットします。 + ## 攻撃 -### **mDNSプロービングの悪用** +### mDNS 名プロービング干渉(DoS / 名前の占有) -攻撃ベクターは、mDNSプローブに対して偽の応答を送信し、すべての潜在的な名前がすでに使用中であることを示唆することで、新しいデバイスがユニークな名前を選択するのを妨げることを含みます。これは次のように実行できます: +プロービングフェーズ中、ホストは名前のユニーク性を確認します。偽の競合で応答することで、新しい名前を選択させるか、失敗させることができます。これにより、サービスの登録や発見が遅れたり、妨げられたりする可能性があります。 + +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リレー技術と組み合わせる。 -### スプーフィング/ MitM +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を終了させる可能性があり(例: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 + +- セグメント境界:mDNSゲートウェイが明示的に必要でない限り、セキュリティゾーン間で224.0.0.251/FF02::FBをルーティングしないでください。発見をブリッジする必要がある場合は、ホワイトリストとレート制限を優先してください。 +- 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 -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}}