查看單個文章
舊 2004-07-25, 09:59 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 接入LAN即可使用的UPnP究竟為何物?

以前,要將路由器接到LAN上使用是一件相當麻煩的事。IP位址及子網路遮罩的設定非常複雜,而且非常難以下手。從過濾到位址轉換的種種設定,能把人累得半死。為了改變這種狀況,通用即插即用(Universal Plug and Play:UPnP)技術應運而生。如果支持UPnP,就可以將複雜的網路設定改為自動設定。最近,支持UPnP的路由器及列印機陸續亮相,而且該技術還將擴展至其它設備。但是,也許有的讀者並不瞭解UPnP的功能和結構。下面,就讓我們走近看一下UPnP。

  首先,簡單地說明一下UPnP為何物。所謂UPnP是將相關設備連入個人電腦時使用的即插即用(Plug and Play:PnP)接頭擴展到網路中使用。如果是支持UPnP的設備,它可以檢測到新接入網路的支持UPnP的設備,並可以自動將其設定為可使用狀態。比如,用戶將新買回的支持UPnP的網路列印機與LAN相連接,LAN上的個人電腦可以檢測到該列印機,並可以自動將電腦設定為可以使用新接入的列印機進行列印。

  看了以上的說明,用戶也許會認為其中使用了一種非常複雜的獨有技術。但實際上,UPnP是在英特網及LAN中日常使用的以TCP/IP傳輸協定為基礎的技術。

  首先,在支持UPnP的設備接入LAN時,它可以自動設定IP位址等。在這方面,使用了DHCP(dynamic host configuration protocol)。關於DHCP,可能有很多讀者通過設定個人電腦的TCP/IP而對其有所瞭解。通過DHCP分配到IP位址之後,下一步可以通知LAN上的其它設備其自身已經接入LAN。這裡使用的傳輸協定為UDP(user datagram protocol)。UDP也是一種可以用於英特網的資料流廣播電視及VoIP(voice over IP)等的傳輸協定。使用UDP,可以通過多點傳送(Multicast)向LAN上所有支持UPnP的設備傳送新設備接入的通知。UPnP的接頭號碼使用的是1900號。傳輸層的資料交換使用的傳輸協定是由標準化團體UPnP Forum制定的獨自標準SSDP(Simple Service Discovery Protocol)。

  接下來便進入新接入的設備和此前已經接入的設備之間交換詳細資料的階段。實際上,在這種狀態下交換資料時,在Web服務和瀏覽器之間的通信中使用的HTTP(Hypertext Transfer Protocol)照常使用。但是,製造商名稱、機型、功能、控制指令等使用HTTP傳送的資料模式不是使用HTML(Hypertext Markup Language),而使用XML(Extensible Markup Language)。XML是作為HTML的新一代版本而開始用於各種用途的表述語言。

  此外,關於網路列印機紙張用完等狀態出現變化之時的交換,使用的是HTTP的擴展傳輸協定GENA(General event Notification Architecture),在控制設備時交換XML資料使用的傳輸協定為SOAP(Simple Object Access Protocol)。

  如此說來,便可得知所謂的UPnP這項新技術是現有技術的集合。您大概曾在哪裡聽說過DHCP、HTTP、XML等名稱吧?雖然這其中也有SSDP、GENA、SOAP等不太一般的技術,但這也是現有技術的擴展。

  將現有的技術組合起來提供新的功能,UPnP算得上是這方面的代表。

簡峇@即插即用英文是Universal Plug and Play,縮寫為UPnP。要說電腦外設的即插即用(Plug and Play(縮寫PnP)),大家可能很熟悉,但對統一即插即用,多數人會感到是一頭霧水。由於windows xp加入對UPnP的支持,並且被查出存在很嚴重的安全問題,所以,一時間,使得UPnP名聲大噪。巧的是,本人原來查閱過關於UPnP的技術白皮書,而且也較為詳細地看了關於此次發現的安全缺陷的介紹。因此,趁著這個機會,將UPnP以及引起安全缺陷的詳情披露出來。

