国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向RTF文件的Word漏洞分析

2015-11-19 09:26:52樂德廣章亮鄭力新李鑫陳經(jīng)途
關(guān)鍵詞:緩沖區(qū)繪圖逆向

樂德廣,章亮,鄭力新,李鑫,陳經(jīng)途

(1.常熟理工學(xué)院 計算機(jī)科學(xué)與工程學(xué)院,江蘇 蘇州215500;2.華僑大學(xué) 工學(xué)院,福建 泉州362021;3.廈門銳思特軟件科技有限公司,福建 廈門361005)

隨著互聯(lián)網(wǎng)應(yīng)用的普及,軟件的安全問題變得日趨嚴(yán)重.自從2006年Word辦公軟件的一個嚴(yán)重漏洞被發(fā)現(xiàn)以來,Office辦公軟件的漏洞開始成為網(wǎng)絡(luò)黑客攻擊和利用的工具,而在這些漏洞當(dāng)中,利用文件格式解析漏洞的攻擊更是層出不窮[1].國內(nèi)外的安全研究機(jī)構(gòu)和學(xué)者也投入大量的精力研究文檔類漏洞的檢測和分析[2-4].近年來,由于Office Word程序在解析富文本格式(rich text format,RTF)文檔時經(jīng)常會觸發(fā)漏洞,黑客就可以控制正在運行Word的特權(quán)用戶,因此深入分析RTF文檔解析過程顯得極為必要.本文在研究RTF文檔繪圖屬性的基礎(chǔ)上,提出一種基于指令回溯調(diào)試及特征數(shù)據(jù)構(gòu)造的Word程序漏洞逆向分析方法.

1 相關(guān)工作

1.1 RTF文檔概述

RTF是微軟公司為進(jìn)行文本和圖像信息格式的交換而制定的一種文件格式,它適用于不同的設(shè)備、操作環(huán)境和操作系統(tǒng)[5].RTF文件數(shù)據(jù)格式由未格式文本、控制字、控制符和組構(gòu)成.其中,未格式化本文即單純的編輯文本,不具有任何格式,是RTF文件的正文部分.控制字是RTF用來標(biāo)記打印控制符和管理文檔信息的一種特殊格式的命令,一個控制字最長32個字符.控制字的使用格式為

其中:每個控制字均以一個反斜杠\開頭;字母序列由“a”~“z”的小寫字母組成.

組由文本(包括在({})中)、控制字或控制符組成.左擴(kuò)符({)表示組的開始,右擴(kuò)符(})表示組的結(jié)束.每個組包括文本和文本的不同屬性.一個RTF文件符合以下語法,即

從以上RTF文件語法可以看出,RTF文件包括文件頭和文檔區(qū).其中,文件頭的語法為

文檔區(qū)的語法為

1.2 Word安全性分析

隨著MS Office系列軟件的廣泛應(yīng)用,doc,xls和ppt等文檔已經(jīng)成為日常工作文檔的通用傳遞格式.Word.exe程序支持doc,txt,html,xml,rtf等數(shù)據(jù)格式的文件.由于Word支持的文件格式廣泛,不同文件格式又相當(dāng)復(fù)雜,因此,在該程序的設(shè)計和處理中不可避免地存在大量漏洞,如緩沖區(qū)溢出漏洞[6].緩沖區(qū)溢出漏洞包括棧溢出漏洞、堆溢出漏洞、釋放后重用漏洞、遠(yuǎn)程代碼執(zhí)行漏洞等[7].

由于微軟發(fā)布的Word軟件存在漏洞的公告中,危害等級為“嚴(yán)重”的漏洞就經(jīng)常涉及到RTF文件.例如,Microsoft Word RTF文件解析錯誤代碼執(zhí)行漏洞,Microsoft Word RTF數(shù)據(jù)處理遠(yuǎn)程內(nèi)存破壞漏洞,Microsoft Word RTF文件釋放后重用遠(yuǎn)程代碼執(zhí)行漏洞,Microsoft Office RTF分析器堆棧溢出漏洞和Microsoft Word RTF解析引擎堆溢出漏洞等[7].因此,文中重點分析RTF文檔緩沖區(qū)溢出漏洞.

2 漏洞分析

2.1 RTF結(jié)構(gòu)

通過對RTF的文件頭和文檔區(qū)分析,可以將整個RTF文檔的結(jié)構(gòu)分成可存數(shù)據(jù)區(qū)域和不可存數(shù)據(jù)區(qū)域兩個部分,如圖1所示.

