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

23 KiB
Raw Blame History

EvilSSDPを使用したSSDPおよびUPnPデバイスのスプーフィング

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

この記事は 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 ProtocolSSDPを使用してネットワーク上の他のデバイスを検索します。デバイスを検出する方法はアクティブパッシブの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 ProtocolSOAPを使用することで行われます。SOAPはXMLをHTTP上で使用するメッセージングプロトコルです。デバイスは制御URLエンドポイントにSOAPリクエストを送信します。制御URLは説明ファイル内の<service>タグで説明されています。<service>タグは次のようになります:

<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は、python2UPnPクライアントであり、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は、WANインターフェースから利用可能なupnpコマンド発見するのに役立ちますこれはバグのある実装のためにこれらのインターフェースで広告されていない場合もあります。たとえば、ルーターをテストして内部ネットワークとWANインターフェースの両方からアクセスできる場合、内部ネットワークからすべてのサービスを列挙してから外部ネットワークからそれらのサービスを呼び出すことを試してみる必要がありますたとえば、mirandaを使用します)。

その他のUPnPツール

https://github.com/0x90/upnp-arsenalでさらに多くのupnpツールを見つけることができます。

Evil SSDP

Evil SSDPツールはinitstringによって開発されました。このツールはGitHubにホストされています。git cloneコマンドを使用して、gitのすべての内容を攻撃者のマシンにクローンします。git cloneコマンドはGitHubと同じ名前のディレクトリを作成します。ツールはPythonバージョン3で開発されているため、プログラムを実行するためにはpython3の後に.pyファイルの名前を使用する必要があります。ここでは、ツールの基本的なヘルプ画面が表示されています。

git clone https://github.com/initstring/evil-ssdp.git
cd evil-ssdp/ls
python3 evil-ssdp.py --help

クローンされたディレクトリには、templatesという名前のディレクトリが含まれています。これには、ターゲットユーザーをフィッシングするために使用できるすべての事前コンパイルされたテンプレートが含まれています。

SSDPのスプーフィング

問題なくツールを実行したので、いくつかの有用な資格情報を入手するために使用しましょう。この最初の実践では、信頼性のあるUPnPデバイスとしてスキャナーをスプーフィングします。まず、テンプレートを設定する必要があります。

テンプレートの設定

ツールを使用するには、ネットワークインターフェースを指定する必要があります。ここでは、攻撃者のマシン上で「eth0」をインターフェースとして持っていますが、「ifconfig」コマンドを使用してインターフェースを見つけることができます。

インターフェースを指定した後、テンプレートディレクトリで以前に見つけたテンプレートを渡すために「--template」パラメータを使用します。スキャナーをスプーフィングするために、次のコマンドを実行します。ツールがその役割を果たし、複数のテンプレートファイルがポート8888で攻撃者のマシン上にホストされていることがわかります。また、SMBポインタもホストされています。

ls temlates/
python3 evil-ssdp.py eth0 --template scanner

ユーザーの操作

次の論理的なステップは、ユーザーを操作してアプリケーションをクリックさせることです。ターゲットと同じネットワークにいる場合、エクスプローラーに偽のスキャナーが表示されます。これがUPnPが機能する場所です。Evil SSDPツールは、ターゲットとの強制的な相互作用なしに、ターゲットのシステム上にこの本物のスキャナーを作成します。

エクスプローラー内のアイコンをクリックすると、デフォルトのWebブラウザにリダイレクトされ、ホストされたリンクが開きます。ここで使用したテンプレートが活躍します。ユーザーは、自分が本物のスキャナーまたは私たちが生成した偽のUPnPデバイスに接続されていることを認識しています。無意識のターゲットは、以下の画像に示すように、このテンプレートに有効な資格情報を入力します。

資格情報の取得

ターゲットユーザーが資格情報を入力すると、攻撃者のマシンのターミナルをチェックして、ユーザーが入力した資格情報を確認します。各ターゲットデバイスに対して会話が必要ないため、偽のスキャナーはネットワーク内のすべてのユーザーに表示されます。これは、この種の攻撃の範囲が無限であることを意味します。

