Martin UPnP - pacsec -final-ja

Post on 11-Feb-2017

321 views 1 download

Transcript of Martin UPnP - pacsec -final-ja

Universal Pwn n Play

Martin Zeiser - Cisco Talos ResearcherAleksandar Nikolić - Cisco Talos Researcher

www.talosintel.com

アジェンダ

●UPnP 概要

●UPnPの攻撃

●インターネット上でのUPnPデバイスの探索

●クライアントサイドの脆弱性 - 新しいUPnPの脅威

●防御

●まとめ

UPnPの概要

Universal Plug and Play(UPnP)とは?

● コンピュータやプリンタ、ルータやカメラなどのデバイスが相互にお互いの存在を発見し、データ共有やコミュニケーション、エンターテイメントのためのネットワークを確立することを可能にするプロトコルのセット

● UPnPの背景にある主な目的は、エンタープライズクラスのデバイスが存在しない家庭向けネットワークを対象としている

● UPnPフォーラム(Microsoft)によって1999年に設計された

● SSDP, HTTP, SOAPおよびXMLを組み合わせて機能している

どのように機能するのか?

•アドレッシング•ディスカバリ•デスクリプション•コントロール•イベント通知•プレゼンテーション

通信 - デバイスの検索

通信 - リプレイ

HTTP/1.1 200 OK

LOCATION: http://192.168.1.1:49000/igddesc.xml

SERVER: FRITZ!Box WLAN 3170 UPnP/1.0 AVM FRITZ!Box WLAN 3170 49.04.58

CACHE-CONTROL: max-age=1800

EXT:

ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1

USN:

uuid:75802409-bccb-40e7-8e6c-001F3FE45B43::urn:schemas-upnp-

org:device:InternetGatewayDevice:1

通信HTTPステージ

HTTPリクエスト

指定されたサーバへのTCP/HTTP

指定されたXMLファイルの取得

•様々なタイプのデバイス (IGD以外のものも):

•IGD (Internet Gateway Device)

•AV (DLNAとして有名なメディアサーバやメディアレンダラ)

•HVAC (Heating / Ventilation / Air conditioning)

•その他

HTTP/1.0 200 OK

Content-Type: text/xml

Connection: close

Content-Length: 2669

Server: MMC_Tech AP miniupnpd/1.0 UPnP/1.0

<?xml version="1.0"?>

<root xmlns="urn:schemas-upnp-org:device-1-0">

<specVersion>

<major>1</major>

<minor>0</minor>

</specVersion>

<device>

<deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1

</deviceType>

<friendlyName>Inter Gateway Device</friendlyName>

<manufacturer>MMC Technology</manufacturer>

<manufacturerURL>http://www.mmctech.com/</manufacturerURL>

<modelName>MW-2060AP</modelName>

<modelDescription>MMC Technology (MW-

2060AP)</modelDescription>

<modelNumber>2.2.7</modelNumber>

<modelURL>http://www.mmctech.com/</modelURL>

<UDN>uuid:12342409-1234-1234-5678-ee1234cc5678</UDN>

<serviceList>

<service>

<serviceType>urn:schemas-dummy-

com:service:Dummy:1</serviceType>

<serviceId>urn:dummy-com:serviceId:dummy1</serviceId>

<controlURL>/dummy</controlURL>

<eventSubURL>/dummy</eventSubURL>

<SCPDURL>/dummy.xml</SCPDURL>

</service>

</serviceList>

<deviceList>

<device>

<deviceType>urn:schemas-upnp-

org:device:WANDevice:1</deviceType>

<friendlyName>WANDevice</friendlyName>

<manufacturer>miniupnp</manufacturer>

<manufacturerURL>http://www.mmctech.com/</manufacturerURL

>

<modelDescription>WAN Device</modelDescription>

<modelName>WAN Device</modelName>

<modelNumber>1</modelNumber>

<modelURL>http://www.mmctech.com/</modelURL>

<serialNumber>00000000</serialNumber>

<UDN>uuid:12342409-1234-1234-5678-ee1234cc

興味深い情報

<deviceType> urn:schemas-upnp-org:device:InternetGatewayDevice:1

<friendlyName> Residential Gateway Device

<manufacturer> Linksys Inc.

<modelDescription> Internet Access Server

<modelName> WRT54GS