對RTF文檔進(jìn)行重劃分,其中在可存數(shù)據(jù)區(qū)域中,pFragments,pSegmentInfo,pVerticies,Themedata,Datastore等都是容易觸發(fā)漏洞的區(qū)域,在這些區(qū)域中可以填寫惡意代碼(shellcode).Microsoft Word RTF文件解析緩沖區(qū)溢出漏洞就是解析RTF繪圖屬性pFragments時造成的緩沖區(qū)溢出漏洞.因此,文中重點研究Word程序在解析RTF文檔繪圖屬性時產(chǎn)生的緩沖區(qū)溢出漏洞.

圖1 RTF區(qū)塊分割Fig.1 RTF Area Segmentation

2.2 RTF繪圖屬性逆向分析

通過指令回溯調(diào)試和特征數(shù)據(jù)構(gòu)造方法逆向分析RTF的繪圖屬性.Word.exe程序解析該RTF文檔中的pFragments屬性時,其逆向關(guān)鍵代碼如圖2所示.

圖2中:源代碼是Word.exe程序解析pFragments屬性的關(guān)鍵函數(shù).在該函數(shù)中,方框中的rep指令是將esi所指向的pFragments屬性值數(shù)據(jù)復(fù)制到edi所指向的緩沖區(qū).復(fù)制的次數(shù)由mov,eax,ecx指令中的ecx寄存器決定.ecx寄存器的最大值為FFFFH,但是在執(zhí)行rep指令進(jìn)行復(fù)制之前,有一個移位運算shr ecx 2,所以ecx的最大值為3FFFH,rep指令復(fù)制的最大字節(jié)數(shù)為4×3FFFH=FFFCH B.由圖2可知:該函數(shù)未嚴(yán)格檢查pFragments屬性值所占用的緩沖區(qū)空間大小.因此,需要確定由rep指令復(fù)制數(shù)據(jù)的緩沖區(qū)大小.

圖2 Word解析RTF pFragments屬性關(guān)鍵源代碼Fig.2 Word key assembly codes for RTF pFragments attribute resolution

圖3 RTF pFragments屬性值緩沖區(qū)大小Fig.3 Buffer size of RTF pFragments attribute value

圖2函數(shù)中的retn指令返回到該函數(shù)的調(diào)用指令處[8],如圖3所示.圖3中:地址0x30F0B5F8處的call dword ptr ds:[ax+0x1C]指令為圖2的調(diào)用函數(shù).通過逆向該函數(shù)調(diào)用前的棧操作指令可以看出:在地址0x30F0BEB處的lea ecx dword ptr ss:[ebp-0x10]指令在處理pFragments屬性的時候,分配一個最大值為10HB的緩沖區(qū)給地址0x30F0B5F8的call函數(shù).由圖3可知:0x30F0B5F8處的call函數(shù)未嚴(yán)格檢查pFragments屬性值所占用的空間大小,當(dāng)ecx的值大于10HB時,就會導(dǎo)致圖2中地址0x30ED442C處的rep指令在復(fù)制pFragments屬性值數(shù)據(jù)時產(chǎn)生緩沖區(qū)溢出.

圖4 ecx初始值設(shè)置Fig.4 Initial value setting of ecx

由于ecx寄存器在程序的執(zhí)行過程中被反復(fù)使用,采用傳統(tǒng)的內(nèi)存斷點逆向方法很難確定給ecx賦初始值的指令[9].因此,采用一種新的指令回溯逆向方法來確定ecx賦初始值的指令.該方法通過追溯給ecx賦值的前一條指令,然后給該指令下斷點,再通過斷點的指令追溯給這條指令賦值的前一條指令,最終確定給ecx賦初始值的指令,其逆向關(guān)鍵代碼如圖4所示.由圖4可知:[ebp-0x8]等于pFragments屬性值的第5和第6個字節(jié).當(dāng)ja跳轉(zhuǎn)指令執(zhí)行跳轉(zhuǎn)時,Word.exe程序執(zhí)行的逆向關(guān)鍵代碼如圖5所示.

由圖5可知:當(dāng)ja跳轉(zhuǎn)指令執(zhí)行時,eax直接被賦值為0,導(dǎo)致ecx最終被賦值為0.由于rep指令所復(fù)制的字節(jié)數(shù)由ecx決定,而ja跳轉(zhuǎn)指令決定ecx的值.因此,ja指令是否執(zhí)行跳轉(zhuǎn)決定pFragments屬性值數(shù)據(jù)能否復(fù)制至緩沖區(qū),是產(chǎn)生緩沖區(qū)溢出漏洞的條件之一.