Office365 SSDPのスプーフィング

前の実践では、スキャナーをターゲットユーザーにスプーフィングしました。次に、テンプレートディレクトリを通じて進行し、Office365のテンプレートを見つけました。それを使用しましょう。

テンプレートの設定

前と同様に、テンプレートとツールの設定から始めましょう。python3を使用してツールを実行し、その後にpythonファイルの名前を指定します。次に、ネットワークインターフェースを指定し、その後にoffice365のテンプレートパラメータを指定します。

python3 evil-ssdp.py eth0 --template office365

ツールがその役割を果たし、攻撃者のマシンのポート8888に複数のテンプレートファイルをホストしていることがわかります。

ユーザーの操作

ツールを実行すると、Office365バックアップという名前のUPnPデバイスが表示されます。これは、ツールがターゲットユーザーにファイルやペイロード、その他のタイプのインタラクションを送信することなく行われました。残るは、ユーザーがアイコンをクリックするだけです。

ユーザーがクリックすると、ターゲットユーザーはデフォルトのブラウザを介して偽のテンプレートページにリダイレクトされます。これは非常に本物のようなMicrosoftのウェブページです。無知なユーザーはこのページに有効な資格情報を入力します。

資格情報の取得

ユーザーが資格情報を入力し、それがポストリクエストとしてサーバー(私たちのターゲットマシン)に渡されると、私たちのターミナルに資格情報が表示されます。

ユーザーをパスワードボールトSSDPに誘導する

これまでに、ターゲットユーザーをスキャナーの資格情報とOffice365のバックアップの資格情報を入手するためにスプーフィングしました。しかし、今度は最も重要なものであるUPnPとして使用されるパスワードボールトに取り組みます。

テンプレートの設定

前回の実践と同様に、パスワードボールトのテンプレートを設定する必要があります。ツールはすぐにパスワードボールトのテンプレートをポート8888にホストします。

python3 evil-ssdp.py eth0 --template password-vault

ユーザーの操作

ターゲットマシンに移動すると、エクスプローラーでPassword Vault UPnPが表示されていることがわかります。ユーザーがデバイスをクリックし、私たちの攻撃に引っかかることを期待します。Password Vaultのようなものを見ると、ユーザーはアイコンをクリックしたくなるでしょう。

無知なユーザーは、偽のキーとパスワードで非常に重要な作業を達成したと思っています。これはユーザーを惑わすためのものであり、ユーザーはこの網羅的な資格情報のリストを試しても成功しないでしょう。

Microsoft Azure SSDPのスプーフィング

スプーフィングを行う際に最も重要なタスクの1つは、ターゲットユーザーにスプーフィングの被害者であることを知らせないことです。これは、攻撃者が取得したい資格情報やクッキーなどを取得した後、ユーザーをリダイレクトすることで実現できます。evil_ssdpツールには、攻撃者が選択した任意のURLに対してターゲットユーザーをリダイレクトするためのパラメータ-uがあります。このパラメータの動作を見てみましょう。

まず、ツールをロードするためにpython3を使用します。次に使用するネットワークインターフェースを指定します。この実践では、Microsoft Azure Storageテンプレートを使用します。テンプレートを選択した後、-uパラメータを入力し、ユーザーをリダイレクトしたい任意のURLを指定します。ここでは、Microsoftの公式リンクを使用していますが、これは任意の悪意のあるサイトにすることができます。

python3 evil-ssdp.py eth0 --template microsoft-azure -u https://malicous-site.com

ユーザーの操作

ツールを起動した後、以下の画像に示すように、ターゲットマシンにUPnPデバイスが作成されます。攻撃が成功するためには、ターゲットがデバイスをクリックする必要があります。

アイコンをクリックした後、ユーザーはMicrosoft公式ページにリダイレクトされます。これは攻撃者が望むものになります。

これで、この素晴らしいスプーフィングツールの実践が終了しました。

緩和策

  • UPnPデバイスを無効にする。
  • ユーザーにフィッシング攻撃を防ぐための教育を行う。
  • パスワードが平文で送信されることを監視する。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