李明琪 張 磊 楊哲慜
(復旦大學軟件學院 上海 201203)
隨著智能移動設備的普及,無線網絡變得愈發重要,無線路由器作為無線網絡的通信樞紐,正扮演著不可或缺的角色。與此同時,隨著用戶對無線路由器的功能提出新的需求,智能路由器也逐漸在用戶群體中流行。2017年,無線路由器在中國市場共銷售了6 625萬臺,其中智能路由器的銷量達1 650萬臺,占路由器總銷量的24.91%,較2016年增加了7.89%[1]。
智能路由器在傳統路由器的基礎上,增加了獨立的操作系統。一方面,與傳統路由器類似,用戶可以利用該操作系統中自帶的軟件對路由器進行本地管理,實現限制指定網站的訪問、控制帶寬和限制上網時長等功能。另一方面,用戶也可以在該操作系統中安裝軟件來實現自定義的功能。此外,為了更加方便用戶能夠實時實地的管理路由器,取消本地管理必須在路由器附近的物理限制,智能路由器還提供了可運行于移動設備的管理應用軟件。通過該軟件,用戶既可以在移動設備直連路由器時對路由器進行本地管理,也可以在任何有網絡的地方使用本地管理具有的功能,即對智能路由器進行遠程管理。
但是,這種方便的遠程管理模式卻也因為自身存在的安全漏洞對用戶的合法權益造成了新的威脅。2017年2月,NETGEAR的多款智能路由器被發現存在能竊取管理員密碼的漏洞。攻擊者通過利用該漏洞,可以在訪問路由器的網頁端遠程管理頁面時被重定向到特定的頁面,而該頁面包含了可以用于用戶密碼恢復的token。攻擊者可以利用該token輕易獲取到路由器的管理員密碼。此外,2017年4月,數十款Linksys智能路由器被發現存在遠程命令執行漏洞。攻擊者可以利用該漏洞,以管理員權限執行命令并創建后門賬號,從而完全控制受害者的路由器。而且攻擊者創建的后門賬號并不會在智能路由器的網頁管理界面中顯示,極具隱蔽性。
因此,面向智能路由的安全漏洞研究是一個亟待解決的重要安全問題。雖然已有相關工作可以對路由器進行漏洞挖掘,但是他們的檢測方法主要是在路由器固件中查找路由協議和固件代碼實現上的安全缺陷。而現代智能路由器所引入的遠程管理模式卻不能被前人的方法覆蓋。而且這種新型模式下的安全問題與智能路由器的生態環境及遠程管理功能的設計理念都息息相關。因此,本文通過分析主流路由器廠商中遠程管理功能的設計與實現,從遠程管理模式本身的漏洞特點出發,設計并實現了面向智能路由器遠程管理應用軟件的通用漏洞檢測工具RMVD(Remote Management Vulnerability Detector)。
在設計并實現該檢測工具時,本文先后解決了多個關鍵問題。首先,本文解決了應用軟件中程序執行路徑與管理指令發送之間的映射關系識別問題。在安卓應用軟件中,因異步調用的大量使用,入口函數以及程序執行路徑等都比常規應用軟件多出很多,這直接導致在遠程管理軟件中存在大量與遠程管理指令發送無關的執行路徑,影響漏洞檢測的效率。為了剔除無關路徑的影響,RMVD先采用靜態程序分析與動態程序分析相結合的技術定位管理指令的發送語句,再利用后向的程序切片技術,生成可達該發送語句的程序執行路徑。為了確保能發現所有可發送的指令,在檢測管理指令發送語句和后向生成路徑時,RMVD會嘗試發現所有可連接的函數入口。一般情況下,每一個入口函數都對應應用軟件中可供用戶使用的一個管理功能,即一個有效的管理指令。
其次,本文解決了同類管理功能入口函數的聚類問題。在確定了管理應用軟件發送管理指令的入口函數及其對應的執行路徑后,檢測工具還需要對入口函數進行區分,以判斷其觸發的執行路徑是進行了本地管理還是遠程管理。由于縱然是相同的功能,其指令參數的格式也可以差異巨大,因此檢測工具無法通過指令參數來區分同類管理功能在不同管理環境下的入口函數。但是本文發現,在應用軟件中,相同管理功能對應的用戶界面會復用或具有高度的相似性。因此,本文提出了一種基于用戶界面相似度的方法對入口函數進行聚類,得到同類管理功能在進行本地管理和遠程管理時所使用的入口函數組合,進而利用該組合進行權限校驗分析,同時利用該組合對應的指令參數進行一致性分析。
最后,本文解決了應用軟件中權限校驗與遠程管理執行路徑的映射問題。在發現大量有效的程序執行路徑后, RMVD下一個要解決的問題就是識別這些路徑中存在的權限校驗邏輯。一個直接的傳統做法[2]是依賴專家經驗預先定義一個權限校驗的函數集合,再從這些路徑中識別這些特殊的函數調用。但是,遠程管理應用軟件中存在大量的自定義接口,而在缺乏專家經驗的情況下,并不能列出一個有效的函數集合。因此,本文提出了一種基于控制流圖中執行路徑差異的新型權限校驗識別方法。在本地管理模式下,遠程管理應用軟件因認為自身處于可信環境而不需對管理指令進行權限校驗,而在遠程管理模式下則恰恰相反。因此,可以通過對比二者在控制流圖執行路徑上的差異,來檢測遠程管理執行路徑是否進行了權限校驗。
本文使用RMVD對當前流行的TP-Link、D-Link、華為路由器和NETGEAR智能路由器的管理應用軟件進行了檢測,并發現了多處安全漏洞。惡意攻擊者可以利用這些安全漏洞,竊取路由器的本地管理用戶名和密碼或在未授權的情況下直接使用路由器的部分遠程管理功能,進而利用路由器來竊取用戶的隱私信息,侵犯用戶的合法權益。RMVD在對管理應用軟件進行檢測時,最長耗時為463 s,最短耗時為337 s,這表明RMVD對管理應用軟件的檢測也能在相對合理的時間范圍內完成。
用戶可以下載智能路由器提供的管理應用軟件,在移動設備上直接對智能路由器進行遠程管理。如圖1所示,在智能路由器的遠程管理生態模型中,主要有運行管理應用軟件的移動設備、遠程服務器和智能路由器這三種角色。