一、 UPnP是用來幹什麼的?

  網路發展到現在,已經可以使我們在網上衝浪、收發郵件、聽到遠方傳送來的聲音、搜尋感興趣的內容、下載軟體、點播節目、即時聊天等等、等等……實現的功能好像已經不少,但,人的慾望無止境,享福人還想更享福,還有許多目標沒有達到:例如,怎樣才能使我們在網路上,像平時用遙控器那樣,操作空調器、電風扇、廚房電器,或網路遠端的電器設備呢?如何利用網路上的電腦資源,使這種「遙控」更具智能化?甚至,將一系列相關的控制寫到一個指令碼中,以便用戶定制自己所喜愛的控制流程?……等等。實現諸如此類的效果,將是有巨大需求的套用技術。如果實現通過網路用UPnP控制家用設備,將給我們的生活帶來很大的方便和很多新的體驗。例如:

  1.你在下班之前,或在回去的路上,就可以先開啟家裡的空調器和廚房設備,等進入家門,立刻就是一個溫度宜人的環境--廚房裡的飯也做好了。房間溫度的高低和廚房內煮飯的程序,都是根據事先設計好的「指令碼」程序進行的,絕對可靠。
  2.你若是一位上等級的音樂發燒者,肯定對聆聽音樂的環境要求很嚴:音箱位置高低、音量大小、燈光明暗、窗簾拉不拉上都有講究。手動控制隨好,畢竟不方便。你要使用上UPnP,一切都會為你代勞。還能將你習慣的音響音量、燈光亮度、音箱的高度等等,以你認為最佳的參數寫到執行指令碼中,以後可以都以此為準。如果你擁有自己的專門聽音室,只要你開啟聽音室的門,上述的環境就會立刻設定好。曲終人散,只管放心離開好了,UPnP系統會自己關閉音響,熄滅電燈,拉上窗簾。
  3.你人在辦公室,心裡卻放不下家裡的孩子。用上UPnP,只要在家裡安裝攝像頭,建立好與網路的連接。在辦公室內,啟用桌面電腦的WE變態V,連通網路後,可以即時監視孩子在家裡的一舉一動。

  凡此種種的方便和誘人之處還很多,不勝枚舉。

  其實,這已經不是科學幻想、也不是專家預言。目前用UPnP傳輸協定就可以實現這些操作!這正是windows xp系統急於加入UPnP的原因。正因為UPnP是一個傳輸協定,UPnP的使用可跨越各種操作系統平台,開發應用程式也沒有開發語言的局限。可工作於各種形式的網路結構。且僅以現在的網路設施為基礎,僅僅加上這個UPnP傳輸協定,既不用增加新的設施,也不用重新架設網路介質就可以投入使用!


UPnP傳輸協定具有下述特色:

  1. 以網路為套用環境,不考慮「孤島」中的電腦。
  2. 以TCP/IP和整個Internet為基礎。這樣是「中立」的,不依附於任何操作系統或應用程式,不使用特定的API函數,不受程序設計語言的局限。可以無縫地接入傳統網路。
  3. 設備可以動態地進入網路中,隨後獲得IP位址,「學習」 或搜尋自己應當進行的操作和服務的資訊;「感知」別的設備是否存在以及它們的作用和當前的狀態 。所有這些,都應當是可自動完成的。
  4. 每個設備都可讀取屬於自己的、特定的狀態和參數;完成控制操作後應當發出「操作完成」的回應信號。如果失敗,則應發出控制失敗的信號。

二、UPnP傳輸協定的層:

  UPnP傳輸協定的最終目的,是建立一個可用的設備模型, 因篇幅這裡不對整個結構進行詳細的分析,但你應當記住下面的主要特徵:

  1. UPnP是一個多層傳輸協定構成的框架體系,每一層都以相鄰的下層為基礎,同時又是相鄰上層的基礎。直至達到套用層為止。該圖中的最下面是就是IP和TCP,共兩層,負責設備的IP位址。
  2. 三層是HTTP、HTTPU、HTTPMU,這一層,大家應當是熟悉的,屬於傳送傳輸協定層。傳送的是內容都經過「封裝」後,存放在特定的XML文件中的。對應的SSDP、GENA、SOAP指的是儲存在XML文件中的資料格式。到這一層,已經解決了UPnP設備的IP位址和傳送資訊問題。
  3. 第四層是UPnP設備體系定義,僅僅是一個抽像的、公用的設備模型。任何UPnP設備都必須使用這一層。
  4. 第五層是UPnP論壇的各個專業委員會的設備定義層,在這個論壇中,不同電器設備由不同的專業委員會定義,例如:電視委員會只負責定義網路電視設備部分,空調器委員會只負責定義網路空調設備部分……,依此類推。所有的不同類型的設備都被定義成一個專門的架構或者範本,供建立設備的時候使用。可以推知,進入這一層,設備已經被指定了明確用途。當然,這些都必須遵守標準化的規範。從目前看,UPnP已經可以支持大部分的設備:從電腦、電腦外設,移動設備和家用消費類電子設備等等,無所不包,隨著這個體系的普及,將可能有更多的廠家承認這一標準,最終,可能演化為公認的行業標準。
  5. 最上層,也就是套用層,由UPnP設備製造廠商定義的部分。這一層的資訊是由設備製造廠商來「填充」 的,這部分一般有設備廠商提供的、對設備控制和操作的底層程式碼,然後,就是名稱序列號呀,廠商資訊之類的東西。

