UPnP協(xié)議
統(tǒng)一即插即用英文是Universal Plug and Play,縮寫為UPnP。要說計算機外設的即插即用(Plug and Play(縮寫PnP)),大家可能很熟悉,但對統(tǒng)一即插即用,多數(shù)人會感到是一頭霧水。由于windows xp加入對UPnP的支持,并且被查出存在很嚴重的安全問題,所以,一時間,使得UPnP名聲大噪。巧的是,本人原來查閱過關于UPnP的技術白皮書,而且也較為詳細地看了關于此次發(fā)現(xiàn)的安全缺陷的介紹。因此,趁著這個機會,將UPnP以及引起安全缺陷的詳情披露出來。
一、 UPnP是用來干什么的?
網(wǎng)絡發(fā)展到現(xiàn)在,已經(jīng)可以使我們在網(wǎng)上沖浪、收發(fā)郵件、聽到遠方傳送來的聲音、搜索感興趣的內容、下載軟件、點播節(jié)目、即時聊天……實現(xiàn)的功能好像已經(jīng)不少,但,人的欲望無止境,享福人還想更享福,還有許多目標沒有達到:例如,怎樣才能使我們在網(wǎng)絡上,像平時用遙控器那樣,操作空調器、電風扇、廚房電器,或網(wǎng)絡遠端的電器設備呢?如何利用網(wǎng)絡上的計算機資源,使這種“遙控”更具智能化?甚至,將一系列相關的控制寫到一個腳本中,以便用戶定制自己所喜愛的控制流程……實現(xiàn)諸如此類的效果,將是有巨大需求的應用技術。如果實現(xiàn)通過網(wǎng)絡用UPnP控制家用設備,將給我們的生活帶來很大的方便和很多新的體驗。例如:
1.你在下班之前,或在回去的路上,就可以先打開家里的空調器和廚房設備,等進入家門,立刻就是一個溫度宜人的環(huán)境――廚房里的飯也做好了。房間溫度的高低和廚房內煮飯的過程,都是根據(jù)事先設計好的“腳本”程序進行的,絕對可靠。
2.你若是一位上檔次的音樂發(fā)燒者,肯定對聆聽音樂的環(huán)境要求很嚴:音箱位置高低、音量大小、燈光明暗、窗簾拉不拉上都有講究。手動控制隨好,畢竟不方便。你要使用上UPnP,一切都會為你代勞。還能將你習慣的音響音量、燈光亮度、音箱的高度等等,以你認為最佳的參數(shù)寫到執(zhí)行腳本中,以后可以都以此為準。如果你擁有自己的專門聽音室,只要你打開聽音室的門,上述的環(huán)境就會立刻設置好。曲終人散,只管放心離開好了,UPnP系統(tǒng)會自己關閉音響,熄滅電燈,拉上窗簾。
3.你人在辦公室,心里卻放不下家里的孩子。用上UPnP,只要在家里安裝攝像頭,建立好與網(wǎng)絡的連接。在辦公室內,啟用桌面電腦的WEBTV,連通網(wǎng)絡后,可以即時監(jiān)視孩子在家里的一舉一動。
凡此種種的方便和誘人之處還很多,不勝枚舉。
其實,這已經(jīng)不是科學幻想、也不是專家預言。目前用UPnP協(xié)議就可以實現(xiàn)這些操作!這正是windows xp系統(tǒng)急于加入UPnP的原因。正因為UPnP是一個協(xié)議,UPnP的使用可跨越各種操作系統(tǒng)平臺,開發(fā)應用程序也沒有開發(fā)語言的局限。可工作于各種形式的網(wǎng)絡結構。且僅以現(xiàn)在的網(wǎng)絡設施為基礎,僅僅加上這個UPnP協(xié)議,既不用添加新的設施,也不用重新架設網(wǎng)絡介質就可以投入使用!
UPnP協(xié)議具有下述特色:
1. 以網(wǎng)絡為應用環(huán)境,不考慮“孤島”中的計算機。
2. 以TCP/IP和整個Internet為基礎。這樣是“中立”的,不依附于任何操作系統(tǒng)或應用程序,不使用特定的API函數(shù),不受程序設計語言的局限。可以無縫地接入傳統(tǒng)網(wǎng)絡。
3. 設備可以動態(tài)地進入網(wǎng)絡中,隨后獲得IP地址,“學習” 或查找自己應當進行的操作和服務的信息;“感知”別的設備是否存在以及它們的作用和當前的狀態(tài) 。所有這些,都應當是可自動完成的。
4. 每個設備都可讀取屬于自己的、特定的狀態(tài)和參數(shù);完成控制操作后應當發(fā)出“操作完成”的響應信號。如果失敗,則應發(fā)出控制失敗的信號。
二、UPnP協(xié)議的層:
UPnP協(xié)議的最終目的,是建立一個可用的設備模型, 因篇幅這里不對整個結構進行詳細的分析,但你應當記住下面的主要特征:
1. UPnP是一個多層協(xié)議構成的框架體系,每一層都以相鄰的下層為基礎,同時又是相鄰上層的基礎。直至達到應用層為止。該圖中的最下面是就是IP和TCP,共兩層,負責設備的IP地址。
2. 三層是HTTP、HTTPU、HTTPMU,這一層,大家應當是熟悉的,屬于傳送協(xié)議層。傳送的是內容都經(jīng)過“封裝”后,存放在特定的XML文件中的。對應的SSDP、GENA、SOAP指的是保存在XML文件中的數(shù)據(jù)格式。到這一層,已經(jīng)解決了UPnP設備的IP地址和傳送信息問題。
3. 第四層是UPnP設備體系定義,僅僅是一個抽象的、公用的設備模型。任何UPnP設備都必須使用這一層。
4. 第五層是UPnP論壇的各個專業(yè)委員會的設備定義層,在這個論壇中,不同電器設備由不同的專業(yè)委員會定義,例如:電視委員會只負責定義網(wǎng)絡電視設備部分,空調器委員會只負責定義網(wǎng)絡空調設備部分……依此類推。所有的不同類型的設備都被定義成一個專門的架構或者模板,供建立設備的時候使用。可以推知,進入這一層,設備已經(jīng)被指定了明確用途。當然,這些都必須遵守標準化的規(guī)范。從目前看,UPnP已經(jīng)可以支持大部分的設備:從電腦、電腦外設,移動設備和家用消費類電子設備等等,無所不包,隨著這個體系的普及,將可能有更多的廠家承認這一標準,最終,可能演化為公認的行業(yè)標準。
5. 最上層,也就是應用層,由UPnP設備制造廠商定義的部分。這一層的信息是由設備制造廠商來“填充” 的,這部分一般有設備廠商提供的、對設備控制和操作的底層代碼,然后,就是名稱序列號呀,廠商信息之類的東西。
三、協(xié)議內部的詳細情況
僅僅有這樣五層UPnP協(xié)議,也只不過有了一個共同遵守的框架,實際的UPnP系統(tǒng)究竟是如何構成的呢?
完整的UPnP服務系統(tǒng)由支持UPnP的網(wǎng)絡和符合UPnP規(guī)范的設備共同構成的。
整個系統(tǒng)是由設備、服務、和控制指針三部分所構成。
設備:
這里是指符合UPnP規(guī)范的設備。一個UPnP設備可以看成一個包含服務并嵌套了常規(guī)設備的“容器” 。例如,一個UPnP的VCR(錄像機)設備可以包含磁帶傳送服務、調諧服務和時鐘服務。就是說,UPnP之下的設備不能僅僅理解為硬件意義上的設備,而應當包括服務功能。
不同種類的UPnP設備將關聯(lián)不同的設置、服務和嵌入設備。如打印機和VCR屬于不同用途的設備,服務就不可能定義成一樣的。
服務:
設備執(zhí)行用戶請求的控制過程,可劃分成一個個很小的階段或單位,每個單位就稱為一個服務。每一個服務,對外都表現(xiàn)為具體的行為和模式,而行為和模式又可以用狀態(tài)和變量值進行描述。只要可以用數(shù)值描述,在計算機里面就容易處理了。例如,模仿一個時鐘,它只有一個工作模式:這個模式就是模擬并顯示當前的時間。而一個時鐘的行為共有兩種(也只有兩種):
1. 設置時間(用來“即平時說的對表”).
2. 得到時間(用于顯示時間)。
其它設備服務,也是用這樣思路來描述和定義的,一個設備也可以被定義多個服務。不論是設備的定義信息和服務的描述信息,都保存在一個XML文件中,這個文件也是UPnP協(xié)議構成的一部分。當設備建立和使用服務的時候,XML文件可以與它們進行關聯(lián)。
XML文件中還有一個很關鍵的“狀態(tài)表”,狀態(tài)表可進一步分為“服務狀態(tài)表”和“事件狀態(tài)表”。整個UPnP設備運行的全過程內,狀態(tài)表貫穿始終,當設備狀態(tài)改變的時候,例如發(fā)生參數(shù)變化或狀態(tài)刷新的時候,立即就在“狀態(tài)表”中反映出來。如控制服務器在接收到設置時間的行為請求時,就立即執(zhí)行請求(對時操作),并給出響應,同時更新狀態(tài)表中的有關數(shù)據(jù)。相應地,事件服務器負責向對此事件感興趣的設備公布所發(fā)生的狀態(tài)改變。例如,一個火災事件發(fā)生后,事件服務器就向火災報警器發(fā)布這個事件,導致報警器動作產(chǎn)生報警信號。
控制指針:
在UPnP網(wǎng)絡中,用戶請求設備執(zhí)行的控制是通過控制指針實現(xiàn)的,控制指針首先是一個有能力控制別的設備的控制者,還要具有在網(wǎng)絡中 “發(fā)現(xiàn)”控制目標的能力。在發(fā)現(xiàn)(控制目標)之后,控制指針應當:
①取得設備的描述信息并得到所關聯(lián)的服務列表。
②取得相關服務的描述。
③調用控制服務行為。
④確定服務的事件 “源”,不論何時,只要服務狀態(tài)發(fā)生改變,事件服務器會立即向控制指針發(fā)送一個事件信息。
從上面說到的各種信息,都保存在XML文件中,不同用途的信息,格式不同。保證可以各取所需,不會混淆。
那么,UPnP的完整工作過程是怎樣的呢?
UPnP在控制指針和被控制設備之間提供通訊功能。而網(wǎng)絡介質、TCP/IP協(xié)議、HTTP僅提供基本的連接和IP地址分配。整個工作過程需要處理六個方面的內容,即地址分配、發(fā)現(xiàn)設備、對設備的描述、設備控制、設備事件、設備表達。
地址問題:
地址是整個UPnP系統(tǒng)工作的基礎條件,每個設備都應當是DHCP(Dynamic Host Configuration Protocol 動態(tài)主機配置協(xié)議)的客戶。當設備首次與網(wǎng)絡建立連接后,利用DHCP服務,使設備得到一個IP地址。這個IP地址可以是DHCP系統(tǒng)指定的,也可以是由設備選擇的,當然,有能力自己選擇IP地址的設備,必然是那些“聰明”的設備才行!這也就是所謂的“自動”IP地址。
如果遇到本地DHCP管理范圍之外的IP地址請求,還需要解決“友好設備”
的地址分配問題,這個問題通常由域名服務器來解決。
發(fā)現(xiàn)設備:
可分成兩種情況,一種是在有控制請求之后,在當前的網(wǎng)絡中查找有無對應的可用設備;另一種情況是某一設備接入網(wǎng)絡、取得IP地址之后,就開始向網(wǎng)絡“廣播”自己已經(jīng)進入網(wǎng)絡,即尋找控制請求。
設備的描述:
簡單說,這是聲明“自己”是什么樣的設備,例如名稱、制造廠商、序列號碼等等。剛開始“發(fā)現(xiàn)”設備后,控制指針對這個設備的“了解”還很少,需要依據(jù)ULR找到該設備的描述文件,從這些文件中讀取更多的描述信息。描述信息的范圍很廣,一般都是由設備的制造廠商提供的。主要的描述項目有:控制的模式名稱和模式號碼、設備序列號、制造廠商名稱、廠商的WEB的ULR等等。這些一般都存放在特定的XML文件中;
設備控制:
控制指針找到設備描述之后,會從描述中“提煉”出要進行的操作并獲悉所有的服務;對每個UPnP設備來說,這些描述必須是很確切、很詳細的,描述中可能包含有命令或行為列表、服務響應信息、用到的參數(shù)等等。對于服務的每個行為,也伴有描述信息:主要是整個服務進行期間的變量、變量的數(shù)據(jù)類型、可用的取值范圍和事件的特征。
要控制某個設備,控制指針必須先發(fā)送一個控制行為請求,要求設備開始服務,然后再按設備的ULR發(fā)送相應的控制消息,控制消息就是放置在XML文件中的那些SOAP格式的信息。最后,服務會返回響應信息,指出服務是成功或是失敗。
設備事件:
在服務進行的整個時間內,只要變量值發(fā)生了變化或者模式的狀態(tài)發(fā)生了改變,就產(chǎn)生了一個事件,系統(tǒng)將修改上述提到的事件列表的內容。隨之,事件服務器把事件向整個網(wǎng)絡進行廣播。另一方面,控制指針也可以事先向事件服務器預約事件信息,保證將該控制指針感興趣的事件及時準確地傳送過來。
廣播或預約事件,傳送的都是事件消息,事件消息也放在XML文件中,使用的格式是GENA。
設備投入工作之前的準備―――初始化過程,也是一個事件,初始化需要的各種信息也是用事件消息傳送的。包括的內容主要是:變量初始值,模式的初始狀態(tài)等等。
設備表達:
只要得到了設備的ULR,就可以取得該設備表達頁面的ULR,然后可以將此表達納入用戶的本地瀏覽器上。這部分還包括與用戶對話的界面,以及與用戶進行會話的處理。
整個UPnP系統(tǒng),是在“中樞神經(jīng)”的指揮下協(xié)同工作的。其大致情形如下:
凡是具備IP地址的的設備都必須直接使用網(wǎng)絡的IP地址,但有些設備可能并不具備直接使用網(wǎng)絡IP地址的能力,例如,電燈開關的控制就是這樣,這是非IP設備;非IP設備通過網(wǎng)橋(UPnP Bridge)來與控制指針交換信息。
直接使用IP地址的有:控制指針(可在口袋電腦和遠程設備上發(fā)出控制)、本地設備,例如VCR和時鐘;以及網(wǎng)橋。非IP設備有所謂輕設備(如溫度控制器)和非UPnP的設備(如電燈控制開關等)。
上述介紹屬于硬件方面,下面再說作為控制靈魂的軟件:
在上面的敘述中,多次提到用XML文件存放需要的信息,因為無論是控制指針或設備服務,都需要很多信息,有讀出的,有傳出的,UPnP協(xié)議約定這些都存放在特定的文件XML中。用途不同的信息,在XML文件中的格式不同。所以,相關的XML文件是控制服務的靈魂。
四、關于UPnP隱藏的安全缺缺陷:
這次發(fā)現(xiàn)的安全缺陷共有兩個,其中第一個缺陷是對緩沖區(qū)(Buffer)的使用沒有進行檢查和限制。外部的攻擊者,可以通過這里取得整個系統(tǒng)的控制特權!由于UPnp功能必須使用計算機的端口來進行工作,取得控制權的攻擊者,還有可能利用這些端口,達到攻擊者的目的。這個缺陷導致的后果很嚴重,不論那個版本的windows 系統(tǒng),只要運行UPnP,就都存在這個危險!但嚴格地說,這并不完全是UPnP技術本身的問題,更多的是程序設計的疏忽。
第二個缺陷就與UPnP的工作機理有關系了!
該缺陷存在于UPnP工作時的“設備發(fā)現(xiàn)”階段。發(fā)現(xiàn)設備可以分為兩種情況:如果某個具備UPnP功能的計算機引導成功并連接到網(wǎng)絡上,就會立刻向網(wǎng)絡發(fā)出“廣播”,向網(wǎng)絡上的UPnP設備通知自己已經(jīng)準備就緒,在程序設計這一級別上看,該廣播內容就是一個M-SEARCH(消息)指示。該廣播將被“聲音所及”范圍之內的所有設備所“聽到”。并向該計算機反饋自己的有關信息,以備隨后進行控制之用。
相類似,如果某個設備剛剛連接到網(wǎng)絡上,也會向網(wǎng)絡發(fā)出“通知”,表示自己準備就緒,可以接受來自網(wǎng)絡的控制,在程序設計這一級別上看,該通知就是一個NOTIFY(消息)指示。也將被“聲音所及”范圍之內的所有計算機接受。計算機將 “感知”該設備已經(jīng)向自己“報到”。實際上,NOTIFY(消息)指示也不是單單發(fā)送給計算機聽的,別的網(wǎng)絡設備也可以聽到。
就是在上述的一播一聽之間,出現(xiàn)了問題!
如果某個黑客向某個用戶系統(tǒng)發(fā)送一個NOTIFY(消息)指示,該用戶系統(tǒng)就會收到這個NOTIFY(消息)指示并在其指示下,連接到一個特定服務器上,接著向相應的服務器請求下載服務―――下載將要執(zhí)行的服務內容。服務器當然會響應這個請求。UPnP服務系統(tǒng)將解釋這個設備的描述部分,請求發(fā)送更多的文件,服務器又需要響應這些請求。這樣,就構成一個“請求――響應”的循環(huán),大量占用系統(tǒng)資源,造成UPnP系統(tǒng)服務速度變慢甚至停止。所以,這個缺陷將導致“拒絕服務”攻擊稱為可能!
結束語
UpnP正在向我們一步步走近,現(xiàn)在已經(jīng)是足聲可聞了。不久的將來,必然對我們的工作和生活產(chǎn)生巨大影響。也蘊含著無限商機。盡管現(xiàn)在存在問題,也難保以后就不會再出現(xiàn)新的問題,但這既然體現(xiàn)了人的需求意向,就會有巨大的生命力,暫時的挫折不會使得它停下前進的腳步!