圖5 ja跳轉(zhuǎn)流程Fig .5 Jump process of ja

根據(jù)上面的分析,基于特征數(shù)據(jù)構(gòu)造的方法構(gòu)造ja指令,采用不跳轉(zhuǎn)的pFragments屬性值特征數(shù)據(jù),將該數(shù)據(jù)復(fù)制到緩沖區(qū)中,通過逆向Word.exe繼續(xù)解析構(gòu)造的pFragments屬性值數(shù)據(jù),其逆向關(guān)鍵代碼如圖6所示.

圖6 特征值數(shù)據(jù)分析Fig.6 Characteristic data analysis

由圖6可知:在Word.exe程序?qū)?gòu)造好的pFragments屬性值數(shù)據(jù)復(fù)制到緩沖區(qū)后,將執(zhí)行方框中的指令.因此,繼續(xù)采用基于特征數(shù)據(jù)構(gòu)造的方法讓je指令分別執(zhí)行跳轉(zhuǎn)和不跳轉(zhuǎn)操作.當(dāng)不產(chǎn)生跳轉(zhuǎn)時,Word.exe程序?qū)?zhí)行地址0x30F0B7CB處的call 30F0B90A,此時Word.exe程序不能正常返回,并最終造成程序直接崩潰;當(dāng)je指令發(fā)生跳轉(zhuǎn)時,Word.exe程序可以正常執(zhí)行,并造成緩沖區(qū)溢出.因此,[ebp+10]的特征值為0000H.該特征值決定了構(gòu)造的pFragments屬性值數(shù)據(jù)能否讓程序正常執(zhí)行,這是產(chǎn)生緩沖區(qū)溢出漏洞的另一條件.

通過以上對于RTF文檔繪圖屬性pFragments逆向分析可以得出:通過ja和je指令的2次正確跳轉(zhuǎn)后,pFragments屬性值數(shù)據(jù)才能夠正確復(fù)制到緩沖區(qū),并造成溢出.

2.3 Word解析RTF繪圖屬性漏洞分析流程

根據(jù)2.2節(jié)對RTF繪圖屬性分析,得出緩沖區(qū)溢出條件.Word在解析RTF繪圖屬性時產(chǎn)生溢出漏洞的流程,如圖7所示.

由圖7可知:RTF文檔繪圖屬性產(chǎn)生7個步驟緩沖區(qū)溢出的流程.

步驟1首先,構(gòu)造一個具有繪圖屬性的RTF文檔,例如,test.rtf.

步驟2用Word.exe程序打開RTF文檔.

步驟3Word.exe程序解析RTF繪圖屬性的sv屬性值數(shù)據(jù).

步驟4判斷RTF文件繪圖屬性的sv屬性值中是否包含有將sv屬性值復(fù)制到緩沖區(qū)中的特征值數(shù)據(jù),例如,[ebp+0xE]≤[ebp-0x4].如包含有該特征值,則執(zhí)行步驟5;否則,Word.exe程序進(jìn)入正常數(shù)據(jù)處理,并結(jié)束.

步驟5RTF文件繪圖屬性的sv屬性值數(shù)據(jù)復(fù)制到緩沖區(qū)中.

步驟6判斷RTF文件繪圖屬性的sv屬性值數(shù)據(jù)是否包含程序正常返回的特征值數(shù)據(jù),例如,[ebp+10]=0000H.如果包含特征值數(shù)據(jù),則執(zhí)行步驟7;否則,Word.exe程序進(jìn)入異常數(shù)據(jù)的處理,并結(jié)束.

步驟7判斷RTF文件繪圖屬性的sv屬性值數(shù)據(jù)的長度是否大于到緩沖區(qū)存儲空間,例如,[ebp-0x8]>10H.如果復(fù)制的sv屬性值數(shù)據(jù)長度大于緩沖區(qū)存儲空間,則造成溢出并觸發(fā)漏洞;否則Word.exe程序進(jìn)入正常數(shù)據(jù)處理,并結(jié)束.

圖7 Word解析RTF繪圖屬性漏洞分析流程Fig.7 Analysis flows of word RTF drawing attribute resolution vulnerability

3 實驗測試

對2.3節(jié)提出的RTF漏洞分析流程進(jìn)行實驗測試,測試硬件環(huán)境分別是I3-3110處理器,4G內(nèi)存的筆記本電腦,I5-4460型處理器,4G內(nèi)存的臺式機(jī),E31225v3型處理器及8G內(nèi)存的服務(wù)器.操作系統(tǒng)是Windows XP SP3,軟件是Office 2003SP2.首先,基于該流程構(gòu)造POC(proof of concept)[10],并通過shellcode證明該漏洞分析流程的有效性.

