hacktricks/network-services-pentesting/5353-udp-multicast-dns-mdns.md

10 KiB
Raw Blame History

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

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!

HackTricksをサポートする他の方法:

基本情報

マルチキャストDNS (mDNS) は、従来のユニキャストDNSサーバーがないローカルネットワークで DNSのような操作 を行うための ゼロ設定プロトコル です。このプロトコルは 同じ API、パケットフォーマット、およびDNSと同じ運用セマンティクスを使用し、ローカルネットワーク上でドメイン名を解決することができます。DNSサービス検出 (DNS-SD) は、標準DNSクエリを使用してドメイン内のサービスの名前付きインスタンスのリストtest._ipps._tcp.local、またはlinux._ssh._tcp.localをクライアントが 発見する ためのプロトコルです。DNS-SDは通常mDNSと組み合わせて使用されますが、それに依存しているわけではありません。これらは、ネットワークプリンター、Apple TV、Google Chromecast、ネットワーク接続ストレージNASデバイス、カメラなど、多くのIoTデバイスによって使用されています。
デフォルトポート: 5353/UDP

PORT     STATE SERVICE
5353/udp open  zeroconf

mDNSの仕組み

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

mDNSの返信には、レコードが有効である秒数を示すTime-to-LiveTTL値など、いくつかの重要なフラグが含まれています。TTL=0で返信を送信すると、対応するレコードをクリアする必要があることを意味します。もう一つ重要なフラグは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レコードには、サービスインスタンスに到達できるターゲットホストポートがリストされています。例えば、次の画像はWiresharkにおけるホストubuntu.localとポート8000での"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トラフィックをキャプチャすることで、ローカルネットワークについて多くのことを学ぶことができます。

ローカルネットワーク上でmDNSリクエスト(-rq)を送信し、マルチキャストmDNSトラフィックをキャプチャするために、ツールPholusを使用できます(-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を行うことです。プリンターとの通信を中間者攻撃することで機密ファイルを、または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 %}

参考文献

AWSハッキングをゼロからヒーローまで学ぶには、 htARTE (HackTricks AWS Red Team Expert)をご覧ください!

HackTricksをサポートする他の方法: