何長鵬
(甘肅政法大學(xué)公安技術(shù)學(xué)院,甘肅蘭州 730070)
隨著移動互聯(lián)網(wǎng)的迅猛發(fā)展,互聯(lián)網(wǎng)的影響正逐步從消費(fèi)領(lǐng)域向傳統(tǒng)的社會核心領(lǐng)域滲透,并逐漸向產(chǎn)業(yè)互聯(lián)網(wǎng)轉(zhuǎn)型。產(chǎn)業(yè)互聯(lián)網(wǎng)時(shí)代的到來,把人類帶入了智能時(shí)代。以智能手機(jī)為代表的智能終端設(shè)備是移動互聯(lián)網(wǎng)的入口設(shè)備,它們不僅具有傳統(tǒng)的通訊功能,還具有和個(gè)人計(jì)算機(jī)類似的功能,體積小、可穿戴、攜帶方便等諸多優(yōu)點(diǎn)。由于移動設(shè)備包含大量敏感的個(gè)人信息,電子商務(wù)、移動支付等業(yè)務(wù)涉及錢財(cái)交易,使得惡意攻擊者往往選擇移動互聯(lián)網(wǎng)作為攻擊目標(biāo)。一方面智能終端設(shè)備的操作系統(tǒng)和應(yīng)用程序存在大量的安全漏洞,以及一些移動惡意軟件的出現(xiàn),導(dǎo)致移動互聯(lián)網(wǎng)的安全形勢更加嚴(yán)峻。另一方面,終端用戶接入網(wǎng)絡(luò)變的容易,人們所生活的環(huán)境中到處都有WiFi熱點(diǎn)。
智慧城市、智慧校園以及智慧家庭都離不開小型的SOHO無線路由器,SOHO無線接入路由器作為家庭和中小型辦公環(huán)境中普及度極高的網(wǎng)絡(luò)接入設(shè)備,它的安全影響著整個(gè)互聯(lián)網(wǎng)的安全。然而SOHO無線路由器的安全問題往往會被人們所忽略,研究者們關(guān)注的重點(diǎn)是大型骨干路由交互設(shè)備漏洞攻擊技術(shù),針對SOHO無線接入路由交換設(shè)備的軟硬件漏洞挖掘分析研究較少[1-4]。
據(jù)調(diào)查研究發(fā)現(xiàn),大部分對于智能手機(jī)等終端設(shè)備的入侵,其源頭是攻擊者從小型無線接入路由器進(jìn)行滲透,進(jìn)而控制用戶的手機(jī)從而竊取用戶隱私數(shù)據(jù)、獲取賬號密碼信息、實(shí)施網(wǎng)絡(luò)劫持和網(wǎng)絡(luò)釣魚等攻擊行為[5]。因此,針對普通的、小型的SOHO無線接入路由器的安全漏洞挖掘及漏洞相關(guān)攻防技術(shù)的研究具有重要的意義和必要性。
安全漏洞[6]是指信息系統(tǒng)在設(shè)計(jì)、實(shí)現(xiàn)或者運(yùn)行管理過程中存在的缺陷或不足,從而使攻擊者能夠在未授權(quán)的情況下利用這些缺陷破壞系統(tǒng)的安全策略,它是研究安全問題的生命線,是網(wǎng)絡(luò)攻擊和防御的核心問題。漏洞挖掘是指采用一定的信息技術(shù)方法去發(fā)現(xiàn)、分析和利用信息系統(tǒng)中漏洞的過程。漏洞挖掘技術(shù)分為白盒測試、黑盒測試、灰盒測試三種類型,其區(qū)別是由測試者所得到的資源決定的[7]。傳統(tǒng)漏洞挖掘的目標(biāo)對象僅僅針對軟件系統(tǒng)本身,但目前越來越多的人開始關(guān)注存在于電子設(shè)備硬件電路或固件系統(tǒng)中的漏洞,不再局限于軟件本身[4]。
近些年來,出現(xiàn)了大量的漏洞挖掘系統(tǒng),也涌現(xiàn)了種類繁多的挖掘技術(shù)及方法[1-3,7-9],但一直以來很少有研究者去探索和研究SOHO無線路由器存在的漏洞,挖掘分析SOHO無線路由的漏洞,找出對應(yīng)的防護(hù)策略。SOHO無線路由器作為一臺嵌入式微型計(jì)算機(jī),存在各種類型的漏洞,包括身份脆弱性漏洞、Web配置界面漏洞、緩沖區(qū)溢出漏洞和固有后門型漏洞等[10]。在遭受攻擊者針對漏洞和后門的攻擊時(shí)卻缺少有效的防御手段。
人們通常依據(jù)分析對象維度,把漏洞挖掘分為基于源代碼和基于可執(zhí)行代碼的挖掘,這就定義了一個(gè)相對狹義的漏洞挖掘?qū)ο蠓懂?,即只針對軟件系統(tǒng)的漏洞挖掘[8]。從漏洞的分析角度,將無線路由器系統(tǒng)漏洞分為軟硬件漏洞、設(shè)備運(yùn)行的協(xié)議漏洞以及配置管理漏洞三類是較為合理的[4]。
目前,廣泛應(yīng)用的漏洞挖掘技術(shù)主要分為兩大類[4]:一是靜態(tài)代碼審計(jì);二是模糊測試[8,11,12](Fuzzing)。模糊測試是一種介于完全的手工滲透測試與完全的自動化測試之間的安全性黑盒測試類型,與靜態(tài)代碼審核相比,模糊測試有許多的優(yōu)點(diǎn)[13]。模糊測試通過向目標(biāo)程序發(fā)送大量的畸形數(shù)據(jù),以觸發(fā)異常崩潰來發(fā)現(xiàn)程序潛在的漏洞[14]。模糊測試中測試用例的有效性是發(fā)現(xiàn)協(xié)議或系統(tǒng)未知漏洞的關(guān)鍵。文獻(xiàn)[15]通過深度學(xué)習(xí)方法省略了傳統(tǒng)網(wǎng)絡(luò)協(xié)議漏洞挖掘過程中的人工對網(wǎng)絡(luò)協(xié)議的分析。
文獻(xiàn)[3,4]認(rèn)為設(shè)備的逆向剖析及代碼抽取、仿真成為挖掘的基礎(chǔ)。漏洞挖掘重要的前提之一是要能夠識別、提取、分析和運(yùn)行設(shè)備中的代碼,而這些代碼在研究過程的測試必須是一個(gè)能夠滿足漏洞挖掘需求的仿真環(huán)境或一個(gè)在線的真實(shí)環(huán)境。然而,生活中接觸到大量的網(wǎng)絡(luò),漏洞挖掘必須面對種類繁多的硬件設(shè)備和軟件系統(tǒng)對于設(shè)備的逆向剖析,并從中抽取代碼,提供仿真、調(diào)試和分析環(huán)境成為洞挖掘必須要做的重要的基礎(chǔ)工作[16]。
因此,本文將重點(diǎn)研究家用路由交互設(shè)備所面臨的安全問題,挖掘分析路由設(shè)備運(yùn)行的固件和協(xié)議漏洞。通過搭建真實(shí)運(yùn)行環(huán)境,分析SOHO接入無線路由器體系架構(gòu)、固件、運(yùn)行環(huán)境等,實(shí)現(xiàn)對網(wǎng)路協(xié)議安全漏洞掃描分析,并根據(jù)挖掘的漏洞研究相應(yīng)的防護(hù)技術(shù)。
SOHO無線寬帶路由器作為一種嵌入式設(shè)備,硬件部分通常選擇支持ARM或MIPS體系架構(gòu)的微處理器,系統(tǒng)軟件部分則基于Linux內(nèi)核定制裁剪以后進(jìn)行移植[17]。上層軟件架構(gòu)是主要包括:路由模塊、防火墻模塊以及用戶遠(yuǎn)程管理模塊。SOHO無線路由設(shè)備作為一種嵌入式設(shè)備,包含文件系統(tǒng)在內(nèi)的核心內(nèi)容均以固件的形式存儲在閃存(Flash)中[3]。固件通常為二進(jìn)制數(shù)據(jù)流文件,包括固件頭部、引導(dǎo)程序、內(nèi)核鏡像、文件系統(tǒng)等幾部分。固件的核心內(nèi)容是文件系統(tǒng),其中包含全部的可執(zhí)行程序、配置文件等信息。文件系統(tǒng)提取的方法較多,除了手動提取外,還可以利用一些現(xiàn)有的比較優(yōu)秀的工具,比如Binwalk、Firmware-analysis-toolkit等。Binwalk可以協(xié)助安全人員從固件鏡像文件中提取數(shù)據(jù)及進(jìn)行逆向工程。
為了實(shí)現(xiàn)SOHO路由器的漏洞挖掘分析,本文參考文獻(xiàn)[4]提供的方法搭建運(yùn)行環(huán)境。與文獻(xiàn)[4]不同之處本文建立了真實(shí)的Linux運(yùn)行環(huán)境,安裝配置模擬處理器軟件QEMU、交互式反匯編編譯工具IDA Pro以及MIPS交叉編譯環(huán)境。其中,模擬處理器軟件QEMU具有高速及跨平臺的特性,能模擬真實(shí)計(jì)算機(jī)的速度;IDA Pro具備強(qiáng)大的腳本功能,實(shí)現(xiàn)漏洞自動化分析,支持用戶快速開發(fā)Python腳本程序來驗(yàn)證發(fā)掘的漏洞;配置MIPS交叉編譯環(huán)境,方便后期shellcode的編譯執(zhí)行。
模糊測試的理論和應(yīng)用都已經(jīng)比較成熟,基于模糊測試方法實(shí)現(xiàn)的工具種類也很多,比如SPIKE、Sulley、AFL、Burp Suit和ClusterFuzz等。模糊測試中生成有效的測試數(shù)據(jù)至關(guān)重要,可以利用測試用例設(shè)計(jì)、隨機(jī)生成輸入、人工協(xié)議變異、自動協(xié)議生成等方法來建立測試集。測試用例設(shè)計(jì)的好壞直接影響測試的效果,使用各種不同的測試用例對目標(biāo)進(jìn)行測試,通過監(jiān)測目標(biāo)執(zhí)行情況來發(fā)現(xiàn)漏洞。
隨機(jī)生成輸入則需要考慮如何生成隨機(jī)但有效的輸入。人工協(xié)議變異需要測試工程師能夠通過自己豐富的工作經(jīng)驗(yàn)針對測試目標(biāo)協(xié)議生成有效的測試數(shù)據(jù)。自動協(xié)議生成協(xié)議在理解測試程序的協(xié)議規(guī)約和文件格式的前提下,通過識別數(shù)據(jù)包或者文件中的靜態(tài)和動態(tài)部分來創(chuàng)建一個(gè)描述協(xié)議如何工作的語法模板,之后測試工具動態(tài)解析這些語法模板,進(jìn)行改變數(shù)值變量來生成測試數(shù)據(jù)。根據(jù)目標(biāo)對象的特點(diǎn)和挖掘工作的一般流程,需要考慮如何能夠?qū)δ繕?biāo)程序監(jiān)控以保證及時(shí)發(fā)現(xiàn),定位目標(biāo)程序錯誤。模糊測試是一種黑盒測試方法,如果盲目地進(jìn)行測試效率低下。因此,本文選擇以D-Link無線路由器為研究對象,根據(jù)信息安全漏洞共享平臺發(fā)布的安全公告,選擇一個(gè)可利用的安全漏洞來說明設(shè)計(jì)的模糊測試方法的可行性。
通常無線路由器漏洞的分析與利用的關(guān)鍵環(huán)節(jié)包括獲取固件、提取文件系統(tǒng)、漏洞分析與利用以及漏洞挖掘等幾個(gè)階段[4]。固件獲取的方法可以手工提取,也可以從路由器廠商專門的技術(shù)支持網(wǎng)站下載。一般情況下可以從路由器廠商獲取可用的固件,但是在廠商沒有提供固件下載時(shí),就需要手工來提取。
手工提取主要是通過路由器硬件提供的接口將計(jì)算機(jī)與主板連接,從路由器的Flash中提取固件。手工提取方法要求安全人員熟悉與路由器硬件相關(guān)的基礎(chǔ)知識,操作難度較大。因此,如果能獲取到廠商提供的固件,就可以降低漏洞挖掘的難度。從D-Link技術(shù)服務(wù)網(wǎng)站獲取到了相應(yīng)的固件文件,并使用Binwalk從固件中提取出了文件系統(tǒng)。接下來使用QEMU運(yùn)行無線路由器中的應(yīng)用程序,但出現(xiàn)應(yīng)用程序運(yùn)行失敗的情況,需要利用IDA Pro動態(tài)調(diào)試和靜態(tài)反匯編對函數(shù)代碼進(jìn)行分析,編寫劫持函數(shù)動態(tài)庫來修復(fù)路由器運(yùn)行環(huán)境。
上述內(nèi)容已完成漏洞挖掘分析前期準(zhǔn)備工作,接下來詳細(xì)介紹設(shè)計(jì)基于模糊測試方法的漏洞挖掘分析過程?;谀:郎y試方法實(shí)現(xiàn)的工具種類很多,其中Sulley是一款使用Python語言開發(fā)的專用于網(wǎng)絡(luò)協(xié)議的模糊測試框架,其設(shè)計(jì)目標(biāo)是為了簡化數(shù)據(jù)生成,簡化與目標(biāo)系統(tǒng)之間的數(shù)據(jù)傳輸,以及目標(biāo)系統(tǒng)的監(jiān)控,給用戶提供友好的API編程接口。
本文研究的目標(biāo)是挖掘分析SOHO無線路由器通信協(xié)議、應(yīng)用服務(wù)方面的潛在漏洞。因此,參考文獻(xiàn)[18]給出的基于Sulley改進(jìn)的工控協(xié)議模糊測試架構(gòu)設(shè)計(jì)思路,同樣設(shè)計(jì)了基于Sulley的SOHO無線路由器進(jìn)行模糊測試的方法。首先根據(jù)通信協(xié)議類型來自定義請求。通信協(xié)議類型發(fā)現(xiàn)通常可以采用一些高級算法的智能協(xié)議分析理論和工具。由于SOHO接入無線路由器廣泛使用HTTP、HTTPS應(yīng)用層協(xié)議和D-Link MYDLINK云協(xié)議,并且從已發(fā)布的漏洞公告可知上述三種協(xié)議存在安全漏洞。因此,本文僅針對這三種協(xié)議進(jìn)行模糊測試,降低了挖掘分析難度,但是缺乏普遍性。
在基于模糊測試的漏洞挖掘分析中,測試用例的設(shè)計(jì)至關(guān)重要,好的測試用例可以提高漏洞挖掘的效率。構(gòu)造測試用例時(shí),不應(yīng)該局限于邊界附近區(qū)域的數(shù)據(jù),而是分析在該協(xié)議中有哪些位置可能成為模糊測試的數(shù)據(jù)輸入點(diǎn),以此來構(gòu)建輸入矩陣。輸入矩陣盡可能包含引起程序奔潰的各種輸入向量。然后編寫適合模糊測試器讀取并產(chǎn)生測試用例的腳本文件,之后測試的過程就可以通過自動化方式進(jìn)行。測試腳本文件中實(shí)現(xiàn)各個(gè)請求的導(dǎo)入,會話管理以及設(shè)置代理參數(shù)等。
其次使用QEMU啟動MIPS系統(tǒng)并完成網(wǎng)絡(luò)配置以后,執(zhí)行Sulley網(wǎng)絡(luò)監(jiān)視代理和進(jìn)程監(jiān)視代理模塊,開始監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)包的傳輸和監(jiān)視測試目標(biāo)程序的運(yùn)行情況。
最后開始運(yùn)行測試腳本,此時(shí)Sulley會生成一個(gè)有向無環(huán)會話圖,Sulley模糊測試器將遍歷整個(gè)會話圖。在整個(gè)測試腳本執(zhí)行過程中,網(wǎng)絡(luò)監(jiān)視代理和進(jìn)程監(jiān)視代理模塊會分別記錄測試用例的發(fā)送順序編號,并將這些測試用例保存在特定為文件夾中。如果有測試用例導(dǎo)致目標(biāo)程序出錯或者異常,進(jìn)程監(jiān)視代理模塊就會反饋給測試系統(tǒng)一個(gè)高層信息,并且將錯誤信息記錄到測試日志中,事后調(diào)出引起錯誤的測試用例并查看錯誤信息。
一旦確定被檢測目標(biāo)出錯或者異常,則需要確定所發(fā)現(xiàn)的漏洞是否重現(xiàn)。漏洞重現(xiàn)成功之后,還需要進(jìn)一步判斷該漏洞是否可以利用。在上一步的模糊測試過程中模糊器捕獲并保存了幾個(gè)異常情況的網(wǎng)絡(luò)交互過程數(shù)據(jù)包。通過對D-Link系列SOHO無線接入路由器相關(guān)歷史漏洞的檢索,發(fā)現(xiàn)這些異常情況可能是由函數(shù)引起的緩沖區(qū)溢出。因此,需要進(jìn)一步根據(jù)異常數(shù)據(jù)來編寫驗(yàn)證腳本驗(yàn)證猜測是否正確。
從已知漏洞公告可知,漏洞產(chǎn)生的可能原因是HTTP協(xié)議的POST參數(shù)中名為“password”參數(shù)過長導(dǎo)致的。因此,在構(gòu)造完成HTTP請求的地址之后,設(shè)置POST參數(shù),使用urllib庫提供的urlencode()函數(shù)偽造超長的參數(shù),接著發(fā)起HTTP連接請求。從Boa服務(wù)器反饋的結(jié)果來看,程序運(yùn)行異常情況與模糊測試捕獲到的異常情況相同,并查看當(dāng)前堆棧情況,偽造的超長的“password”參數(shù)覆蓋了部分內(nèi)存地址,導(dǎo)致程序執(zhí)行出現(xiàn)異常,驗(yàn)證了此緩沖區(qū)溢出漏洞可以被利用。
緩沖區(qū)溢出漏洞的利用通常是攻擊者根據(jù)漏洞特征編寫基于MIPS指令系統(tǒng)的shellcode,劫持程序正常執(zhí)行流程,使程序跳轉(zhuǎn)到攻擊者注入的shellcode執(zhí)行任務(wù)。SOHO無線接入路由器為了防止惡意代碼攻擊,在系統(tǒng)當(dāng)中啟用了數(shù)據(jù)執(zhí)行保護(hù)技術(shù),因此攻擊者提前需要構(gòu)建一個(gè)特殊的輸入向量以填充函數(shù)的??臻g,利用ROP Chain[1,4]將原有的各個(gè)gadget代碼片段按照順序拼接起來,最終完成復(fù)雜的功能。
現(xiàn)如今,互聯(lián)網(wǎng)技術(shù)已經(jīng)深入滲透到了各行各業(yè),互聯(lián)網(wǎng)作為社會經(jīng)濟(jì)產(chǎn)業(yè)的支撐點(diǎn),面臨著巨大的網(wǎng)絡(luò)安全風(fēng)險(xiǎn)。SOHO無線接入路由器作為互聯(lián)網(wǎng)的入口,它的安全會影響到整個(gè)互聯(lián)網(wǎng)的安全。因此,有必要針對無線接入路由設(shè)備的安全開展研究,重點(diǎn)分析挖掘潛在的一些安全漏洞,并針對這些安全漏洞提出相應(yīng)的防護(hù)技術(shù)。
基于上述目的,本文針對SOHO無線路由設(shè)備的網(wǎng)絡(luò)協(xié)議進(jìn)行漏洞挖掘,提出一種基于Sulley模糊測試的漏洞挖掘分析框架,可實(shí)現(xiàn)安全協(xié)議漏洞自動掃描分析。該方法僅對已知的網(wǎng)絡(luò)安全漏洞進(jìn)行挖掘分析,驗(yàn)證了其設(shè)計(jì)的有效性,并未深入挖掘分析未知的一些安全漏洞。因此,未來需要將此方法應(yīng)用于不同種類的無線路由器,深入挖掘分析這些無線路由設(shè)備潛在的一些安全漏洞。