3.1 POC的構(gòu)造

根據(jù)RTF繪圖屬性漏洞分析的流程可以看出:繪圖屬性的sv屬性值是能否觸發(fā)漏洞的關(guān)鍵,只有在POC中構(gòu)造合適的sv才能觸發(fā)漏洞,造成緩沖區(qū)溢出.根據(jù)圖7中步驟4的判斷條件,構(gòu)造sv屬性值為

其中:sv的屬性值是111122223333H;第1,2個字節(jié)構(gòu)成的16進(jìn)制數(shù)為1111H,第3,4個字節(jié)構(gòu)成的16進(jìn)制數(shù)為2222H,即(12)H<(34)H,所以這時可以復(fù)制3333H長度的sv屬性值數(shù)據(jù)到緩沖區(qū)中.

雖然可以復(fù)制指定大小的數(shù)據(jù)到內(nèi)存緩沖區(qū)中,但是并不知道這些數(shù)據(jù)能否讓W(xué)ord.exe程序正常執(zhí)行,而程序能否正常執(zhí)行也是通過sv屬性值的特征數(shù)據(jù)來控制,該特征數(shù)據(jù)具體是在第47~50個字節(jié)處,需要將這4個字節(jié)置為0000H,程序才能正常執(zhí)行.根據(jù)圖7中步驟6的判斷條件,進(jìn)一步構(gòu)造sv的屬性值為

其中:第1~4個字節(jié)判斷屬性值數(shù)據(jù)能否復(fù)制至緩沖區(qū);第5~6個字節(jié)指定拷貝屬性值數(shù)據(jù)的長度;第7~50個字節(jié)是填入緩沖區(qū)的屬性值數(shù)據(jù);第47~50個字節(jié)為判斷屬性值數(shù)據(jù)能否讓W(xué)ord.exe程序正常執(zhí)行的特征值數(shù)據(jù).

打開構(gòu)造好的POC文檔test.rtf,緩沖區(qū)數(shù)據(jù)如圖8所示.由圖8可知:構(gòu)造的數(shù)據(jù)已經(jīng)成功復(fù)制到緩沖區(qū)中,只要合適長度數(shù)據(jù)就可以造成緩沖區(qū)溢出漏洞.

3.2 漏洞利用測試

通過構(gòu)造shellcode,對漏洞進(jìn)行利用測試.測試的shellcode功能是調(diào)用系統(tǒng)命令執(zhí)行程序CMD窗口,所以在構(gòu)造shellcode的過程中重點是自定位、獲取kernel32.dll基地址以及API函數(shù)地址[11],其構(gòu)造流程,如圖9所示.

在獲取完kernel32.dll的基址后,再通過PE文件導(dǎo)出函數(shù)表的結(jié)構(gòu)可以獲取構(gòu)造shellcode所需要的API函數(shù)的地址,具體構(gòu)造的shellcode機(jī)器碼為

構(gòu)造好shellcode后,需要將Word.exe程序的EIP指針指向shellcode入口處,采用jmp esp作為跳轉(zhuǎn)地址,跳至shellcode處.由于Windows XP系統(tǒng)的jmp esp指令的跳轉(zhuǎn)地址為0x7FFA4512[12],將Word.exe程序的返回地址通過緩沖區(qū)溢出修改為jmp esp的跳轉(zhuǎn)地址0x7FFA4512.該地址在緩沖區(qū)中存儲的數(shù)據(jù)為1245FA7FH.

RTF漏洞利用文檔的完整數(shù)據(jù)為

其中:90H之后是shellcode的填充區(qū)域.

最后,將以上構(gòu)造數(shù)據(jù)保存成RTF文檔,并用Word.exe程序打開該RTF文檔,結(jié)果如圖10所示.由圖10可知:打開構(gòu)造好的POC文件彈出CMD命令行窗口,證明通過提出的漏洞分析流程所構(gòu)造的RTF文檔漏洞利用成功.

圖8 緩沖區(qū)數(shù)據(jù)分布Fig.8 Distribution of buffer data

圖9 shellcode構(gòu)造流程Fig.9 Process flow of shellcode

圖10 RTF文檔漏洞利用結(jié)果 Fig.10 Utilization result of RTF vulnerability

4 結(jié)束語