三、傳輸協定內部的詳細情況

  僅僅有這樣五層UPnP傳輸協定,也只不過有了一個共同遵守的框架,實際的UPnP系統究竟是如何構成的呢?

  完整的UPnP服務系統由支持UPnP的網路和符合UPnP規範的設備共同構成的。

  整個系統是由設備、服務、和控制游標三部分所構成。

  設備:
  這裡是指符合UPnP規範的設備。一個UPnP設備可以看成一個包含服務並嵌套了一般設備的「容器」 。例如,一個UPnP的VCR(錄像機)設備可以包含磁帶傳送服務、調諧服務和時鐘服務。就是說,UPnP之下的設備不能僅僅理解為硬體意義上的設備,而應當包括服務功能。

  不同種類的UPnP設備將關聯不同的設定、服務和嵌入設備。如列印機和VCR屬於不同用途的設備,服務就不可能定義成一樣的。

  服務:
  設備執行用戶請求的控制程序,可劃分成一個個很小的階段或服務機構,每個服務機構就稱為一個服務。每一個服務,對外都表現為具體的行為和模式,而行為和模式又可以用狀態和變數值進行描述。只要可以用數值描述,在電腦裡面就容易處理了。例如,模仿一個時鐘,它只有一個工作模式:這個模式就是模擬並顯示當前的時間。而一個時鐘的行為共有兩種(也只有兩種):

  1. 設定時間(用來「即平時說的對表」).
  2. 得到時間(用於顯示時間)。

  其它設備服務,也是用這樣思路來描述和定義的,一個設備也可以被定義多個服務。不論是設備的定義資訊和服務的描述資訊,都儲存在一個XML文件中,這個文件也是UPnP傳輸協定構成的一部分。當設備建立和使用服務的時候,XML文件可以與它們進行關聯。

  XML文件中還有一個很關鍵的「狀態表」,狀態表可進一步分為「服務狀態表」和「事件狀態表」。整個UPnP設備執行的全程序內,狀態表貫穿始終,當裝置狀態改變的時候,例如發生參數變化或狀態重新整理的時候,立即就在「狀態表」中反映出來。如控制伺服器在接收到設定時間的行為請求時,就立即執行請求(對時操作),並給出回應,同時更新狀態表中的有關資料。相應地,事件伺服器負責向對此事件感興趣的設備公佈所發生的狀態改變。例如,一個火災事件發生後,事件伺服器就向火災報警器發佈這個事件,導致報警器動作產生報警信號。

控制游標:
  在UPnP網路中,用戶請求設備執行的控制是通過控制游標實現的,控制游標首先是一個有能力控制別的設備的控制者,還要具有在網路中 「發現」控制目標的能力。在發現(控制目標)之後,控制游標應當:

  1取得設備的描述資訊並得到所關聯的服務列表。
  2取得相關服務的描述。
  3使用控制服務行為。
  4確定服務的事件 「源」,不論何時,只要服務狀態發生改變,事件伺服器會立即向控制游標傳送一個事件資訊。

  從上面說到的各種資訊,都儲存在XML文件中,不同用途的資訊,格式不同。保證可以各取所需,不會混淆。

  那麼,UPnP的完整工作程序是怎樣的呢?

  UPnP在控制游標和被控制設備之間提供通訊功能。而網路介質、TCP/IP傳輸協定、HTTP僅提供基本的連接和IP位址分配。整個工作程序需要處理六個方面的內容,即位址分配、發現設備、對設備的描述、設備控制、設備事件、設備表達。

  位址問題:
  位址是整個UPnP系統工作的基礎條件,每個設備都應當是DHCP(Dynamic Host Configuration Protocol 動態主機配置傳輸協定)的客戶。當設備首次與網路建立連接後,利用DHCP服務,使設備得到一個IP位址。這個IP位址可以是DHCP系統指定的,也可以是由設備選項的,當然,有能力自己選項IP位址的設備,必然是那些「聰明」的設備才行!這也就是所謂的「自動」IP位址。

  如果遇到本機DHCP管理範圍之外的IP位址請求,還需要解決「友好設備」

  的位址分配問題,這個問題通常由域名伺服器來解決。

  發現設備:
  可分成兩種情況,一種是在有控制請求之後,在當前的網路中搜尋有無對應的可用設備;另一種情況是某一設備接入網路、取得IP位址之後,就開始向網路「廣播」自己已經進入網路,即尋找控制請求。

  設備的描述:
  簡單說,這是宣告「自己」是什麼樣的設備,例如名稱、製造廠商、序列號碼等等。剛開始「發現」設備後,控制游標對這個設備的「瞭解」還很少,需要依據ULR找到該設備的描述文件,從這些文件中讀取更多的描述資訊。描述資訊的範圍很廣,一般都是由設備的製造廠商提供的。主要的描述項目有:控制的模式名稱和模式號碼、設備序列號、製造廠商名稱、廠商的WEB的ULR……等等。這些一般都存放在特定的XML文件中;

