UPnP協議CallStranger漏洞影響數百萬裝置

ADLab發表於2020-07-06

1 漏洞概述

2020年6月8日,安全研究員Yunus Çadirci公佈UPnP(通用即插即用)協議漏洞公告(CVE-2020-12695),並將其命名為CallStranger漏洞。該漏洞允許攻擊者繞過內網的資料防洩露系統(DLP)進行資料逃逸,可導致敏感資料洩露,並且可對裝置所在內部網路進行掃描,甚至能劫持裝置進行分散式拒絕服務(DDOS)攻擊。根據CallStranger漏洞原理,啟明星辰ADLab以某款智慧電視作為測試目標,對CallStranger漏洞的危害性進行了演示分析。

2 漏洞影響

與之前的UPnP漏洞不同,CallStranger漏洞存在於協議設計中,因此該漏洞影響幾乎所有支援UPnP的裝置,包括Windows 10所有版本、路由器、訪問接入點、印表機、遊戲機、門鈴對講機、媒體應用程式和裝置、攝像頭、電視機等。根據SHODAN和ZoomEye的搜尋結果,至少有數以百萬計的線上裝置受到影響。

UPnP協議CallStranger漏洞影響數百萬裝置

3 漏洞分析

UPnP全稱為Universal Plug and Play,即通用即插即用,UPnP允許各種網路裝置在沒有任何特殊設定或配置的情況下進行通訊,使裝置彼此可自動連線和協同工作。例如新的印表機插上電並連線網路之後,區域網內的計算機就知道了印表機的型號等資訊,方便進行驅動安裝。

在UPnP協議規範中有一個非常重要的功能模組,叫做事件(Eventing)。在UPnP服務進行的時間內,只要裝置用於UPnP服務的變數值發生變化或者模式發生了改變,就會產生一個事件,隨之向整個網路進行廣播。或者使用者可以事先向UPnP裝置傳送訂閱請求,保證UPnP裝置及時地將事件傳送過來。

UPnP Device Architecture 2.0[1]中關於UPnP的NT與CALLBACK訂閱模組有如下格式:

UPnP協議CallStranger漏洞影響數百萬裝置

publisher path一般為訂閱的服務,以GENA格式存放在裝置的某個XML檔案中,類似下圖。

UPnP協議CallStranger漏洞影響數百萬裝置

CALLBACK的值一般為回撥地址的URL。NT取upnp:event表示訂閱事件。

