hacktricks/generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md
2023-07-07 23:42:27 +00:00

264 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EvilSSDPを使用したSSDPおよびUPnPデバイスのスプーフィング
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出**してください。
</details>
**この記事は** [**https://www.hackingarticles.in/evil-ssdp-spoofing-the-ssdp-and-upnp-devices/**](https://www.hackingarticles.in/evil-ssdp-spoofing-the-ssdp-and-upnp-devices/) **からコピーされました**
## **はじめに**
### **SSDPとは何ですか**
SSDPまたはSimple Service Discovery Protocolは、**ネットワークサービスの広告と検出**のために設計されたネットワークプロトコルです。DHCPやDNSの設定なしで動作することができます。これは、住宅や小規模オフィス環境で使用するために設計されました。UDPを基にしたトランスポートプロトコルである**ポート1900**を使用します。HTTPメソッドのNOTIFYを使用して、マルチキャストグループに対してサービスの確立または撤回をアナウンスします。これは、UPnPの検出プロトコルの基礎です。
### **UPnPデバイスとは何ですか**
UPnPまたはUniversal Plug and Playは、**ネットワーキングプロトコルのセット**であり、パーソナルコンピュータ、プリンタ、インターネットゲートウェイ、Wi-Fiアクセスポイント、モバイルデバイスなどのネットワークデバイスが**ネットワーク上での相互の利用可能性を検出**し、通信、データ共有、エンターテイメントのためのネットワークサービスを確立することを可能にします。UPnPアーキテクチャはゼロ構成ネットワーキングをサポートしています。任意のベンダーのUPnP対応デバイスは、ネットワークに動的に参加し、IPアドレスを取得し、要求に応じて名前をアナウンスしたり、機能を広告したり、他のデバイスの存在と機能について学習することができます。
### **フロー**
**UPnP**スタックは、アドレッシング、検出、説明、制御、イベント、プレゼンテーションの**6つのレイヤー**で構成されています。
アドレッシングレイヤーでは、UPnP対応システムは**DHCP**を介してIPアドレスを取得しようとします。それが不可能な場合、169.254.0.0/16範囲RFC 3927からアドレスを**自動割り当て**するプロセスであるAutoIPを使用します。
次は検出レイヤーで、システムは**Simple Service Discovery Protocol**SSDPを使用してネットワーク上の他のデバイスを検索します。デバイスを検出する方法は**アクティブ**と**パッシブ**の2つあります。アクティブな方法を使用する場合、UPnP対応デバイスはマルチキャストアドレス**239.255.255.250のUDPポート1900**に対して検出メッセージ(**M-SEARCHリクエスト**と呼ばれる)を**送信**します。これをHTTPUUDP上のHTTPと呼びます。なぜなら、HTTPヘッダに似たヘッダが含まれているからです。M-SEARCHリクエストは次のようになります
```
M-SEARCH * HTTP/1.1
ST: ssdp:all
MX: 5
MAN: ssdp:discover
HOST: 239.255.255.250:1900
```
UPnPシステムは、このリクエストを受け取ると、デバイスがサポートするサービスをリストした説明XMLファイルのHTTPの場所をアナウンスする**UDPユニキャストメッセージ**で応答することが期待されています。
デバイスの発見には**パッシブな方法**を使用する場合、UPnP対応デバイスは定期的にネットワーク上でサービスをアナウンスするため、UDPポート1900のマルチキャストアドレス239.255.255.250に**NOTIFYメッセージを送信**します。以下は、アクティブなディスカバリに対する応答として送信されるメッセージの例です。
```
NOTIFY * HTTP/1.1\r\n
HOST: 239.255.255.250:1900\r\n
CACHE-CONTROL: max-age=60\r\n
LOCATION: http://192.168.10.254:5000/rootDesc.xml\r\n
SERVER: OpenWRT/18.06-SNAPSHOT UPnP/1.1 MiniUPnPd/2.1\r\n
NT: urn:schemas-upnp-org:service:WANIPConnection:2
```
UPnPプロファイルの説明は、アクティブな検出中に受信した応答メッセージのLOCATIONフィールドの値、またはパッシブな検出中に受信したNOTIFYメッセージに参照されます。
**制御レイヤー**はおそらく最も**重要**なレイヤーであり、クライアントは説明ファイル内のURLを使用してUPnPデバイスにコマンドを送信することができます。これはSimple Object Access Protocol**SOAP**を使用することで行われます。SOAPはXMLをHTTP上で使用するメッセージングプロトコルです。デバイスは制御URLエンドポイントにSOAPリクエストを送信します。制御URLは説明ファイル内の\<service>タグで説明されています。\<service>タグは次のようになります:
```xml
<service>
<serviceType>urn:schemas-upnp-org:service:WANIPConnection:2</serviceType>
<serviceId>urn:upnp-org:serviceId:WANIPConn1</serviceId>
<SCPDURL>/WANIPCn.xml</SCPDURL>
<controlURL>/ctl/IPConn</controlURL>
<eventSubURL>/evt/IPConn</eventSubURL>
</service>
```
### **IGD - インターネットゲートウェイデバイス**
**IGD**は、ネットワークアドレス変換NATの設定でポートをマッピングします。IGDは、アプリケーションが一定の時間期間ユーザーが手動で何か手順を実行する必要はありませんにおいて、ルーター上に一時的なポートマッピングを動的に追加することを可能にします。
ほとんどのデバイスは通常、WANインターフェースを介してSSDPパケットを受け入れませんが、一部のデバイスはまだ開いているSOAPコントロールポイントを介してIGDコマンドを受け入れることができます。
**Umapツールセクション**では、このベクターを悪用する方法を見つけることができます。
## **ツール**
### **Miranda**
[**Miranda**](https://raw.githubusercontent.com/0x90/miranda-upnp/master/src/miranda.py)は、**python2**の**UPnPクライアント**であり、UPnPサービスを発見し、詳細を取得し、それらにコマンドを送信するのに役立つことがあります。
```
upnp> msearch
Entering discovery mode for 'upnp:rootdevice', Ctl+C to stop...
SSDP reply message from 192.168.1.254:49152
XML file is located at http://192.168.1.254:49152/wps_device.xml
Device is running Unspecified, UPnP/1.0, Unspecified
SSDP reply message from 192.168.1.254:53350
XML file is located at http://192.168.1.254:53350/37699b14/rootDesc.xml
Device is running Linux/3.4.11 UPnP/1.0 MiniUPnPd/1.9
upnp> host list
[0] 192.168.1.254:49152
[1] 192.168.1.254:53350
upnp> host get 0
upnp> host details 0
Host name: 192.168.1.254:49152
UPNP XML File: http://192.168.1.254:49152/wps_device.xml
Device information:
Device Name: WFADevice
Service Name: WFAWLANConfig
controlURL: wps_control
eventSubURL: wps_event
serviceId: urn:wifialliance-org:serviceId:WFAWLANConfig1
SCPDURL: wps_scpd.xml
fullName: urn:schemas-wifialliance-org:service:WFAWLANConfig:1
ServiceActions:
PutMessage
NewInMessage
InMessage:
dataType: bin.base64
[...]
upnp> host send 0 WFADevice WFAWLANConfig PutMessage
```
### Umap
ツール[**umap**](https://github.com/0x90/upnp-arsenal/blob/master/umap-bypass.py)は、**WAN**インターフェースから利用可能な**upnpコマンド**を**発見**するのに役立ちますこれはバグのある実装のためにこれらのインターフェースで広告されていない場合もあります。たとえば、ルーターをテストして内部ネットワークとWANインターフェースの両方からアクセスできる場合、内部ネットワークからすべてのサービスを列挙してから外部ネットワークからそれらのサービスを呼び出すことを試してみる必要がありますたとえば、**miranda**を使用します)。
### **その他のUPnPツール**
[**https://github.com/0x90/upnp-arsenal**](https://github.com/0x90/upnp-arsenal)でさらに多くのupnpツールを見つけることができます。
### **Evil SSDP**
Evil SSDPツールは[initstring](https://twitter.com/init\_string)によって開発されました。このツールはGitHubにホストされています。git cloneコマンドを使用して、gitのすべての内容を攻撃者のマシンにクローンします。git cloneコマンドはGitHubと同じ名前のディレクトリを作成します。ツールはPythonバージョン3で開発されているため、プログラムを実行するためにはpython3の後に.pyファイルの名前を使用する必要があります。ここでは、ツールの基本的なヘルプ画面が表示されています。
```bash
git clone https://github.com/initstring/evil-ssdp.git
cd evil-ssdp/ls
python3 evil-ssdp.py --help
```
![](https://i0.wp.com/1.bp.blogspot.com/-O6lddDvxqts/Xkq5PHqeE\_I/AAAAAAAAisQ/FKOCxVwT9cMy54lLy0SsYcKoM5Q95K5mQCLcBGAsYHQ/s1600/1.png?w=687\&ssl=1)
クローンされたディレクトリには、templatesという名前のディレクトリが含まれています。これには、ターゲットユーザーをフィッシングするために使用できるすべての事前コンパイルされたテンプレートが含まれています。
## **SSDPのスプーフィング**
問題なくツールを実行したので、いくつかの有用な資格情報を入手するために使用しましょう。この最初の実践では、信頼性のあるUPnPデバイスとしてスキャナーをスプーフィングします。まず、テンプレートを設定する必要があります。
### **テンプレートの設定**
ツールを使用するには、ネットワークインターフェースを指定する必要があります。ここでは、攻撃者のマシン上で「eth0」をインターフェースとして持っていますが、「ifconfig」コマンドを使用してインターフェースを見つけることができます。
インターフェースを指定した後、テンプレートディレクトリで以前に見つけたテンプレートを渡すために「--template」パラメータを使用します。スキャナーをスプーフィングするために、次のコマンドを実行します。ツールがその役割を果たし、複数のテンプレートファイルがポート8888で攻撃者のマシン上にホストされていることがわかります。また、SMBポインタもホストされています。
```bash
ls temlates/
python3 evil-ssdp.py eth0 --template scanner
```
![](https://i0.wp.com/1.bp.blogspot.com/-kg05jQ03Fnw/Xkq5Qing\_qI/AAAAAAAAisk/GYK8MuCKqKUalqh3DHGWVRoyDlAQaxUrwCLcBGAsYHQ/s1600/2.png?w=687\&ssl=1)
### **ユーザーの操作**
次の論理的なステップは、ユーザーを操作してアプリケーションをクリックさせることです。ターゲットと同じネットワークにいる場合、エクスプローラーに偽のスキャナーが表示されます。これがUPnPが機能する場所です。Evil SSDPツールは、ターゲットとの強制的な相互作用なしに、ターゲットのシステム上にこの本物のスキャナーを作成します。
![](https://i1.wp.com/1.bp.blogspot.com/-\_05xXp10Buk/Xkq5Qz4yosI/AAAAAAAAiso/HdHr0qJ59rkR2ur\_UYcrHMdf93uqMhXUwCLcBGAsYHQ/s1600/3.png?w=687\&ssl=1)
エクスプローラー内のアイコンをクリックすると、デフォルトのWebブラウザにリダイレクトされ、ホストされたリンクが開きます。ここで使用したテンプレートが活躍します。ユーザーは、自分が本物のスキャナーまたは私たちが生成した偽のUPnPデバイスに接続されていることを認識しています。無意識のターゲットは、以下の画像に示すように、このテンプレートに有効な資格情報を入力します。
![](https://i2.wp.com/1.bp.blogspot.com/-lp2DBNRl12A/Xkq5RBtGvgI/AAAAAAAAiss/G9jSOVdBO4wnRKixpXlbj6BJeCTBWz7cACLcBGAsYHQ/s1600/4.png?w=687\&ssl=1)
### **資格情報の取得**
ターゲットユーザーが資格情報を入力すると、攻撃者のマシンのターミナルをチェックして、ユーザーが入力した資格情報を確認します。各ターゲットデバイスに対して会話が必要ないため、偽のスキャナーはネットワーク内のすべてのユーザーに表示されます。これは、この種の攻撃の範囲が無限であることを意味します。
![](https://i1.wp.com/1.bp.blogspot.com/-RAI02igc4F4/Xkq5RSJ3j2I/AAAAAAAAisw/p47jd\_jyyAE3RQIpms6nd-TzsPygD4CXQCLcBGAsYHQ/s1600/5.png?w=687\&ssl=1)
## **Office365 SSDPのスプーフィング**
前の実践では、スキャナーをターゲットユーザーにスプーフィングしました。次に、テンプレートディレクトリを通じて進行し、Office365のテンプレートを見つけました。それを使用しましょう。
### **テンプレートの設定**
前と同様に、テンプレートとツールの設定から始めましょう。python3を使用してツールを実行し、その後にpythonファイルの名前を指定します。次に、ネットワークインターフェースを指定し、その後にoffice365のテンプレートパラメータを指定します。
```bash
python3 evil-ssdp.py eth0 --template office365
```
![](https://i1.wp.com/1.bp.blogspot.com/-8GWxmKPDkIo/Xkq5RmgF8\_I/AAAAAAAAis0/bxVTcd4aBCUZBEDuUIg3-G39aMu7l5YCgCLcBGAsYHQ/s1600/6.png?w=687\&ssl=1)
ツールがその役割を果たし、攻撃者のマシンのポート8888に複数のテンプレートファイルをホストしていることがわかります。
### **ユーザーの操作**
ツールを実行すると、Office365バックアップという名前のUPnPデバイスが表示されます。これは、ツールがターゲットユーザーにファイルやペイロード、その他のタイプのインタラクションを送信することなく行われました。残るは、ユーザーがアイコンをクリックするだけです。
![](https://i0.wp.com/1.bp.blogspot.com/-txqBOw02D6w/Xkq5RgolUcI/AAAAAAAAis4/wkQTzYBmtdU\_Nbq9X1qI47FlJtdqHvIjQCLcBGAsYHQ/s1600/7.png?w=687\&ssl=1)
ユーザーがクリックすると、ターゲットユーザーはデフォルトのブラウザを介して偽のテンプレートページにリダイレクトされます。これは非常に本物のようなMicrosoftのウェブページです。無知なユーザーはこのページに有効な資格情報を入力します。
![](https://i1.wp.com/1.bp.blogspot.com/-69Tf3PRpvhM/Xkq5RziDXzI/AAAAAAAAis8/vjejKgh0XigRHFC2Ib8QCpPlzx\_RAu4eACLcBGAsYHQ/s1600/8.png?w=687\&ssl=1)
### **資格情報の取得**
ユーザーが資格情報を入力し、それがポストリクエストとしてサーバー(私たちのターゲットマシン)に渡されると、私たちのターミナルに資格情報が表示されます。
![](https://i0.wp.com/1.bp.blogspot.com/-3KXN6DKT\_E0/Xkq5SEwhKHI/AAAAAAAAitA/a2gTi5UwNE0JsMH-XQEW33MchkxgjPGSwCLcBGAsYHQ/s1600/9.png?w=687\&ssl=1)
## **ユーザーをパスワードボールトSSDPに誘導する**
これまでに、ターゲットユーザーをスキャナーの資格情報とOffice365のバックアップの資格情報を入手するためにスプーフィングしました。しかし、今度は最も重要なものであるUPnPとして使用されるパスワードボールトに取り組みます。
### **テンプレートの設定**
前回の実践と同様に、パスワードボールトのテンプレートを設定する必要があります。ツールはすぐにパスワードボールトのテンプレートをポート8888にホストします。
```bash
python3 evil-ssdp.py eth0 --template password-vault
```
![](https://i2.wp.com/1.bp.blogspot.com/-YPQirClmWN4/Xkq5O5WFgoI/AAAAAAAAisI/4\_i4ogVRWE0C\_ez3p6EkL8YdJ0ot48DmwCLcBGAsYHQ/s1600/10.png?w=687\&ssl=1)
### **ユーザーの操作**
ターゲットマシンに移動すると、エクスプローラーでPassword Vault UPnPが表示されていることがわかります。ユーザーがデバイスをクリックし、私たちの攻撃に引っかかることを期待します。Password Vaultのようなものを見ると、ユーザーはアイコンをクリックしたくなるでしょう。
![](https://i2.wp.com/1.bp.blogspot.com/-3oMPYaCZ46k/Xkq5PB4zQ\_I/AAAAAAAAisM/i5C8qZVB8RYWBwAkiKCZbdptIbsnk4CUwCLcBGAsYHQ/s1600/11.png?w=687\&ssl=1)
無知なユーザーは、偽のキーとパスワードで非常に重要な作業を達成したと思っています。これはユーザーを惑わすためのものであり、ユーザーはこの網羅的な資格情報のリストを試しても成功しないでしょう。
![](https://i0.wp.com/1.bp.blogspot.com/-SrCMlWIUxCM/Xkq5Pg\_IznI/AAAAAAAAisU/L\_ZIvQKfltkyk9iUCrEGyXCojx5b86uFgCLcBGAsYHQ/s1600/12.png?w=687\&ssl=1)
## **Microsoft Azure SSDPのスプーフィング**
スプーフィングを行う際に最も重要なタスクの1つは、ターゲットユーザーにスプーフィングの被害者であることを知らせないことです。これは、攻撃者が取得したい資格情報やクッキーなどを取得した後、ユーザーをリダイレクトすることで実現できます。evil\_ssdpツールには、攻撃者が選択した任意のURLに対してターゲットユーザーをリダイレクトするためのパラメータ-uがあります。このパラメータの動作を見てみましょう。
まず、ツールをロードするためにpython3を使用します。次に使用するネットワークインターフェースを指定します。この実践では、Microsoft Azure Storageテンプレートを使用します。テンプレートを選択した後、-uパラメータを入力し、ユーザーをリダイレクトしたい任意のURLを指定します。ここでは、Microsoftの公式リンクを使用していますが、これは任意の悪意のあるサイトにすることができます。
```bash
python3 evil-ssdp.py eth0 --template microsoft-azure -u https://malicous-site.com
```
![](https://i2.wp.com/1.bp.blogspot.com/-ReHCqgFazX0/Xkq5QBiQ7jI/AAAAAAAAisY/_DFdnzBpSGY1iDP1YJxeVTHF3iS5PZnqwCLcBGAsYHQ/s1600/13.png?w=687&ssl=1)
### **ユーザーの操作**
ツールを起動した後、以下の画像に示すように、ターゲットマシンにUPnPデバイスが作成されます。攻撃が成功するためには、ターゲットがデバイスをクリックする必要があります。
![](https://i1.wp.com/1.bp.blogspot.com/-rROTfEGP3z8/Xkq5QBn46dI/AAAAAAAAisc/7RDv7fI3BPYt1XmrKVRKOEHurkGY1xeogCLcBGAsYHQ/s1600/14.png?w=687&ssl=1)
アイコンをクリックした後、ユーザーはMicrosoft公式ページにリダイレクトされます。これは攻撃者が望むものになります。
![](https://i2.wp.com/1.bp.blogspot.com/-gU36s2kyIbg/Xkq5QVRh61I/AAAAAAAAisg/hN3uVMTPh-suDiH5ID3-mWcQiNvDVYeJACLcBGAsYHQ/s1600/15.png?w=687&ssl=1)
これで、この素晴らしいスプーフィングツールの実践が終了しました。
## **緩和策**
* UPnPデバイスを無効にする。
* ユーザーにフィッシング攻撃を防ぐための教育を行う。
* パスワードが平文で送信されることを監視する。
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details>