圖1 智能路由生態模型
用戶在對智能路由器進行管理時,若運行管理應用軟件的移動設備直連到了智能路由器,則管理應用軟件可以采用本地管理的模式,直接對智能路由器進行管理。當運行管理應用軟件的移動設備未與智能路由器進行直接連接時,管理應用軟件則可以通過遠程服務器對智能路由器進行管理。
智能路由器在提供遠程管理的功能時,為了防止惡意攻擊者進行攻擊,部分智能路由器會限制遠程管理的功能。例如對TP-Link智能路由器來說,用戶在對其進行遠程管理時,無法修改管理員的密碼。但智能路由器的大部分功能,用戶都可以通過遠程管理功能來使用,其中也包含了會威脅智能路由器安全的多項功能。例如對TP-Link智能路由器來說,用戶可以對TP-Link智能路由器進行遠程操作的部分功能如表1所示。

表1 TP-Link智能路由器的部分遠程管理功能
如圖2所示,在智能路由器的管理應用軟件中,有負責與智能路由器進行通信的基礎設施功能模塊,利用該模塊,管理應用軟件的基礎功能模塊和插件功能模塊便可以對智能路由器發送指令,進而控制智能路由器。

圖2 遠程管理流程
若管理應用軟件具有本地管理的功能,則管理應用軟件在啟動時,會對管理環境進行檢測,即檢測同一網段中持有特定IP的設備是否為被管理的智能路由器。
A路由器為運行管理應用軟件的移動設備所直接連接的路由器。管理應用軟件在啟動時,如果進行管理環境檢測,則會向同一網段中的特定IP發送檢測數據包。如果A路由器為管理應用軟件所管理的路由器,則A路由器會持有該特定的IP地址,進而會接收到檢測數據包,并會對檢測數據包進行響應。此時管理應用軟件便能識別A路由器,并對A路由器進行本地管理,后續對路由器進行控制的指令便會直接發送給A路由器。
如果持有該特定IP地址的設備未對檢測數據包進行響應,則管理應用軟件會對智能路由器進行遠程管理,即對智能路由器的控制指令會通過A路由器發送給遠程服務器,然后遠程服務器再對被管理的路由器B進行控制。
若管理應用軟件不具有本地管理的功能,則管理應用軟件發送給智能路由器的指令都會先發送給遠程服務器,再由遠程服務器對被管理的智能路由器進行控制。
用戶在使用應用軟件對智能路由器進行管理時,既可以使用應用軟件已提供的各種功能,也可以利用應用軟件提供的插件功能來安裝插件,進而對智能路由器的功能進行擴展。當前的管理應用軟件在實現插件的功能時,通常都會啟動一個HTTP server,然后將插件作為一個獨立的網頁應用軟件運行于HTTP server中。用戶可以使用運行于HTTP server中的插件,對智能路由器進行本地或遠程控制。
在智能路由器的遠程管理生態模型中,由于管理應用軟件能對智能路由器的多項重要功能進行遠程控制,且惡意應用軟件可以運行于和管理應用軟件相同的移動設備中,因此管理應用軟件的安全對于整個智能路由器生態系統的安全至關重要。通過對智能路由器遠程管理功能的設計與實現進行分析,我們發現其主要具有如下兩個方面的安全漏洞:
(1) 未授權發送控制指令的安全漏洞。管理應用軟件在管理功能被觸發并發送指令時,會執行其控制流圖中相應的路徑。如果該管理路徑未對管理功能觸發者的權限進行校驗,則惡意應用軟件也能觸發該管理功能,使得管理應用軟件在用戶不知情的情況下發送指令。例如,管理應用軟件在啟動HTTP server來運行插件網頁應用軟件時,若未對插件使用者的身份進行校驗,則惡意應用軟件也能訪問HTTP server中的內容,并將惡意參數發送給HTTP server來使管理應用軟件發送惡意的控制指令。
(2) 控制指令可重放的安全漏洞。管理應用軟件在通過網絡發送控制指令時,若控制指令參數中缺少保護字段,則惡意攻擊者可以通過中間人攻擊的方式,捕獲控制指令參數并進行重放攻擊。例如,若管理應用軟件在獲取已連接的設備時,未在指令中設置相應的保護字段,則惡意攻擊者可以監測管理應用軟件所發送的指令,并使用該指令進行重放攻擊,來實時獲取已連接到智能路由器的設備。
當前的路由器安全漏洞檢測方法主要對路由器的固件進行了檢測。在對固件進行檢測時,當前的檢測方法從固件所采用的路由協議與固件的代碼實現兩方面進行了檢測。
在對固件所采用的路由協議進行檢測時,Smith等[3]通過分析BGP路由協議,確認了其中存在的安全漏洞,同時給出了減少漏洞危害的修改建議。Robbins[4]通過對OSPF路由協議以及鏈路狀態通告偽造攻擊進行研究,提出了基于OSPF和EIGRP協議的冗余網絡系統架構,來抵御鏈路狀態通告偽造攻擊。Wang[5]通過對OSPF路由協議的認證機制、可靠的泛洪機制以及分層路由機制等進行分析,發現OSPF路由協議主要有空密碼與簡單密碼認證漏洞、加密認證漏洞、老化時間漏洞和網絡阻塞漏洞,進而設計了相應的保護方法并實現了漏洞攻擊檢測系統。
在對固件的代碼實現進行檢測時,Cui等[6]針對Cisco可應用于路由器的ASA軟件設計了一個模糊測試的方法,該方法通過對ASA中的IKEv2協議進行模糊測試,發現了多個安全漏洞。Zhou等[7]采用模糊測試的方法來檢測Cisco路由器iOS系統相關的安全漏洞。Zhang等[8]通過擴展Peach模糊測試工具,使其能檢測IKE協議相關的安全漏洞。李佳莉等[9]則利用協議狀態圖來對RTSP協議進行模糊測試,以檢測其中的安全漏洞。Costin等[10]采用動態分析和靜態分析相結合的方法,對路由器等嵌入式設備固件中的網頁界面進行了全自動化的分析,以檢測其中存在的安全漏洞。Stephens等[11]結合模糊測試方法和選擇性混合執行設計了一個二進制漏洞挖掘工具,該工具可以對路由器等嵌入式設備所使用的固件進行分析。
為了檢測智能路由器在進行遠程管理的過程中所存在的未授權發送控制指令以及控制指令可重放的安全漏洞,本文設計并實現了相應的檢測工具,來對管理應用軟件進行權限校驗分析以及參數一致性分析。
圖3展示了檢測工具的整體架構圖。檢測工具在利用控制流圖提取執行路徑之前,通過解析應用軟件的APK文件,識別了應用軟件的入口函數并將該入口函數的起始語句作為執行路徑的起點。在識別管理指令的發送語句并將該語句作為執行路徑的終點時,由于應用軟件可以采用多種方式發送網絡請求,因此檢測工具通過動態分析與靜態分析相結合的方法來確定指令發送的語句以及相應的指令參數。同時檢測工具還記錄了觸發指令發送的入口函數以及入口函數對應的界面布局屬性信息。

