11 KiB
5353/UDP マルチキャスト DNS (mDNS) と DNS-SD
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
-
The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
-
公式のPEASS&HackTricksのグッズを手に入れましょう。
-
💬 Discordグループまたはテレグラムグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
-
ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出してください。
基本情報
マルチキャスト 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.251(IPv6の場合はFF02::FB)に送信します。mDNSを使用してグローバルドメイン名(.local以外のもの)を解決することもできますが、mDNSの実装ではデフォルトでこの動作が無効になっているはずです。mDNSのリクエストとレスポンスは、ソースポートと宛先ポートとしてUDPとポート5353を使用します。
mDNSの応答には、有効なレコードの秒数を示す**Time-to-Live(TTL)**値を含むいくつかの重要なフラグがあります。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)の前に似ています**。TXTはSRVレコードと同じ名前を持ち、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 🎥
-
サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
-
The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
-
公式のPEASS&HackTricksのスワッグを手に入れましょう。
-
💬 Discordグループに参加するか、telegramグループに参加するか、Twitterでフォローする🐦@carlospolopm。
-
**ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリ**にPRを提出してください。