田澤軼,彭設(shè)強(qiáng),吳志勇
(1,2國(guó)防信息學(xué)院信息安全教研室,武漢,430010;3總參第五十四研究所,北京,102200)
基于DOM結(jié)構(gòu)的分布式IE瀏覽器漏洞挖掘探究
田澤軼1,彭設(shè)強(qiáng)2,吳志勇3
(1,2國(guó)防信息學(xué)院信息安全教研室,武漢,430010;3總參第五十四研究所,北京,102200)
采用基于DOM樹結(jié)構(gòu)動(dòng)態(tài)執(zhí)行的IE瀏覽器漏洞挖掘方法,設(shè)計(jì)并實(shí)現(xiàn)了分布式IE漏洞挖掘器,并闡述該挖掘器的原理。測(cè)試發(fā)現(xiàn)了IE的50類漏洞。
IE瀏覽器;模糊測(cè)試;DOM樹
軟件漏洞成為威脅隱私,損害利益的重要因素。這些軟件中,瀏覽器占據(jù)非常重要的位置。Internet Explorer瀏覽器長(zhǎng)期占有全球最高的瀏覽器市場(chǎng)份額,從2014年1月到5月IE8.0占有市場(chǎng)份額33.67%,IE成為市場(chǎng)上使用量最大的瀏覽器。
IE漏洞危害巨大,高危的IE漏洞如CVE-2013-0027,CVE-2014-1770等,微軟官方常常不能做到及時(shí)更新補(bǔ)丁,保證用戶的安全。IE漏洞的另一個(gè)特點(diǎn)是難以發(fā)現(xiàn),對(duì)此微軟設(shè)立了專門的獎(jiǎng)金,鼓勵(lì)全世界的人幫助它完成漏洞的挖掘工作。
IE瀏覽器的漏洞挖掘,能夠極大的避免受到漏洞的波及和影響,提高系統(tǒng)的安全性和穩(wěn)定性。
1.1 模糊測(cè)試思想
模糊測(cè)試是當(dāng)前業(yè)界最普遍的軟件漏洞測(cè)試方案。旨在通過無(wú)規(guī)律的用戶輸入或者文件輸入,程序?qū)μ幚磉@類的任一數(shù)據(jù)產(chǎn)生錯(cuò)誤,從而出現(xiàn)系統(tǒng)沖突,死鎖甚至死機(jī),重啟等情況,則認(rèn)定軟件產(chǎn)生了exception,觸發(fā)了漏洞。
模糊測(cè)試以正常的文件模板為基礎(chǔ),按照一定規(guī)則產(chǎn)生一批畸形文件,使目標(biāo)軟件執(zhí)行,用監(jiān)控器進(jìn)行檢測(cè),觀察軟件是否產(chǎn)生異常,并記錄軟件產(chǎn)生exception的測(cè)試用例、以及寄存器,棧狀態(tài)等信息,工作人員檢查,漏洞是否可重現(xiàn),可利用。常用的模糊測(cè)試工具有Peach,Sulley和Spike。
1.2IE模糊測(cè)試的傳統(tǒng)方法
IE瀏覽器具有了除網(wǎng)頁(yè)瀏覽的查看PDF,JPG,支持web應(yīng)用等新功能,這為IE的測(cè)試提供了新的思路。我們先做了基于PDF的Peach框架下的IE Fuzzing實(shí)驗(yàn)。在編寫針對(duì)PDF的XML解析文件之后,在10個(gè)Peach節(jié)點(diǎn)上進(jìn)行Fuzzing實(shí)驗(yàn),同時(shí)對(duì)Sulley,Spike等多個(gè)測(cè)試框架均做了實(shí)驗(yàn),最終均未發(fā)現(xiàn)IE漏洞。
1.3傳統(tǒng)模糊測(cè)試方法的弊端
經(jīng)研究發(fā)現(xiàn)傳統(tǒng)的模糊測(cè)試未針對(duì)IE瀏覽器做定制,未體現(xiàn)瀏覽器的特性。瀏覽器加載測(cè)試樣本文件后,執(zhí)行過程是唯一的,極大的消減了瀏覽器的動(dòng)態(tài)執(zhí)行的特性。
經(jīng)過大量的分析和設(shè)計(jì),我們提出了基于DOM樹的Fuzzing方式,即基于語(yǔ)法的動(dòng)態(tài)執(zhí)行的模糊測(cè)試。
2.1DOM樹對(duì)IE模糊測(cè)試的意義
DOM是Document Object Model,是一種與瀏覽器,平臺(tái),語(yǔ)言無(wú)關(guān)的接口,HTML文件對(duì)應(yīng)DOM樹,通過操縱DOM元素,可以構(gòu)造,重現(xiàn)HTML文件。我們使用JavaScript語(yǔ)言,將測(cè)試用例構(gòu)造成為在內(nèi)存中生成的DOM文件,并操縱IE加載DOM文件中的元素,將IE的執(zhí)行隨機(jī)化?;镜牧鞒倘鏔igure 1所示。
Figure 1 DOM樹Fuzzing總體設(shè)計(jì)
2.2基于DOM樹的模糊測(cè)試實(shí)現(xiàn)
將DOM元素名稱,可以賦值的數(shù)據(jù),可以使用的Style數(shù)據(jù)進(jìn)行整理存入數(shù)據(jù)集合中。在原始DOM樹的創(chuàng)建中,隨機(jī)選擇DOM節(jié)點(diǎn)元素,并使它隨機(jī)成為DOM樹的某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),建立一顆DOM樹。對(duì)其屬性進(jìn)行隨機(jī)選擇,隨機(jī)賦值,賦值的選擇范圍即已存在的隨機(jī)數(shù)據(jù)集合。對(duì)樣式進(jìn)行隨機(jī)選擇和賦值。對(duì)于event事件,從事件列表中隨機(jī)選擇一項(xiàng)添加到該節(jié)點(diǎn)。
然后對(duì)DOM樹的結(jié)構(gòu)進(jìn)行調(diào)整,隨機(jī)選擇DOM節(jié)點(diǎn)(稱為A節(jié)點(diǎn)),然后基于隨機(jī)選擇的DOM元素范圍(稱為R),調(diào)整全部基于JS函數(shù)實(shí)現(xiàn),具體方式有:①直接刪除R,②折疊R,③將R變成A節(jié)點(diǎn)的子樹,④將R設(shè)置為A和A的所有子孫節(jié)點(diǎn)這段范圍,⑤將R設(shè)置為A的所有子孫節(jié)點(diǎn)這段范圍,⑥將A插入R的開始,⑦將A之后的節(jié)點(diǎn)設(shè)置為R的起始節(jié)點(diǎn),⑧將A之前的節(jié)點(diǎn)設(shè)置為R的起始節(jié)點(diǎn),⑨將A之后的節(jié)點(diǎn)設(shè)置為R的結(jié)束節(jié)點(diǎn),⑩將A之前的節(jié)點(diǎn)設(shè)置為R的結(jié)束節(jié)點(diǎn)。調(diào)整之后的遍歷,首先隨機(jī)選擇一個(gè)節(jié)點(diǎn)作為遍歷的起始節(jié)點(diǎn),然后以該節(jié)點(diǎn)開始生成迭代器,向前或向后遍歷依然隨機(jī)化處理。
對(duì)DOM元素進(jìn)行Fuzzing,實(shí)際就是對(duì)它加載到IE瀏覽器解析執(zhí)行的過程。在加載之前,將DOM元素當(dāng)前的屬性改變賦值,具體的方式有:①改變?yōu)閚ull,②改變?yōu)轭A(yù)設(shè)好的可選數(shù)值中的任意一個(gè),③改變?yōu)樗母腹?jié)點(diǎn)的某屬性值,④改變?yōu)樗淖庸?jié)點(diǎn)的某屬性值,⑤改變?yōu)樵揇OM樹中隨機(jī)的一個(gè)節(jié)點(diǎn)的屬性值。
最后使用JS的Eval()函數(shù)將DOM元素加載入瀏覽器并執(zhí)行。當(dāng)監(jiān)控器發(fā)現(xiàn)瀏覽器崩潰現(xiàn)象,啟用Refresh()函數(shù),重新加載頁(yè)面,從生成原始DOM樹開始重新進(jìn)行測(cè)試。
2.3模糊測(cè)試的數(shù)據(jù)記錄
本實(shí)驗(yàn)使用LOG函數(shù)對(duì)當(dāng)前的操作進(jìn)行保存,具體包括每一次的函數(shù)執(zhí)行信息,數(shù)據(jù)賦值和DOM樹結(jié)構(gòu)調(diào)整。LOG文件使用XML格式進(jìn)行保存,并可以通過LOG文件解析回HTML文件并重現(xiàn)漏洞。
3.1分布式的必要性
基于DOM樹的Fuzzing方式,大約會(huì)產(chǎn)生10000000個(gè)測(cè)試用例。為了能夠盡可能的覆蓋所有的測(cè)試用例,提高測(cè)試的精確度,我們通過分布式將測(cè)試用例均分給100個(gè)節(jié)點(diǎn),并由一臺(tái)主機(jī)進(jìn)行信息收集和管理。
Figure 2 IE漏洞的WinDbg調(diào)試截圖
3.2分布式模糊測(cè)試的設(shè)計(jì)
我們使用C/S模式進(jìn)行實(shí)驗(yàn)。將Server機(jī)和Client機(jī)都用虛擬機(jī)來承載。Client機(jī)向Server機(jī)發(fā)送LOG信息,Server機(jī)向Client機(jī)發(fā)送指令。Client機(jī)有4個(gè)運(yùn)行狀態(tài),Startup/Ready、Running、Exception & reboot和Finish & reboot,只能依次向前直到Reboot返回第一個(gè)狀態(tài),不能由當(dāng)前狀態(tài)返回上一狀態(tài)。
Client開機(jī)處在Startup狀態(tài),向Server機(jī)發(fā)送運(yùn)行請(qǐng)求,執(zhí)行Fuzzing任務(wù)并處在Running狀態(tài),若監(jiān)控機(jī)制發(fā)現(xiàn)Client產(chǎn)生了exception,就將LOG文件和狀態(tài)信息發(fā)送給Server機(jī),Client接收指令即重啟系統(tǒng)。若未發(fā)現(xiàn)exception,在當(dāng)前所有操作執(zhí)行完之后,進(jìn)入finish狀態(tài),監(jiān)控機(jī)制將信息發(fā)送給Server機(jī),Client接受指令即重啟。
本實(shí)驗(yàn)測(cè)試的IE版本為Internet Explorer 10.0.9200.16736,windows版本為Microsoft Windows 7旗艦版,6.1.7601 Service pack 1 Build 7601,實(shí)驗(yàn)通過在100臺(tái) Client機(jī)上并行的運(yùn)行1000萬(wàn)個(gè)測(cè)試用例之后,收集了50類IE的exception。Figure 2是其中一個(gè)IE漏洞的WinDbg截圖證明:
通過分布式處理,提高了實(shí)驗(yàn)效率,節(jié)省了實(shí)驗(yàn)時(shí)間,對(duì)數(shù)據(jù)進(jìn)行了收集和整理。將Fuzzing測(cè)試這項(xiàng)本需要大量的試驗(yàn)時(shí)間和人工干預(yù)的工作進(jìn)行了智能化和自動(dòng)化改進(jìn)。
本文實(shí)現(xiàn)了基于DOM樹動(dòng)態(tài)執(zhí)行的IE漏洞分析器,并通過分布式在100個(gè)Client節(jié)點(diǎn)上執(zhí)行了1000萬(wàn)個(gè)測(cè)試用例,發(fā)現(xiàn)了IE的50類漏洞,記錄了所有漏洞信息并成功復(fù)現(xiàn)。提出了全自動(dòng)的Fuzzing方式,提高了測(cè)試效率,減少人工操作,提升檢測(cè)準(zhǔn)確性。在下一步的工作中,我們將提高系統(tǒng)的穩(wěn)定性,加入自學(xué)習(xí)模式,進(jìn)一步提高漏洞檢測(cè)的精準(zhǔn)度。
吉根林;韋素云;鮑培明;;一種基于DOM樹的XML數(shù)據(jù)頻繁模式挖掘算法[J];南京航空航天大學(xué)學(xué)報(bào);2006年02期
Research on Distributed Vulnerabilities Mining of IE Browser Based on DOM Structure
Tian Zeyi1,Peng Sheqiang2,Wu Zhiyong3
(1,2Academy of National Defense Information,Wu Han,430010;3.The 54th Research Institute of General Staff,Beijing,102200)
Use mining methods based on dynamic implementation of the DOM tree structure,design and implement the distributed IE vulnerabilities mining machine,elaborate the principle of the machine.Test results found 50 kinds of IE vulnerabilities.
Internet Explorer Browser;Fuzzing;DOM Tree