martin upnp - pacsec -final-ja
TRANSCRIPT
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