hacktricks/network-services-pentesting/5353-udp-multicast-dns-mdns.md
2023-07-07 23:42:27 +00:00

11 KiB
Raw Blame History

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

マルチキャスト DNS (mDNS) は、従来のユニキャスト DNS サーバーが存在しない場合に、ローカルネットワーク上で DNS のような操作 を実行できる ゼロ構成プロトコル です。このプロトコルは、DNS と同じ APIパケット形式、および動作セマンティクスを使用しており、ローカルネットワーク上のドメイン名を解決することができます。DNS サービスディスカバリ (DNS-SD) は、標準の DNS クエリを使用してドメイン内の 名前付きサービスの一覧 (例: test._ipps._tcp.local、または linux._ssh._tcp.local) をクライアントが 検出 できるプロトコルです。DNS-SD は、多くの IoT デバイスネットワークプリンター、Apple TV、Google Chromecast、NAS デバイス、カメラなどと一緒に使用されることが最も一般的ですが、mDNS に依存する必要はありません。
デフォルトポート: 5353/UDP

PORT     STATE SERVICE
5353/udp open  zeroconf

mDNSの動作原理

デバイスは、ローカルネットワークに従来のユニキャストDNSサーバーがない場合にmDNSを使用します。mDNSを使用してローカルアドレスのドメイン名を解決するために、デバイスはドメイン名が.localで終わるDNSクエリを、IPv4の場合はマルチキャストアドレス224.0.0.251IPv6の場合はFF02::FBに送信します。mDNSを使用してグローバルドメイン名.local以外のものを解決することもできますが、mDNSの実装ではデフォルトでこの動作が無効になっているはずです。mDNSのリクエストとレスポンスは、ソースポートと宛先ポートとしてUDPとポート5353を使用します。

mDNSの応答には、有効なレコードの秒数を示す**Time-to-LiveTTL**値を含むいくつかの重要なフラグがあります。TTL=0で応答を送信すると、対応するレコードがクリアされることを意味します。もう1つの重要なフラグはQUビットで、クエリがユニキャストクエリかどうかを示します。QUビットが設定されていない場合、パケットはマルチキャストクエリQMです。ローカルリンクの外部からユニキャストクエリを受信することが可能なため、セキュアなmDNSの実装では常にパケットのソースアドレスがローカルサブネットアドレス範囲と一致するかどうかを確認する必要があります。

DNS-SDの動作原理

DNS-SDは、クライアントがネットワーク上で利用可能なサービスを発見するためのものです。クライアントは、特定のサービスの名前のリストにサービスのタイプをマップするポインタレコードPTRの標準DNSクエリを送信します。

PTRレコードをリクエストするために、クライアントは "<Service>.<Domain>" の形式の名前を使用します。<Service>の部分は、サービス名の前に"_"が付いたものです_ipps、_printer、または_ippそして、_tcpまたは_udpです。<Domain>の部分は".local"です。
レスポンダは、付随する
サービスSRVテキストTXTレコード
を指すPTRレコードを返します。以下はPTRレコードの例です

_ipps._tcp.local: type PTR, class IN, test._ipps._tcp.local

PTRレコードのコロンの左側はその名前であり、右側はPTRレコードが指すSRVレコードです。SRVレコードには、サービスインスタンスにアクセスできるターゲットホストポートがリストされています。例えば、次の画像は、ホストubuntu.localとポート8000でWiresharkで表示される「test._ipps._tcp.local」のSRVレコードを示しています。

したがって、SRVレコードの名前は、PTRレコードの**<Instance>この場合はtestの前に似ています**。TXTSRVレコードと同じ名前を持ち、IPアドレスとポート番号SRVレコードに含まれるだけではサービスを識別するのに十分ではない情報が含まれています。

列挙

nmap

nmap -Pn -sUC -p5353 192.168.1.2

Starting Nmap 6.46 (http://nmap.org) at 2015-01-01 10:30 GMT
Nmap scan report for 192.168.1.2
PORT     STATE SERVICE
5353/udp open  zeroconf
| dns-service-discovery:
|   9/tcp workstation
|     Address=192.168.1.2
|   22/tcp ssh
|     Address=192.168.1.2
|   22/tcp sftp-ssh
|     Address=192.168.1.2
|   445/tcp smb
|     Address=192.168.1.2

ネットワーク列挙

単純にmDNSリクエストを送信し、マルチキャストmDNSトラフィックをキャプチャすることで、ローカルネットワークについて多くの情報を得ることができます。

ツールPholusを使用して、ローカルネットワーク上でmDNSリクエスト-rqを送信し、マルチキャストmDNSトラフィックをキャプチャすることができます-stimeout 10秒

sudo python3 pholus3.py eth0 -rq -stimeout 10

攻撃

mDNSのプロービングフェーズの悪用

mDNSレスポンダーが起動するか接続を変更すると、使用する予定の名前を持つリソースがローカルネットワークに存在するかどうかを問い合わせます。回答に対象のレコードが含まれている場合、プロービングホストは新しい名前を選択する必要があります。10秒以内に15回の競合が発生した場合、ホストは追加の試行を行う前に少なくとも5秒間待機する必要があります。さらに、未使用の名前を見つけることができないまま1分が経過すると、ホストはユーザーにエラーを報告します。

次のコマンドラインは、すべての新しいデバイスが既に使用されていると指定するため、新しい名前を取得できなくします:

sudo python pholus.py eth0 -afre -stimeout 1000

スプーフィング/MitM

このサービス上で実行できる最も興味深い攻撃は、クライアントと実際のサーバー間の通信でのMitMを実行することです。プリンターとの通信をMitMすることで、機密ファイルを入手することができるかもしれません。また、資格情報Windows認証を入手することもできます。
詳細については、以下を参照してください:

{% content-ref url="../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}

参考文献

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