分析了Office Word軟件所面臨的安全威脅,并對Word 2003程序在解析RTF文檔時容易觸發(fā)漏洞進(jìn)行詳細(xì)分析,提出一種面向RTF文檔漏洞利用分析的方法,最后通過漏洞利用測試證明該方法的有效性.今后,還將針對WPS Office,Excel,Word 2007及更高版本程序做進(jìn)一步研究,并基于Word漏洞分析進(jìn)一步研究RTF文檔解析漏洞的補(bǔ)丁加強(qiáng)對Word漏洞的攻擊防御.此外,漏洞分析方法雖然在Win 32平臺下具有可行性,但是對于其他平臺,如Win 64或Linux平臺,還沒有進(jìn)行驗證,也需要在今后的工作中作進(jìn)一步的驗證.

[1]KUHN R,JOHNSON C.Vulnerability trends:Measuring progress[J].IT Professional,2010,12(4):51-53.

[2]史飛悅,傅德勝.緩沖區(qū)溢出漏洞挖掘分析及利用的研究[J].計算機(jī)科學(xué),2013,40(11):143-146.

[3]陳愷,馮登國,蘇璞睿.基于有限約束滿足問題的溢出漏洞動態(tài)檢測方法[J].計算機(jī)學(xué)報,2012,35(5):898-909.

[4]高志偉,姚堯,饒飛,等.基于漏洞嚴(yán)重程度分類的漏洞預(yù)測模型[J].電子學(xué)報,2013,41(9):1784-1787.

[5]Microsoft Corporation.Rich Text Format(RTF)Specification[EB/OL].[2014-10-08].http://msdn.microsoft.com/en-us/library/aa140277(office.10).aspx.

[6]李毅超,劉丹,韓宏,等.緩沖區(qū)溢出漏洞研究與進(jìn)展[J].計算機(jī)科學(xué),2008,35(1):87-90.

[7]CHANG Yung-yu,ZAVARSKY P,RUHL R,et al.Trend analysis of the CVE for software vulnerability management[C]∥Proceedings of IEEE Third International Conference on Privacy,Security,Risk and Trust(PASSAT)and IEEE Third Inernational Conference on Social Computing(SocialCom).Boston:Institute of Electrical and Electronic Engineers,2011:1290-1293.

[8]HUANG Shih-Kun,HUANG Min-Hsiang,HUANG Po-Yen,et al.Software crash analysis for automatic exploit generation on binary programs[J].IEEE Transactions on Reliability,2014,63(1):270,289.

[9]葛毅,茅兵,謝立.基于內(nèi)存更新記錄的漏洞攻擊錯誤定位方法[J].計算機(jī)科學(xué),2009,36(1):253-256.

[10]FATAUER T S,KHATTAB S,OMARA F A.OverCovert:Using stack-overflow software vulnerability to create a covert channel[C]∥Proceedings of IEEE 4th IFIP International Conference on New Technologies,Mobility and Security.Paris:Institute of Electrical and Electronic Engineers,2011:1-5.

[11]AN Zhi-yuan,LIU Hai-yan.Locating the address of local variables to achieve a buffer overflow[C]∥Proceedings of IEEE Fifth International Conference on Computational and Information Sciences.Shiyang:IEEE Press,2013:1999-2002.

[12]羅文華.基于逆向技術(shù)的惡意程序分析方法[J].計算機(jī)應(yīng)用,2011,31(11):2766-2769.

猜你喜歡
緩沖區(qū)繪圖逆向
嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設(shè)計與實現(xiàn)
來自河流的你
中國三峽(2022年7期)2022-12-02 05:28:02
“禾下乘涼圖”繪圖人
逆向而行
基于HTML5 Canvas繪圖技術(shù)應(yīng)用
電子測試(2018年4期)2018-05-09 07:28:32
逆向解答
Surfer和ArcView結(jié)合在氣象繪圖中的應(yīng)用
河北遙感(2015年2期)2015-07-18 11:11:14
關(guān)鍵鏈技術(shù)緩沖區(qū)的確定方法研究
逆向工程技術(shù)及應(yīng)用
地理信息系統(tǒng)繪圖緩沖區(qū)技術(shù)設(shè)計與實現(xiàn)
兴业县| 偏关县| 顺昌县| 大邑县| 延吉市| 吐鲁番市| 南宁市| 洞头县| 宁明县| 昂仁县| 宁海县| 松滋市| 徐水县| 定陶县| 三原县| 兴海县| 西贡区| 沁水县| 红原县| 米易县| 荥阳市| 临湘市| 微山县| 泰顺县| 兴山县| 安泽县| 九寨沟县| 县级市| 乐安县| 新闻| 镇远县| 闵行区| 山东| 四会市| 延川县| 阿城市| 辉县市| 南充市| 三门峡市| 罗定市| 安乡县|