孟祥宇,王純,李煒
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100876;2 東信北郵信息技術(shù)有限公司,北京 100191)
通用即插即用(UPnP,Universal Plug and Play)是各種各樣的智能設(shè)備、無(wú)線設(shè)備和個(gè)人電腦等實(shí)現(xiàn)遍布全球的對(duì)等網(wǎng)絡(luò)連接(P2P)的結(jié)構(gòu)[1,2]。UPnP是一種分布式的,開(kāi)放的網(wǎng)絡(luò)架構(gòu),它可以充分發(fā)揮TCP/IP和網(wǎng)絡(luò)技術(shù)的功能,不但能對(duì)類(lèi)似網(wǎng)絡(luò)進(jìn)行無(wú)縫連接,而且還能夠控制網(wǎng)絡(luò)設(shè)備及在它們之間傳輸信息。
一個(gè)完整的UPnP系統(tǒng)是由設(shè)備、服務(wù)和控制點(diǎn)3部分所構(gòu)成。UPnP設(shè)備是一個(gè)能夠提供一種或多種UPnP服務(wù)的服務(wù)器,控制點(diǎn)是一個(gè)控制器,它可以檢索設(shè)備和服務(wù)描述,發(fā)送動(dòng)作到設(shè)備,查詢(xún)?cè)O(shè)備服務(wù)的狀態(tài)和從設(shè)備接收事件。UPnP的工作過(guò)程包括設(shè)備尋址、設(shè)備發(fā)現(xiàn)、設(shè)備描述、設(shè)備控制、事件通知和設(shè)備展示幾個(gè)部分。UPnP使用的協(xié)議包括簡(jiǎn)單服務(wù)發(fā)現(xiàn)協(xié)議(SSDP,Simple Service Discovery Protocol)、簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP,Simple Object Access Protocol)、通用事件通知體系(GENA,Generic Event Notification Architecture)等[3]。
UPnP的應(yīng)用范圍非常廣泛,可以更加方便的實(shí)現(xiàn)家庭智能網(wǎng)絡(luò)中各種終端相互調(diào)用服務(wù)能力的新需求方案,但是應(yīng)用UPnP設(shè)備同時(shí)也存在許多安全隱患。如傳輸加密問(wèn)題、服務(wù)隱藏問(wèn)題、重發(fā)攻擊問(wèn)題、緩沖區(qū)溢出問(wèn)題等,在解決UPnP安全問(wèn)題的方向上,相關(guān)的解決方案很少,UPnP論壇上也只是提出了一個(gè)有關(guān)安全控制臺(tái)的規(guī)范[4]。
UPnP設(shè)備架構(gòu)采用如圖1所示的協(xié)議棧[3]。在最高一層,消息在邏輯上僅僅包含關(guān)于廠商設(shè)備的UPnP廠商特定信息。移至下一層協(xié)議后,協(xié)議內(nèi)容由UPnP論壇工作委員會(huì)定義和提供。來(lái)自以上各層的消息存儲(chǔ)在UPnP特定協(xié)議中,以上消息通過(guò)采用SSDP協(xié)議、GENA協(xié)議和SOAP協(xié)議來(lái)進(jìn)行格式化。然后消息通過(guò)運(yùn)行于UDP上的HTTPMU(Multicast UDP HTTP Messages)或HTTPU(Unicast UDP HTTP Messages),或是運(yùn)行于TCP上的標(biāo)準(zhǔn)HTTP進(jìn)行傳輸。最終,以上所有消息均通過(guò)IP進(jìn)行傳輸。
圖1 UPnP協(xié)議棧
整個(gè)UPnP的工作過(guò)程如圖2所示,由以下幾個(gè)過(guò)程構(gòu)成[3,5,6]。
圖2 UPnP的工作過(guò)程
簡(jiǎn)要介紹下UPnP的工作流程:設(shè)備加入網(wǎng)絡(luò)后通過(guò)設(shè)備尋址就可自動(dòng)獲得IP地址,通過(guò)設(shè)備發(fā)現(xiàn),控制點(diǎn)就可知道網(wǎng)絡(luò)上存在哪些設(shè)備,通過(guò)設(shè)備描述控制點(diǎn)就可知道設(shè)備詳細(xì)信息以及設(shè)備提供哪些服務(wù),通過(guò)設(shè)備控制控制點(diǎn)可以使用設(shè)備的服務(wù),通過(guò)設(shè)備事件設(shè)備就可以將其狀態(tài)變化及時(shí)告訴給感興趣的控制點(diǎn),通過(guò)設(shè)備表征過(guò)程控制點(diǎn)可以用瀏覽器察看設(shè)備狀態(tài)和控制設(shè)備。通過(guò)上述的6個(gè)方面,UPnP設(shè)備可以做到在“零配置”的前提下提供聯(lián)網(wǎng)設(shè)備之間的自動(dòng)發(fā)現(xiàn)、自動(dòng)聲明、直接信息交換和互操作等功能,真正實(shí)現(xiàn)“設(shè)備即插即用”。
UPnP的工作流程圖如圖3所示[7]。
圖3 UPnP的工作流程圖
如果某個(gè)具備UPnP功能的設(shè)備引導(dǎo)成功并連接到網(wǎng)絡(luò)上,就會(huì)立刻向網(wǎng)絡(luò)發(fā)出廣播,向網(wǎng)絡(luò)上的UPnP控制點(diǎn)通知自己已經(jīng)準(zhǔn)備就緒(即Notify消息),并且此消息包含設(shè)備的URL(Universal Resource Locator)。該廣播將被同一局域網(wǎng)的所有控制點(diǎn)聽(tīng)到,以備控制點(diǎn)隨后進(jìn)行控制之用。類(lèi)似地,如果某個(gè)控制點(diǎn)剛剛連接到網(wǎng)絡(luò)上,也會(huì)向網(wǎng)絡(luò)發(fā)出廣播,表示自己準(zhǔn)備就緒,可以控制網(wǎng)絡(luò)上的設(shè)備(即M-Search消息),該廣播也將被同一局域網(wǎng)的所有設(shè)備聽(tīng)到。
UPnP的設(shè)備安全問(wèn)題大部分就是在上述的一播一聽(tīng)之間出現(xiàn)了問(wèn)題。如果外部的攻擊者向某個(gè)用戶(hù)系統(tǒng)發(fā)送一個(gè)Notify消息,用戶(hù)的控制點(diǎn)就會(huì)收到這個(gè)消息,并且根據(jù)設(shè)備提供的虛假URL,連接到一個(gè)特定虛假服務(wù)器上,用戶(hù)的控制點(diǎn)接著向相應(yīng)的虛假服務(wù)器請(qǐng)求下載服務(wù),下載將要執(zhí)行的服務(wù)內(nèi)容,服務(wù)器當(dāng)然會(huì)響應(yīng)這個(gè)請(qǐng)求。UPnP系統(tǒng)將解釋這個(gè)設(shè)備的描述部分,發(fā)現(xiàn)設(shè)備提供的服務(wù)會(huì)讓控制點(diǎn)請(qǐng)求發(fā)送更多的文件,虛假服務(wù)器又需要響應(yīng)這些請(qǐng)求。這樣,就構(gòu)成一個(gè)“請(qǐng)求響應(yīng)”的循環(huán),大量占用系統(tǒng)資源,造成UPnP系統(tǒng)服務(wù)速度變慢,服務(wù)調(diào)用的混亂,甚至停止。所以外部的攻擊者控制UPnP控制點(diǎn)就會(huì)成為可能。而現(xiàn)在大量的網(wǎng)絡(luò)報(bào)道證明這已經(jīng)成為現(xiàn)實(shí)[8]。
UPnP設(shè)備通過(guò)SSDP廣播自己和提供服務(wù),而控制點(diǎn)通過(guò)SOAP來(lái)調(diào)用此服務(wù)。SOAP接口代表另一種可能的安全漏洞,因?yàn)檫@些軟件API可能會(huì)暴露功能。例如一個(gè)打包應(yīng)用程序可能有成百上千的關(guān)鍵操作被暴露,而所有這些都可以通過(guò)某個(gè)端口讀?。还粽呖梢缘玫礁嗨梢允褂玫臉?biāo)準(zhǔn)信息。Web服務(wù)描述語(yǔ)言(WSDL)文件、通用描述、檢測(cè)和整合(UDDI)等這些條目提供了關(guān)于服務(wù)的詳細(xì)信息,例如如何調(diào)用它,希望發(fā)送和接收什么樣的參數(shù)等,這些為黑客提供了登錄所使用的信息。SOAP信息和WSDL文件都是XML格式的,這種格式是自描述的,它清楚地顯示了數(shù)據(jù)元素和數(shù)據(jù)結(jié)構(gòu)。擁有這些信息,黑客能夠了解信息格式,并充分利用它。由于SOAP控制信息和回復(fù)沒(méi)有進(jìn)行檢查和限制,這就會(huì)造成黑客進(jìn)行監(jiān)聽(tīng),角色扮演和重播攻擊,以及弄虛作假、串改、偽造、歪曲數(shù)據(jù)[8]。
圖4 UPnP的三元結(jié)構(gòu)圖
由于UPnP設(shè)備在設(shè)備發(fā)現(xiàn),設(shè)備控制流程進(jìn)行明文傳輸,并且對(duì)調(diào)用權(quán)限不做任何控制,帶來(lái)了很多安全隱患。下面提供作者設(shè)計(jì)的一種具有權(quán)限控制和安全檢測(cè)的UPnP安全協(xié)議流程,可以在一定程度上解決上面提到的安全隱患。此協(xié)議流程的應(yīng)用場(chǎng)景是在構(gòu)建一個(gè)家庭智能網(wǎng)絡(luò)的情況下使用到的,與原來(lái)傳統(tǒng)的控制點(diǎn)調(diào)用設(shè)備服務(wù)的二元關(guān)系不同,采用第三方認(rèn)證鑒權(quán)的方式[9],引入了一個(gè)類(lèi)似安全控制臺(tái)[4](SC,Security Console)的概念,安全控制臺(tái)進(jìn)行密鑰管理,角色管理,證書(shū)管理的三元結(jié)構(gòu),如圖4所示。
在每一個(gè)設(shè)備加入家庭網(wǎng)絡(luò)前,如果想得到家庭網(wǎng)絡(luò)內(nèi)設(shè)備互聯(lián)互通的功能,首先要進(jìn)行初始化階段,即必須要向SC進(jìn)行登記信息,控制點(diǎn)(或者設(shè)備)向SC提供自己的設(shè)備唯一標(biāo)識(shí)(UUID,Universally Unique Identifier)和公鑰,然后SC向登記的控制點(diǎn)(或者設(shè)備)發(fā)放SC的自簽名證書(shū),并且將控制點(diǎn)(或者設(shè)備)的UUID和公鑰簽名并制作證書(shū)發(fā)放給控制點(diǎn)(或者設(shè)備),SC登記控制點(diǎn)(或者設(shè)備)的角色信息,并將角色信息加入到訪問(wèn)控制列表里,角色是SC確定控制點(diǎn)(或者設(shè)備)的安全級(jí)別的一個(gè)標(biāo)識(shí)。
圖5 初始化流程
初始化流程圖如圖5所示。
當(dāng)控制點(diǎn)(或者設(shè)備)通過(guò)SSDP消息發(fā)現(xiàn)新的設(shè)備(或者控制點(diǎn))加入到網(wǎng)絡(luò)中,雙方首先交換證書(shū),如果證明對(duì)方證書(shū)是合法的,就將對(duì)方加入到信任的安全列表里,流程如圖6所示。
圖6 設(shè)備安全發(fā)現(xiàn)
在下載設(shè)備描述階段,當(dāng)控制點(diǎn)要進(jìn)行設(shè)備描述文檔和服務(wù)描述文檔下載時(shí),首先控制點(diǎn)要進(jìn)行一次附帶請(qǐng)求序列號(hào)的下載請(qǐng)求,每次發(fā)送請(qǐng)求序列號(hào)要遞增,控制點(diǎn)對(duì)請(qǐng)求消息連同請(qǐng)求序列號(hào)用散列函數(shù)生成摘要,然后將請(qǐng)求消息、請(qǐng)求序列號(hào)、摘要用設(shè)備的公鑰加密后傳輸。
設(shè)備在接到請(qǐng)求消息時(shí),首先進(jìn)行解密,然后通過(guò)摘要對(duì)消息完整性進(jìn)行驗(yàn)證,通過(guò)請(qǐng)求序列號(hào)對(duì)重發(fā)性進(jìn)行驗(yàn)證,驗(yàn)證無(wú)誤后返回描述文檔的內(nèi)容。整個(gè)流程如圖7所示。
設(shè)備安全控制控制點(diǎn)調(diào)用請(qǐng)求和應(yīng)答與下載描述文檔請(qǐng)求和應(yīng)答相似,唯一不同的地方就是要連同控制點(diǎn)的角色信息一起做摘要,然后進(jìn)行加密傳輸。
圖7 描述文檔下載流程
設(shè)備收到請(qǐng)求時(shí)執(zhí)行的流程圖如圖8所示。
圖8 設(shè)備安全控制調(diào)用流程
控制點(diǎn)和設(shè)備使用非對(duì)稱(chēng)加密算法進(jìn)行通信,雙方只有交換經(jīng)過(guò)SC頒發(fā)的證書(shū)后才能夠通信,之所以使用非對(duì)稱(chēng)加密算法,是因?yàn)楣€是不怕被第三方截取的;通信雙方接到對(duì)方的公鑰后就可以使用對(duì)方的公鑰加密信息進(jìn)行通信,只有擁有相應(yīng)私鑰的通信對(duì)象才能夠解密,這樣就可以使通信的消息安全到達(dá)對(duì)方,并且使用非對(duì)稱(chēng)密鑰可以進(jìn)行防抵賴(lài)驗(yàn)證[10]。
防重發(fā)攻擊是通過(guò)請(qǐng)求序列號(hào)實(shí)現(xiàn)的[4],請(qǐng)求序列號(hào)每次請(qǐng)求時(shí)都要遞增,遞增到最大值時(shí)重新從0開(kāi)始計(jì)算,請(qǐng)求序列號(hào)連同請(qǐng)求消息進(jìn)行摘要運(yùn)算,并且進(jìn)行加密傳輸,所以,請(qǐng)求序列號(hào)的傳輸安全性是有保證的。信息傳遞前,將對(duì)方的請(qǐng)求序列號(hào)加一并與將要傳遞的消息構(gòu)建新的數(shù)據(jù)分組并做摘要然后加密傳輸給對(duì)方,這樣對(duì)方就可以根據(jù)得到是數(shù)據(jù)分組中的請(qǐng)求序列號(hào)判斷是否是新的請(qǐng)求,如果不是就丟棄并等待正確的消息的到來(lái)。這樣保證了通信雙方一次連接的消息傳遞的抗重發(fā)攻擊能力,從而保證了一次連接的抗干擾能力。
設(shè)備需要對(duì)非法的控制點(diǎn)或者認(rèn)證中心實(shí)現(xiàn)服務(wù)隱藏,而服務(wù)隱藏是通過(guò)去SC做身份認(rèn)證才能實(shí)現(xiàn)的,控制點(diǎn)或認(rèn)證中心要想獲得設(shè)備的設(shè)備描述文檔就需要發(fā)送GET命令,GET命令里的描述信息是通過(guò)加密以及攜帶請(qǐng)求序列號(hào)傳輸?shù)?,這樣很好的保證了設(shè)備描述信息的隱藏,隱藏了設(shè)備描述信息就可以避免服務(wù)描述信息被非法獲取,從而保護(hù)了服務(wù)信息。
因?yàn)槭褂昧思用芩惴ê驼\(yùn)算,此安全協(xié)議在時(shí)間性能上比原協(xié)議有所下降,但是由于UPnP消息長(zhǎng)度較小,并且新協(xié)議的安全性有很大提高,所以性能的下降在可以接受的范圍內(nèi)。
[1] 范新運(yùn). 基于UPnP的家庭智能系統(tǒng)研究與是實(shí)踐[D]. 西安:西北工業(yè)大學(xué),2005,3-10.
[2] UPnP,http://baike.baidu.com/view/27925.htm[EB/OL].
[3] UPnP Forum UPnP Device Architecture 1.1 Document Revision[Z].October 2008.
[4] UPnP Forum. UPnP? Security Ceremonies Design Document for UPnP Device Architecture 1.0[Z]. October 3, 2003.
[5] 王增軍. 基于Intel UPnP SDK的UPnP協(xié)議編程[M]. 北京:北京理工大學(xué),2005,1-4.
[6] Abdullah Al Hasib, Prof. Dr. M. A. Mottalib, Vulnerability analysis and protection schemes of universal plug and play protocol[A]. 2010 13th IEEE International Conference on Computational Science and Engineering[C].222-228.
[7] Intel SDK for UPnP Devices Version 1.2.1. November 2002, UPNP編程指南[Z]. 7-8.
[8] 劉武明. UPnP設(shè)備安全服務(wù)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京大學(xué),9-17.
[9] 張磊,廖建新,陳俊亮. 基于簽約信息的智能業(yè)務(wù)鑒權(quán)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 北京郵電大學(xué)學(xué)報(bào), 27(增刊):98-101.
[10] 鹿曉文,陳援非,朱珍民,劉向前,王加連. UPnP-Sec:一種安全UPnP協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[R]. 北京:中國(guó)科學(xué)院計(jì)算機(jī)研究所,2-8.