

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 碩士學(xué)位論文</b></p><p> 基于模糊測(cè)試的ActiveX控件</p><p><b> 漏洞挖掘研究 </b></p><p> 專 業(yè) 名 稱: 軟 件 工 程 </p><p> 研究生姓名: </p>
2、;<p> 導(dǎo) 師 姓 名: </p><p> 校外導(dǎo)師姓名: </p><p><b> 摘要</b></p><p><b> 關(guān)鍵字:</b></p><p><b> ABSTRACT</b>
3、;</p><p> Key Words: </p><p><b> 目 錄</b></p><p><b> 摘要I</b></p><p> ABSTRACT II</p><p><b> 第一章 緒論1</b></p&g
4、t;<p> 1.1 研究背景1</p><p> 1.2 相關(guān)研究現(xiàn)狀1</p><p> 1.2.1 ActiveX控件技術(shù)的發(fā)展1</p><p> 1.2.2 模糊測(cè)試技術(shù)的研究現(xiàn)狀2</p><p> 1.2.3 緩沖區(qū)溢出漏洞研究現(xiàn)狀2</p><p> 1.3 研究目的
5、和意義3</p><p> 1.4 主要工作與創(chuàng)新點(diǎn)3</p><p> 1.5 本文的章節(jié)安排4</p><p> 第二章ActiveX控件安全性分析與模糊測(cè)試技術(shù)5</p><p> 2.1 ActiveX控件原理分析5</p><p> 2.1.1 ActiveX控件加載原理5</p&
6、gt;<p> 2.1.2 ActiveX控件的加載條件5</p><p> 2.2 ActiveX控件漏洞形成分析6</p><p> 2.2.1 軟件漏洞的定義6</p><p> 2.2.2 軟件漏洞的原理與分類6</p><p> 2.2.3 ActiveX控件的漏洞的特點(diǎn)與形成原因10</p&
7、gt;<p> 2.3 模糊測(cè)試技術(shù)12</p><p> 2.3.1 傳統(tǒng)的漏洞挖掘方法12</p><p> 2.3.2 模糊測(cè)試的定義13</p><p> 2.3.3 模糊測(cè)試技術(shù)的原理13</p><p> 2.3.4 模糊測(cè)試的優(yōu)點(diǎn)和缺點(diǎn)14</p><p> 2.3.5
8、 進(jìn)化模糊測(cè)試思想15</p><p> 2.4 本章小結(jié)16</p><p> 第三章 漏洞分析相關(guān)技術(shù)17</p><p> 3.1 調(diào)試器原理17</p><p> 3.2關(guān)鍵調(diào)試技術(shù)分析18</p><p> 3.2.1 調(diào)試技術(shù)基礎(chǔ)18</p><p> 3.2
9、.2 調(diào)試相關(guān)的API20</p><p> 3.3 自動(dòng)化動(dòng)態(tài)分析技術(shù)20</p><p> 3.4 靜態(tài)分析技術(shù)22</p><p> 3.4.1 IDA Pro及其插件開發(fā)22</p><p> 3.4.2 利用IDA Pro實(shí)現(xiàn)靜態(tài)代碼分析22</p><p> 3.5 本章小結(jié)23<
10、;/p><p> 第四章 ActiveX控件漏洞挖掘分析系統(tǒng)24</p><p> 4.1 系統(tǒng)總體設(shè)計(jì)24</p><p> 4.2 漏洞挖掘模塊24</p><p> 4.2.1 ActiveX控件分析子模塊25</p><p> 4.2.2啟發(fā)式靜態(tài)分析子模塊28</p><p
11、> 4.2.3二進(jìn)制代碼覆蓋率分析子模塊29</p><p> 4.2.4 測(cè)試數(shù)據(jù)生成子模塊31</p><p> 4.2.5 模糊測(cè)試執(zhí)行子模塊32</p><p> 4.3 漏洞分析模塊32</p><p> 4.3.1 調(diào)試器子模塊33</p><p> 4.3.2 反匯編子模塊3
12、5</p><p> 4.3.3 溢出檢測(cè)與定位子模塊36</p><p> 4.3.4 單步跟蹤子模塊41</p><p> 4.3.5 漏洞代碼分析子模塊43</p><p> 4.5 本章小結(jié)43</p><p> 第五章 ActiveX控件漏洞挖掘分析系統(tǒng)44</p><
13、p> 實(shí)驗(yàn)驗(yàn)證及結(jié)果分析44</p><p> 5.1 實(shí)驗(yàn)驗(yàn)證44</p><p> 5.1.1 實(shí)驗(yàn)環(huán)境44</p><p> 5.1.2 存在漏洞的控件44</p><p> 5.2 漏洞分析44</p><p> 5.2.1 SetList(棧溢出漏洞)44</p>
14、<p> 5.2.2 SetLogInfo2(堆溢出漏洞)48</p><p> 5.3 漏洞自動(dòng)挖掘系統(tǒng)的優(yōu)缺點(diǎn)52</p><p> 5.3.1 系統(tǒng)優(yōu)點(diǎn)52</p><p> 5.3.2系統(tǒng)缺點(diǎn)52</p><p> 5.4本章小結(jié)53</p><p> 第六章 總結(jié)與展望54&
15、lt;/p><p> 6.1 本文工作總結(jié)54</p><p> 6.2未來(lái)研究展望54</p><p><b> 致謝55</b></p><p><b> 參考文獻(xiàn)56</b></p><p><b> 第一章 緒論</b></p
16、><p><b> 1.1 研究背景</b></p><p> 自從萬(wàn)維網(wǎng)誕生以來(lái),針對(duì)瀏覽器的攻擊就愈演愈烈,一刻也不曾停歇過(guò)。瀏覽器作為廣大網(wǎng)民接觸網(wǎng)絡(luò)的主要工具,是網(wǎng)民踏入互聯(lián)網(wǎng)世界的主要入口之一。一旦這個(gè)入口受到惡意攻擊,將有大量電腦淪為黑客的“肉雞”,輕則電腦運(yùn)行緩慢、不斷彈出廣告頁(yè)面,重則帳號(hào)、金錢被盜,重要資料失竊等等。</p><p
17、> 隨著軟件工程理論和軟件工業(yè)的發(fā)展,愈來(lái)愈多的軟件漏洞被發(fā)現(xiàn),軟件安全問(wèn)題日益嚴(yán)重。由于利益的關(guān)系,越來(lái)越多的黑客將注意力轉(zhuǎn)移到了瀏覽器軟件領(lǐng)域,致使不斷出現(xiàn)瀏覽器的安全漏洞。作為Windows自帶的瀏覽器,IE到目前為止依然占有超過(guò)50%的市場(chǎng)份額。這一數(shù)字使得大量黑客在不斷尋找IE瀏覽器的漏洞,而隨著IE的諸多新版本推出,尋找并利用新漏洞的難度也越來(lái)越大。</p><p> 作為IE瀏覽器唯一支持
18、的插件形式,ActiveX控件的安全性一直受到很大的關(guān)注。由于ActiveX控件一般會(huì)帶有自身的類型庫(kù)信息,而類型庫(kù)中包含了控件所能提供的所有方法和屬性,以及它們的參數(shù)信息,因此這些方法和屬性成為了優(yōu)良的模糊測(cè)試的對(duì)象。黑客借助于Comraider、Axman等工具可以輕易發(fā)現(xiàn)ActiveX控件中存在的漏洞,從而利用這些漏洞達(dá)到破壞、竊取信息以及非法牟利的目的。</p><p> 經(jīng)歷了2007、2008年Ac
19、tiveX控件漏洞出現(xiàn)高峰之后,各個(gè)廠商都開始注重ActvieX控件的安全問(wèn)題,由于沒有判斷輸入?yún)?shù)長(zhǎng)度而導(dǎo)致的緩沖區(qū)溢出漏洞也大大減少。但是,如Comraider這種半自動(dòng)化工具已越來(lái)越難以滿足漏洞挖掘的需要,而且,對(duì)于一些隱藏的漏洞也無(wú)能為力。</p><p> 1.2 相關(guān)研究現(xiàn)狀</p><p> 1.2.1 ActiveX控件技術(shù)的發(fā)展</p><p>
20、; ActiveX是微軟公司1996年提出的基于COM組件和OLE技術(shù)的一種通用的開放程序接口,使用該技術(shù)開發(fā)的ActiveX控件可以直接集成到IE瀏覽器或其它第三方程序中[1]。</p><p> 由于ActiveX控件可以方便地?cái)U(kuò)展瀏覽器功能,因此許多軟件廠商都喜歡開發(fā)自己的ActiveX控件。例如,各大網(wǎng)銀為了保證自己的登錄和交易安全,都會(huì)讓用戶安裝自己的ActiveX控件登錄;一些電子商務(wù)網(wǎng)站,如淘寶
21、,也會(huì)建議用戶安裝登錄安全控件。此外,網(wǎng)絡(luò)視頻軟件、在線殺毒軟件等也都會(huì)安裝自己的ActiveX控件。</p><p> 這些控件一旦出現(xiàn)安全問(wèn)題,黑客便可以構(gòu)造惡意頁(yè)面,誘使用戶訪問(wèn),而用戶一旦訪問(wèn),黑客就可以輕易植入木馬和病毒,盜取用戶銀行賬戶,對(duì)企業(yè)和個(gè)人造成重大損失。</p><p> 1.2.2 模糊測(cè)試技術(shù)的研究現(xiàn)狀</p><p> 模糊測(cè)試的思
22、想最早產(chǎn)生于1989年美國(guó)威斯康星大學(xué)的一個(gè)研究計(jì)劃,Barton Miller教授(被成為模糊測(cè)試之父)最初是用來(lái)測(cè)試UNIX應(yīng)用程序的健壯性[2]。</p><p> 1999年,芬蘭Oulu大學(xué)開始研發(fā)基于Fuzzing的網(wǎng)絡(luò)協(xié)議測(cè)試工具PROTOS,并于2002年發(fā)布了用于SNMP測(cè)試的版本。PROTOS綜合了黑盒測(cè)試和白盒測(cè)試的特點(diǎn),是模糊測(cè)試發(fā)展過(guò)程中的一個(gè)里程碑[3]。</p>&l
23、t;p> 2002年,Dave Aitel發(fā)布了一個(gè)開放源代碼的模糊測(cè)試工具SPIKE5,它使用了基于塊的模糊處理器,用于測(cè)試基于網(wǎng)絡(luò)的應(yīng)用程序。作為第一個(gè)可以實(shí)現(xiàn)自定制的模糊測(cè)試器框架,SPIKE的發(fā)布標(biāo)志著模糊測(cè)試一個(gè)新的里程碑[4]。</p><p> 2004年,F(xiàn)ile Fuzzing開始出現(xiàn)。Mu Dynamics(原Mu Security)公司開始開發(fā)一種硬件模糊裝置,其目的是讓網(wǎng)絡(luò)中傳輸
24、的協(xié)議數(shù)據(jù)發(fā)生變異。這個(gè)商業(yè)產(chǎn)品供應(yīng)商的出現(xiàn),恰好吻合當(dāng)前人們關(guān)注Fuzzing的潮流[3]。</p><p> 同年,兩個(gè)類似SPIKE的基于塊的Fuzzer工具發(fā)布:Peach和smudge。這兩個(gè)工具都是使用python開發(fā),從而提供了易于使用的快速開發(fā)框架。Peach是近年來(lái)較受外界關(guān)注的模糊測(cè)試框架,適用于多個(gè)平臺(tái)。Peach要先對(duì)測(cè)試的協(xié)議或文件格式進(jìn)行建模,并用XML語(yǔ)言描述出這種數(shù)據(jù)模型,然后數(shù)
25、據(jù)生成引擎通過(guò)解析XML文件來(lái)構(gòu)造測(cè)試數(shù)據(jù)集[5]。</p><p> 2006年,ActiveX控件的Fuzzing開始流行,David Zimmer發(fā)布了COMRaider,H.D.Morre發(fā)布了AxMan16。ActiveX控件由于其中接口、函數(shù)原型的公開性,是一種優(yōu)秀的模糊測(cè)試目標(biāo),允許對(duì)其實(shí)施自動(dòng)化的智能測(cè)試。這使得ActiveX控件漏洞的挖掘一時(shí)間風(fēng)靡整個(gè)黑客界,不斷會(huì)爆出某些軟件的0day漏洞。
26、比如2007年底迅雷5的PPLAYER.DLL控件中溢出漏洞;2008年初的聯(lián)眾GLChat.ocx 控件溢出漏洞;2009年的暴風(fēng)影音mps.dll控件遠(yuǎn)程棧溢出漏洞;2011年的QQ旋風(fēng)中QQIEHelper.dll控件的遠(yuǎn)程棧溢出漏洞;2011年的淘寶阿里旺旺中imageMan.dll控件的遠(yuǎn)程棧溢出漏洞等等。</p><p> 國(guó)外對(duì)模糊測(cè)試的研究較早也較深,有多款成熟的模糊測(cè)試框架推出,相對(duì)于此,國(guó)內(nèi)
27、對(duì)模糊測(cè)試的研究起步較晚,尚未出現(xiàn)成熟的測(cè)試框架。文獻(xiàn)[9]介紹了使用模糊測(cè)試挖掘MP3播放軟件中的漏洞,文獻(xiàn)[10]介紹了使用模糊測(cè)試挖掘Word軟件中的漏洞,文獻(xiàn)[11]介紹了使用模糊測(cè)試挖掘PNG格式解析軟件的漏洞,以上三種都屬于文件Fuzzing的范疇,而文獻(xiàn)[12]介紹了使用模糊測(cè)試挖掘TFTP中的漏洞,這是種網(wǎng)絡(luò)協(xié)議的模糊測(cè)試。</p><p> 1.2.3 緩沖區(qū)溢出漏洞研究現(xiàn)狀</p>
28、;<p> 緩沖區(qū)溢出攻擊起源于1996年的一篇文章 “Smashing The Stack For Fun And Profit”[14],這篇文章清楚地闡述了緩沖區(qū)溢出攻擊的原理。這使得緩沖區(qū)溢出攻擊不斷被世人所了解。1998年來(lái)自“Cult of the Dead cow”的Dildog詳細(xì)介紹了如何利用Windows的溢出[15],這篇文章的最大貢獻(xiàn)在于提出了利用棧指針的方法來(lái)完成跳轉(zhuǎn),避免了因進(jìn)程、線程的不同造
29、成的棧位置不固定。1999年,Dark Spyrit提出使用系統(tǒng)核心DLL中的Jmp ESP指令完成跳轉(zhuǎn)[16]。同年,w00w00安全小組的Matt Conover寫了基于堆的緩沖區(qū)溢出的專著[17],從而使人們意識(shí)到堆溢出的危害性。</p><p> 與此同時(shí),緩沖區(qū)溢出保護(hù)技術(shù)也在不斷發(fā)展。</p><p> 2000年,Arash Baratloo和Tzi-cker Chiue
30、h等實(shí)現(xiàn)的StackShield原型系統(tǒng)通過(guò)保留返回地址的副本來(lái)檢測(cè)溢出的發(fā)生[18]。同年,Hiroaki Etoh和Kunikazu Yoda提出Etoh和Yoda技術(shù),使用隨機(jī)數(shù)保護(hù)和棧中的數(shù)組重定位技術(shù)來(lái)防止對(duì)局部變量的溢出[19]。2002年12月,Chew和Song對(duì)棧的基地址、系統(tǒng)調(diào)用表和庫(kù)函數(shù)入口指針進(jìn)行了隨機(jī)化,并達(dá)到了破壞溢出利用可靠性的目的[20]。2003年5月,Xu,Kalbarczyk和lyer提出了透明實(shí)時(shí)
31、隨機(jī)化技術(shù),對(duì)Linux的棧基址、堆基址以及GOT進(jìn)行了隨機(jī)化[21]。</p><p> Windows也從XP SP2開始引入隨機(jī)化PEB基址、SEH保護(hù)、堆棧Cookie保護(hù)等技術(shù)。這些技術(shù)的引進(jìn)會(huì)增大緩沖區(qū)溢出攻擊利用的難度,但是并不能從本質(zhì)上消除緩沖區(qū)溢出的出現(xiàn)。正如黑客技術(shù)與反黑客技術(shù)一樣,溢出研究與溢出保護(hù)研究也在對(duì)抗之中不斷發(fā)展與前進(jìn)。</p><p> 1.3 研究目
32、的和意義</p><p> 本文的研究目的主要有以下三點(diǎn):</p><p> 1、尋找到一種智能、高效的基于模糊測(cè)試的漏洞挖掘方法,能夠挖掘出ActiveX控件中的緩沖區(qū)溢出漏洞</p><p> 2、研究出一種動(dòng)態(tài)分析與靜態(tài)分析相結(jié)合的漏洞分析方法,對(duì)漏洞進(jìn)行高效、準(zhǔn)確的分析,獲取到漏洞形成的相關(guān)信息</p><p> 3、實(shí)現(xiàn)一套
33、基于模糊測(cè)試的自動(dòng)化ActiveX控件的漏洞挖掘分析系統(tǒng),以完成從控件接口分析到漏洞挖掘到漏洞分析的自動(dòng)化過(guò)程</p><p> 本文的研究意義主要有:</p><p> 1、通過(guò)對(duì)ActiveX控件進(jìn)行自動(dòng)化漏洞挖掘和分析,以幫助軟件開發(fā)者或安全人員盡早地發(fā)現(xiàn)、定位和分析漏洞,減少已發(fā)布軟件中漏洞的數(shù)量及生存期,從而避免漏洞對(duì)企業(yè)和個(gè)人造成重大的損失。</p><
34、p> 2、通過(guò)對(duì)ActiveX控件的漏洞挖掘研究,掌握漏洞挖掘過(guò)程的技巧和方法,以應(yīng)用到其它類型的軟件安全漏洞挖掘中去。</p><p> 1.4 主要工作與創(chuàng)新點(diǎn)</p><p> 本文的主要工作與創(chuàng)新點(diǎn)主要有以下三點(diǎn):</p><p> 1、使用本人獨(dú)立開發(fā)的調(diào)試器,研究并實(shí)現(xiàn)了一套高效的自動(dòng)化單步跟蹤算法,大大減少了普通單步調(diào)式造成的性能影響,并
35、在此基礎(chǔ)上實(shí)現(xiàn)了計(jì)算二進(jìn)制代碼覆蓋率的方法。</p><p> 2、研究了基于遺傳算法的智能模糊測(cè)試技術(shù),并使用二進(jìn)制代碼覆蓋率作為適應(yīng)度函數(shù),來(lái)指導(dǎo)測(cè)試數(shù)據(jù)的生成。</p><p> 3、研究并提出了一種基于逆向工程的,動(dòng)態(tài)分析為主、靜態(tài)分析為輔的緩沖區(qū)溢出漏洞自動(dòng)檢測(cè)、定位、分析技術(shù)。</p><p> 1.5 本文的章節(jié)安排</p><
36、;p> 本文的組織結(jié)構(gòu)如下:</p><p> 第1章緒論,概述了選題的背景和意義,選題相關(guān)內(nèi)容的研究現(xiàn)狀,概述了本文的研究?jī)?nèi)容、研究意義以及主要工作,最后介紹了論文的章節(jié)安排。</p><p> 第2章ActiveX控件安全性分析與模糊測(cè)試技術(shù),介紹了ActiveX控件的原理技術(shù),常見軟件漏洞的分類以及ActiveX控件漏洞自身的特點(diǎn),然后介紹了傳統(tǒng)的漏洞挖掘方法和模糊測(cè)試技
37、術(shù)的定義、原理以及優(yōu)缺點(diǎn),最后提出了使用進(jìn)化算法改進(jìn)模糊測(cè)試。</p><p> 第3章漏洞分析相關(guān)技術(shù),介紹了漏洞分析相關(guān)的技術(shù),包括基于調(diào)試技術(shù)的動(dòng)態(tài)分析方法,在此基礎(chǔ)上研究出一套高效、可控的動(dòng)態(tài)分析方法用于計(jì)算二進(jìn)制文件的代碼覆蓋率,最后介紹了基于IDA Pro的靜態(tài)分析方法。</p><p> 第4章ActiveX控件漏洞挖掘分析系統(tǒng)實(shí)現(xiàn),介紹了漏洞自動(dòng)挖掘系統(tǒng)的模塊組成以及模
38、塊間的關(guān)系,還有系統(tǒng)運(yùn)行的流程圖,最后分析了該系統(tǒng)現(xiàn)在的優(yōu)缺點(diǎn)。</p><p> 第5章ActiveX控件漏洞挖掘分析系統(tǒng)實(shí)現(xiàn)驗(yàn)證及結(jié)果分析,使用了一款用戶量很大的網(wǎng)絡(luò)電視軟件作為案例,使用漏洞自動(dòng)挖掘系統(tǒng)對(duì)該軟件進(jìn)行測(cè)試分析,最后發(fā)現(xiàn)了6個(gè)緩沖區(qū)溢出漏洞。</p><p> 第6章總結(jié)與展望,總結(jié)了本文的工作,并分析了本文工作的不足和需要改進(jìn)的地方。</p><
39、p> 第二章ActiveX控件安全性分析與模糊測(cè)試技術(shù)</p><p> 作為IE瀏覽器唯一支持的控件形式,ActiveX控件的安全性問(wèn)題一直深受關(guān)注。本章將重點(diǎn)分析ActiveX控件的加載原理及其漏洞的類型和形成原因,并對(duì)模糊測(cè)試技術(shù)做相應(yīng)的介紹。</p><p> 2.1 ActiveX控件原理分析</p><p> 2.1.1 ActiveX控件
40、加載原理</p><p> ActiveX是以微軟COM(組件對(duì)象模型Commponent Object Model)技術(shù)為基礎(chǔ)建立起來(lái)的,通過(guò)創(chuàng)建帶有接口的對(duì)象,使其能夠被腳本程序(如javascript)跨進(jìn)程、甚至跨機(jī)器遠(yuǎn)程調(diào)用,降低了軟件之間的耦合性,為二進(jìn)制重用提供了一種途徑,代表著新的軟件開發(fā)技術(shù)。</p><p> 常見的ActiveX控件會(huì)被編譯成exe、dll或ocx
41、格式的PE文件,在控件內(nèi)部需要實(shí)現(xiàn)一些必須實(shí)現(xiàn)的接口,其中實(shí)現(xiàn)控件主要功能的接口必須繼承自IDispatch接口(派發(fā)接口)。該接口共定義了GetTypeInfoCount(是否支持類型信息)、GetTypeInfo(獲取類型信息接口指針)、GetIDsOfNames(獲取接口函數(shù)的索引)、Invoke(根據(jù)索引調(diào)用相應(yīng)函數(shù))四個(gè)方法,其中最重要的是GetIDsOfNames和Invoke方法。這兩個(gè)方法使得程序可以使用函數(shù)名來(lái)調(diào)用函數(shù)
42、,從而實(shí)現(xiàn)“晚綁定”(運(yùn)行期間實(shí)現(xiàn)函數(shù)綁定)。因此,IDispatch接口成為自動(dòng)化(Automation,用編程語(yǔ)言控制軟件運(yùn)行)的核心技術(shù)。</p><p> 而創(chuàng)建為雙重接口類型的ActiveX控件可以同時(shí)支持“早綁定”(通過(guò)虛函數(shù)表實(shí)現(xiàn))和晚綁定,這樣在編譯型程序中可以使用早綁定,而在腳本程序中使用晚綁定。</p><p> 此外,ActiveX控件也跟普通COM組件一樣,擁有
43、一個(gè)類標(biāo)識(shí)(CLSID)和多個(gè)接口標(biāo)識(shí)(IID),CLSID與IID都是128位的標(biāo)識(shí)符,每個(gè)類標(biāo)識(shí)有一個(gè)相應(yīng)的易于識(shí)別的字符串型的ProgID。</p><p> ActiveX控件由三個(gè)要素組成:屬性、方法、事件。</p><p> 屬性:描述控件的特征信息</p><p> 方法:控件暴露給外界的接口,使用者通過(guò)調(diào)用這些方法來(lái)完成特定的操作。</p
44、><p> 事件:用戶執(zhí)行特定操作(如鼠標(biāo)單擊、雙擊、按鍵等)后產(chǎn)生的消息通知,程序收到事件通知后可以執(zhí)行相應(yīng)的操作。</p><p> ActiveX控件需要嵌入在容器中才可以正常工作,否則對(duì)象會(huì)創(chuàng)建失敗。IE瀏覽器就是一種很好的控件容器,通過(guò)編寫一定格式的html代碼(使用<object>標(biāo)簽,并且指定clsid屬性),就可以在IE中加載指定的ActiveX控件[6]。&l
45、t;/p><p> 2.1.2 ActiveX控件的加載條件</p><p> 由于ActiveX控件一旦執(zhí)行后就擁有和瀏覽器等同的系統(tǒng)權(quán)限,因此需要一些機(jī)制來(lái)避免惡意控件的加載。主要有以下幾種機(jī)制:</p><p><b> 1、數(shù)字簽名 </b></p><p> ActiveX控件在發(fā)布前需要打上公司的數(shù)字簽名
46、證書,證明控件的合法身份。IE瀏覽器在加載控件前會(huì)檢查控件的數(shù)字簽名信息是否完整,檢查失敗則不會(huì)加載控件。</p><p><b> 2、標(biāo)記為安全</b></p><p> ActiveX控件需要在注冊(cè)表中標(biāo)記為“腳本安全”和“初始化安全”。具體來(lái)說(shuō)就是在注冊(cè)表項(xiàng)“HKEY_CLASSES_ROOT\CLSID\{控件的CLSID}\Implemented Ca
47、tegories”下面存在“{7DD95801-9882-11CF-9FA9-00AA006C42C4}”和“{7DD95802-9882-11CF-9FA9-00AA006C42C4}”這兩個(gè)子項(xiàng)。</p><p> 除此之外,ActiveX控件還可以通過(guò)實(shí)現(xiàn)IObjectSafety接口來(lái)在IE瀏覽器中將自身標(biāo)記為安全。</p><p> 3、KillBit機(jī)制</p>
48、<p> 微軟還提供了一種臨時(shí)禁止控件加載的機(jī)制,即KillBit機(jī)制。如果注冊(cè)表值“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{控件的CLSID}\Compatibility Flags”為32位長(zhǎng)整型的0x400,IE就認(rèn)為該控件已被禁用,從而拒絕加載該控件。該方法可以作為控件出現(xiàn)漏洞時(shí)的臨時(shí)補(bǔ)救措施[7
49、]。</p><p> 2.2 ActiveX控件漏洞形成分析</p><p> 2.2.1 軟件漏洞的定義</p><p> 漏洞(Vulnerability)是指計(jì)算機(jī)系統(tǒng)在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的安全型缺陷,主要包括輸入驗(yàn)證錯(cuò)誤、設(shè)計(jì)錯(cuò)誤、整數(shù)溢出、緩沖區(qū)溢出、格式化字符串錯(cuò)誤、意外情況處理錯(cuò)誤、環(huán)境錯(cuò)誤等[8]。</p&g
50、t;<p> 漏洞與功能性缺陷(bug)之間的區(qū)別是:漏洞會(huì)使攻擊者通過(guò)惡意的輸入獲得系統(tǒng)的一定權(quán)限,從而對(duì)系統(tǒng)造成破壞,或竊取機(jī)密信息。</p><p> 2.2.2 軟件漏洞的原理與分類</p><p> 從本質(zhì)上講,漏洞的形成都是程序員的疏忽造成的。由于沒有對(duì)所有可能的輸入進(jìn)行正確的處理,這使得程序在正常的輸入情況下沒有問(wèn)題,而一旦用戶有意或無(wú)意輸入了錯(cuò)誤甚至惡意
51、的數(shù)據(jù),就會(huì)使程序執(zhí)行攻擊者指定的惡意代碼,獲得系統(tǒng)權(quán)限。</p><p> 根據(jù)漏洞的類型主要可以分為以下幾種:</p><p><b> 緩沖區(qū)溢出</b></p><p> 這是迄今為止危害最大,也是覆蓋面最廣的漏洞類型。 </p><p> 所謂緩沖區(qū)溢出,是指向一個(gè)緩沖區(qū)內(nèi)拷貝的字符數(shù)組的長(zhǎng)度超過(guò)了緩沖
52、區(qū)的實(shí)際長(zhǎng)度,從而致使其它合法數(shù)據(jù)被破壞,之后執(zhí)行的指令在讀取修改后的數(shù)據(jù)后通常會(huì)導(dǎo)致程序崩潰。而精心處理的數(shù)據(jù)可以使程序跳轉(zhuǎn)到攻擊者制造的指令上來(lái),這也是該漏洞的危害所在。</p><p> 緩沖區(qū)溢出分為棧溢出和堆溢出。</p><p><b> ?。?)棧溢出</b></p><p> 棧(Stack)是程序存儲(chǔ)局部變量和調(diào)用函數(shù)所必
53、不可少的連續(xù)的內(nèi)存區(qū)域。在Windows中,程序默認(rèn)的棧大小為1M到2M,如果要在棧中分配超過(guò)棧允許長(zhǎng)度的內(nèi)存,就會(huì)發(fā)生棧溢出。可以在程序鏈接時(shí)通過(guò)開關(guān)修改默認(rèn)的棧大小。</p><p> 操作系統(tǒng)在創(chuàng)建線程時(shí),會(huì)為每個(gè)線程分配單獨(dú)的棧空間并初始化相關(guān)的數(shù)據(jù)結(jié)構(gòu)和寄存器。例如,在x86系統(tǒng)中,會(huì)使用SS(Stack Segment)寄存器(堆棧段寄存器)來(lái)記錄堆棧段的段值,使用EBP寄存器作為棧幀基址寄存器,E
54、SP寄存器作為棧頂指針。程序在進(jìn)行函數(shù)調(diào)用的時(shí)候,一般會(huì)通過(guò)“call xxx”(xxx為函數(shù)地址)指令去調(diào)用函數(shù),實(shí)際上該指令做了以下兩個(gè)操作:</p><p><b> PUSHEIP</b></p><p><b> JMP xxx</b></p><p> ?。ㄗⅲ?匯編中是不可以直接操作EIP的,這里
55、只是為了便于理解,下同)</p><p> 所以“call”指令在執(zhí)行時(shí)會(huì)自動(dòng)保存函數(shù)的返回地址,以便函數(shù)在返回時(shí)可以回到“call”指令的下一條指令。這是通過(guò)“ret n”(n為參數(shù)所占的字節(jié)數(shù))指令實(shí)現(xiàn)的,“ret n”指令做了以下兩個(gè)操作:</p><p><b> POPEIP</b></p><p><b> AD
56、Dn</b></p><p> 因此,棧中保存的函數(shù)返回地址決定了程序的執(zhí)行路徑,改變了返回地址,也就改變了程序的執(zhí)行流程。</p><p> 在函數(shù)的一開始一般會(huì)有以下創(chuàng)建標(biāo)準(zhǔn)棧幀的操作(優(yōu)化后的代碼會(huì)沒有):</p><p><b> PUSHEBP</b></p><p> MOVE
57、BP, ESP</p><p> 通過(guò)這種方式,就可以將上一次函數(shù)調(diào)用時(shí)的棧幀基址保存起來(lái),并將EBP設(shè)為新的棧幀基址,因此通過(guò)EBP值可以在棧中找到一條函數(shù)調(diào)用鏈。如圖2-1所示,根據(jù)紅框中EBP的值可以依次得到每次函數(shù)調(diào)用的棧幀,再根據(jù)函數(shù)的返回地址就得到了函數(shù)的調(diào)用堆棧,這就是堆?;厮?,在程序調(diào)試的過(guò)程中會(huì)經(jīng)常用到它。</p><p> 圖2-1 函數(shù)調(diào)用堆棧圖</p>
58、;<p> 函數(shù)在棧中可以分配的內(nèi)存大小一般是在編譯時(shí)決定的,編譯器會(huì)在函數(shù)開始的地方生成類似“SUBESP, 100”這樣的指令。也就是說(shuō),該函數(shù)只有0x100個(gè)字節(jié)的棧空間可以使用,如果函數(shù)中做了內(nèi)存拷貝的操作,而且拷貝的字節(jié)數(shù)超過(guò)了0x100,那么后面的??臻g就會(huì)被非法修改。這就是棧溢出發(fā)生的原因。最常見的情況就是由于函數(shù)的返回地址被修改而出現(xiàn)訪問(wèn)違規(guī),如果是精心構(gòu)造的數(shù)據(jù),返回地址會(huì)指向攻擊者的代碼,從而使攻
59、擊者得到了遠(yuǎn)程代碼執(zhí)行權(quán)限。</p><p><b> ?。?)堆溢出</b></p><p> 堆(Heap)是組織內(nèi)存的另一種重要方法,是程序在運(yùn)行期動(dòng)態(tài)申請(qǐng)內(nèi)存空間的主要途徑。</p><p> 堆和棧的區(qū)別主要有以下幾點(diǎn):</p><p> ??臻g的分配是固定的,是編譯時(shí)決定的,而堆空間是動(dòng)態(tài)分配的,是運(yùn)行
60、時(shí)決定的。</p><p> 棧空間是有限的,一般用于存儲(chǔ)局部變量,而堆空間相對(duì)來(lái)說(shuō)是比較大的,允許分配大塊的內(nèi)存,而且可以顯式地控制對(duì)象的生存期,在其不需要時(shí)將其釋放。</p><p> 在Windows中,棧是由高地址往低地址分配,堆由低地址往高地址分配;堆空間的管理要遠(yuǎn)遠(yuǎn)比棧空間復(fù)雜。</p><p> 由于Windows保護(hù)模式機(jī)制的存在,每個(gè)進(jìn)程空間
61、是一個(gè)線性的平面結(jié)構(gòu)。在32位系統(tǒng)上,進(jìn)程可見的內(nèi)存空間范圍均為0~0xFFFFFFFF,即虛擬地址空間。這其中高2G空間為內(nèi)核空間,低2G為用戶空間,而且用戶空間前后的64K大小均為隔離帶,不能夠訪問(wèn)。因此,用戶態(tài)程序真正能訪問(wèn)的地址空間范圍是0x00010000 – 0x7FFEFFFF。Windows通過(guò)VirtualAlloc(分配虛擬內(nèi)存)、VirtualFree(釋放虛擬內(nèi)存)等API直接操作虛擬內(nèi)存,但是Win32子系統(tǒng)為
62、了提高內(nèi)存分配的效率,實(shí)現(xiàn)了一套堆管理機(jī)制來(lái)滿足應(yīng)用程序?qū)?nèi)存的需求。即用戶應(yīng)當(dāng)通過(guò)HeapCreate(創(chuàng)建堆)、HeapAlloc(從堆中分配內(nèi)存)、HeapFree(釋放內(nèi)存)、HeapDestroy(銷毀堆)等API來(lái)創(chuàng)建和銷毀堆,這幾個(gè)API實(shí)際上調(diào)用的是ntdll.dll中的RtlCreateHeap(創(chuàng)建堆)、RtlAllocateHeap(從堆中分配內(nèi)存)、RtlFreeHeap(釋放內(nèi)存)和RtlDestroyHeap
63、(銷毀堆)。</p><p> 事實(shí)上,實(shí)際編程中人們很少直接去調(diào)用這些堆管理函數(shù),而是使用crt庫(kù)封裝的new(分配內(nèi)存)、delete(釋放內(nèi)存)或malloc(分配內(nèi)存)、free(釋放內(nèi)存)。 在Debug版本下,它們會(huì)包含一些調(diào)試代碼,可以方便編程人員發(fā)現(xiàn)存在的內(nèi)存問(wèn)題。</p><p> 如前所述,堆的內(nèi)部結(jié)構(gòu)是非常復(fù)雜的,系統(tǒng)需要多個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)維護(hù)堆的管理。每個(gè)堆由一到多
64、個(gè)內(nèi)存段(Segment)組成,第一個(gè)段(0號(hào)段)的開始處存放著一個(gè)HEAP結(jié)構(gòu)的堆頭信息;每個(gè)段會(huì)有一個(gè)HEAP_SEGMENT結(jié)構(gòu)來(lái)描述自身;一個(gè)段由若干個(gè)堆塊組成,每個(gè)堆塊會(huì)以一個(gè)8字節(jié)的HEAP_ENTRY結(jié)構(gòu)開始。這些只是維護(hù)堆結(jié)構(gòu)的最基本信息。</p><p> 堆溢出與棧溢出類似,也是由于內(nèi)存拷貝操作超出了堆分配的長(zhǎng)度,不同的是堆溢出會(huì)修改堆管理結(jié)構(gòu)中的數(shù)據(jù),造成堆管理器無(wú)法正常工作。較常見的情況
65、是堆被破壞后,在下一次分配堆(HeapAlloc)的時(shí)候發(fā)生訪問(wèn)違規(guī)。但有時(shí)堆溢出很久之后才出現(xiàn)異常,這時(shí)再來(lái)尋找原因就已經(jīng)錯(cuò)過(guò)了“第一現(xiàn)場(chǎng)”,難度會(huì)加大很多。因此,對(duì)堆的操作要格外小心。</p><p> 一般來(lái)說(shuō),棧溢出會(huì)覆蓋函數(shù)返回地址或異常處理鏈,攻擊者使用堆噴射(Heap Spray)技術(shù)便可以執(zhí)行Shellcode,因此利用的難度會(huì)低一些。</p><p> 相對(duì)于棧溢出,
66、堆溢出的利用會(huì)麻煩一些,因?yàn)闊o(wú)法直接改變指令的執(zhí)行流程。通常的思路是利用對(duì)指針的操作間接改變關(guān)鍵數(shù)據(jù)從而獲得代碼執(zhí)行權(quán)限。</p><p> 隨著Windows加大對(duì)緩沖區(qū)溢出攻擊的防范力度,例如從XP SP2開始引入隨機(jī)化PEB機(jī)制、SHE保護(hù)、堆棧Cookie保護(hù)等技術(shù),這些技術(shù)的引進(jìn)增加了對(duì)緩沖區(qū)溢出利用的難度,但是并沒有從根本上消除緩沖區(qū)溢出的發(fā)生。因此只有在軟件開發(fā)的過(guò)程中杜絕危險(xiǎn)的代碼,才能從本質(zhì)上
67、消除緩沖區(qū)溢出的出現(xiàn)。</p><p><b> 整數(shù)溢出</b></p><p> 整型變量在申明時(shí)一般會(huì)確定好類型,包括占用的字節(jié)數(shù)和是否是unsigned類型。因此,整型變量在申明時(shí)其可以表示的整數(shù)范圍就已經(jīng)確定了。如果對(duì)其賦予一個(gè)不在其表示范圍內(nèi)的整數(shù)就會(huì)發(fā)生整數(shù)溢出。整數(shù)溢出可以分為以下幾種:</p><p> ?。?)算數(shù)運(yùn)算產(chǎn)
68、生的進(jìn)位</p><p> 例如兩個(gè)大正數(shù)相加或相乘,產(chǎn)生進(jìn)位的時(shí)候就會(huì)出現(xiàn)溢出,導(dǎo)致結(jié)果不正確。</p><p> ?。?)無(wú)符號(hào)類型的上溢與下溢</p><p> 無(wú)符號(hào)數(shù)是沒有負(fù)數(shù)的,因此對(duì)一個(gè)接近于零的正數(shù)做減法操作時(shí),不小心就會(huì)下溢變成一個(gè)超大的正數(shù)。</p><p> ?。?)有符號(hào)類型與無(wú)符號(hào)類型的轉(zhuǎn)換或比較</p&g
69、t;<p> 由于這兩種類型表示的范圍不同,強(qiáng)制轉(zhuǎn)換或比較就容易出現(xiàn)問(wèn)題。例如:</p><p> int i = -1;</p><p> unsinged int j = 0xFFFFFFF0;</p><p> bool b = i > j;</p><p> 雖然i為負(fù)數(shù),但結(jié)果卻會(huì)大于j。</p&
70、gt;<p> 整數(shù)溢出本身并沒有太大的危害,一般情況只會(huì)影響計(jì)算的結(jié)果。但有時(shí)整數(shù)溢出會(huì)間接導(dǎo)致緩沖區(qū)溢出,因此也不容小視。</p><p><b> 格式化字符串</b></p><p> 成因一般是在使用包含格式化字符串操作的C語(yǔ)言函數(shù)時(shí),如fprintf、sprintf、snprintf、vprintf、vfprintf、vsprintf和
71、vsnprintf等,允許用戶輸入格式化字符串導(dǎo)致的。因此,使用這些函數(shù)時(shí)必須正確地指定格式。</p><p><b> 4、意外條件錯(cuò)誤</b></p><p> 對(duì)意外情況沒有做容錯(cuò)處理,致使程序直接拋出異常而崩潰。</p><p> 2.2.3 ActiveX控件的漏洞的特點(diǎn)與形成原因</p><p> 1
72、、ActiveX控件常見的輸入?yún)?shù)類型</p><p> ActiveX控件是基于IDispatch接口實(shí)現(xiàn)的,使用的數(shù)據(jù)類型是VARIANT類型。具體使用的數(shù)據(jù)類型與javascript語(yǔ)言中的數(shù)據(jù)類型的對(duì)應(yīng)關(guān)系如表2-1所示。</p><p> 表2-1 ActiveX控件中使用的數(shù)據(jù)類型</p><p> 2、ActiveX控件的漏洞的特點(diǎn)</p&
73、gt;<p> ActiveX控件除了會(huì)存在上述一般軟件存在的漏洞外,還具有以下一些特點(diǎn)。</p><p> (1)控件實(shí)現(xiàn)的接口主要通過(guò)腳本來(lái)調(diào)用,比如Javascript、VBScript等,因此傳入的參數(shù)需要符合相應(yīng)腳本語(yǔ)言的語(yǔ)法規(guī)則。</p><p> ?。?)控件中有可能會(huì)存在一些邏輯漏洞,主要是設(shè)計(jì)時(shí)沒有對(duì)控件安全足夠重視造成的。例如控件中存在操作注冊(cè)表、操作
74、文件、下載文件之類的接口,攻擊者可以直接使用這些接口獲得一定的權(quán)限。</p><p> MS06-014漏洞就是一個(gè)典型的邏輯漏洞,由于系統(tǒng)對(duì)使用者的權(quán)限控制不足,導(dǎo)致它允許網(wǎng)頁(yè)腳本使用控件Microsoft.XMLHTTP、Adodb.Stream和Shell.Application去下載并運(yùn)行一個(gè)遠(yuǎn)程文件。</p><p> (3)程序缺陷(bug)導(dǎo)致拒絕服務(wù)攻擊</p&g
75、t;<p> 普通的bug最多導(dǎo)致程序崩潰(Crash),但是ActiveX控件由于其遠(yuǎn)程執(zhí)行性,攻擊者只需要將惡意代碼上傳到web服務(wù)器上,用戶訪問(wèn)后瀏覽器就會(huì)發(fā)生異常而退出。這種漏洞雖然不會(huì)對(duì)系統(tǒng)造成大的危害,卻會(huì)影響用戶正常使用瀏覽器的功能。</p><p> ?。?)環(huán)境錯(cuò)誤導(dǎo)致問(wèn)題</p><p> 操作系統(tǒng)或?yàn)g覽器版本不兼容,從而致使控件無(wú)法正常工作或者程序崩
76、潰。</p><p> 3、ActiveX控件的漏洞的形成原因</p><p> ActiveX控件的漏洞形成原因主要有以下幾種:</p><p><b> ?。?)設(shè)計(jì)錯(cuò)誤</b></p><p> 大部分的邏輯漏洞都是軟件在設(shè)計(jì)時(shí)沒有充分考慮到安全性,從而給攻擊者留下了“后門”。</p><
77、p> ?。?)沒有判斷輸入?yún)?shù)的長(zhǎng)度</p><p> 某些場(chǎng)景下,有些開發(fā)人員認(rèn)為傳入的參數(shù)(比如一個(gè)文件名)長(zhǎng)度不會(huì)超過(guò)某個(gè)上限,因此使用棧來(lái)分配空間,又沒有判斷參數(shù)的長(zhǎng)度,結(jié)果就導(dǎo)致了棧溢出。</p><p> ?。?)處理邏輯未考慮特殊情況</p><p> 這里主要是對(duì)輸入字符串的處理上,例如,要對(duì)一個(gè)url做分析,取出其中的參數(shù),但是輸入的ur
78、l是這樣的“http://www.qq.com/index?a=1&?b&=&=?”,程序如果沒有正確地判斷,就容易出現(xiàn)漏洞了。</p><p> 目前還有一種利用某些控件去讀取網(wǎng)絡(luò)文件的內(nèi)容,因此通過(guò)構(gòu)造惡意的文件來(lái)挖掘漏洞。不過(guò)這已經(jīng)是屬于文件Fuzzing的范疇,本文不考慮這種情況。</p><p> ?。?)字符串處理函數(shù)的不正確使用</p>
79、<p> 程序員在編寫代碼的時(shí)候由于粗心或?qū)瘮?shù)理解錯(cuò)誤導(dǎo)致傳入了不正確的參數(shù),從而產(chǎn)生漏洞。</p><p> ?。?)特殊字符編碼轉(zhuǎn)換</p><p> 在實(shí)際中用到的編碼方式通常有Unicode、UTF-8、GBK等。如果沒有仔細(xì)考慮對(duì)編碼的處理,也會(huì)產(chǎn)生問(wèn)題。例如,UTF-8編碼的“\xff\xfe\xde”就沒有對(duì)應(yīng)的Unicode編碼。</p>&
80、lt;p> 2.3 模糊測(cè)試技術(shù)</p><p> 2.3.1 傳統(tǒng)的漏洞挖掘方法</p><p> 傳統(tǒng)的漏洞挖掘方法有以下幾種:</p><p><b> 1、手工測(cè)試</b></p><p> 手工向目標(biāo)程序發(fā)送特殊數(shù)據(jù),觀察并分析程序的反應(yīng)。這種方法完全依賴測(cè)試人員的專業(yè)水平,因此效率低下,但是準(zhǔn)
81、確性較高。</p><p><b> 2、二進(jìn)制比對(duì)</b></p><p> 又稱補(bǔ)丁對(duì)比技術(shù),攻擊者一般會(huì)在軟件公司發(fā)布軟件漏洞補(bǔ)丁后的第一時(shí)間,通過(guò)比對(duì)補(bǔ)丁包做的修改來(lái)分析漏洞的原因,并利用用戶尚未來(lái)得及打補(bǔ)丁的時(shí)間差發(fā)動(dòng)攻擊。這種方法能夠快速定位漏洞,但是如果軟件廠商做了較大改動(dòng),會(huì)使分析難度加大;而且有時(shí)源碼的微小改動(dòng)或是編譯選項(xiàng)的改變也會(huì)造成二進(jìn)制代碼
82、較大的變化。</p><p><b> 3、靜態(tài)源碼掃描</b></p><p> 這種方法適用于擁有源代碼的軟件。許多公司都有商業(yè)化的源碼掃描軟件,這些軟件通過(guò)掃描源代碼,進(jìn)行詞法和語(yǔ)法分析,并利用模式匹配的方式發(fā)現(xiàn)源代碼中對(duì)strcpy、strcat、wcscpy、wcscat、strncpy、strncat、wcsncpy、wcsncat、sprintf等危
83、險(xiǎn)函數(shù)的調(diào)用,以及其它一些安全風(fēng)險(xiǎn)。該方法可以自動(dòng)化運(yùn)行,但是會(huì)產(chǎn)生誤報(bào),需要人工對(duì)結(jié)果進(jìn)行甄別。常用的靜態(tài)源碼掃描工具有Cpp Check、VS Code Analysis等。</p><p><b> 4、逆向工程方法</b></p><p> 第一、二種方法屬于黑盒測(cè)試方法,第三種方法屬于白盒測(cè)試方法,逆向工程方法屬于灰盒測(cè)試范疇。</p>&
84、lt;p> 逆向工程最早起源于硬件領(lǐng)域,有些人為了商業(yè)或軍事利益而對(duì)硬件進(jìn)行逆向的分析。后來(lái)該方法運(yùn)用到軟件領(lǐng)域,意為通過(guò)反匯編、動(dòng)態(tài)跟蹤等方法來(lái)分析目標(biāo)軟件的工作原理、邏輯結(jié)構(gòu)、類關(guān)系和執(zhí)行流程等。</p><p> 逆向工程技術(shù)主要分為靜態(tài)分析方法和動(dòng)態(tài)分析方法。</p><p><b> ?。?)靜態(tài)分析方法</b></p><p&
85、gt; 一般通過(guò)反匯編工具(如IDA Pro)得到目標(biāo)程序的反匯編代碼,再對(duì)代碼進(jìn)行掃描,分析出匯編指令中的函數(shù)、變量等,試圖建立函數(shù)間的調(diào)用關(guān)系圖,進(jìn)而識(shí)別出代碼中的可疑匯編指令序列。常見的靜態(tài)分析技術(shù)包括:有向圖分析、污點(diǎn)數(shù)據(jù)傳播分析、IDC腳本分析和整數(shù)限制分析等。</p><p> 這種方法快速高效、易于自動(dòng)化實(shí)現(xiàn),但缺點(diǎn)是難以識(shí)別程序中的復(fù)雜邏輯,也容易產(chǎn)生誤報(bào)。特別是面向?qū)ο蠹夹g(shù)的出現(xiàn),使函數(shù)調(diào)用
86、動(dòng)態(tài)化,即只有在運(yùn)行時(shí)才能決定要調(diào)用函數(shù)的地址,對(duì)于這種情況靜態(tài)分析的方法已經(jīng)無(wú)能為力。</p><p><b> ?。?)動(dòng)態(tài)分析方法</b></p><p> 在運(yùn)行時(shí)跟蹤、分析程序的執(zhí)行流程,以得到程序在當(dāng)前輸入的情況下的運(yùn)行狀態(tài),具體可以使用動(dòng)態(tài)調(diào)試、代碼插樁等方法?;谡{(diào)試的方法是一種較為成熟、簡(jiǎn)單的方法,既可以使用現(xiàn)有的調(diào)試器(例如:WinDbg、Oll
87、yDbg等),也可以自己編程實(shí)現(xiàn)一個(gè)定制化的調(diào)試器,通過(guò)觀察寄存器、內(nèi)存以及程序的狀態(tài)來(lái)發(fā)現(xiàn)程序的異常。</p><p> 代碼插樁是一種常見的統(tǒng)計(jì)程序代碼覆蓋率的方法,不過(guò)一般是基于源碼的插樁;對(duì)于二進(jìn)制程序可以使用動(dòng)態(tài)插樁技術(shù)。這種方法可以獲得較為準(zhǔn)確的程序動(dòng)態(tài)執(zhí)行信息,但缺點(diǎn)是每次運(yùn)行都不可能獲得所有的執(zhí)行路徑,因此無(wú)法發(fā)現(xiàn)所有的潛在漏洞。改進(jìn)的方法是使用大量的不同輸入試圖覆蓋到所有分支路徑。</p
88、><p> 2.3.2 模糊測(cè)試的定義</p><p> 模糊測(cè)試,即Fuzzing Test,是一種自動(dòng)化或半自動(dòng)化的軟件測(cè)試技術(shù)。通過(guò)向程序輸入無(wú)效的、非預(yù)期的或是隨機(jī)的數(shù)據(jù),會(huì)監(jiān)測(cè)到程序發(fā)生異常,比如崩潰(Crash)或是代碼中斷言(Assertion)的失敗。模糊測(cè)試通常被用于測(cè)試軟件或電腦系統(tǒng)的安全問(wèn)題[3]。</p><p> Miller等人認(rèn)為模糊
89、測(cè)試是軟件測(cè)試中的隨機(jī)測(cè)試技術(shù);Sutton等人認(rèn)為模糊測(cè)試的重要組成部分是暴力測(cè)試;Andrea等人認(rèn)為模糊測(cè)試是一種簡(jiǎn)單的黑盒測(cè)試技術(shù);Oehlert認(rèn)為模糊測(cè)試是黑盒測(cè)試中的邊界測(cè)試技術(shù);Vuagnoux認(rèn)為模糊測(cè)試是黑盒測(cè)試、錯(cuò)誤注入、壓力測(cè)試的融合(Fuzzing技術(shù)綜述)。因此,傳統(tǒng)的模糊測(cè)試技術(shù)可以認(rèn)為是一種簡(jiǎn)單的使用錯(cuò)誤注入的黑盒暴力測(cè)試技術(shù)。</p><p> 2.3.3 模糊測(cè)試技術(shù)的原理&
90、lt;/p><p> 模糊測(cè)試技術(shù)的原理是通過(guò)向測(cè)試對(duì)象傳入一些畸形的、非預(yù)期的輸入,致使程序產(chǎn)生異常,并記錄下此時(shí)的寄存器狀態(tài)信息、內(nèi)存、堆棧等數(shù)數(shù)據(jù),來(lái)探究軟件中潛在的漏洞。</p><p> 模糊測(cè)試的核心是模糊器(Fuzzer),也稱為模糊引擎。模糊器一般可以分為兩類:基于變異的模糊器(Mutation-based Fuzzer)和基于生成的模糊器(Generation-based
91、 Fuzzer)。前者先按照文件格式或協(xié)議格式創(chuàng)建一個(gè)有效的測(cè)試數(shù)據(jù)模版,然后不斷對(duì)其中的部分?jǐn)?shù)據(jù)變異生成新的測(cè)試數(shù)據(jù),傳入目標(biāo)程序;而后者通過(guò)分析文件或協(xié)議的格式,根據(jù)格式生成測(cè)試數(shù)據(jù)。</p><p> 這兩種方法都需要對(duì)文件或協(xié)議格式有一定的了解,因此需要一定的人工參與,但是這樣可以提高模糊測(cè)試的效率。</p><p> 模糊測(cè)試的流程通??梢苑譃橐韵聨讉€(gè)階段:</p>
92、;<p><b> 目標(biāo)分析</b></p><p> 對(duì)軟件信息的了解將有助于模糊測(cè)試,這些信息包括軟件的安裝目錄、使用的開發(fā)語(yǔ)言、編譯器類型、導(dǎo)出和導(dǎo)入的API等等。對(duì)于ActiveX控件,比較重要的信息有控件注冊(cè)的接口、接口提供的方法以及參數(shù)、參數(shù)類型等。</p><p><b> 分析輸入域</b></p>
93、<p> 分析軟件可以利用的所有輸入類型和范圍,包括文件、網(wǎng)絡(luò)數(shù)據(jù)、環(huán)境變量等。對(duì)于ActiveX控件,主要的輸入域就是通過(guò)js調(diào)用控件提供的接口方法時(shí)傳入的參數(shù),每個(gè)參數(shù)的輸入域會(huì)被限制在特定的參數(shù)類型。</p><p><b> 生成測(cè)試數(shù)據(jù)</b></p><p> 根據(jù)輸入域和選擇的模糊測(cè)試的類型和算法生成測(cè)試數(shù)據(jù)。對(duì)于ActiveX控件,
94、最常見的模糊測(cè)試的數(shù)據(jù)類型就是整型和字符串型,為了方便執(zhí)行測(cè)試,可以將生成的測(cè)試數(shù)據(jù)以完整的js函數(shù)調(diào)用的形式保存在一個(gè)HTML文件中。</p><p><b> 執(zhí)行模糊測(cè)試</b></p><p> 使用目標(biāo)程序打開測(cè)試數(shù)據(jù),為了測(cè)試大量的測(cè)試數(shù)據(jù),需要目標(biāo)程序能夠自動(dòng)化地重復(fù)執(zhí)行。對(duì)于ActiveX控件,目標(biāo)程序就是IE瀏覽器,一種簡(jiǎn)單地自動(dòng)化打開測(cè)試數(shù)據(jù)的
95、方法是在網(wǎng)頁(yè)中設(shè)置幾秒后自動(dòng)跳轉(zhuǎn)到下一個(gè)網(wǎng)頁(yè),但是這種方法有時(shí)會(huì)污染測(cè)試環(huán)境,也就是之前的測(cè)試數(shù)據(jù)對(duì)后面的測(cè)試數(shù)據(jù)產(chǎn)生影響,使得測(cè)試結(jié)果不準(zhǔn)。</p><p><b> 異常監(jiān)視</b></p><p> 模糊測(cè)試的目的主要是用于發(fā)現(xiàn)程序在特定輸入時(shí)產(chǎn)生的異常,因此需要有異常監(jiān)測(cè)手段,最常見的方法就是使用調(diào)試器。調(diào)試進(jìn)程以調(diào)試方式創(chuàng)建IE進(jìn)程后,一旦ActiveX
96、控件發(fā)生異常,就會(huì)被調(diào)試進(jìn)程捕獲到。</p><p><b> 異常記錄與分析</b></p><p> 將產(chǎn)生異常的測(cè)試數(shù)據(jù)保存到指定的目錄,并打開分析程序,進(jìn)一步深入地分析異常產(chǎn)生的原因,并確定是否是漏洞以及漏洞的類型。</p><p> 2.3.4 模糊測(cè)試的優(yōu)點(diǎn)和缺點(diǎn)</p><p> 相對(duì)于傳統(tǒng)的漏洞挖
97、掘技術(shù),模糊測(cè)試技術(shù)更適合于自動(dòng)化實(shí)現(xiàn),具有準(zhǔn)確性高的優(yōu)點(diǎn),但是它也具有一些缺點(diǎn),如測(cè)試時(shí)間長(zhǎng)、屬于黑盒測(cè)試、不能保證發(fā)現(xiàn)所有的漏洞等。</p><p> 傳統(tǒng)的模糊測(cè)試方法具有以下一些缺點(diǎn)。</p><p><b> 1、測(cè)試效率低下</b></p><p> 由于測(cè)試數(shù)據(jù)輸入域空間很大(即便是32位長(zhǎng)的整型數(shù)也會(huì)有232個(gè)取值,字符串
98、取值就更多了),而被測(cè)對(duì)象是一個(gè)黑盒,要對(duì)這些測(cè)試數(shù)據(jù)做等價(jià)類劃分是不可能的。因此,要在如此巨大的輸入域中找到會(huì)導(dǎo)致異常的測(cè)試數(shù)據(jù)所花的時(shí)間也是較多的。</p><p> 2、缺乏對(duì)測(cè)試質(zhì)量的評(píng)估和度量</p><p> 模糊測(cè)試并不是一種一定會(huì)發(fā)現(xiàn)漏洞,或是能夠證明一定沒有漏洞的方法,而且測(cè)試結(jié)果沒有很好的量化指標(biāo),難以評(píng)定測(cè)試質(zhì)量。目前只能通過(guò)發(fā)現(xiàn)漏洞的數(shù)量來(lái)大致評(píng)定模糊測(cè)試的有效
99、性。</p><p><b> 3、測(cè)試數(shù)據(jù)冗余</b></p><p> 模糊測(cè)試的測(cè)試數(shù)據(jù)是隨機(jī)生成的,因此會(huì)有很多冗余數(shù)據(jù)。這些冗余數(shù)據(jù)進(jìn)行的都是無(wú)效測(cè)試,如果減少了冗余數(shù)據(jù)的數(shù)量,就會(huì)提高模糊測(cè)試的效率。</p><p> 2.3.5 進(jìn)化模糊測(cè)試思想</p><p> 針對(duì)傳統(tǒng)模糊測(cè)試的這些缺陷,后來(lái)引
100、入了進(jìn)化測(cè)試(Evolution Testing)的思想。</p><p> 進(jìn)化測(cè)試是近年來(lái)興起的一種自動(dòng)生成有效測(cè)試數(shù)據(jù)的方法。它的基本思想是在一定的準(zhǔn)則下將測(cè)試數(shù)據(jù)生成問(wèn)題轉(zhuǎn)化為求解全局最優(yōu)問(wèn)題。進(jìn)化測(cè)試技術(shù)主要的理論依據(jù)是進(jìn)化算法,目前進(jìn)化算法包括遺傳算法、模擬退火算法和爬山法,模擬退火算法和爬山法一般應(yīng)用于局部?jī)?yōu)化策略中,而遺傳算法則具有較好的全局尋優(yōu)能力[29][31]。</p>&l
101、t;p> 進(jìn)化測(cè)試具有以下優(yōu)點(diǎn):</p><p> 1、自動(dòng)化程度高,不需要人工的參與</p><p> 2、能夠自學(xué)習(xí)、自適應(yīng),自動(dòng)指導(dǎo)測(cè)試數(shù)據(jù)的生成</p><p> 3、縮小了測(cè)試數(shù)據(jù)的輸入域,減少了生成的測(cè)試數(shù)據(jù)數(shù)量,提高了測(cè)試效率</p><p> 遺傳算法(Genetic Algorithm, GA)是基于生物進(jìn)化
102、理論和遺傳學(xué)機(jī)制演化而來(lái)的隨機(jī)化搜索方法,借用了生物學(xué)中達(dá)爾文提出的“適者生存、弱者淘汰”的進(jìn)化論思想,通過(guò)模擬自然進(jìn)化過(guò)程以得到最優(yōu)解。遺傳算法最初是由美國(guó)密西根大學(xué)的J.Holland教授于1975年首次提出,并出版了頗有影響力的專著《自然與人工系統(tǒng)中的自適應(yīng)(Adaptation in Natural and Artificial Systems)》。至今,遺傳算法已廣泛應(yīng)用于生物、運(yùn)籌學(xué)、工程技術(shù)、計(jì)算機(jī)科學(xué)、圖像處理、模式識(shí)別
103、、社會(huì)科學(xué)等領(lǐng)域[28]。</p><p> 遺傳算法具有以下特點(diǎn):</p><p> 自組織、自適應(yīng)以及自學(xué)習(xí)性</p><p> 并行性 能夠以并行的方式同時(shí)搜索解空間的多個(gè)區(qū)域</p><p> 獨(dú)立性 不需要求導(dǎo)或其它輔助知識(shí),只需影響搜索方向的適應(yīng)度函數(shù)</p><p> 多解性 對(duì)于給對(duì)的問(wèn)
104、題,遺傳算法可以產(chǎn)生多個(gè)最優(yōu)解</p><p> 遺傳算法首先對(duì)測(cè)試數(shù)據(jù)進(jìn)行編碼形成個(gè)體,個(gè)體中每一位表示基因,使用隨機(jī)方法產(chǎn)生初始化種群,在之后的每次迭代中,對(duì)當(dāng)前種群應(yīng)用選擇、交叉、變異等進(jìn)化算子,并使用一定的適應(yīng)度評(píng)價(jià)機(jī)制使得每次迭代產(chǎn)生更優(yōu)的種群,最后通過(guò)對(duì)個(gè)體的解碼得到實(shí)際問(wèn)題的解。</p><p> 遺傳算法的一般流程如下:</p><p> 根據(jù)
105、問(wèn)題規(guī)模,確定參數(shù)范圍,并堆積產(chǎn)生一定規(guī)模的初始種群。個(gè)體由染色體的基因編碼表示</p><p> 評(píng)價(jià)種群,計(jì)算個(gè)體的適應(yīng)度,判斷是否滿足停止條件,若符合,輸出最佳個(gè)體機(jī)器代表的最優(yōu)解,并結(jié)束計(jì)算,否則轉(zhuǎn)向第3步</p><p> 依據(jù)適應(yīng)度選擇再生個(gè)體,適應(yīng)度高的個(gè)體被選中的概率高,適應(yīng)度低的個(gè)體被淘汰</p><p> 按照一定的交叉概率和交叉方法,生成
106、新個(gè)體</p><p> 按照一定給的變異概率和變異方法,生成新個(gè)體</p><p> 由交叉和變異產(chǎn)生新一代的種群,并返回到第2步</p><p> 程序的停止條件主要有以下三種:</p><p> 出現(xiàn)達(dá)到預(yù)定目標(biāo)的測(cè)試數(shù)據(jù);</p><p> 完成預(yù)先指定的進(jìn)化代數(shù);</p><p&
107、gt; 種群中的最優(yōu)個(gè)體連續(xù)若干代沒有改進(jìn)或平均適應(yīng)度在連續(xù)若干代基本沒有改進(jìn)。</p><p> 因此,通過(guò)將進(jìn)化測(cè)試的思想引入模糊測(cè)試中,可以有效地提高模糊測(cè)試的效率。進(jìn)化測(cè)試的關(guān)鍵在于適應(yīng)度評(píng)價(jià)機(jī)制,測(cè)試數(shù)據(jù)根據(jù)適應(yīng)度函數(shù)計(jì)算出適應(yīng)度,然后依據(jù)適應(yīng)度的高低決定保留還是放棄該測(cè)試數(shù)據(jù)。在軟件測(cè)試中,計(jì)算適應(yīng)度的方法一般是對(duì)控制流的覆蓋分析。因此,完全黑盒的模糊測(cè)試是不能使用進(jìn)化算法的,而加入反匯編產(chǎn)生的灰
108、盒模糊測(cè)試卻是可以使用的。</p><p><b> 2.4 本章小結(jié)</b></p><p> 本章首先介紹了ActvieX控件的加載原理和加載條件,它是基于COM技術(shù)和自動(dòng)化接口實(shí)現(xiàn)的一種IE擴(kuò)展組件,IE為了保證控件的安全性,會(huì)在加載前通過(guò)數(shù)字簽名、腳本安全、初始化安全、KillBit等機(jī)制來(lái)驗(yàn)證控件的安全性。接著,本章介紹了常見的漏洞原理和分類,如緩沖區(qū)溢
109、出、整數(shù)溢出、格式化字符串等;ActiveX控件漏洞獨(dú)有的一些特點(diǎn)以及形成原因;常見的漏洞挖掘方法,如手工測(cè)試、二進(jìn)制對(duì)比、靜態(tài)源碼掃描、逆向工程等。最后,介紹了模糊測(cè)試技術(shù)的定義、原理以及優(yōu)缺點(diǎn),并針對(duì)模糊測(cè)試的缺點(diǎn)引入了進(jìn)化測(cè)試的思想。</p><p> 第三章 漏洞分析相關(guān)技術(shù)</p><p> 調(diào)試器技術(shù)是動(dòng)態(tài)分析方法的關(guān)鍵技術(shù)之一,因此,本章介紹了調(diào)試器原理、調(diào)試過(guò)程中用到的
110、關(guān)鍵技術(shù)、重要的調(diào)試API等,并介紹了自動(dòng)化動(dòng)態(tài)調(diào)試的原理,以及在此基礎(chǔ)上用于計(jì)算二進(jìn)制代碼覆蓋率的方法。最后,本章介紹了基于IDA插件的靜態(tài)分析方法。</p><p><b> 3.1 調(diào)試器原理</b></p><p> 調(diào)試技術(shù)是軟件開發(fā)過(guò)程中非常重要的一種技術(shù),它可以幫助開發(fā)人員快速發(fā)現(xiàn)軟件中存在的缺陷(bug),從而有效地提高軟件開發(fā)的質(zhì)量。</p
111、><p> 雖然像VS、WinDbg這樣的調(diào)試器可以方便地進(jìn)行源碼級(jí)調(diào)試,但事實(shí)上它們?cè)诘讓由隙际鞘褂昧薈PU提供的指令級(jí)調(diào)試。這些調(diào)試器通過(guò)符號(hào)文件(PDB)獲取程序中包含的所有符號(hào),然后建立每條指令與源碼的映射關(guān)系,并在上層屏蔽了指令的細(xì)節(jié),使用戶以為調(diào)試器是基于源碼語(yǔ)句的調(diào)試。</p><p> 調(diào)試器為了可以調(diào)試所有的應(yīng)用程序,做到盡量的通用性,對(duì)于下斷點(diǎn)、單步調(diào)試這些操作都是由用
112、戶自己決定的。因此,整個(gè)調(diào)試工作難以實(shí)現(xiàn)自動(dòng)化。</p><p> 為此,實(shí)現(xiàn)一個(gè)定制化的自動(dòng)調(diào)試工具,將非常有助于漏洞的自動(dòng)化分析工作。事實(shí)上,Windows提供了一系列的調(diào)試API,使用這些API是可以實(shí)現(xiàn)一個(gè)定制化的調(diào)試工具的。</p><p> 通常,要讓調(diào)試進(jìn)程具有調(diào)試被調(diào)試進(jìn)程的權(quán)限,有兩種方法:一種是使用CreateProcess(創(chuàng)建進(jìn)程)以DEBUG_ONLY_THI
113、S_PROCESS或DEBUG_PROCESS作為參數(shù)創(chuàng)建被調(diào)試進(jìn)程,這兩個(gè)選項(xiàng)的差別是前者只會(huì)調(diào)試創(chuàng)建的這個(gè)被調(diào)試進(jìn)程,而后者可以調(diào)試創(chuàng)建的所有子進(jìn)程;第二種方法是使用DebugActiveProcess將調(diào)試進(jìn)程附加到被調(diào)試進(jìn)程上。</p><p> 調(diào)試進(jìn)程獲取到對(duì)被調(diào)試進(jìn)程的調(diào)試權(quán)限后,使用 WaitForDebugEvent等待調(diào)試事件的發(fā)生。被調(diào)試進(jìn)程只要發(fā)生下列任一種事件,都會(huì)通知調(diào)試進(jìn)程,并使自
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于模糊測(cè)試的activex控件 漏洞挖掘研究——碩士論文
- 基于模糊測(cè)試的activex控件 漏洞挖掘研究——碩士論文
- 基于模糊測(cè)試的ActiveX控件漏洞自動(dòng)挖掘研究.pdf
- 基于改進(jìn)模糊測(cè)試的Web漏洞挖掘算法研究.pdf
- 基于環(huán)境的漏洞挖掘模糊測(cè)試技術(shù)研究.pdf
- 基于改進(jìn)的內(nèi)存模糊測(cè)試的漏洞挖掘方法研究.pdf
- 基于模糊測(cè)試的加密協(xié)議漏洞挖掘方法研究.pdf
- 基于模糊測(cè)試的漏洞挖掘及相關(guān)攻防技術(shù)研究.pdf
- 基于內(nèi)存數(shù)據(jù)模糊測(cè)試的漏洞挖掘機(jī)制的研究.pdf
- 基于模糊的網(wǎng)絡(luò)協(xié)議漏洞挖掘技術(shù)研究.pdf
- DWG文件離線瀏覽ActiveX控件研究.pdf
- 專用ActiveX控件的設(shè)計(jì)與開發(fā).pdf
- 畢業(yè)設(shè)計(jì)--基于模糊測(cè)試的漏洞發(fā)現(xiàn)
- 基于ActiveX的負(fù)荷優(yōu)化分配控件的開發(fā)與研究.pdf
- 實(shí)驗(yàn)八 activex 控件的創(chuàng)建和使用
- 中美碩士論文結(jié)論部分模糊限制語(yǔ)分析
- 碩士論文——船舶排放實(shí)船測(cè)試方法研究
- Firefox中支持ActiveX控件運(yùn)行的研究與實(shí)現(xiàn).pdf
- 基于ActiveX技術(shù)的蒙文編輯控件的設(shè)計(jì)和實(shí)現(xiàn).pdf
- 基于模糊綜合評(píng)價(jià)法的湖底隧道施工項(xiàng)目質(zhì)量評(píng)價(jià)體系研究碩士論文
評(píng)論
0/150
提交評(píng)論