◆魏 凡 姜 楠 路曉明 吳君軼 徐志輝
(1.北京工業(yè)大學 北京 100124;2.北京郵電大學 北京 100876;3.中移(杭州)信息技術有限公司安全產(chǎn)品部 浙江 310012)
UPnP(Universal Plug and Play)協(xié)議是微軟提出并推廣的一種用于 PC機和智能設備的常見對等網(wǎng)絡連接的體系結構[1]。UPnP協(xié)議主要用于智能設備的互聯(lián)互通,使用UPnP協(xié)議時不需要設備驅(qū)動程序,在無需任何配置的前提下實現(xiàn)設備的發(fā)現(xiàn)、聲明和服務調(diào)用等功能。
隨著物聯(lián)網(wǎng)設備的增加,UPnP協(xié)議的廣泛使用,應用UPnP協(xié)議的一些設備的許多安全隱患逐漸暴露了出來。UPnP設備主要存在以下安全隱患:
(1)安全傳輸問題
UPnP協(xié)議的數(shù)據(jù)包一般以明文傳輸,攻擊者可以輕松獲得UPnP協(xié)議的通信信息。
(2)訪問控制不當問題
UPnP網(wǎng)絡中有兩種節(jié)點——UPnP設備與 UPnP控制點,UPnP設備將提供服務給控制點使用。一般而言UPnP設備只希望給某些特定的控制點提供服務,而UPnP設備缺乏對UPnP控制點的認證,這導致攻擊者無須任何憑證隨意調(diào)用UPnP設備的服務。
(3)字符串處理不當問題
UPnP設備未對遠程調(diào)用的數(shù)據(jù)包中的某些字段值進行檢驗,可能出現(xiàn)整數(shù)處理不當、堆/棧溢出和格式化字符串漏洞等問題,以上漏洞均可能導致設備異常(UPnP服務崩潰或設備崩潰),甚至可能導致攻擊者可以在設備上執(zhí)行任意代碼。
關于UPnP協(xié)議的安全問題,許多專家學者已做過研究。針對UPnP協(xié)議的安全傳輸問題,文獻[2]提出了一種由安全控制臺來對設備進行權限控制、設備和控制點之間進行加密傳輸?shù)陌踩珔f(xié)議,文獻[3]設計并實現(xiàn)了一套安全的協(xié)議 UPnP-Sec;針對UPnP訪問控制問題,文獻[4]提出了一個帶鑒權服務的家庭網(wǎng)關設備架構,文獻[5]討論了UPnP技術的用途和設備安全策略,分析了UPnP與Window XP安全缺陷之間的關系及解決策略?,F(xiàn)有的研究大部分在對UPnP網(wǎng)絡的實現(xiàn)與改進上,僅有文獻[6]從固件角度對網(wǎng)絡設備的UPnP協(xié)議安全進行分析,提出了一種基于固件分析的模糊測試技術。
本文主要對UPnP設備的訪問控制不當漏洞、整數(shù)處理不當、堆/棧溢出和格式化字符串漏洞進行研究,設計出一種基于模糊測試技術的 UPnP協(xié)議測試方案,并根據(jù)該方案設計并實現(xiàn)了UPnP協(xié)議模糊測試工具。
在安全測試中,模糊測試(Fuzzy testing)是一種通過向測試對象發(fā)送半畸形數(shù)據(jù)并監(jiān)控測試對象的異常來發(fā)現(xiàn)測試對象的漏洞的測試技術[7]。模糊測試是一種基于黑盒或灰盒的測試技術,與傳統(tǒng)的滲透測試技術不同的是,模糊測試的核心思想是利用帶有攻擊性的畸形數(shù)據(jù),用于觸發(fā)設備的各種漏洞,因此使用模糊測試技術使得漏洞的自動化挖掘成為可能。
如圖1,模糊測試流程主要分為四步:數(shù)據(jù)生成;數(shù)據(jù)輸入;異常監(jiān)控;異常判定[8]。數(shù)據(jù)生成指的是帶有攻擊性的畸形數(shù)據(jù)的生成,數(shù)據(jù)生成決定著模糊測試的結果,是模糊測試的核心。數(shù)據(jù)輸入指的是將畸形數(shù)據(jù)輸入到測試設備。異常監(jiān)控指的是在數(shù)據(jù)輸入后,對測試設備的狀態(tài)進行監(jiān)控,異常監(jiān)控決定著模糊測試的準確率。最后進行異常判定,對監(jiān)控到的異常進行判定,得到測試結果。
1.2節(jié)提到,模糊測試的核心是數(shù)據(jù)生成,一般而言,目前的數(shù)據(jù)生成主要有兩種方法:基于變異的數(shù)據(jù)生成,或者是基于生成的數(shù)據(jù)生成[9]?;谧儺惖臄?shù)據(jù)生成方法是通過變異的方法
生成新的測試數(shù)據(jù),這種數(shù)據(jù)生成的方式比較簡單,但測試效率比較低,因為這種方式生成的數(shù)據(jù)有一定概率被測試設備丟棄,從而無法到達測試效果?;谏傻臄?shù)據(jù)生成方法是基于對已有協(xié)議或數(shù)據(jù)的分析,再去生成隨機數(shù)據(jù),這種測試方法大大提高了測試效率,但對模糊測試工具的開發(fā)人員水平要求較高,有一定的測試難度。
圖1 模糊測試流程
使用傳統(tǒng)的模糊測試方案測試應用UPnP協(xié)議的設備時,存在以下問題:
(1)UPnP設備的協(xié)議數(shù)據(jù)報文是由UPnP設備制造商決定,不同設備的協(xié)議數(shù)據(jù)報文不同,因此傳統(tǒng)的數(shù)據(jù)生成方式不能滿足UPnP協(xié)議模糊測試的需求,大部分測試數(shù)據(jù)被設備丟棄,測試效率比較低;
(2)UPnP設備作為一種物聯(lián)網(wǎng)設備,UPnP往往是其提供的一種服務,UPnP服務的異常不等于設備異常,因此如何對UPnP服務的異常進行判定是問題所在。
必須解決以上兩個問題才能保證協(xié)議測試的高效性和自動化進行,下面提出的測試方案將解決以上問題。
一般來說,本方案的測試點由協(xié)議的脆弱點決定,這里的脆弱點指的是各種實現(xiàn)該協(xié)議的設備易發(fā)生安全漏洞的協(xié)議字段。本方案將使用基于已知漏洞特征的測試方法,這種方法將有效提高UPnP協(xié)議測試的效率,因為歷史上出現(xiàn)過漏洞的協(xié)議字段往往依然存在漏洞[10]。我們在著名漏洞庫 CVE[11](Common Vulnerabilities and Exposures)上對UPnP協(xié)議進行漏洞調(diào)研得知,最早的與UPnP協(xié)議有關的漏洞可追溯至2001年9月27日,從2001年9月27日至2018年8月25日,CVE上共有64個與UPnP協(xié)議有關的漏洞。其中緩沖區(qū)溢出的漏洞有27個,訪問控制不當?shù)穆┒从?0個,拒絕服務漏洞有6個,其他漏洞有11個。通過對這些漏洞的分析與研究,我們發(fā)現(xiàn)UPnP協(xié)議的脆弱點主要集中在下面幾個方面:
(1)訪問控制不當
UPnP設備的服務無需任何認證即可遠程調(diào)用。
(2)NOTIFY和M-SEARCH導致的緩沖區(qū)溢出
接收NOTIFY和M-SEARCH數(shù)據(jù)包的設備和控制點未對其中的Location字段長度進行檢驗,導致緩沖區(qū)溢出漏洞。
(3)緩沖區(qū)溢出及拒絕服務漏洞
UPnP設備未對控制點發(fā)來的SOAP遠程調(diào)用數(shù)據(jù)包中的某些字段進行檢查,導致拒絕服務或緩沖區(qū)溢出。
其中緩沖區(qū)溢出漏洞和拒絕服務漏洞可通過模糊測試進行挖掘,訪問控制相關的漏洞可先用工具進行分析后人工挖掘。
畸形數(shù)據(jù)包的構造是模糊測試的關鍵,直接決定著模糊測試的效率。畸形數(shù)據(jù)包由正常數(shù)據(jù)包變異而來,本測試方案將使用隨機和基于協(xié)議脆弱點的混合變異進行模糊測試,這種測試方法既保證了模糊測試的隨機性,又提高了測試的針對性。
畸形數(shù)據(jù)包的構造主要在于正常數(shù)據(jù)包字段的變異,字段變異的策略有超長字符串、格式化字符串等,下面以NOTIFY消息數(shù)據(jù)包和SOAP方法調(diào)用數(shù)據(jù)包為例進行說明。
NOTIFY數(shù)據(jù)包是UPnP設備廣播的數(shù)據(jù)包,UPnP控制點將接收并解析該數(shù)據(jù)包。NOTIFY數(shù)據(jù)包的Location字段為字符串類型,用于標識UPnP設備的描述文件地址,控制點接收到此消息會去Location字段指定的URL獲取設備描述,下面畸形數(shù)據(jù)包變異了Location字段:
控制點使用SOAP方法調(diào)用UPnP設備提供的接口方法,不同的接口方法 SOAP報文結構不同,下面展示了對路由器的AddPortMapping方法中NewRemoteHost字段的變異:
根據(jù)2.1節(jié)得到的UPnP協(xié)議脆弱點,我們設計了如圖2測試流程。
其中,掃描器實現(xiàn)了對待測設備的掃描,掃描得到待測設備的設備信息并將其寫入數(shù)據(jù)庫;監(jiān)控器對待測設備的異常進行監(jiān)控,并將異常反饋到檢測核心;檢測核心根據(jù)數(shù)據(jù)庫中的設備信息,對待測設備進行模糊測試;漏洞驗證模塊主要對已檢測出的漏洞進行驗證,保證測試結果的準確性。
我們使用 python語言實現(xiàn)該模糊測試工具,該測試工具在Linux下運行,只需將該測試工具和被測設備連入同一網(wǎng)段即可進行測試。該工具可自動獲取 UPnP設備信息并完成模糊測試,測試得到的UPnP設備漏洞將存入數(shù)據(jù)庫并展示給測試人員,實現(xiàn)了完全的自動化測試。
圖2 協(xié)議測試流程
針對UPnP的兩類節(jié)點(UPnP設備和控制點)的測試方法不同,由于UPnP控制點是無法提供服務(沒有服務端口),我們在UPnP組播網(wǎng)絡中對其進行模糊測試,使用ping技術進行異常監(jiān)控;對于UPnP設備,我們先獲得其UPnP端口和提供的服務,而后根據(jù)獲得的服務進行模糊測試,使用端口檢測技術進行異常監(jiān)控。在整個測試流程中,除了訪問控制類的漏洞需人工進行測試,其他測試均可自動進行。其中,模糊測試和設備監(jiān)控同時進行、互不干擾,保證了異常監(jiān)控的準確性和實時性。
根據(jù)我們的UPnP協(xié)議模糊測試方案,我們設計了圖3的系統(tǒng)架構:
圖3 測試工具系統(tǒng)架構
我們使用該模糊測試工具對多款UPnP設備進行了測試,發(fā)現(xiàn)多個安全漏洞,表1為測試結果(考慮部分漏洞未公布,對未公布漏洞的路由品牌未列出):
表1 UPnP設備測試結果
模糊測試得到漏洞的某品牌路由器1和某品牌路由器2的漏洞信息如下:
(1)某品牌路由器 1接口方法均可未授權進行訪問,其實帶參數(shù)的接口方法若參數(shù)中含有“>>x00”字符會導致UPnP服務崩潰(無法自動重啟)產(chǎn)生拒絕服務;
(2)某品牌路由器 2接口方法均可未授權訪問,其中“AddPortMapping”方法中的“NewPortMappingDescription”字段為空時導致UPnP服務崩潰(自動重啟)。
本文對UPnP協(xié)議進行了詳細的分析和研究,通過漏洞調(diào)研明確了UPnP協(xié)議的測試點和測試方法,最終設計出UPnP協(xié)議測試方案,并使用python語言實現(xiàn)了自動化的UPnP協(xié)議模糊測試工具。我們使用該工具對多款UPnP設備進行了測試,發(fā)現(xiàn)部分UPnP設備存在安全漏洞,測試結表明該模糊測試工具具有可用性和高效性。