# 5353/UDP マルチキャストDNS (mDNS) と DNS-SD
AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!
HackTricksをサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローしてください。**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有してください。**
## 基本情報
マルチキャスト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.251(IPv4用)またはFF02::FB(IPv6用)に送信します。**グローバルドメイン名**(.local以外)を解決するためにもmDNSを使用することができますが、mDNSの実装ではこの動作をデフォルトで**無効**にすることになっています。mDNSのリクエストとレスポンスは**UDP**を使用し、ソースポートと宛先ポートの両方として**ポート5353**を使用します。
mDNSの返信には、レコードが有効である秒数を示す**Time-to-Live**(TTL)値など、いくつかの重要なフラグが含まれています。**TTL=0で返信を送信すると、対応するレコードをクリアする必要がある**ことを意味します。もう一つ重要なフラグはQUビットで、クエリがユニキャストクエリかどうかを示します。**QUビットが設定されていない**場合、パケットは**マルチキャスト**クエリ(QM)です。ローカルリンクの外でユニキャストクエリを**受信する可能性がある**ため、安全なmDNS実装では常に**パケット内のソースアドレスがローカルサブネットアドレス範囲と一致するかどうかを確認する**必要があります。
### DNS-SDの仕組み
DNS-SDはクライアントがネットワーク上で**利用可能なサービスを発見する**ことを可能にします。これを使用するには、クライアントはポインタレコード(PTR)の標準DNSクエリを送信します。これはサービスの種類をそのサービスの特定のインスタンスの名前のリストにマッピングします。
PTRレコードを要求するには、クライアントは "\.\" の形式の名前を使用します。**\**部分はサービス名の前に "\_"(例えば、\_ipps、\_printer、または\_ipp)が付き、**\_tcpまたは\_udp**です。**\**部分は "**.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レコードを示しています:
![](<../.gitbook/assets/image (651) (1) (1) (1) (1).png>)
したがって、**SRV**レコードの**名前**は、**PTR**レコードに**\**名(この場合はtest)が**先行**している**ようです**。**TXT**は**SRV**レコードと**同じ**名前を持ち、サービスを識別するためにIPアドレスとポート番号(SRVレコードに含まれる)だけでは不十分な場合に必要な情報を含んでいます。
## 列挙
### nmap
```bash
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**](https://github.com/aatlasis/Pholus/)を使用できます(-stimeout 10秒間):
```bash
sudo python3 pholus3.py eth0 -rq -stimeout 10
```
## 攻撃
### mDNS プロービングフェーズの悪用
mDNS レスポンダーが起動するか接続性が変わると、ローカルネットワークに**使用しようとしている名前のリソースがあるか**を問い合わせます。応答に該当するレコードが含まれている場合、プロービングホストは**新しい名前を選ばなければなりません**。10秒以内に15回の競合が発生した場合、ホストは追加の試みをする前に少なくとも5秒待たなければなりません。さらに、ホストが使用されていない名前を見つけられない1分間が経過すると、ユーザーにエラーを報告しなければなりません。
以下のコマンドラインは、**任意の名前が既に取られている**と示すことで、新しいデバイスが新しい名前を取得するのを防ぎます:
```bash
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](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
{% endcontent-ref %}
## 参考文献
* [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)
AWSハッキングをゼロからヒーローまで学ぶには、 htARTE (HackTricks AWS Red Team Expert)をご覧ください!
HackTricksをサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックしてください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**か、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォローしてください**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有してください**。