設備控制:
  控制游標找到設備描述之後,會從描述中「提煉」出要進行的操作並獲悉所有的服務;對每個UPnP設備來說,這些描述必須是很確切、很詳細的,描述中可能包含有指令或行為列表、服務回應資訊、用到的參數等等。對於服務的每個行為,也伴有描述資訊:主要是整個服務進行期間的變數、變數的資料類型、可用的取值範圍和事件的特徵。

  要控制某個設備,控制游標必須先傳送一個控制行為請求,要求設備開始服務,然後再按設備的ULR傳送相應的控制消息,控制消息就是放置在XML文件中的那些SOAP格式的資訊。最後,服務會返迴響應資訊,指出服務是成功或是失敗。

  設備事件:
  在服務進行的整個時間內,只要變數值發生了變化或者模式的狀態發生了改變,就產生了一個事件,系統將修改上述提到的事件列表的內容。隨之,事件伺服器把事件向整個網路進行廣播。另一方面,控制游標也可以事先向事件伺服器預約事件資訊,保證將該控制游標感興趣的事件及時準確地傳送過來。

  廣播或預約事件,傳送的都是事件消息,事件消息也放在XML文件中,使用的格式是GENA。

  設備投入工作之前的準備---啟始化程序,也是一個事件,啟始化需要的各種資訊也是用事件消息傳送的。包括的內容主要是:變數初始值,模式的初始狀態等等。

  設備表達:
  只要得到了設備的ULR,就可以取得該設備表達頁面的ULR,然後可以將此表達納入用戶的本機瀏覽器上。這部分還包括與用戶對話的界面,以及與用戶進行會話的處理。

  整個UPnP系統,是在「中樞神經」的指揮下協同工作的。其大致情形如下:

  凡是具備IP位址的的設備都必須直接使用網路的IP位址,但有些設備可能並不具備直接使用網路IP位址的能力,例如,電燈開關的控制就是這樣,這是非IP設備;非IP設備通過網路橋接(UPnP Bridge)來與控制游標交換資訊。

  直接使用IP位址的有:控制游標(可在口袋電腦和遠端設備上發出控制)、本機設備,例如VCR和時鐘;以及網路橋接。非IP設備有所謂輕設備(如溫度控制器)和非UPnP的設備(如電燈控制開關等)。

上述介紹屬於硬體方面,下面再說作為控制靈魂的軟體:

  在上面的敘述中,多次提到用XML文件存放需要的資訊,因為無論是控制游標或設備服務,都需要很多資訊,有讀出的,有傳出的,UPnP傳輸協定約定這些都存放在特定的文件XML中。用途不同的資訊,在XML文件中的格式不同。所以,相關的XML文件是控制服務的靈魂。

