martin upnp - pacsec -final-ja

51
Universal Pwn n Play Martin Zeiser - Cisco Talos Researcher Aleksandar Nikolić - Cisco Talos Researcher www.talosintel.com

Upload: pacsecjp

Post on 11-Feb-2017

321 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: Martin UPnP - pacsec -final-ja

Universal Pwn n Play

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

www.talosintel.com

Page 2: Martin UPnP - pacsec -final-ja

アジェンダ

●UPnP 概要

●UPnPの攻撃

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

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

●防御

●まとめ

Page 3: Martin UPnP - pacsec -final-ja

UPnPの概要

Page 4: Martin UPnP - pacsec -final-ja

Universal Plug and Play(UPnP)とは?

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

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

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

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

Page 5: Martin UPnP - pacsec -final-ja

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

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

Page 6: Martin UPnP - pacsec -final-ja

通信 - デバイスの検索

Page 7: Martin UPnP - pacsec -final-ja

通信 - リプレイ

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

Page 8: Martin UPnP - pacsec -final-ja

通信HTTPステージ

Page 9: Martin UPnP - pacsec -final-ja

HTTPリクエスト

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

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

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

•IGD (Internet Gateway Device)

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

•HVAC (Heating / Ventilation / Air conditioning)

•その他

Page 10: Martin UPnP - pacsec -final-ja

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

Page 11: Martin UPnP - pacsec -final-ja

興味深い情報

<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

Page 12: Martin UPnP - pacsec -final-ja

UPnPの攻撃

Page 13: Martin UPnP - pacsec -final-ja

攻撃 #1 - DDoS

Page 14: Martin UPnP - pacsec -final-ja

攻撃 #2 - DNS設定の変更

Page 15: Martin UPnP - pacsec -final-ja

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

Page 16: Martin UPnP - pacsec -final-ja

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

Page 17: Martin UPnP - pacsec -final-ja

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

Page 18: Martin UPnP - pacsec -final-ja

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

Page 19: Martin UPnP - pacsec -final-ja

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

Page 20: Martin UPnP - pacsec -final-ja

デバイスからのポート転送のリクエスト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>

Page 21: Martin UPnP - pacsec -final-ja

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

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

ロギングは機能しない

Page 22: Martin UPnP - pacsec -final-ja

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

Page 23: Martin UPnP - pacsec -final-ja

HD Mooreのスキャン

HD Moore / Rapid7 / 2012年後半

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

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

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

Page 24: Martin UPnP - pacsec -final-ja

UPnPのスキャン

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

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

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

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

Page 25: Martin UPnP - pacsec -final-ja

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

Page 26: Martin UPnP - pacsec -final-ja

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

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

HD MooreRapid7

Page 27: Martin UPnP - pacsec -final-ja

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

Page 28: Martin UPnP - pacsec -final-ja

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

Page 29: Martin UPnP - pacsec -final-ja

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

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

•DoSリクエスト

•'Click 詐欺'広告

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

Page 30: Martin UPnP - pacsec -final-ja

インターネットから見える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)

Page 31: Martin UPnP - pacsec -final-ja

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

Page 32: Martin UPnP - pacsec -final-ja

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

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

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

– Torrent クライアント

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

– …

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

Page 33: Martin UPnP - pacsec -final-ja

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

• ブロードキャストIP上

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

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

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

Page 34: Martin UPnP - pacsec -final-ja

見てみよう 1/3

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

Page 35: Martin UPnP - pacsec -final-ja

見てみよう 2/3

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

Page 36: Martin UPnP - pacsec -final-ja

見てみよう 3/3

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

Page 37: Martin UPnP - pacsec -final-ja

• 前述のNOTIFYと同様

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

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

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

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

• 見てみよう!

攻撃面

Page 38: Martin UPnP - pacsec -final-ja

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

– http://miniupnp.free.fr/

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

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

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

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

MiniUPnPC

Page 39: Martin UPnP - pacsec -final-ja

ハイライト

*最近まで

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

Page 40: Martin UPnP - pacsec -final-ja

Torの場合

7月以前

7月以降

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

Page 41: Martin UPnP - pacsec -final-ja

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

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

• 10月1日にパッチ提供

• TALOS-CAN-0035 - CVE 2015-6031

MiniUPnPの脆弱性

Page 42: Martin UPnP - pacsec -final-ja

MiniUPnPCの脆弱性

parser.xmlstart = buffer;

parser.xmlsize = bufsize;

parser.data = data;

parser.starteltfunc = IGDstartelt;

parser.endeltfunc = IGDendelt;

parser.datafunc = IGDdata;

parser.attfunc = 0;

parsexml(&parser);

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

Page 43: Martin UPnP - pacsec -final-ja

MiniUPnPC脆弱性

struct IGDdatas {

char cureltname[MINIUPNPC_URL_MAXSIZE];

char urlbase[MINIUPNPC_URL_MAXSIZE];

char presentationurl[MINIUPNPC_URL_MAXSIZE];

.....

};

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

Page 44: Martin UPnP - pacsec -final-ja

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()がバッファオーバーフローを引き起こしている

Page 45: Martin UPnP - pacsec -final-ja

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

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

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

• サーバはURLを応答

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

• Pwn3d!

攻撃方法

Page 46: Martin UPnP - pacsec -final-ja

DEMO

bitcoindは恰好の標的…

Page 47: Martin UPnP - pacsec -final-ja

防御

Page 48: Martin UPnP - pacsec -final-ja

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

Page 49: Martin UPnP - pacsec -final-ja

防御

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

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

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

Page 50: Martin UPnP - pacsec -final-ja

まとめ

Page 51: Martin UPnP - pacsec -final-ja

Thank you !

51

www.talosintel.com