圖3 工具整體架構圖
為了提取控制流圖執行路徑以及分析參數一致性,檢測工具首先應該確認各執行路徑的入口函數,并對遠程管理路徑和本地管理路徑的入口函數進行配對。由于代碼復用和模塊化開發,遠程管理和本地管理通常共享很多安全校驗代碼和用戶界面布局代碼,因此檢測工具在獲取了入口函數對應的界面布局屬性信息后,對其進行了聚類,進而將同類管理功能在不同管理環境中對應的入口函數進行配對。根據配對結果,檢測工具便能得到同類管理功能在不同管理環境下的入口函數及其觸發的指令參數,從而可以進行控制流圖執行路徑的提取以及參數一致性分析。
在確定了指令發送的語句以及對應的入口函數后,檢測工具從指令發送的語句開始,利用后向的程序切片技術,生成了從入口函數的起始語句可達的執行路徑,并根據入口函數的聚類結果將執行路徑分為了本地管理執行路徑與遠程管理執行路徑。在得到了應用軟件的控制流圖執行路徑后,檢測工具便開始利用執行路徑進行權限校驗分析以檢測未授權發送控制指令的安全漏洞。
檢測工具在對執行路徑進行權限校驗分析時,會對本地管理的執行路徑和遠程管理的執行路徑中的分支節點進行對比。由于管理應用軟件在進行遠程管理時,會因為面臨更加復雜的網絡環境而更加容易地被攻擊者進行攻擊,因此管理應用軟件需要進行更多額外的判斷操作,來檢查遠程管理的操作是否安全。這些額外的判斷操作會造成遠程管理執行路徑中分支節點數量的增多,因此若在去除了相同的分支節點后,遠程管理執行路徑的分支節點數量少于本地管理執行路徑的分支節點數量,則檢測工具會認為遠程管理的執行路徑存在潛在的安全漏洞。得到存在潛在安全漏洞的執行路徑后,檢測工具會對執行路徑進行觸發,以驗證安全漏洞的有效性。
該檢測工具的參數一致性分析模塊會檢測管理應用軟件在進行本地管理和遠程管理時,是否使用了保護字段來避免重放攻擊。根據先驗知識,指定執行路徑在發送指令時,所應具有的保護字段。若某條本地與遠程管理執行路徑具有的保護字段的數量不一致,則該模塊會認為保護字段數量較少的執行路徑存在可重放攻擊的安全漏洞。若本地與遠程管理路徑均缺失了保護字段,則該模塊會認為管理路徑使用了指定字段以外的其他保護字段。在得到了具有安全漏洞的控制指令參數后,檢測工具對控制指令進行重放,來驗證安全漏洞的有效性。
在提取安卓應用軟件的入口函數時,由于應用軟件的執行既可以由用戶觸發,也可以由其他應用軟件觸發,因此檢測工具將應用軟件的入口函數分為了用戶觸發類的入口函數和無用戶觸發類的入口函數。
用戶觸發類的應用軟件入口函數包括組件界面中控件綁定的事件函數,以及用戶在操作組件時所觸發的組件回調函數。無用戶觸發類的應用軟件入口函數包括組件啟動時即可觸發的回調函數,以及HTTP server在處理連接時觸發的回調函數。
在檢測應用軟件組件的回調函數時,檢測工具使用了開源的AXMLPrinter2[12]工具,對安卓應用軟件解壓得到的AndroidManifest.xml二進制文件進行處理,得到了可讀文本形式的AndroidManifest.xml文件。隨后檢測工具對該文件進行解析,得到了該文件中所聲明的組件屬性以及對應的實現類。檢測工具進而根據Android官方網站[13]提供的組件回調函數的資料,確定了應用軟件組件類中的回調函數。檢測工具還根據組件的屬性判斷了組件是否能被其他的應用軟件所啟動。當組件能被其他應用軟件啟動時,其啟動時所觸發的回調函數會被劃分為無用戶觸發類的入口函數,組件中的其他回調函數,以及其他應用軟件無法啟動的組件中所包含的回調函數,都會被劃分為用戶觸發類的入口函數。
在檢測組件界面中控件綁定的事件函數前,我們會先分析安卓操作系統的源碼,確定安卓操作系統中所有控件的事件函數簽名。檢測工具隨后使用soot[14]靜態分析工具對應用軟件進行解析,得到組件實現類中所包含的函數列表。檢測工具會對函數列表進行遍歷,并判斷列表中的函數簽名是否與控件的事件函數簽名一致,若一致則認為該函數為控件綁定的事件函數。
在檢測應用軟件中的HTTP server回調函數前,我們會整理HTTP server常見的實現方式以及對應的回調函數簽名。隨后檢測工具會利用soot靜態分析工具對應用軟件進行解析,來判斷應用軟件中是否有在使用HTTP server時所應具有的包名,進而判斷應用軟件是否使用了HTTP server。若應用軟件使用了HTTP server,則檢測工具會根據應用軟件所使用的HTTP server的類型,來檢測對應的回調函數。
在確定控制流圖中的指令發送語句時,安卓應用軟件可以采用多種方式發送網絡請求,因此為了快速確定相應的指令發送語句,檢測工具采用了動態分析與靜態分析相結合的方法。
在對應用軟件進行動態分析時,檢測工具會自動將應用軟件安裝于移動設備中并使其運行。檢測工具隨后利用運行于移動設備中的Xposed模塊[15],來獲取應用軟件運行時的主界面實現類的對象,并根據已獲取的入口函數列表,利用反射調用的方式觸發主界面實現類對象中的入口函數。由于界面中的入口函數還會啟動其他的應用軟件界面,因此該Xposed模塊可以模擬正常用戶的操作來啟動應用軟件為用戶提供的所有界面,并觸發該界面實現類中所包含的所有入口函數。Xposed模塊還對彈窗等需要用戶確認的界面進行處理,使得Xposed模塊也能模擬用戶的授權操作。對于Xposed模塊未啟動的界面,檢測工具會利用默認的參數將其啟動,并觸發其中的入口函數。Xposed模塊在觸發與應用軟件界面相關的入口函數時,還會利用視圖對象來獲取入口函數對應的界面布局屬性信息。
運行于移動設備中的Xposed模塊在觸發入口函數時,還會監測應用軟件所發送的網絡請求。在監測網絡請求時,檢測工具利用了運行于移動設備的抓包應用軟件[16],通過hook抓包應用軟件中的特定函數,實時獲取被檢測應用軟件所發送的網絡請求。由于管理應用軟件可能會具有本地管理的功能,因此檢測工具在觸發入口函數并監測網絡請求時,將移動設備直連被管理路由器網絡與非直連被管理路由器網絡的情況都進行了測試,并記錄了相應的網絡請求的內容。檢測工具通過對網絡請求的內容進行解析,最終獲取到了在觸發應用軟件的入口函數時,應用軟件所發送網絡請求的地址以及相應的參數。
在獲取到了入口函數對應的網絡請求后,檢測工具會將未能觸發網絡請求的入口函數進行排除。對于能觸發網絡請求的入口函數,利用全局控制流圖,從該函數的起始語句開始,來判斷控制流圖中的語句是否對相應網絡請求的參數進行了賦值,并使用了對應的網絡請求地址。若某條路徑對參數進行了賦值,并使用了對應的網絡請求地址,則將這一系列操作的最后一條語句作為管理指令發送的語句。
在得到了管理指令的發送語句,以及發送語句與入口函數的對應關系后,檢測工具還需要對入口函數進行聚類,以將同類管理功能在本地管理和遠程管理環境下的入口函數進行配對,從而進行后續的分析。
為了識別管理應用軟件的同類管理功能在本地管理與遠程管理環境下對應的入口函數,檢測工具根據同類管理功能通常具有相同或相似的界面布局的特點,利用在識別管理指令發送語句時Xposed模塊獲取的入口函數對應的界面布局屬性信息,對界面布局的屬性信息進行聚類[17],獲取界面布局相同或相似的入口函數組合。這些入口函數組合即為同類管理功能在本地管理和遠程管理環境下所對應的入口函數。同時這些入口函數組合所對應的控制指令參數即為同類管理功能在進行本地管理和遠程管理時所使用的參數。
在得到了管理指令的發送語句,以及確定了同類管理功能在不同管理環境下的入口函數組合后,檢測工具將指令發送語句設置為控制流圖執行路徑的終點語句,將入口函數的起始語句作為執行路徑的起點語句。檢測工具進而從終點語句開始,利用后向的程序切片技術[18],提取了從入口函數可達的執行路徑,并根據入口函數的組合結果將執行路徑標記為本地管理執行路徑或遠程管理執行路徑。
對于本地管理執行路徑和遠程管理執行路徑,如果其起點語句和終點語句相同,則檢測工具會根據Xposed模塊在運行時捕獲的運行路徑信息,將提取的執行路徑分為本地管理執行路徑和遠程管理執行路徑。
該模塊在得到了控制流圖的本地與遠程管理執行路徑后,會對無用戶觸發類的入口函數所對應的執行路徑進行分析,以檢測在對智能路由器發送控制指令前,應用軟件是否對調用者的權限進行了校驗。
該模塊在檢測執行路徑是否缺失權限校驗的算法如算法1所示。輸入為控制流圖的本地管理執行路徑與遠程管理執行路徑。算法先遍歷本地管理執行路徑中的分支節點,并判斷該節點是否也存在于遠程管理的執行路徑中,若存在則將該節點從本地管理與遠程管理的執行路徑中刪除。最后比較本地管理執行路徑和遠程管理執行路徑中的分支節點數量,若遠程管理執行路徑中的分支節點數量較少,則該路徑中存在潛在的權限校驗缺失的安全漏洞。
算法1check(localPath, remotePath)
輸入:控制流圖本地管理與遠程管理的執行路徑
輸出:遠程管理路徑是否缺失權限校驗
1 Function check(localPath, remotePath)
2 remoteCount<-remotePath.branchNodeNum
3 localCount<-localPath.branchNodeNum
4 if localCount=0 and remoteCount>0 then
5 return true
6 end if
7 for branchNode in localPath do
8 if branchNode in remotePath then
9 localPath.remove(branchNode)
10 remotePath.remove(branchNode)
11 end if
12 end for
13 remoteCount<-remotePath.branchNodeNum
14 localCount<-localPath.branchNodeNum
15 return remoteCount 16 end Function 在通過靜態分析的方法獲取到未進行權限校驗的執行路徑后,該模塊還采用動態分析的方法,對路徑對應的入口函數進行了觸發。在觸發時,該模塊不會對應用軟件觸發的彈框等涉及用戶授權的操作進行模擬。同時該模塊會監測應用軟件的網絡請求,以驗證僅通過觸發該入口函數,能否導致路由器控制指令的發送。 在通過入口函數聚類得到了應用軟件中同類管理功能在進行本地管理和遠程管理所使用的控制指令參數后,該模塊會對參數進行分析,以檢測本地及遠程管理執行路徑是否使用了相同數量的保護字段。 在進行參數一致性分析之前,我們通過對智能路由器管理應用軟件以及其他種類的應用軟件進行分析,發現應用軟件為了防止惡意攻擊者進行重放攻擊,都會在請求參數中設置保護字段,字段的值會定時進行改變。該模塊通過對控制指令的非空值參數進行檢測,得到了本地或遠程管理執行路徑所使用的保護字段的數量。如果某條執行路徑所使用的保護字段數量少于另外一條執行路徑,則認為該路徑存在安全漏洞。參數一致性分析的算法如算法2所示。 算法2check(localPath, remotePath) 輸入:控制流圖本地管理和遠程管理的執行路徑 輸出:具有安全漏洞的路徑 1 Function check(localPath, remotePath) 2 targetParams<-readFromConfig 3 count<-0 4 for param in localPath do 5 if param in targetParams then 6 count<-count+1 7 end if 8 end for 9 for param in remotePath do 10 if param in targetParams then 11 count<-count-1 12 end if 13 end for 14 if count>0 then 15 return remotePath 16 else if count<0 then 17 return localPath 18 end if 19 return none 20 end Function 表2展示了應用軟件進行本地管理以及遠程管理的參數示例。應用軟件在進行本地管理時,發送的指令中包含有token保護字段,并通過相關函數為token字段生成了值。而管理應用軟件在進行遠程管理時,卻并未調用相應的函數為token生成值,這就使得該遠程管理執行路徑的參數會被惡意攻擊者用來進行重放攻擊。 表2 管理路徑參數示例 在得到了保護字段缺失的控制指令參數以及相應的網絡請求地址后,該模塊還利用該參數進行了重放攻擊,以驗證安全漏洞的有效性。 選擇當前市場上銷售量靠前的多款智能路由器品牌,包括TP-Link智能路由器、華為智能路由器、D-Link智能路由器以及NETGEAR智能路由器作為檢測對象。同一個品牌的智能路由器通常都使用同一個管理應用軟件,因此我們無須考慮智能路由器的具體型號。從這些智能路由器品牌的官方網站下載了相應的管理應用軟件,其版本信息如表3所示。 表3 應用軟件版本信息 檢測工具在提取應用軟件中的執行路徑之前,需要先分析應用軟件中用戶觸發類與無用戶觸發類的入口函數的數量。檢測工具所檢測的四款智能路由器管理應用軟件的入口函數的數量如表4所示。 表4 入口函數數量 在獲取了管理應用軟件的入口函數后,檢測工具使用soot靜態分析工具獲取了應用軟件的全局控制流圖,并進而采用動態分析與靜態分析相結合的方法確定了控制流圖中執行路徑的終點。利用已確定的路徑終點,為應用軟件生成了控制流圖的執行路徑,還根據管理界面的聚類結果,將本地管理和遠程管理的執行路徑進行了對應。各智能路由器管理應用軟件所生成的執行路徑數量如表5所示,其中由于TP-Link智能路由器的管理應用軟件不支持本地管理的功能,因此其與本地管理相關的執行路徑數量均為0。 表5 執行路徑數量統計 檢測工具對無用戶觸發類的入口函數所對應的控制流圖執行路徑進行了檢測,以判斷執行路徑是否對路徑觸發者的權限進行了校驗。得到了未進行權限校驗的執行路徑后,分析執行路徑所觸發的網絡請求是否包含了敏感信息或進行了敏感操作。表6展示了對執行路徑進行權限校驗分析的結果。 表6 權限校驗分析結果 在對無權限校驗的執行路徑所觸發的網絡請求進行分析時,我們發現華為、D-Link與NETGEAR智能路由器的管理應用軟件在啟動時,會通過向同網段中特定的IP地址發送檢測數據包的方法來判斷管理環境,此過程會泄露智能路由器進行本地管理的用戶名和密碼。我們還發現TP-Link智能路由器的管理應用軟件會啟動HTTP server來運行插件,并且未對插件使用者的權限進行校驗。 檢測工具還對控制流圖的本地管理執行路徑與遠程管理執行路徑所觸發的網絡請求進行了分析,以檢測其使用的參數是否使用了相同數量的保護字段,主要檢測了token與csrf保護字段。若應用軟件控制流圖的本地與遠程管理執行路徑均未使用指定的保護字段,則認為執行路徑使用了其他的保護字段;若某條執行路徑使用的保護字段數量少于另外一條,則認為該條路徑存在安全漏洞。檢測中發現華為路由器的管理應用軟件在進行本地管理時,使用了csrf字段來防止重放攻擊;而在進行遠程管理時,管理應用軟件并未設置該字段的值,使得攻擊者可以對遠程管理的功能進行重放攻擊。 我們在對檢測工具檢測出的結果進行深入分析時,發現被檢測出的安全漏洞可以分為以下三類: (1) 插件權限校驗缺失的漏洞。TP-Link智能路由器的管理應用軟件在實現插件功能時,會啟動HTTP server并在其中運行插件網頁軟件。HTTP server在處理來自插件的請求時,并未對其身份進行校驗,這使得惡意攻擊者可以在未授權的情況下,直接使用插件網頁軟件所提供的功能,來對智能路由器的設置進行修改。利用TP-Link管理應用軟件的插件,惡意攻擊者可以限定管理員身份、控制無線設備的接入以及搭建虛擬服務器等。 (2) 環境檢測時密碼泄露的漏洞。華為、D-Link和NETGEAR智能路由器的管理應用軟件在啟動時,會給同網段中的特定IP地址發送檢測數據包,以檢測移動設備是否直連了被管理路由器的網絡。若攻擊者在未授權的情況下觸發了管理應用軟件的環境檢測功能,并偽裝成智能路由器對檢測數據包進行了響應,則可以竊取管理應用軟件所發送的路由器進行本地管理所使用的用戶名和密碼。 (3) 保護字段缺失的漏洞。華為智能路由器的管理應用軟件在進行本地管理和遠程管理時,所發送的參數具有不一致的保護字段。管理應用軟件在進行本地管理時,具有csrf保護字段,并給該字段設置了隨機值,而在進行遠程管理時,應用軟件并未給該字段設置隨機值,導致攻擊者可進行重放攻擊。 智能路由器的遠程管理應用軟件在實現遠程管理的功能時,會引入新的安全漏洞。本文通過對智能路由器遠程管理功能進行分析,設計并實現了檢測智能路由器遠程管理應用軟件安全漏洞的檢測工具。該工具生成了應用軟件的控制流圖,并從圖中提取出了本地管理路徑與遠程管理路徑。檢測工具通過分析管理路徑中是否進行了權限校驗,以及分析本地管理路徑與遠程管理路徑所使用的參數的一致性,來檢測智能路由器遠程管理應用軟件中所存在的安全漏洞。通過對TP-Link智能路由器、華為智能路由器、D-Link智能路由器以及NETGEAR智能路由器的遠程管理應用軟件進行分析,發現了多處安全漏洞。4.6 參數一致性分析

5 實驗與分析
5.1 測試對象與測試環境

5.2 路徑提取


5.3 權限校驗分析

5.4 參數一致性分析
5.5 案例分析
6 結 語