<modelNumber> v2.07.1

UPnPの攻撃

攻撃 #1 - DDoS

攻撃 #2 - DNS設定の変更

攻撃 #3 - PPPユーザー名とパスワードのリクエスト

PPPパスワードのリクエスト - UPnPスタイル #1

PPPパスワードのリクエスト - UPnPスタイル #2

攻撃 #4 - Adminパスワードのリセット/変更

攻撃 #5外部からのポート転送リクエスト

デバイスからのポート転送のリクエストPOST /evt/IPConn HTTP/1.1

Host: 192.168.0.1:53033

User-Agent: KTorrent/0.0.0

Content-length: 633

Content-Type: text/xml

SOAPAction: "urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping"

<?xml version="1.0"?><SOAP-ENV:Envelope xmlns:SOAP-

ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-

ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:AddPortMapping

xmlns:m="urn:schemas-upnp-

org:service:WANIPConnection:1"><NewRemoteHost></NewRemoteHost><NewExternalPort>25000</NewEx

ternalPort><NewProtocol>TCP</NewProtocol><NewInternalPort>80</NewInternalPort><NewInternalClien

t>192.168.0.1</NewInternalClient><NewEnabled>1</NewEnabled><NewPortMappingDescription>KTorrent

UPNP</NewPortMappingDescription><NewLeaseDuration>60</NewLeaseDuration></m:AddPortMapping><

/SOAP-ENV:Body></SOAP-ENV:Envelope>

ポート転送のセキュリティ問題:

通常、TCPとUDP両方のカスタムのタイムアウト設定には

ロギングは機能しない

インターネット上のUPnPデバイスの探索

HD Mooreのスキャン

HD Moore / Rapid7 / 2012年後半

○ インターネットからのUPnP探索のリクエストに対して8000万以上のユニークなIPアドレスからの応答を確認した(インターネット上の2.2%)

○ 6900以上の製品バージョンがUPnPに対して脆弱であると確認

○ リストには1500を超えるベンダーが含まれ、UPnP SOAPサービスをインターネット上に公開しているデバイスを考慮するものであった

UPnPのスキャン

● ポート1900上のUDPバナースキャンによってUPnP

デバイスを発見し、公開XMLへのアクセスを試みる

● これはユニキャストのリクエストである。Microsoft Windowsはこれらには応答しない(WinXPとWin7でテスト)

● UDPポート1900が閉じている/フィルターされていることは、UPnP未サポートであるとは限らない

使われているソフトウェア

“SSDPを通じて検出された全UPnPインスタンスの73%以上が、たった4種類のソフトウェア開発キットに由来するものであった。

これらにはPortable SDK for UPnP Devices、MiniUPnP、Broadcomが開発しているような商用スタック、そして他の特定の開発者による別の商用スタックが含まれている。”

HD MooreRapid7

クライアントサイドの脆弱性新しいUPnPの脅威

Notifyパケット

NOTIFY * HTTP/1.1

HOST: 239.255.255.250:1900

LOCATION: http://210.20.30.40:54321/igddesc.xml

SERVER: FRITZ!Box WLAN 3170 UPnP/1.0 AVM FRITZ!Box WLAN 3170

49.04.58

CACHE-CONTROL: max-age=1800

NT: upnp:rootdevice

NTS: ssdp:alive

USN: uuid:75802409-bccb-40e7-8e6c-001F3FE45B43::upnp:rootdevice

Notifyの脅威 -クライアントをおかしくさせる

•ローカルまたはリモートホストへのHTTP攻撃リクエストの送信

•DoSリクエスト

•'Click 詐欺'広告

•悪意のある可能性のあるXMLのパース

インターネットから見えるUser Agents

USER-AGENT: Linux/2.6.23.17_stm23_0119-mb680, UPnP/1.0, Portable SDK for

UPnP devices/1.6.6

USER-AGENT: Linux/2.6.30, UPnP/1.0, Portable SDK for UPnP devices/1.6.18

User-Agent: UPnP/1.0 DLNADOC/1.50 Platinum/1.0.4.9

(NAS)

User-Agent: SMCD3G-CCR, UPnP/1.0, MiniUPnPd/20130201

(Business Gateway)

クライアントアプリケーションの攻撃

• クライアントは実際にはUPnPサーバを使用

• ポート転送 - 多くの場合

