下一次從打印機(jī)里冒出的會是什么?——論UPnP的使用現(xiàn)狀與風(fēng)險
今年早些時候,Chromecast流媒體加密狗、谷歌家庭設(shè)備和智能電視的用戶都強(qiáng)制收獲了一條來自youtube PewDiePie頻道的推廣信息。這次劫持事件據(jù)說是由管頂級流量的UP主們的一場粉絲爭奪戰(zhàn)引發(fā)的。報道稱,黑客利用了配置不當(dāng)?shù)穆酚善鳎@些路由器啟用了通用即插即用(Universal Plug – and – Play,簡稱UPnP)服務(wù),導(dǎo)致路由器將公共端口對向私有設(shè)備,并向公共互聯(lián)網(wǎng)開放。
許多設(shè)備(如照相機(jī)、打印機(jī)和路由器)都使用UPnP協(xié)議,使其能夠自動發(fā)現(xiàn)及檢查本地網(wǎng)絡(luò)上的其他設(shè)備,并能相互通信來共享數(shù)據(jù)或流媒體。但在它帶來便利的同時也帶來了安全隱患,比如從攻擊者控制設(shè)備到繞過防火墻保護(hù)等等,不一而足。
在上述事件之后,我們調(diào)查了家庭網(wǎng)絡(luò)中與UPnP相關(guān)的事件,發(fā)現(xiàn)許多用戶的設(shè)備中仍然使用UPnP協(xié)議。
下一次從打印機(jī)里冒出的會是什么?——論UPnP的使用現(xiàn)狀與風(fēng)險
表1.啟用了UPnP的主要設(shè)備類型
今年1月份,我們檢測到有76%的路由器啟用了UPnP協(xié)議,還有27%的媒體設(shè)備(例如DVD播放器和媒體流設(shè)備)也啟用了UPnP。一旦UPnP中的漏洞被攻擊者利用,路由器或其他設(shè)備就很容易變?yōu)榇?,進(jìn)而淪為混淆僵尸網(wǎng)絡(luò)、分布式拒絕服務(wù)攻擊(DDoS)或垃圾郵件活動的源頭,并且讓人幾乎無法跟蹤惡意活動的執(zhí)行情況。此前已有過此類案例,利用路由器UPnP協(xié)議中的漏洞使之被迫連接到端口,發(fā)送垃圾郵件或其他惡意郵件。
IoT僵尸網(wǎng)絡(luò)Satori就曾因利用UPnP漏洞而臭名昭著。該漏洞(CVE-2014-8361)是Realtek SDK miniigd UPnP SOAP接口中的命令注入漏洞。2015年5月,與此漏洞相關(guān)公告發(fā)布,并提供了相應(yīng)的緩解措施,但根據(jù)我們收集的最新數(shù)據(jù),許多設(shè)備仍在使用較舊的、可能易受攻擊的UPnP版本。
圖1. Shodan中對UPnP檢測的相關(guān)結(jié)果(2019年3月5日數(shù)據(jù))
在線搜索引擎Shodan能呈現(xiàn)全球使用UPnP協(xié)議的設(shè)備的數(shù)量和分布情況。在掃描UPnP使用的標(biāo)準(zhǔn)端口1900后,我們檢索出了1,649,719個設(shè)備。下表中列出了一些知名的UPnP庫,MiniUPnPd和Custom(Broadcom的UPnP庫)是大多數(shù)檢索設(shè)備所使用的。
表2. Shodan顯示結(jié)果中的前三個UPnP庫(2019年3月5日數(shù)據(jù))
UPnP相關(guān)的漏洞和家庭網(wǎng)絡(luò)中的設(shè)備現(xiàn)狀
通過我們自己的掃描工具,我們研究了家庭和其他小型網(wǎng)絡(luò)環(huán)境中使用的UPnP庫,并確定了可能導(dǎo)致設(shè)備容易受到攻擊的因素。簡而言之,我們發(fā)現(xiàn)大多數(shù)設(shè)備仍然使用舊版本的UPnP庫,而這些UPnP庫中存在的許多漏洞已被公布多年。
MiniUPnPd
我們的物聯(lián)網(wǎng)掃描工具數(shù)據(jù)顯示,啟用UPnP的設(shè)備中有16%使用了MiniUPnPd庫。 MiniUPnPd是一個知名的UPnP守護(hù)進(jìn)程,用于NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)路由器提供端口映射協(xié)議服務(wù)。有趣的是,我們檢測到安裝了舊版本的MiniUPnPd的設(shè)備中,有24%在使用MiniUPnPd 1.0, 30%在使用MiniUPnPd 1.6,只有5%的設(shè)備使用MiniUPnPd 2.x版本(miniupnpd 2.1是最新版本)。
表3.MiniUPnPd各版本的使用比例
具有上述舊版本守護(hù)進(jìn)程的設(shè)備必須進(jìn)行更新,才能杜絕一些已知的高風(fēng)險漏洞。例如,CVE-2013-0230是MiniUPnPd 1.0版本中的ExecuteSoapAction中基于堆棧的緩沖區(qū)溢出漏洞,允許攻擊者執(zhí)行任意代碼;CVE-2013-0229是MiniUPnPd 1.4之前的一個ProcessSSDPRequest函數(shù)漏洞,它允許攻擊者通過請求觸發(fā)緩沖區(qū)的過度讀取來引發(fā)拒絕服務(wù)(DoS);CVE-2017-1000494是MiniUPnPd 2.0版本之前的一個未初始化的堆棧變量漏洞,它允許攻擊者發(fā)起DoS攻擊(分段錯誤和內(nèi)存損壞)。
Windows UPnP服務(wù)器
我們還發(fā)現(xiàn),有18%的設(shè)備使用基于Windows的UPnP。這些設(shè)備,尤其是Microsoft Windows XP計算機(jī)(Windows NT 5.1),應(yīng)檢查是否已應(yīng)用MS07-019補(bǔ)丁。(不過Windows XP在2014年4月已經(jīng)壽終正寢,這意味著它不再受到微軟的支持,安全問題也將得不到解決。)Windows XP自帶的UPnP功能是開箱即用的,而該補(bǔ)丁能解決UPnP內(nèi)存損壞漏洞CVE-2007-1204,(此漏洞允許遠(yuǎn)程攻擊者在本地服務(wù)帳戶上下文中運(yùn)行任意代碼)。
Libupnp(用于UPnP設(shè)備的可移植SDK)
用于UPnP設(shè)備的SDK(便攜式軟件開發(fā)工具包)libupnp是另一個眾所周知的UPnP庫,它能支持多種操作系統(tǒng)。根據(jù)我們的數(shù)據(jù),檢測設(shè)備中有5%在使用libupnp庫包,雖然不占有很大比例,但我們注意到,具有該庫的設(shè)備大多是1.6.18 / 1.6.19之前的版本(當(dāng)前版本為1.8.4)。而在1.6.18之前版本里,unique_service_name函數(shù)中存在基于堆棧的緩沖區(qū)溢出漏洞(CVE-2012-5958),它允許遠(yuǎn)程攻擊通過用戶數(shù)據(jù)報協(xié)議(UDP)數(shù)據(jù)包執(zhí)行任意代碼。
結(jié)論
對于用戶來說,要確定設(shè)備是否有UPnP相關(guān)的漏洞或者是否受到了感染是很棘手的。有些設(shè)備可能隱藏在NAT之后,這樣即使存在漏洞,用戶也不會當(dāng)即看到風(fēng)險所在。為了防止利用UPnP相關(guān)漏洞的攻擊,用戶應(yīng)該確保他們的設(shè)備的更新。如果懷疑設(shè)備被感染,應(yīng)該重新啟動該設(shè)備,將其重置為原始工廠設(shè)置,或者為了謹(jǐn)慎起見,將其全部替換。除非網(wǎng)絡(luò)需要在設(shè)備中啟用UPnP功能,否則最好在設(shè)備允許的情況下禁用。然而,需要注意的是,關(guān)閉UPnP可能也會連帶禁用一些功能,包括本地設(shè)備的依賴關(guān)系,或者需要忽略來自設(shè)備的請求。
家庭用戶也可以遵循這些措施以增加安全性:
1、使用趨勢科家庭網(wǎng)絡(luò)的HouseCal工具掃描家庭網(wǎng)絡(luò),并檢查哪些設(shè)備的UPnP端口1900處于打開狀態(tài)。
2、轉(zhuǎn)到設(shè)備的設(shè)置頁面(例如路由器的設(shè)置頁面)以禁用UPnP。
3、根據(jù)需要手動配置端口轉(zhuǎn)發(fā)設(shè)置。