四、關於UPnP隱藏的安全缺缺陷:

  這次發現的安全缺陷共有兩個,其中第一個缺陷是對緩衝區(Buffer)的使用沒有進行檢查和限制。外部的攻擊者,可以通過這裡取得整個系統的控制特權!由於UPnp功能必須使用電腦的連接阜來進行工作,取得控制權的攻擊者,還有可能利用這些連接阜,達到攻擊者的目的。這個缺陷導致的後果很嚴重,不論那個版本的windows 系統,只要執行UPnP,就都存在這個危險!但嚴格地說,這並不完全是UPnP技術本身的問題,更多的是程序設計的疏忽。

  第二個缺陷就與UPnP的工作機理有關係了!

  該缺陷存在於UPnP工作時的「設備發現」階段。發現設備可以分為兩種情況:如果某個具備UPnP功能的電腦引導成功並連線到網路上,就會立刻向網路發出「廣播」,向網路上的UPnP設備通知自己已經準備就緒,在程序設計這一級別上看,該廣播內容就是一個M-SEARCH(消息)指示。該廣播將被「聲音所及」範圍之內的所有設備所「聽到」。並向該電腦反饋自己的有關資訊,以備隨後進行控制之用。

  相類似,如果某個設備剛剛連線到網路上,也會向網路發出「通知」,表示自己準備就緒,可以接受來自網路的控制,在程序設計這一級別上看,該通知就是一個NOTIFY(消息)指示。也將被「聲音所及」範圍之內的所有電腦接受。電腦將 「感知」該設備已經向自己「報到」。實際上,NOTIFY(消息)指示也不是單單傳送給電腦聽的,別的網路設備也可以聽到。

  就是在上述的一播一聽之間,出現了問題!

  如果某個黑客向某個用戶系統傳送一個NOTIFY(消息)指示,該用戶系統就會收到這個NOTIFY(消息)指示並在其指示下,連線到一個特定伺服器上,接著向相應的伺服器請求下載服務---下載將要執行的服務內容。伺服器當然會回應這個請求。UPnP服務系統將解釋這個設備的描述部分,請求傳送更多的文件,伺服器又需要回應這些請求。這樣,就構成一個「請求--回應」的循環,大量佔用系統資源,造成UPnP系統服務速度變慢甚至停止。所以,這個缺陷將導致「拒絕服務」攻擊稱為可能!

  結束語

  UpnP正在向我們一步步走近,現在已經是足聲可聞了。不久的將來,必然對我們的工作和生活產生巨大影響。也蘊含著無限商機。儘管現在存在問題,也難保以後就不會再出現新的問題,但這既然體現了人的需求意向,就會有巨大的生命力,暫時的挫折不會使得它停下前進的腳步!

附:這是本文出現的相關名詞解釋:

  傳送傳輸協定:
  主要用HTTP 、HTTPU和HTTPMU:

  HTTP:
  這是大名鼎鼎的東西,不用多說,但就UPnP系統來說,HTTP及其派生傳輸協定都屬於核心部分。

  HTTPU和HTTPMU:
  這些都是從HTTP傳輸協定中派生定義出來的。主要用於傳送SSDP格式的設備消息。

  SSDP:
  是一個「簡單服務發現傳輸協定」 ,即英文「Simple Service Discovery Protocol的縮寫」 , 該傳輸協定定義了如何在網路上發現網路服務的方法。SSDP也規定了存放在XML文件中的資訊格式。SSDP資訊的傳送是依靠HTTPU和HTTPMU進行的。不論是控制游標,或是UPnP設備,工作中都必然用到SSDP,設備接入網路之後,要利用它向網路廣播自己的存在(廣播的資訊中還有設備位置的描述),以便儘快與對應的控制游標建立聯繫;控制游標則利用SSDP來搜尋自己將要控制的設備在哪裡?並且可以排除已經存在的設備和控制游標--只為新近的或尚未「聯絡」上的雙方服務。

  控制游標利用SSDP的方式是經由HTTPU發出搜尋請求,這種請求可以很詳細,能具體到需要什麼樣的設備以及何種服務。例如:請求對特定的VCR機進行設定時鐘的服務。

  設備利用SSDP的方式是「收聽」來自網路連接阜的消息,從中發現與自己匹配的資訊,一旦找到與自己匹配的資訊,經由HTTPMU來傳送一個回應資訊到控制游標。

  GENA:
  這是事件消息採用格式,是所謂「普通時間通知體系Generic Event Notification Architecture」的縮寫。關於事件消息,在上面已經有介紹。

  SOAP:
  即簡單對像訪問傳輸協定,實際就是通過該傳輸協定傳遞控制消息並返回設備對消息的回應結果。它利用XML和HTTP進行遠端使用。使用防火牆或別的網路安全措施不會影響SOAP的使用。

  每個UPnP控制請求都可作為一個SOAP控制消息,控制消息中還包含有控制行為描述和所用到的參數。

(責編:一怒拔劍)
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次