• 基本的には、あらゆるpeer2peerなど:

– Torrent クライアント

– 暗号通貨のクライアント/サーバ

– …

クライアントアプリケーションについては?

• クライアントによる探索 - 通常はスタートアップ時

• ブロードキャストIP上

• ローカルサーバはデスクリプションのアドレスを応答

• クライアントはデスクリプションをフェッチ

どのように? SSDP M-SEARCH *!

見てみよう 1/3

クライアントアプリがブロードキャストアドレスにM-SEARHリクエストを送信している

見てみよう 2/3

サーバがデスクリプションのアドレスを応答

見てみよう 3/3

クライアントはデスクリプションに対しGETを発行

• 前述のNOTIFYと同様

• クライアントはデスクリプションのXMLをフェッチ

• 攻撃にXMLパーサが晒される

• 楽しい事実: たいていの(全て)upnpライブラリは独自のXMLパーサを内蔵している– 素敵! 組込みシステム向けに、依存性が少ない

– 素敵! 攻撃者にコードを読まれることが少ない

• 見てみよう!

攻撃面

• MiniUPnPクライアント –UPnP IGDコントロールポイント

– http://miniupnp.free.fr/

– 小さく軽量で自己完結型のライブラリ

– “Linux, FreeBSD, OpenBSD, MacOS X, AmigaOSそしてcygwinでコンパイルできることが知られています”

• 既出の通り、2番目に人気のあるサーバサイドライブラリ

• クライアントとしてはどうなの?

MiniUPnPC

ハイライト

*最近まで

トランスミッションビットコイン

Torの場合

7月以前

7月以降

デフォルトでは使用されていなかったが、よい決定

• XMLパーサにおけるバッファオーバーフロー

• サーバからフェッチしたデスクリプションXMLのパースがトリガーとなる

• 10月1日にパッチ提供

• TALOS-CAN-0035 - CVE 2015-6031

MiniUPnPの脆弱性

MiniUPnPCの脆弱性

parser.xmlstart = buffer;

parser.xmlsize = bufsize;

parser.data = data;

parser.starteltfunc = IGDstartelt;

parser.endeltfunc = IGDendelt;

parser.datafunc = IGDdata;

parser.attfunc = 0;

parsexml(&parser);

データバッファとコールバックを設定し、パーサを呼び出す

MiniUPnPC脆弱性

struct IGDdatas {

char cureltname[MINIUPNPC_URL_MAXSIZE];

char urlbase[MINIUPNPC_URL_MAXSIZE];

char presentationurl[MINIUPNPC_URL_MAXSIZE];

.....

};

IGDdatasは固定サイズのバッファを持つ構造体。MINIUPNPC_URL_MAXSIZE は 256。

MiniUPnPC脆弱性

void IGDstartelt(void * d, const char * name, int

l)

{

struct IGDdatas * datas = (struct IGDdatas *)d;

memcpy( datas->cureltname, name, l);

datas->cureltname[l] = '¥0';

datas->level++;

if( (l==7) && !memcmp(name, "service", l) ) {

datas->tmp.controlurl[0] = '¥0';

datas->tmp.eventsuburl[0] = '¥0';

datas->tmp.scpdurl[0] = '¥0';

datas->tmp.servicetype[0] = '¥0';

}

}

要素の名前のパース時に、確認なしのmemcpy()がバッファオーバーフローを引き起こしている

• (ニセの)サーバをLAN上で動作

• 被害者がアプリケーションを開始

• アプリケーションは探索のためのM-SEARCHを発行

• サーバはURLを応答

• アプリケーションはXMLをフェッチしパースを開始…

• Pwn3d!

攻撃方法

DEMO

bitcoindは恰好の標的…

防御

Snortのルール

1917: M-Search to UDP 1900

10475: Microsoft Windows UPnP notification type overflow attempt

1388: Microsoft Windows UPnP Location overflow attempt

25780: MiniUPnPd ExecuteSoapAction buffer overflow attempt

防御

•原則 - WANインタフェース上でUPnPトラフィックをlistenしない

•ポート転送のリクエストは自身へのみ許可し、サードパーティへは禁止する

•パッチの適用。しかし誰がホームルータや組み込みデバイスのパッチを現実には適用する?

まとめ

Thank you !

51

www.talosintel.com