UPnP協議規範文件中提到:CALLBACK是必填區域,所填資訊為傳送事件資訊的URL。一般情況下為UPnP供應商指定。如果其中定義了不止一個URL,裝置會按順序嘗試連線,直到有一個連線成功。每個URL一般為HTTP協議(即字首為”http://”)。裝置不得以任何方式截斷這些URL。如果記憶體不足以儲存所有的CALLBACK URL,裝置會拒絕訂閱。

整個訂閱流程大概可以簡化如下圖。

UPnP協議CallStranger漏洞影響數百萬裝置

很顯然,該協議並沒有對CALLBACK傳入的URL進行限制和規範,也就是說,CALLBACK URL是攻擊者可控的。

下圖為Intel UPnP SDK中檢查CALLBACK URL的相關程式碼,create_url_list函式僅僅檢查了URL是否合法,並沒有確定其是否合理。

UPnP協議CallStranger漏洞影響數百萬裝置

4 漏洞危害

CallStranger漏洞所造成的危害可以分三個方面:DDoS攻擊、資料逃逸和埠掃描。其中造成的DDoS攻擊可以分兩種,SYN洪水攻擊和TCP反射放大攻擊,如下圖所示。

UPnP協議CallStranger漏洞影響數百萬裝置

4.1 SYN洪水攻擊

假設我們已經通過一些方法(如在區域網廣播等)獲得了某些裝置UPnP服務的eventSubURL,下面就可以向UPnP裝置發起一項訂閱服務,格式如下:

SUBSCRIBE eventSubURL HTTP/1.1

NT: upnp:enent

Callback: delivery URL

Host: upnp裝置:upnp服務埠

如前文協議規範中提到的,若CALLBACL Value中定義了不止一個URL,則會按順序嘗試TCP連線,直到有一個連線成功。那麼攻擊者可在CALLBACK Value中精心構造多個URL,使每一個都無法連線成功,這樣UPnP裝置就會用多個SYN包依次對每個URL嘗試TCP握手。假設攻擊者可以操控很多個裝置,就會導致受害裝置遭受DDoS攻擊。

SYN資料包的數量根據裝置作業系統和配置的不同而不同,利用某品牌智慧電視對受害裝置進行SYN洪水攻擊測試,測試結果如下圖所示。

UPnP協議CallStranger漏洞影響數百萬裝置

該智慧電視每收到一個CALLBACK Value就會傳送8個SYN資料包嘗試連線受害裝置。若我們每個CALLBACK的URL值為25位元組,那麼頻寬放大因子便可以達到8*60/25=19.2。因為CALLBACK Value的個數是沒有限制的,所以理論上是可以無限放大的。

4.2 TCP反射放大攻擊

Windows Media Player在播放視訊時也有相應的UPnP服務,我們獲取到的UPnP服務列表如下:

UPnP協議CallStranger漏洞影響數百萬裝置

我們選取其中一項服務來測試一下。攻擊者只需要傳送210位元組訂閱包,如下圖。

UPnP協議CallStranger漏洞影響數百萬裝置

受害裝置之後就會收到近700位元組的資料包,放大因子達三倍多。其放大效果一般與UPnP裝置的作業系統和廠商配置有關。

4.3 資料逃逸

UPnP協議CallStranger漏洞影響數百萬裝置

一般情況下,企業內部網路都有不同的安全等級劃分。當攻擊者滲透到企業內網時,若內網開啟資料洩露防護系統,無法將獲得的敏感資料傳輸出去,此時UPnP裝置會是一個很好的跳板。

在RFC7230的3.1.1節[2]中,並沒有對Request Line的長度做任何限制,這使得攻擊者可以將資料通過Callback的URL值傳輸出去。如下圖,某品牌智慧電視一次請求就傳輸了2500KB的資料。

UPnP協議CallStranger漏洞影響數百萬裝置

4.4 埠掃描

UPnP協議CallStranger漏洞影響數百萬裝置

如前文提到的,若CALLBACK定義了不止一個URL,則會按順序嘗試TCP連線,直到有一個成功,那麼這個規則顯然也可以用於埠掃描,如下圖所示,假設攻擊者需要掃描IP為192.168.1.13的555埠是否開啟,那麼攻擊者只需要將某個可以監控的URL放置在後即可確認,若攻擊者收到連線請求,則埠未開啟,反之,則開啟。

UPnP協議CallStranger漏洞影響數百萬裝置

5 漏洞緩解及修復

可採用如下措施進行漏洞緩解:

l  檢查可疑裝置,如果沒有必要,則關閉UPnP埠。

l  在閘道器等裝置中審計NOTIFY HTTP資料包。

在最新更新的UPnP協議規範[1]4.1.1節中,可以看出開發者限制了訂閱事件的源IP和目標IP都必須在內網中,這從一定程度上修復了該漏洞。

6 參考連結:

[1] https://openconnectivity.org/upnp-specs/UPnP-arch-DeviceArchitecture-v2.0-20200417.pdf

[2] https://tools.ietf.org/html/rfc7230#section-3.1.1

[3] https://delaat.net/rp/2008-2009/p26/report.pdf

[4] https://kb.cert.org/vuls/id/339275

[5] https://zh-cn.tenable.com/blog/cve-2020-12695-callstranger-vulnerability-in-universal-plug-and-play-upnp-puts-billions-of

[6] https://www.youtube.com/watch?v=hJSxDHPyTBE



UPnP協議CallStranger漏洞影響數百萬裝置


相關文章