李建春,謝瑞云,張旭博
隨著物聯(lián)網(wǎng)、云計算等新一代信息技術(shù)的發(fā)展,互聯(lián)網(wǎng)的規(guī)模和應(yīng)用場景不斷擴(kuò)大和延伸。作為網(wǎng)絡(luò)通信中的中轉(zhuǎn)節(jié)點(diǎn)和傳輸媒介,路由器應(yīng)用日趨廣泛。它的安全性、健壯性決定了整個網(wǎng)絡(luò)的安全性和可靠性。
由于路由器在網(wǎng)絡(luò)通信中至關(guān)重要的地位和日益增長的數(shù)量,使得路由交換設(shè)備的安全性問題受到越來越多的關(guān)注。因此,借助管理手段,加強(qiáng)對路由器的安全管理變得尤為重要。在家用路由器中,一般采用web管理接口登錄的方式登錄管理路由器。這種方式方便快捷、便于操作,但背后存在著較大的安全隱患。攻擊者利用路由器系統(tǒng)中存在的漏洞及后門,可以獲得路由器的管理權(quán)限,對網(wǎng)絡(luò)安全造成了極大威脅。
本文提出了一種基于固件分析的路由器web頁面評估技術(shù),并利用此方法分析了D-link系列路由器web頁面漏洞。
路由器作為網(wǎng)絡(luò)層的一種互聯(lián)設(shè)備,是網(wǎng)絡(luò)中信息傳遞的中樞,在網(wǎng)絡(luò)通信中扮演著至關(guān)重要的作用。為了維護(hù)網(wǎng)絡(luò)中路由設(shè)備的正常運(yùn)作,網(wǎng)絡(luò)管理員經(jīng)常需要通過各種方式登錄路由器進(jìn)行相關(guān)配置和管理。
登錄管理路由器一般有以下5種方式[1],其特點(diǎn)如表1所示:
表1 路由器登錄管理方式對比
(1)使用串口管理路由器。通過路由器的console口,直接將路由器與計算機(jī)的串口相連,在計算機(jī)上運(yùn)行終端仿真軟件(例:windows操作系統(tǒng)的超級終端)登錄路由器,采用命令行的方式對路由器進(jìn)行管理。
(2)使用Telnet方式管理路由器。通過網(wǎng)絡(luò),利用路由器對Telnet服務(wù)的支持,在已知路由器接口IP地址的情況下,使用遠(yuǎn)程登錄方式訪問路由器。
(3)使用SSH方式管理路由器。Telnet因為采用明文發(fā)送口令和數(shù)據(jù),存在安全隱患,容易被人截獲。很多網(wǎng)絡(luò)設(shè)備都不開放Telnet服務(wù),而改用更安全的SSH方式。SSH是建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議,使用了多種加密和認(rèn)證方式,解決了傳輸數(shù)據(jù)加密和身份認(rèn)證的問題,以保證遠(yuǎn)程登錄管理路由器的安全。
(4)通過專門的網(wǎng)絡(luò)設(shè)備管理軟件管理路由器。一些大型路由器廠商為管理特定設(shè)備而開發(fā)和實現(xiàn)專門管理程序來管理設(shè)備。這種方式能夠最有效地管理特定的網(wǎng)絡(luò)設(shè)備。
(5)使用web方式管理路由器。通過網(wǎng)絡(luò),利用路由器對Http服務(wù)的支持,使用瀏覽器登錄到web用戶界面管理路由器。
在路由器中,使用嵌入式web服務(wù)器實現(xiàn)設(shè)備圖形化界面的遠(yuǎn)程登錄和管理。web服務(wù)器工作流程,如圖1所示。路由器內(nèi)嵌的web服務(wù)器,具有界面友好、操作方便的特點(diǎn)。但是,便捷的背后卻存在較大的安全隱患[2]。
圖1 嵌入式web服務(wù)器工作流程
通過流程分析可知,web方式登錄管理路由設(shè)備的安全威脅主要來自于兩方面:
(1)Http認(rèn)證過程。Http認(rèn)證通過明文方式實現(xiàn)且是基于一次性的口令保護(hù),容易在傳輸過程中被監(jiān)聽截獲。即使采用Https服務(wù)代替非加密的Http,為web服務(wù)器與HTML瀏覽器提供一個安全傳輸通道,也可通過某些降解方式被監(jiān)聽。
(2)路由器系統(tǒng)漏洞及后門。目前,路由設(shè)備的安全狀況不容樂觀,主要威脅來自于層出不窮的安全漏洞和后門。路由器發(fā)展到現(xiàn)在,其固件代碼的安全性并沒有像普通計算機(jī)。智能手機(jī)發(fā)展迅速,一些漏洞利用緩沖機(jī)制如NX、alsr、stackcanary等,沒有在路由器中大規(guī)模啟用,使得路由器的漏洞利用變得非常簡單。利用路由器的漏洞及后門,攻擊者可以獲取路由器的控制權(quán)限,從而監(jiān)聽、截獲及修改經(jīng)過該設(shè)備的所有用戶數(shù)據(jù),通過篡改路由器關(guān)鍵配置參數(shù),進(jìn)行網(wǎng)絡(luò)劫持和網(wǎng)絡(luò)釣魚攻擊,嚴(yán)重威脅個人用戶和企業(yè)單位的數(shù)據(jù)安全。攻擊者甚至可以利用大量被劫持的設(shè)備對整個網(wǎng)絡(luò)發(fā)起DDoS攻擊,從而威脅整個網(wǎng)絡(luò)的安全。
為了分析路由器web漏洞,常見的路由器評估方法有三種,即黑盒分析、白盒分析和灰盒分析[3]。
白盒分析。從代碼級別(可能是反匯編代碼、
反編譯的偽代碼或源代碼),通過動態(tài)調(diào)試或靜態(tài)反匯編,分析和理解程序的功能、邏輯,找到程序的安全問題等。
黑盒分析。從程序的外部,通過觀察程序運(yùn)行時的行為、規(guī)則等,猜測和斷定程序可能的實現(xiàn)方法,從而判斷是否存在脆弱點(diǎn)等。
灰盒分析。借助一些專有工具(可能需要自己編寫),如api監(jiān)視工具、陷阱工具、內(nèi)存比較工具、文件監(jiān)視工具等,對目標(biāo)程序進(jìn)行監(jiān)控,看其發(fā)生了什么操作、調(diào)用了哪些api、產(chǎn)生了哪些結(jié)果、在系統(tǒng)哪些地方安插了HOOK或過濾等,以此猜測和斷定程序可能的實現(xiàn)細(xì)節(jié)
本文提出的分析方法是基于白盒分析的一種方法。
基于固件分析的路由器安全評估技術(shù),在沒有源代碼的情況下,通過對固件進(jìn)行分析,獲取web應(yīng)用程序;對程序的行為、數(shù)據(jù)流進(jìn)行分析,獲取程序的功能、流程、規(guī)則及技術(shù)實現(xiàn)細(xì)節(jié)等。利用該技術(shù),可實現(xiàn)對web功能的安全評估,并可對其進(jìn)行優(yōu)化、功能增強(qiáng)和漏洞填補(bǔ)等,其中主要包含兩項技術(shù)。
動態(tài)調(diào)試。通過調(diào)試器對固件中的web應(yīng)用程序進(jìn)行追蹤分析,清楚了解程序運(yùn)行后的內(nèi)部狀態(tài)、運(yùn)算結(jié)果等信息。
靜態(tài)反匯編/反編譯工具。把程序變?yōu)榭勺x的匯編代碼或偽代碼,然后分析程序的結(jié)構(gòu)、流程和邏輯等。
路由器固件分析是指通過對固化在設(shè)備文件系統(tǒng)中可執(zhí)行程序進(jìn)行解析從而獲取設(shè)備的運(yùn)行機(jī)制和功能實現(xiàn)過程,有助于檢測設(shè)備中隱藏的安全漏洞,從而提高設(shè)備的安全性。固件分析流程如圖2所示。
圖2 路由器固件分析流程
(1)固件獲取。固件獲取通常采用兩種方式,一種是從路由器廠商提供的官方直接下載,本文所使用的D-link系列路由器固件就是通過這種方式獲取。二是針對其他無法從官網(wǎng)上直接下載的固件,采用以硬件接入的方式,通過UART串口,直接從路由器閃存中獲取。
(2)固件解包及文件系統(tǒng)提取。文件系統(tǒng)中包含路由器實現(xiàn)各種功能所依賴的全部可執(zhí)行程序和配置文件信息。這些信息對路由器固件的分析至關(guān)重要。然而,不同的路由器所使用的文件系統(tǒng)格式和文件系統(tǒng)的壓縮算法不盡相同,增加了文件系統(tǒng)提取的難度。文件系統(tǒng)提取一般采取兩種方式——手動提取和自動提取。自動提取是使用Binwalk這一全自動固件分析實現(xiàn)文件系統(tǒng)的提取[4]。Binwalk工具能夠自動識別固件中所包含的所有可識別的文件類型,然后遞歸提取。相比于手動提取方式,簡單地使用file命令識別文件類型。Binwalk利用libmagic動態(tài)庫獲取所有幻數(shù)簽名列表,分段掃描路由器固件文件的內(nèi)存鏡像,并對比列表判斷每一段是否含有文件幻數(shù)標(biāo)識,最后根據(jù)記錄的偏移量確定固件文件布局,具體算法流程如圖3所示。
圖3 Binwalk算法流程
(3)可執(zhí)行程序分析。在提取出固件的文件系統(tǒng)后,得到了一系列可執(zhí)行程序和配置文件信息。隨后,可以采用動態(tài)或靜態(tài)的方式對這些可執(zhí)行程序進(jìn)行分析。路由設(shè)備固件中,可執(zhí)行程序一般是編譯后的二進(jìn)制代碼。通過使用ida反編譯工具對可執(zhí)行代碼進(jìn)行反匯編。因為一般家用路由器采用的是MIPS架構(gòu),所以可以得到相應(yīng)的MIPS匯編代碼,然后解析匯編代碼,可生成函數(shù)之間的調(diào)用關(guān)系圖和函數(shù)內(nèi)部的控制流圖。對控制流圖中MIPS指令進(jìn)行語法分析和程序指令的語義分析,即可解析出程序中各函數(shù)的功能和執(zhí)行過程。
從D-link官網(wǎng)獲取DIR-100型路由器固件,使用Binwalk工具提取出固件的文件系統(tǒng),提取過程
及結(jié)果如圖4所示。據(jù)圖4結(jié)果顯示,成功從固件中提取出了Squashfs文件系統(tǒng)——squashfsroot。Squashfs是一種只讀格式的文件系統(tǒng),因其較高的壓縮率,被多種網(wǎng)絡(luò)設(shè)備所采用。
圖4 DIR-100型路由器文件系統(tǒng)提取過程及結(jié)果
在提取的文件系統(tǒng)中,可以發(fā)現(xiàn)許多實現(xiàn)路由器各種功能的可執(zhí)行程序。其中,webs程序作為控制路由器web頁面登錄的可執(zhí)行程序尤其引人關(guān)注。運(yùn)用IDA工具對webs程序進(jìn)行反匯編,得到了webs中各函數(shù)的調(diào)用關(guān)系圖,發(fā)現(xiàn)了一個與登錄驗證相關(guān)的自定義函數(shù)alpha_auth_check,其調(diào)用關(guān)系如圖5所示。
通過對alpha_auth_check函數(shù)控制流圖(如圖6所示)中的MIPS指令進(jìn)行進(jìn)一步分析,得出該函數(shù)從自定義函數(shù)alpha_httpd_parse_request中接收一個參數(shù)。
圖5 登錄驗證相關(guān)函數(shù)調(diào)用關(guān)系
圖6 alpha_auth_check函數(shù)控制流程
它是一個指向一個數(shù)據(jù)結(jié)構(gòu)體的指針,里面有一個字符串指針,會指向從Http請求里接收到的各種數(shù)據(jù),如Http頭信息和請求地址URL,參數(shù)存儲在寄存器$s2中;然后再將接收到的參數(shù)進(jìn)行字符串strcmp比較操作,調(diào)用check_login函數(shù),實際上就是身份驗證檢查。如果一旦有字符串比較成功或check_login成功,它會返回1;否則,它會重定向瀏覽器到登錄頁,返回-1。因此,如果字符串比較成功,就能夠跳過身份驗證直接登錄到路由器的web頁面。
按照2.2中所述流程,分別提取出D-link系列DI-524UP、DI-604+、DI-604UP及 TM-G5240等幾款路由器多型固件版本文件系統(tǒng)。發(fā)現(xiàn)各型固件文件系統(tǒng)中都是由可執(zhí)行程序webs提供路由器管理員界面操作功能。將webs程序二進(jìn)制文件加載到IDA中進(jìn)行分析,得到可執(zhí)行程序中各功能函數(shù)調(diào)用關(guān)系圖。它與3.1中DIR-100型路由器webs程序函數(shù)調(diào)用圖類似,認(rèn)證功能都是由自定義函數(shù)alpha_auth_check實現(xiàn)的。
在深入分析各型路由器較早版本固件中alpha_auth_check函數(shù)控制流圖后發(fā)現(xiàn),在調(diào)用后續(xù)函數(shù)進(jìn)行身份認(rèn)證前,都會從自定義函數(shù)alpha_httpd_parse_reques中接收到的參數(shù)同固定字符串“xmlset_roodkcableoj28840ybtide”做字符串比較操作,比較操作控制流程如圖7所示。如果比對成功,將會跳過接下來的身份認(rèn)證過程直接登錄到路由器web管理界面。
圖7 D-link系列路由器特殊字符串比較過程
在對D-link系列路由器不同型號固件對比分析的基礎(chǔ)上,針對各型路由器不同版本固件進(jìn)行對比分析,分析結(jié)果如表2所示。
表2 D-link系列各型路由器固件對比
從表2的對比結(jié)果可以發(fā)現(xiàn),更新前后的固件差異主要體現(xiàn)在兩方面。一方面是新固件自定義認(rèn)證函數(shù)中沒有Http頭信息、請求地址URL等參數(shù)傳遞,另一方面新固件中也沒有特殊字符串的比較過程。
如圖8所示,一方面在alpha_httpd_parse_request函數(shù)跳轉(zhuǎn)到alpha_auth_check的過程,老版本固件中可以看到alpha_auth_check函數(shù)接收了一個參數(shù)。它是一個指向一個數(shù)據(jù)結(jié)構(gòu)體的指針,里面有一個char*指針會指向從Http請求中接收到的各種數(shù)據(jù)。比如,Http頭信息和請求地址URL,參數(shù)存儲在寄存器$s2中。此處,最大的區(qū)別在于更新后的固件在跳轉(zhuǎn)過程中沒有包含Http頭信息和請求地址URL信息的參數(shù)傳遞到alpha_auth_check函數(shù),即Http頭信息、請求地址URL等信息不再作為校驗的依據(jù)。
圖8 alpha_httpd_parse_request函數(shù)中的alpha_auth_check函數(shù)
如圖9所示,另一方面,通過使用Biniff二進(jìn)制文件比較工具對比更新前后固件中認(rèn)證函數(shù)控制流圖后發(fā)現(xiàn),更新后固件刪去了對特殊字符串的比較驗證,而在老版本中正是通過將Http頭信息和請求地址URL中所包含的User-Agent值與特殊字符串進(jìn)行比較。一旦比對成功,將跳過后續(xù)的身份認(rèn)證。而固件的更新也正是主要通過對上述webs可執(zhí)行程序中上述兩方面內(nèi)容進(jìn)行的修改,從而修補(bǔ)了老版本固件中存在的驗證繞過后門的情況。
圖9 alpha_auth_check函數(shù)更新前后對比
本文首先分析了路由器的多種登錄方式和web頁面登錄所面臨的安全威脅,然后介紹了常見的評估方法和技術(shù)流程,并在此基礎(chǔ)上提出了基于固件分析的路由web安全評估方法,且利用該方法對D-link系列多款路由器進(jìn)行了安全評估,發(fā)現(xiàn)了其存在的web頁面漏洞。最后,通過對比分析驗證了該方法的可行性和有效性。該方法可用于安全廠商或者安全評估人員對路由器的安全評估和分析,以提高路由產(chǎn)品的安全防護(hù)能力。
[1] 夏虹.路由器的登錄訪問與安全[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2008(02):32-33.XIA Hong.Logon Access and Security of Routers[J].Network Security Technology and Application,2008(02):32-33.
[2] 夏暄.基于嵌入式Linux的無線寬帶SOHO路由器的設(shè)計與實現(xiàn)[D].蘇州:蘇州大學(xué),2008.XIA Xuan.The Design and Implementation of Wireless Wideband SOHO Router Based on Embadded Linux[D].Suzhou:Soochow University,2008.
[3] 陳銘.軟件漏洞逆向分析技術(shù)研究[D].成都:電子科技大學(xué),2007.CHEN Ming.Research on Reverse Analysis of Software Vulnerabilities[D].Chengdu:University of Electronic Science and Technology of China,2007.
[4] 吳少華.揭秘家用路由器0day漏洞挖掘技術(shù)[M].北京:電子工業(yè)出版社,2015.WU Shao-hua.Disclosure of 0day Vulnerabilities in Home Routers[M].Beijing:Publishing House of Electronics Industry,2015.