2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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>  基于錯(cuò)誤注入的組件安全性測(cè)試研究</p><p>  A Thesis Submitted in Partial Fulfillment of the Requirements</p><p>  for the Degree of Master of Engineerin

2、g</p><p>  Research on Security Testing of Software Component Based on Fault Injection</p><p>  Huazhong University of Science and Technology</p><p>  Wuhan 430074, P. R. China</

3、p><p>  June, 2008</p><p><b>  獨(dú)創(chuàng)性聲明</b></p><p>  本人聲明所呈交的學(xué)位論文是我個(gè)人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。盡我所知,除文中已經(jīng)標(biāo)明引用的內(nèi)容外,本論文不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫(xiě)過(guò)的研究成果。對(duì)本文的研究做出貢獻(xiàn)的個(gè)人和集體,均已在文中以明確方式標(biāo)明。本人完全意識(shí)

4、到本聲明的法律結(jié)果由本人承擔(dān)。</p><p>  學(xué)位論文作者簽名:                        </p><p>  日期:

5、 年 月 日 </p><p>  學(xué)位論文版權(quán)使用授權(quán)書(shū)</p><p>  本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,即:學(xué)校有權(quán)保留并向國(guó)家有關(guān)部門(mén)或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)華中科技大學(xué)可以將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。</p>

6、<p>  保密□,在_______年解密后適用本授權(quán)書(shū)。</p><p>  本論文屬于           </p><p><b>  不保密。</b></p><p>  (請(qǐng)?jiān)谝陨戏娇騼?nèi)打“√”) <

7、;/p><p>  學(xué)位論文作者簽名:        指導(dǎo)教師簽名: </p><p>  日期: 年 月 日            日期: 年

8、月 日 </p><p><b>  摘 要</b></p><p>  隨著基于組件的軟件開(kāi)發(fā)技術(shù)的出現(xiàn),組件——特別是第三方組件的使用,大大提高了軟件開(kāi)發(fā)的效率。組件技術(shù)的基礎(chǔ)是存在大量的組件,因此,組件的可靠性和安全性就顯得尤為重要。然而有關(guān)組件的軟件測(cè)試技術(shù)的研究還相對(duì)薄弱,組件的安全性測(cè)試更是軟件測(cè)試?yán)碚撘粋€(gè)新的研究方向,其理論和技術(shù)的研究對(duì)于

9、促進(jìn)組件技術(shù)的發(fā)展具有重要的理論價(jià)值和現(xiàn)實(shí)意義。</p><p>  由于不同于傳統(tǒng)的軟件模塊,組件以第三方復(fù)用為目的進(jìn)行開(kāi)發(fā),多數(shù)情況下源代碼不可見(jiàn),對(duì)組件尤其是第三方組件只能采用基于“黑盒”的安全性測(cè)試方法。在當(dāng)今黑盒安全性測(cè)試領(lǐng)域,錯(cuò)誤注入技術(shù)作為一種模擬攻擊和動(dòng)態(tài)執(zhí)行分析的有效技術(shù),在軟件測(cè)評(píng)和系統(tǒng)安全性分析方面具有明顯的優(yōu)勢(shì)。它根據(jù)軟件代碼運(yùn)行所產(chǎn)生的行為而不是簡(jiǎn)單地從其結(jié)構(gòu)來(lái)研究軟件的安全漏洞,這種方

10、法有利于發(fā)現(xiàn)那些通過(guò)靜態(tài)結(jié)構(gòu)分析所無(wú)法發(fā)現(xiàn)的新的潛在安全漏洞來(lái)源。</p><p>  SDFI(Static and Dynamic Fault Injection)是一種基于錯(cuò)誤注入技術(shù)的針對(duì)組件特別是第三方組件的安全性測(cè)試方法。SDFI建立在安全漏洞分類學(xué)研究的基礎(chǔ)之上,給出一種組件安全錯(cuò)誤注入測(cè)試模型FIM(Fault Injection Model)。FIM針對(duì)組件運(yùn)行前和運(yùn)行時(shí)兩個(gè)不同時(shí)機(jī),選擇兩種不

11、同的錯(cuò)誤注入檢測(cè)方法——接口參數(shù)錯(cuò)誤注入和動(dòng)態(tài)環(huán)境錯(cuò)誤注入,從而達(dá)到有針對(duì)性地高效率測(cè)試組件安全漏洞的目的。SDFI分別針對(duì)接口參數(shù)錯(cuò)誤注入及動(dòng)態(tài)環(huán)境錯(cuò)誤注入測(cè)試用例“組合爆炸”問(wèn)題,給出相應(yīng)的EEC(Exceptional Elements Coverage)和DSW(Division and Sorting by Weight)測(cè)試用例約減算法。在研究項(xiàng)目COM組件安全測(cè)試系統(tǒng)CSTS(Component Security Test

12、ing System)中,設(shè)計(jì)和實(shí)現(xiàn)了自動(dòng)化錯(cuò)誤注入子系統(tǒng),并使用第三方COM組件進(jìn)行測(cè)試,驗(yàn)證了SDFI的有效性。</p><p>  關(guān)鍵詞:組件,錯(cuò)誤注入,安全漏洞,接口錯(cuò)誤注入,環(huán)境錯(cuò)誤注入</p><p><b>  Abstract</b></p><p>  Along with the appearance of softwa

13、re development technology based on component, the component, especially the third party component, raised the software development efficiency greatly. Component technology based on massive components, therefore the relia

14、bly and security of component are especially significant. However, the component testing is still weak, component security testing is a new research direction of the software testing, its theory and technology will have

15、the important value and p</p><p>  As is different from the traditional software modules, components developed for the third parties' reusable purpose, in most cases the source code is not visible, the s

16、ecurity testing of component especially the third party component can only be based on the "black box" methods. In today's black box security testing, fault injection as an effective technology of attack si

17、mulation and dynamic analysis has obvious advantages in software evaluation and analysis of system security. From the running </p><p>  SDFI (Static and Dynamic Fault Injection) is one kind of component secu

18、rity testing method based on fault injection. On the basis of the research in security vulnerabilities taxonomy, SDFI gave one kind of fault injection model-FIM (Fault Injection Model). Before running and after running,

19、FIM respectively chose different fault injection methods –interface parameter fault injection and dynamic environment fault injection, to achieve the purpose of security testing of component vulnerability with</p>

20、<p>  Keywords:Component, Fault Injection, Security Vulnerability, Interface Fault Injection, Environment Fault Injection</p><p><b>  目 錄</b></p><p><b>  摘 要I</b>

21、;</p><p>  AbstractII</p><p><b>  1緒 論</b></p><p>  1.1研究背景和意義(1)</p><p>  1.2國(guó)內(nèi)外研究現(xiàn)狀(2)</p><p>  1.3研究目標(biāo)和方法(7)</p><p>  

22、1.4本文的組織結(jié)構(gòu)(7)</p><p>  2組件安全錯(cuò)誤注入測(cè)試方法</p><p>  2.1組件安全性測(cè)試(9)</p><p>  2.2錯(cuò)誤注入測(cè)試方法(13)</p><p>  2.3基于錯(cuò)誤注入的組件安全測(cè)試方法(17)</p><p>  2.4本章小結(jié)(22)</p&

23、gt;<p>  3接口參數(shù)錯(cuò)誤注入方法</p><p>  3.1接口參數(shù)錯(cuò)誤注入概念(23)</p><p>  3.2基于Ballista的接口參數(shù)錯(cuò)誤注入方法(24)</p><p>  3.3本章小結(jié)(28)</p><p>  4動(dòng)態(tài)環(huán)境錯(cuò)誤注入方法</p><p>  4.1

24、動(dòng)態(tài)環(huán)境錯(cuò)誤注入概念(29)</p><p>  4.2動(dòng)態(tài)環(huán)境錯(cuò)誤注入關(guān)鍵問(wèn)題(30)</p><p>  4.3基于EAI模型的動(dòng)態(tài)環(huán)境錯(cuò)誤注入方法(31)</p><p>  4.4本章小結(jié)(40)</p><p>  5CSTS中錯(cuò)誤注入子系統(tǒng)實(shí)現(xiàn)</p><p>  5.1組件安全測(cè)試系統(tǒng)

25、(41)</p><p>  5.2錯(cuò)誤注入子系統(tǒng)設(shè)計(jì)(45)</p><p>  5.3系統(tǒng)實(shí)現(xiàn)關(guān)鍵技術(shù)(47)</p><p>  5.4本章小結(jié)(50)</p><p>  6COM組件測(cè)試及效果評(píng)估</p><p>  6.1COM組件測(cè)試(51)</p><p> 

26、 6.2測(cè)試效果評(píng)估(58)</p><p>  6.3本章小結(jié)(60)</p><p><b>  7結(jié)束語(yǔ)</b></p><p>  7.1本文工作總結(jié)(61)</p><p>  7.2后續(xù)工作展望(62)</p><p><b>  致 謝(63)<

27、/b></p><p><b>  參考文獻(xiàn)(64)</b></p><p>  附錄 攻讀學(xué)位期間參與的科研項(xiàng)目(69)</p><p><b>  緒 論</b></p><p><b>  研究背景和意義</b></p><p>  隨

28、著計(jì)算機(jī)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)硬件性能越來(lái)越高,由于較少考慮硬件的局限以及人們的實(shí)際需求,相應(yīng)的軟件規(guī)模越來(lái)越龐大、結(jié)構(gòu)也越來(lái)越復(fù)雜。傳統(tǒng)面向過(guò)程的軟件開(kāi)發(fā)技術(shù),已無(wú)法勝任軟件開(kāi)發(fā)過(guò)程中對(duì)效率和資源充分利用的要求。為了提高軟件開(kāi)發(fā)的效率,面向?qū)ο蠹敖⒃诿嫦驅(qū)ο蠹夹g(shù)基礎(chǔ)之上的組件技術(shù)得到廣泛應(yīng)用,已成為軟件開(kāi)發(fā)技術(shù)主流[1]。組件技術(shù)的應(yīng)用引入了封裝和可重用等概念,特別是第三方組件的使用,大大提高了軟件開(kāi)發(fā)的效率、降低了軟件開(kāi)發(fā)的成本,

29、但同時(shí)也增加了軟件可靠性和安全性的風(fēng)險(xiǎn)。不可靠或不安全的組件往往成為軟件系統(tǒng)中最薄弱的環(huán)節(jié),該環(huán)節(jié)的斷裂將導(dǎo)致整個(gè)系統(tǒng)的崩潰[2]。因此,組件的可靠性和安全性是不容忽視的重要問(wèn)題,它的好壞與否將直接關(guān)系到整個(gè)系統(tǒng)的可靠性和安全性以及質(zhì)量的優(yōu)與劣。作為保證安全性的重要手段,組件安全性測(cè)試也自然成為重要的研究?jī)?nèi)容。</p><p>  然而,與在組件化程序分析、設(shè)計(jì)方法以及如何構(gòu)筑組件系統(tǒng)等方面獲得的豐富研究成果相比

30、,有關(guān)組件和基于組件的軟件測(cè)試技術(shù)的研究還相對(duì)薄弱[3],尤其是組件的安全性測(cè)試,更是軟件測(cè)試?yán)碚撘粋€(gè)新的研究方向,其理論和技術(shù)的研究將對(duì)于促進(jìn)組件化技術(shù)的發(fā)展具有重要的理論價(jià)值和現(xiàn)實(shí)意義。</p><p>  錯(cuò)誤注入作為一種有效的安全性測(cè)試技術(shù),在評(píng)估硬件和軟件領(lǐng)域的可靠性和安全性方面都獲得了充分的肯定[4],是一個(gè)強(qiáng)大的技術(shù)工具,可以在很大程度上改善軟件的可靠性和安全性。其最大優(yōu)勢(shì)在于不僅可以模擬對(duì)軟件應(yīng)用

31、的惡意攻擊,加速待測(cè)軟件故障的發(fā)生,其實(shí)施過(guò)程還可以實(shí)現(xiàn)自動(dòng)化[5]。更為重要的是,錯(cuò)誤注入從軟件代碼運(yùn)行所產(chǎn)生的行為而不是簡(jiǎn)單地從其結(jié)構(gòu)來(lái)研究軟件的安全漏洞,這種方法有利于使測(cè)試者發(fā)現(xiàn)那些通過(guò)靜態(tài)結(jié)構(gòu)分析所無(wú)法發(fā)現(xiàn)的新的潛在安全漏洞來(lái)源[6]。因此,錯(cuò)誤注入安全性測(cè)試方法在軟件測(cè)評(píng)和系統(tǒng)安全性分析方面具有明顯的優(yōu)勢(shì),值得進(jìn)一步研究將其應(yīng)用到組件安全性測(cè)試當(dāng)中。</p><p><b>  國(guó)內(nèi)外研究現(xiàn)

32、狀</b></p><p><b>  組件安全性測(cè)試</b></p><p>  目前,組件安全性測(cè)試模型、方法和技術(shù),國(guó)內(nèi)外只有為數(shù)不多的研究,并且沒(méi)有任何已實(shí)現(xiàn)的組件安全性測(cè)試工具。</p><p>  國(guó)內(nèi),張勇[2]提出一種基于規(guī)格說(shuō)明的組件安全性測(cè)試方法,該方法通過(guò)對(duì)組件規(guī)格的說(shuō)明分析提取出組件安全性相關(guān)的屬性,形成安全

33、性測(cè)試規(guī)格說(shuō)明,設(shè)計(jì)出不同的違反安全性測(cè)試規(guī)格的錯(cuò)誤注入測(cè)試案例,從而進(jìn)行安全性測(cè)試。然而,從組件規(guī)格說(shuō)明當(dāng)中如何提取組件安全性相關(guān)屬性文中卻缺乏可操作的步驟,只是簡(jiǎn)單說(shuō)明需要結(jié)合測(cè)試者對(duì)組件可能存在漏洞的了解以及設(shè)計(jì)者自身的經(jīng)驗(yàn)產(chǎn)生,顯然,該方法的有效性依賴于人工的知識(shí)和經(jīng)驗(yàn),因而不是一種通用的測(cè)試方法,不利于組件安全性測(cè)試的自動(dòng)化。</p><p>  國(guó)外,Reliable Software Technol

34、ogies公司的Anup K. Ghosh 和 Gary McGraw[7]提出了一種CSC(Component Security Certification,組件安全驗(yàn)證)管道模型:該模型包括測(cè)試計(jì)劃、“白盒”測(cè)試、“黑盒”測(cè)試和驗(yàn)證通過(guò)后的數(shù)字簽名四個(gè)順序子管道,組成了一個(gè)全面和標(biāo)準(zhǔn)的組件安全性測(cè)試架構(gòu)。其中,無(wú)論是“白盒”還是“黑盒”測(cè)試方法,進(jìn)行組件的安全性測(cè)試最主要的手段都是錯(cuò)誤注入方法,即利用錯(cuò)誤的輸入或結(jié)構(gòu)作用于被測(cè)組件,

35、觀察組件在錯(cuò)誤的情況下是否能正確運(yùn)行,從而得出組件的安全性結(jié)論。然而,對(duì)組件源代碼進(jìn)行“白盒”測(cè)試,姑且不論組件的源代碼是否可獲得,基于源代碼的錯(cuò)誤注入是否對(duì)應(yīng)于現(xiàn)實(shí)的漏洞攻擊也是一個(gè)關(guān)系到測(cè)試有效性的重要問(wèn)題[8];同樣,對(duì)組件進(jìn)行不知道源代碼的“黑盒”測(cè)試,只對(duì)組件公開(kāi)的接口注入“惡意”的輸入值從而觸發(fā)安全漏洞又是不充分的測(cè)試方法。因此,CSC作為一種理論模型,有一定的局限性,需要進(jìn)一步的加以創(chuàng)新和完善。</p>&l

36、t;p>  在組件安全性測(cè)試相關(guān)領(lǐng)域,Nimal Nissanke[9]等人討論了影響組件安全的因素,利用一種簡(jiǎn)單的Sendmail安全模型,提出了一種對(duì)組件安全進(jìn)行建模和分析的框架,是一種確保組件安全的形式化方法。而Khaled Md.Khan[10, 11]和Jun Han[12, 13]等人則從提高組件安全的可測(cè)性角度出發(fā),提出對(duì)組件的安全性特征進(jìn)行描述,將組件的安全需求規(guī)格嵌入到組件的“功能性”需求規(guī)格當(dāng)中,從而方便組件的

37、安全性測(cè)試,但是針對(duì)不同的組件完備而規(guī)范地描述其所有應(yīng)用環(huán)境下的安全屬性是很困難的,尤其是對(duì)不知道使用方的第三方組件而言,因而組件的安全需求規(guī)格目前未能形成一種可行的標(biāo)準(zhǔn)。另外,Bertolino 和 Polini[14]將一個(gè)“間諜”類植入到待測(cè)組件之中,以便收集和比較待測(cè)組件運(yùn)行時(shí)的狀態(tài)和資源分配情況,從而提出了一種組件部屬的集成測(cè)試框架;Jennifer M. Haddox[15]提出了一種在一個(gè)特定系統(tǒng)中觀察和測(cè)試第三方組件的“

38、Wrapper”(包裹器)方法,該方法使用包裹器來(lái)截獲系統(tǒng)傳遞給組件的輸入或者組件返回給系統(tǒng)的輸出,用以檢測(cè)組件的異常行為并防止商業(yè)軟組件</p><p><b>  錯(cuò)誤注入技術(shù)</b></p><p>  錯(cuò)誤注入(Fault Injection)作為一種測(cè)試技術(shù)在評(píng)估硬件和軟件領(lǐng)域的可靠性和安全性方面都獲得了充分的肯定,被認(rèn)為是一個(gè)強(qiáng)大的技術(shù)工具,可在很大程度上

39、改善軟件的可靠性和安全性[16]。錯(cuò)誤注入技術(shù)是指按照特定的錯(cuò)誤模型,用人為的、有意識(shí)的方式產(chǎn)生錯(cuò)誤,并施加于待測(cè)系統(tǒng)中,用以加速該系統(tǒng)的錯(cuò)誤和故障的發(fā)生,同時(shí)觀測(cè)并反饋系統(tǒng)對(duì)所注入錯(cuò)誤的響應(yīng)信息,通過(guò)分析對(duì)系統(tǒng)進(jìn)行驗(yàn)證和評(píng)價(jià)的過(guò)程[17]。錯(cuò)誤注入概念很早由容錯(cuò)技術(shù)派生而來(lái)。</p><p>  19世紀(jì)70年代,當(dāng)時(shí)首次用來(lái)在硬件級(jí)別引入故障[18]。這種類型的錯(cuò)誤注入稱之為硬件實(shí)現(xiàn)的錯(cuò)誤注入(Hardwar

40、e Implemented Fault Injection,縮寫(xiě)為HWIFI),其主要用來(lái)作為測(cè)試硬件系統(tǒng)的可靠性。第一個(gè)硬件錯(cuò)誤注入實(shí)驗(yàn)中所涉及到的僅僅是將電路板上的連接短路,以觀察橋接故障對(duì)系統(tǒng)的影響。后來(lái)擴(kuò)展該項(xiàng)技術(shù),諸如轟擊一個(gè)電路板的某個(gè)特定區(qū)域。不久發(fā)現(xiàn),錯(cuò)誤其實(shí)可以通過(guò)軟件技術(shù)引入,而且通過(guò)軟件技術(shù)引入錯(cuò)誤對(duì)評(píng)估軟件系統(tǒng)更為有效。對(duì)應(yīng)的,將之稱為軟件實(shí)現(xiàn)的錯(cuò)誤注入(Software Implemented Fault In

41、jection,縮寫(xiě)為SWIFI),簡(jiǎn)稱軟件錯(cuò)誤注入(SFI)。軟件錯(cuò)誤注入[19]是一種通過(guò)在軟件系統(tǒng)中人為地、有計(jì)劃地引入錯(cuò)誤,分析系統(tǒng)是否能檢測(cè)并且從錯(cuò)誤中恢復(fù)來(lái),加速測(cè)評(píng)其容錯(cuò)機(jī)制的技術(shù)。</p><p>  最早將軟件錯(cuò)誤注入技術(shù)引入軟件測(cè)試領(lǐng)域可以追溯到1972年Harlan Mill[20] (IBM)提出的錯(cuò)誤種子技術(shù)(Fault seeding approach)。該方法是預(yù)先將一些錯(cuò)誤注入到程

42、序中,通過(guò)計(jì)算測(cè)試程序中發(fā)現(xiàn)的錯(cuò)誤數(shù)量,來(lái)評(píng)估程序中還有多少實(shí)際的錯(cuò)誤。該技術(shù)是軟件錯(cuò)誤注入技術(shù)的前身。后來(lái),發(fā)展成為分析系統(tǒng)是否能檢測(cè)并且從錯(cuò)誤中恢復(fù)以評(píng)估其容錯(cuò)能力的技術(shù)。為了充分測(cè)試代碼路徑,尤其是用其他方法很難測(cè)試到錯(cuò)誤和異常處理(Error and exception handling)代碼路徑,錯(cuò)誤注入也是一種提高測(cè)試覆蓋率的有效技術(shù)[21]。它常用于壓力測(cè)試中,并被廣泛認(rèn)為是開(kāi)發(fā)健壯性軟件的一種重要技術(shù)[22]。</

43、p><p>  在過(guò)去的30多年中,錯(cuò)誤注入技術(shù)的研究對(duì)容錯(cuò)系統(tǒng)的設(shè)計(jì)和應(yīng)用起到了重要的作用。在操作系統(tǒng)的健壯性測(cè)試方面,錯(cuò)誤注入技術(shù)已經(jīng)取得了空前的成功[23]。其應(yīng)用背景也從容錯(cuò)系統(tǒng),向分布式系統(tǒng)、嵌入式系統(tǒng)以及Internet領(lǐng)域滲透。其分析模擬包括Markov模型、Petri網(wǎng)和故障樹(shù)等。最近十年的發(fā)展則是把它應(yīng)用到了測(cè)試系統(tǒng)的安全屬性上。</p><p>  在軟件安全性測(cè)試領(lǐng)域,A

44、nup K. Ghosh等人[4]提出了一種可適應(yīng)脆弱性分析法( Adaptive Vulnerability Analysis,簡(jiǎn)稱AVA ),該方法利用錯(cuò)誤注入技術(shù)對(duì)軟件源代碼進(jìn)行自動(dòng)的“白盒”動(dòng)態(tài)安全測(cè)試與評(píng)估;WenLiang Du等人[24]則提出了另外一種基于“黑盒” 的環(huán)境錯(cuò)誤注入方法來(lái)檢測(cè)軟件內(nèi)部的安全漏洞(下文“環(huán)境錯(cuò)誤注入”進(jìn)一步闡述)。美國(guó)Reliable Software Technologies公司在90年代末

45、根據(jù)上述AVA算法研究開(kāi)發(fā)了一套軟件安全測(cè)試評(píng)估系統(tǒng)——錯(cuò)誤注入安全測(cè)試工具(Fault Injection Security Tool,簡(jiǎn)稱FIST)[25]。這套工具可以自動(dòng)化的對(duì)用C或C++語(yǔ)言編寫(xiě)的程序進(jìn)行“白盒”安全性分析。其他與 FIST或AVA類似的錯(cuò)誤注入測(cè)試工具和方法還包括:基于代碼的分析方法StackGuard,它通過(guò)判斷推出堆棧的返回地址是否被重寫(xiě)進(jìn)而決定是否中止程序運(yùn)行的辦法來(lái)保護(hù)緩沖區(qū)免受“stack smas

46、hing”攻擊[26],以及Fuzz工具[27]。Fuzz雖然也可以用于緩沖區(qū)溢出的測(cè)試,但由于</p><p>  將錯(cuò)誤注入技術(shù)應(yīng)用于組件安全性測(cè)試,由于組件尤其是第三方組件源代碼不可知,錯(cuò)誤注入只能從如下三種途徑進(jìn)行考慮:(1)二進(jìn)制代碼(Binary Code);(2) 接口(Interface);(3) 環(huán)境(Environment)。在二進(jìn)制代碼錯(cuò)誤注入方面,João Durães

47、和Henrique Madeira[28]提出的G-SWFIT(Generic Software Fault Injection Technique,通用軟件錯(cuò)誤注入技術(shù))是一種對(duì)COTS組件的二進(jìn)制代碼進(jìn)行變異的錯(cuò)誤注入技術(shù),它通過(guò)掃描二進(jìn)制代碼反轉(zhuǎn)的匯編代碼匹配特定的低級(jí)指令模式,然后根據(jù)與這些模式對(duì)應(yīng)的高級(jí)源代碼中的錯(cuò)誤產(chǎn)生二進(jìn)制代碼變異版本并執(zhí)行。實(shí)際上,該方法是一種變異測(cè)試,主要用于評(píng)價(jià)組件所在系統(tǒng)的容錯(cuò)機(jī)制,即用于集成測(cè)試,

48、而遠(yuǎn)非對(duì)組件進(jìn)行復(fù)雜的安全性測(cè)試。采用二進(jìn)制代碼掃描組件安全漏洞的方法[29],首先其本質(zhì)是一種檢測(cè)技術(shù),而非測(cè)試技術(shù);其次涉及的技術(shù)要求比較高,如反匯編技術(shù)、模式識(shí)別技術(shù)等;最后,誤報(bào)率高,檢測(cè)出來(lái)的潛在漏洞非常多,需要人工去驗(yàn)證,效率比較低。相比于二進(jìn)制方法,接口和環(huán)境更具現(xiàn)實(shí)</p><p>  接口錯(cuò)誤注入(Interface Fault Injection)</p><p>  

49、組件接口錯(cuò)誤注入中,錯(cuò)誤是通過(guò)影響組件的輸入、輸出參數(shù)或返回結(jié)果來(lái)引入一個(gè)組件的接口。其思想是組件內(nèi)部的錯(cuò)誤可以反映到接口上,錯(cuò)誤的傳播也是通過(guò)這些接口。在源代碼不可知的情況下進(jìn)行組件測(cè)試,這個(gè)技術(shù)是錯(cuò)誤注入比較常用的方法。</p><p>  在目前的接口錯(cuò)誤注入技術(shù)中,通過(guò)崩潰API參數(shù)的接口錯(cuò)誤注入常用于評(píng)估一個(gè)操作系統(tǒng)組件的應(yīng)用編程接口或COTS組件接口的“魯棒性”或健壯性,即描述在高強(qiáng)度輸入環(huán)境下或者在

50、無(wú)效數(shù)據(jù)輸入時(shí),其各項(xiàng)功能能夠保持正確運(yùn)行的程度。在這方面,有兩種可移植的方法特別針對(duì)于測(cè)試COTS組件的魯棒性。一個(gè)是Fuzz測(cè)試[26](“模糊測(cè)試”,最早源于1990年的一篇論文[31],指的是用完全隨機(jī)的輸入數(shù)據(jù)來(lái)測(cè)試程序,所以也叫做“Monkey Testing”),該方法通過(guò)產(chǎn)生可能導(dǎo)致API出現(xiàn)問(wèn)題的方式隨機(jī)地構(gòu)造輸入數(shù)據(jù)流進(jìn)行自動(dòng)測(cè)試,但由于是隨機(jī)檢測(cè)因而時(shí)間開(kāi)銷較大,測(cè)試效率不高;另一個(gè)是卡耐基梅隆大學(xué)的Ballist

51、a方法[32],該方法通過(guò)使用有效和異?;旌系妮斎肓髟诮涌诩?jí)別自動(dòng)執(zhí)行錯(cuò)誤注入,例如一個(gè)用來(lái)讀取的文件句柄傳遞到一個(gè)文件寫(xiě)函數(shù)的參數(shù)中,以檢測(cè)函數(shù)調(diào)用是否會(huì)導(dǎo)致系統(tǒng)崩潰和掛起,由于該方法是基于參數(shù)數(shù)據(jù)類型而非行為規(guī)格說(shuō)明,實(shí)現(xiàn)上又結(jié)合面向?qū)ο蠓椒?,因而具有很?qiáng)的可擴(kuò)展性。</p><p>  基于接口錯(cuò)誤注入的方法開(kāi)發(fā)了一些有效的健壯性測(cè)試工具,如Ballista[33]、 JACA Fault Injectio

52、n Tool[34]等。然而,因?yàn)獒槍?duì)的是健壯性測(cè)試,與安全性測(cè)試有一定差別:軟件使用過(guò)程中,軟件安全漏洞被攻擊往往都是使用了一些非常規(guī)、語(yǔ)義上非安全或有潛在危害的輸入?yún)?shù)[35],與常規(guī)的軟件正確性測(cè)試(如健壯性測(cè)試)相比,軟件安全性測(cè)試對(duì)測(cè)試用例的要求要高得多,既要考慮字符集本身,也要考慮字符集的語(yǔ)義及潛在危害性。因而對(duì)組件安全測(cè)試還需要進(jìn)一步研究。</p><p>  環(huán)境錯(cuò)誤注入(Environment

53、Fault Injection)</p><p>  環(huán)境錯(cuò)誤注入是一種非常好的自動(dòng)化軟件測(cè)試方法,這種方法在協(xié)議安全測(cè)試領(lǐng)域中都已經(jīng)得到了廣泛應(yīng)用。它是一種動(dòng)態(tài)的測(cè)試軟件安全漏洞的技術(shù),建立在對(duì)系統(tǒng)安全漏洞分類模型的基礎(chǔ)上,通過(guò)選擇一個(gè)恰當(dāng)?shù)腻e(cuò)誤模型,測(cè)試系統(tǒng)有意識(shí)地觸發(fā)軟件內(nèi)部存在的安全漏洞。</p><p>  這方面的一篇經(jīng)典文章是普渡大學(xué)WenLiang Du和Aditya P.

54、Mathur的“Vulnerability Testing of Software System Using Fault Injection” [24],其思想出發(fā)點(diǎn)是:由于各種原因,程序員總是假定認(rèn)為他們的程序會(huì)在正常環(huán)境中正常地運(yùn)行。當(dāng)這些假設(shè)成立時(shí),他們的程序當(dāng)然是正確運(yùn)行的。但是,由于作為共享資源的環(huán)境,常常被其它主體所影響,尤其是惡意的用戶,這樣,程序員的假設(shè)就可能是不正確的。程序是否能夠容忍環(huán)境中的錯(cuò)誤是影響程序健壯性和安全

55、性的一個(gè)關(guān)鍵問(wèn)題。該方法將所有被不屬于運(yùn)行程序的代碼都看作“環(huán)境”,并按照直接和間接環(huán)境錯(cuò)誤進(jìn)行錯(cuò)誤分類,進(jìn)而提出了環(huán)境—應(yīng)用程序交互錯(cuò)誤模型 (Environment Application Interaction, 簡(jiǎn)稱EAI)及相應(yīng)抽象實(shí)現(xiàn)算法,這對(duì)“不可獨(dú)立運(yùn)行”的組件進(jìn)行環(huán)境錯(cuò)誤注入而言,奠定了一定的理論基礎(chǔ)。</p><p>  目前,國(guó)外的環(huán)境錯(cuò)誤注入工具有美國(guó)Berkeley大學(xué)和Stanford

56、大學(xué)的聯(lián)合研究開(kāi)發(fā)的FIG[36]和美國(guó)佛羅里達(dá)軟件工程研究中心實(shí)驗(yàn)室開(kāi)發(fā)(現(xiàn)已成為商業(yè)工具)的Holodeck[37];國(guó)內(nèi),信息安全國(guó)家重點(diǎn)實(shí)驗(yàn)室(安天實(shí)驗(yàn)室)在環(huán)境錯(cuò)誤注入測(cè)試方面已取得了一定的研究成果,發(fā)表了數(shù)篇論文[38, 39]。在參考國(guó)際容錯(cuò)和診斷技術(shù)的思路和成果基礎(chǔ)上,該實(shí)驗(yàn)室開(kāi)發(fā)了基于Linux系統(tǒng)的錯(cuò)誤注入原型系統(tǒng)Injecter,這個(gè)系統(tǒng)通過(guò)掩飾注入錯(cuò)誤達(dá)到自動(dòng)測(cè)試軟件缺陷的目的。但是由于建立在Linux上,因而對(duì)

57、其他平臺(tái)缺乏可移植性,在Windows平臺(tái)上進(jìn)行安全性測(cè)試有待研究。</p><p><b>  研究目標(biāo)和方法</b></p><p>  本文研究的目標(biāo)是利用當(dāng)今最有效的軟件安全性檢測(cè)模式——基于錯(cuò)誤注入的測(cè)試模式,提出一種適應(yīng)于組件、尤其是第三方組件的安全性測(cè)試方法,并設(shè)計(jì)和開(kāi)發(fā)一套基于錯(cuò)誤注入的組件安全性測(cè)試系統(tǒng),簡(jiǎn)稱為:CSTS(Component Secu

58、rity Testing System),實(shí)現(xiàn)對(duì)任何COM組件的自動(dòng)化安全測(cè)試。</p><p>  本文的方法基于假設(shè):計(jì)算機(jī)安全違背的絕大部分原因是軟件設(shè)計(jì)和編碼所引入的缺陷。本文采用的方法是利用錯(cuò)誤注入技術(shù),動(dòng)態(tài)執(zhí)行分析,全面模擬各種漏洞攻擊。在組件運(yùn)行之前,通過(guò)靜態(tài)的錯(cuò)誤注入,構(gòu)造惡意的輸入數(shù)據(jù),對(duì)組件接口參數(shù)進(jìn)行自動(dòng)“崩潰”;在組件執(zhí)行期間,通過(guò)動(dòng)態(tài)的錯(cuò)誤注入,故意擾動(dòng)環(huán)境狀態(tài),觸發(fā)組件潛在的安全漏洞。

59、針對(duì)不同的時(shí)機(jī),選擇不同的錯(cuò)誤注入檢測(cè)模式,從而達(dá)到有針對(duì)性地高效率測(cè)試組件安全漏洞的目的。</p><p><b>  本文的組織結(jié)構(gòu)</b></p><p>  本文的結(jié)構(gòu)安排如下:</p><p>  第1章:介紹本課題的立題背景和研究意義,簡(jiǎn)述了國(guó)內(nèi)外組件安全性測(cè)試和錯(cuò)誤注入領(lǐng)域的研究現(xiàn)狀,并提出了本文的主要研究目標(biāo)和方法。</p

60、><p>  第2章:明確本文的研究對(duì)象、研究?jī)?nèi)容和研究難點(diǎn),闡述了利用錯(cuò)誤注入進(jìn)行安全性測(cè)試的優(yōu)點(diǎn)和現(xiàn)有方法。然后分三個(gè)關(guān)鍵點(diǎn)提出了一種基于錯(cuò)誤注入的組件安全總體測(cè)試模型、策略和方法。</p><p>  第3~4章:承接第2章提出的總體測(cè)試模型及方法,按照組件運(yùn)行前和運(yùn)行時(shí)兩個(gè)不同的時(shí)機(jī),采用不同的錯(cuò)誤注入檢測(cè)模式,分別提出了測(cè)試組件安全漏洞的接口參數(shù)錯(cuò)誤注入方法和動(dòng)態(tài)環(huán)境錯(cuò)誤注入方法。&

61、lt;/p><p>  第5章:在以上理論研究的基礎(chǔ)上,針對(duì)普遍使用的COM組件,設(shè)計(jì)和實(shí)現(xiàn)了CSTS錯(cuò)誤注入子系統(tǒng),并詳細(xì)給出了系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)。</p><p>  第6章:使用CSTS對(duì)當(dāng)今各種有漏洞的COM組件進(jìn)行安全測(cè)試,分析安全漏洞產(chǎn)生的原因,并對(duì)錯(cuò)誤注入子系統(tǒng)的有效性進(jìn)行評(píng)估。</p><p>  第7章:總結(jié)本文所做的工作并對(duì)進(jìn)一步的工作進(jìn)行了展望。&

62、lt;/p><p>  最后是致謝和參考文獻(xiàn)。</p><p>  組件安全錯(cuò)誤注入測(cè)試方法</p><p><b>  組件安全性測(cè)試</b></p><p><b>  組件技術(shù)</b></p><p>  軟件組件(Software Component)是軟件系統(tǒng)中具有相對(duì)

63、獨(dú)立功能、可以明確辨識(shí)、接口由契約指定、和語(yǔ)境有明顯依賴關(guān)系、可獨(dú)立部署、且多由第三方提供的可組裝軟件實(shí)體[40]。更廣泛的說(shuō),組件是一個(gè)獨(dú)立的可發(fā)布的功能模塊,它通過(guò)接口提供對(duì)組件服務(wù)的訪問(wèn)。組件分為開(kāi)發(fā)人員根據(jù)特定的組件標(biāo)準(zhǔn)專門(mén)開(kāi)發(fā)或把原有的程序代碼封裝而成的內(nèi)部(in-house)組件和通過(guò)購(gòu)買獲得的由獨(dú)立的第三方機(jī)構(gòu)開(kāi)發(fā)的COTS(Commercial-Off-The-Shelf)組件兩種。</p><p&g

64、t;  組件是具有特定功能,能夠跨越進(jìn)程邊界實(shí)現(xiàn)網(wǎng)絡(luò)、語(yǔ)言、應(yīng)用程序、開(kāi)發(fā)工具和操作系統(tǒng)的“即插即用”獨(dú)立對(duì)象。在設(shè)計(jì)過(guò)程中,組件是可替換的軟件單元,它封裝了設(shè)計(jì)決策,可作為更大單元的一部分和其他組件組合,能方便地由第三方集成到軟件系統(tǒng)中,不需要修改代碼和重新編譯。</p><p>  接口(interface) 是客戶與組件發(fā)生交互的連接渠道,組件通過(guò)接口實(shí)現(xiàn)與其他組件或系統(tǒng)的交互,因此接口是組件的核心部分。實(shí)

65、際上,組件對(duì)外表現(xiàn)出來(lái)就是一個(gè)黑盒,對(duì)它的任何操作只能通過(guò)由公共方法和屬性組成的接口進(jìn)行。</p><p>  組件接口的定義是自描述的,不依賴于具體的實(shí)現(xiàn)。這種將實(shí)現(xiàn)與接口分離的方式消除了接口定義和接口實(shí)現(xiàn)之間的耦合關(guān)系,增強(qiáng)了信息封裝程度,進(jìn)一步降低了軟件開(kāi)發(fā)者之間的耦合程度。對(duì)組件客戶而言,只需要提取組件的元數(shù)據(jù),就能獲得組件所包含的類、接口、方法的信息,無(wú)需關(guān)心源代碼的實(shí)現(xiàn)。</p><

66、;p>  基于組件的軟件開(kāi)發(fā)技術(shù)(Component-Based Development, CBD)是將大而復(fù)雜的軟件應(yīng)用分成一系列的可先行實(shí)現(xiàn)、易于開(kāi)發(fā)、理解和維護(hù)的軟件單元,也就是組件,然后通過(guò)自開(kāi)發(fā)組件或使用第三方組件,完成組件的準(zhǔn)備工作,最后利用組件的組裝機(jī)制將所有組件組裝成為一個(gè)應(yīng)用系統(tǒng)[41]。基于組件的軟件系統(tǒng)的總體結(jié)構(gòu)如圖2.1所示。</p><p>  圖2.1 基于組件系統(tǒng)的總體結(jié)構(gòu)圖&

67、lt;/p><p>  組件之間主要通過(guò)接口實(shí)現(xiàn)相互的協(xié)作和信息交流,當(dāng)然,有些情況下要在組件之間插入起中介作用的組件或程序(稱為連接器)。</p><p>  為適應(yīng)不同軟件開(kāi)發(fā)商提供的組件模塊能夠可以互相操作的需求,組件之間的連接和調(diào)用要通過(guò)標(biāo)準(zhǔn)的協(xié)議來(lái)完成。現(xiàn)今主要的組件技術(shù)[42]有微軟公司的COM、對(duì)象管理組織的CORBA/ORB、以及SUN公司的J2EE。CORBA技術(shù)是最早出現(xiàn)的

68、,1991年OMG頒布了CORBA 1. 0標(biāo)準(zhǔn),成為當(dāng)時(shí)的組件開(kāi)發(fā)的標(biāo)準(zhǔn);微軟的COM系列,從最初的COM發(fā)展到現(xiàn)在的DCOM,逐漸形成了微軟的分布式對(duì)象計(jì)算平臺(tái)框架.NET;SUN公司從最早的Java平臺(tái)到JavaBeans,到現(xiàn)在的J2EE,形成了除了語(yǔ)言外還有組件的標(biāo)準(zhǔn)以及組件之間協(xié)同工作通訊框架的完整體系架構(gòu),并以其平臺(tái)無(wú)關(guān)性及高效性等優(yōu)勢(shì)得到了更為廣泛的應(yīng)用。</p><p><b>  組

69、件安全漏洞</b></p><p>  在RFC2828[43]中對(duì)漏洞的定義如下:“a flaw or weakness in a system's design, implementation,or operation and management that could be exploited to violate the system's security policy. ”也

70、就是說(shuō)安全漏洞可以被惡意攻擊者用來(lái)突破系統(tǒng)的安全策略,從而訪問(wèn)未授權(quán)的資源和數(shù)據(jù)。</p><p>  漏洞也叫脆弱性(Vulnerability)[44],是計(jì)算機(jī)系統(tǒng)在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷和不足。漏洞一旦被發(fā)現(xiàn),就可利用這個(gè)漏洞獲得計(jì)算機(jī)系統(tǒng)的額外權(quán)限,使攻擊者能夠在未授權(quán)的情況下訪問(wèn)或破壞系統(tǒng),從而導(dǎo)致危害計(jì)算機(jī)系統(tǒng)安全。漏洞是軟件缺陷的一個(gè)子集。</p>&l

71、t;p>  組件安全漏洞就是組件在安全性上存在的可被利用的缺陷或漏洞。根據(jù)漏洞分類學(xué)的研究[45],導(dǎo)致組件安全漏洞的主要因素歸納起來(lái)有兩個(gè):一個(gè)是組件設(shè)計(jì)和實(shí)現(xiàn)時(shí)存在的缺陷;另一個(gè)是人為非法代碼的植入。</p><p>  (1) 組件設(shè)計(jì)和實(shí)現(xiàn)時(shí)存在的缺陷。設(shè)計(jì)時(shí)考慮不全面、結(jié)構(gòu)不嚴(yán)謹(jǐn)或由于程序員的疏忽或懶惰都可能導(dǎo)致組件中存在漏洞,如對(duì)除數(shù)是否為零缺少檢查,對(duì)輸入的字符串長(zhǎng)度未以加控制等。經(jīng)驗(yàn)證,在測(cè)

72、試過(guò)程中最容易忽視的代碼路徑是異常處理[46],有缺陷的異常處理是組件安全漏洞存在的主要原因。</p><p>  受編程設(shè)計(jì)人員的能力、經(jīng)驗(yàn)和安全技術(shù)所限,組件在設(shè)計(jì)中出現(xiàn)邏輯錯(cuò)誤是不可避免的,而且開(kāi)發(fā)人員不可能考慮到各種可能出現(xiàn)的情況,有些錯(cuò)誤和漏洞就是由于疏忽而引起的。對(duì)輸入數(shù)據(jù)的有效性、合法性、完整性沒(méi)有進(jìn)行驗(yàn)證是絕大部分安全漏洞產(chǎn)生的原因。以最具普遍性的“系統(tǒng)緩沖區(qū)溢出”和“格式化字符串”漏洞為例,前者

73、由于開(kāi)發(fā)人員在編寫(xiě)代碼時(shí)沒(méi)有判斷輸入數(shù)據(jù)的實(shí)際長(zhǎng)度,導(dǎo)致系統(tǒng)堆棧被惡意數(shù)據(jù)覆蓋,程序流程轉(zhuǎn)向;后者由于開(kāi)發(fā)人員在調(diào)用sprintf等函數(shù)時(shí)偷懶,直接把用戶輸入數(shù)據(jù)作為參數(shù)傳入格式化串,導(dǎo)致精心編寫(xiě)的 shell code可以直接訪問(wèn)內(nèi)存并控制程序流向。再以現(xiàn)實(shí)的組件安全漏洞為例,今年年初著名的IM軟件QQ連續(xù)出現(xiàn)幾個(gè)安全漏洞,這些漏洞的主要原因是由于騰訊程序員的粗心,對(duì)QQ目錄中的一個(gè)COM組件函數(shù)的第一個(gè)參數(shù)沒(méi)有進(jìn)行長(zhǎng)度檢查,當(dāng)出現(xiàn)超

74、長(zhǎng)字符串時(shí)就會(huì)造成一個(gè)棧溢出漏洞,使得黑客通過(guò)構(gòu)建惡意代碼的網(wǎng)頁(yè)誘騙用戶瀏覽,即可打開(kāi)本地系統(tǒng)端口并遠(yuǎn)程植入木馬到用戶系統(tǒng)中,從而輕而易舉的遠(yuǎn)程控制用戶電腦。類似的例子還有新浪UC,最近的百度搜霸、暴風(fēng)影音Ⅱ組件安全漏洞等等。由以上例子可以看出,只要在組件中對(duì)</p><p>  (2) 人為非法代碼的植入。所使用的第三方組件的設(shè)計(jì)者別有用心地在組件中放置一些有特殊目的的后門(mén)或木馬,這些代碼在輸入某些特殊的數(shù)據(jù)或

75、程序運(yùn)行滿足特定的條件時(shí)被觸發(fā),從而為對(duì)使用該組件系統(tǒng)的非法訪問(wèn)或控制提供途徑,引發(fā)組件甚至所開(kāi)發(fā)系統(tǒng)的不安全。</p><p>  在這兩個(gè)因素中,組件的安全問(wèn)題大部分是由第一個(gè)因素引起的;但就其危害性來(lái)說(shuō),第二個(gè)因素可能更甚。影響組件安全性的因素除了以上兩個(gè)外,也和設(shè)計(jì)組件的環(huán)境和語(yǔ)言有關(guān),如在C++中指針的使用往往會(huì)導(dǎo)致堆?;騼?nèi)存的溢出,而JAVA中則無(wú)此類問(wèn)題。</p><p> 

76、 引起組件安全性問(wèn)題的因素主要有兩個(gè),但現(xiàn)實(shí)當(dāng)中爆發(fā)的絕大部分安全漏洞是由于第一個(gè)原因。因此,本文主要針對(duì)第一個(gè)因素引起的組件安全性問(wèn)題檢測(cè)技術(shù)進(jìn)行研究。</p><p>  組件安全性測(cè)試的問(wèn)題</p><p>  組件安全是與防止對(duì)程序及數(shù)據(jù)的非授權(quán)的故意或意外訪問(wèn)的能力有關(guān)的軟件屬性[47]。組件安全性是組件在受到惡意攻擊時(shí)仍提供所需功能的能力。組件安全性測(cè)試目的發(fā)現(xiàn)被測(cè)試組件中存在

77、的安全缺陷和漏洞,隨后修改這些缺陷和漏洞,從而提高組件的安全性。組件安全性測(cè)試的關(guān)鍵問(wèn)題是如何以最小的時(shí)間或空間代價(jià)發(fā)現(xiàn)盡可能多的組件安全漏洞。</p><p>  組件安全性測(cè)試不同于一般的組件測(cè)試,其最大問(wèn)題在于源代碼未知[3]。組件一旦開(kāi)發(fā)出來(lái)就幾乎是一個(gè)“黑盒”,所有基于源碼的安全性測(cè)試方法失去用武之地。由于組件只是完整軟件系統(tǒng)的一個(gè)組成單元,不能獨(dú)立運(yùn)行,因此,對(duì)組件安全性測(cè)試,需要實(shí)現(xiàn)組件驅(qū)動(dòng)(dri

78、ver,組件的主程序)和組件的樁函數(shù)(Stub,組件調(diào)用的函數(shù)或子程序)。組件安全性測(cè)試需要使用非常規(guī)的測(cè)試手段,才能觸發(fā)組件真正的安全漏洞,如何觸發(fā)對(duì)應(yīng)于現(xiàn)實(shí)的安全漏洞是組件安全性測(cè)試的又一個(gè)難題。安全漏洞很難總結(jié)出一般的通性,一般的安全性測(cè)試方法僅限于測(cè)試特定的安全漏洞,這給組件通用化、自動(dòng)化測(cè)試造成了困難。一般漏洞觸發(fā)的條件很苛刻因而很難重現(xiàn),創(chuàng)建特定安全漏洞爆發(fā)的場(chǎng)景需要多方面的因素,時(shí)機(jī)需要不早不晚,組件運(yùn)行的狀態(tài)和環(huán)境也要恰

79、好,才能觸發(fā)組件潛在的安全漏洞。</p><p><b>  錯(cuò)誤注入測(cè)試方法</b></p><p><b>  相關(guān)概念</b></p><p>  根據(jù)軟件錯(cuò)誤注入(Software Fault Injection)[25]的基本理論,缺陷(fault)是程序編制中的缺點(diǎn)。錯(cuò)誤(error)是在程序運(yùn)行中由缺陷引起的

80、執(zhí)行狀態(tài)的異常改變。插入的缺陷引起錯(cuò)誤,如果容錯(cuò)性機(jī)制對(duì)錯(cuò)誤處理不當(dāng)則會(huì)引起系統(tǒng)故障 (System Failure) [48]。</p><p>  圖2.2顯示了缺陷-錯(cuò)誤-故障這三個(gè)概念之間的關(guān)系。</p><p>  圖2.2 缺陷、錯(cuò)誤和故障的關(guān)系</p><p>  1) 故障(failure):系統(tǒng)不能按照規(guī)格說(shuō)明書(shū)提供服務(wù)叫做故障。故障由缺陷而起,當(dāng)

81、有缺陷的組件使系統(tǒng)的狀態(tài)變?yōu)殄e(cuò)誤 (error)的時(shí)候,故障就產(chǎn)生了;</p><p>  2) 缺陷(fault):發(fā)生錯(cuò)誤的原因。缺陷一般很難明確指出,其原因在于大多數(shù)缺陷不能簡(jiǎn)單歸結(jié)為一個(gè)原因。在安全性測(cè)試中,可認(rèn)為缺陷就是漏洞;</p><p>  3) 錯(cuò)誤 (error):錯(cuò)誤是系統(tǒng)狀態(tài)的一部分,可能造成系統(tǒng)的故障。</p><p><b> 

82、 軟件安全性測(cè)試</b></p><p>  軟件安全性測(cè)試 (Security Testing) [49]有其不同于其它測(cè)試類型的特殊性,安全性相關(guān)缺陷不同于一般的軟件缺陷。非安全性缺陷常常是違反規(guī)約,即軟件應(yīng)當(dāng)做A, 它沒(méi)有做(行為缺失),或者做了B(行為不正確)。安全性缺陷卻常常由軟件的副作用(Side-Effect)引起, 即軟件應(yīng)當(dāng)做A,它在做了A的同時(shí),又做了B。例如,一個(gè)媒體播放器,它能

83、播放數(shù)字音頻或視頻文件,但卻在播放的過(guò)程中刪除了一個(gè)不該刪除的系統(tǒng)文件,這顯然就是一個(gè)安全漏洞。</p><p>  利用標(biāo)準(zhǔn)測(cè)試技術(shù)檢測(cè)“副作用”或程序的反常行為是異常困難的。因?yàn)椤案弊饔谩背3ky以覺(jué)察,如文件寫(xiě)、注冊(cè)表訪問(wèn)、未經(jīng)加密的網(wǎng)絡(luò)傳輸?shù)?。而在模擬各種異常的程序行為方面,錯(cuò)誤注入是一種有效的方法[50]。這是因?yàn)槿绻ㄟ^(guò)標(biāo)準(zhǔn)的隨機(jī)輸入數(shù)據(jù)來(lái)模擬產(chǎn)生軟件的異常行為將是困難甚至是不可能的。因此,錯(cuò)誤注入在攻

84、擊分析中的主要作用就是用于模擬對(duì)軟件應(yīng)用的惡意攻擊,檢測(cè)在軟件程序中可能導(dǎo)致安全漏洞的潛在弱點(diǎn)的位置。</p><p>  錯(cuò)誤注入是按照事先選定的錯(cuò)誤模型,采用某種策略入為地將錯(cuò)誤引入到目標(biāo)系統(tǒng)中(改變系統(tǒng)的狀態(tài)),并觀察和分析系統(tǒng)在被注入錯(cuò)誤情況下的行為來(lái)為安全漏洞分析人員提供所需的定性或定量的評(píng)價(jià)結(jié)果[51]。其最大優(yōu)勢(shì)在于通過(guò)自動(dòng)化的注入錯(cuò)誤,加速待測(cè)軟件故障的發(fā)生,觀察其行為反應(yīng)來(lái)判斷是否違背安全性。傳

85、統(tǒng)的安全性測(cè)試分析方法限定于已知的或某些特定的安全漏洞,基于錯(cuò)誤注入的軟件安全性測(cè)試方法是從軟件代碼運(yùn)行所產(chǎn)生的行為而不是簡(jiǎn)單地從其結(jié)構(gòu)來(lái)研究軟件的安全漏洞,這種方法有利于發(fā)現(xiàn)那些通過(guò)靜態(tài)結(jié)構(gòu)分析所無(wú)法發(fā)現(xiàn)的新的潛在安全漏洞來(lái)源[6]。</p><p>  綜上所述,基于錯(cuò)誤注入的軟件安全性測(cè)試方法在軟件測(cè)評(píng)和系統(tǒng)安全性分析方面具有明顯的優(yōu)勢(shì),值得進(jìn)一步研究并將其應(yīng)用到組件的安全性測(cè)試當(dāng)中。</p>

86、<p>  錯(cuò)誤注入安全性測(cè)試方法</p><p>  目前,基于錯(cuò)誤注入的軟件安全測(cè)試實(shí)現(xiàn)方法按照是否基于源代碼可分為“白盒”的AVA可適應(yīng)脆弱性分析法和“黑盒”的EAI環(huán)境錯(cuò)誤注入分析法。</p><p>  AVA可適應(yīng)脆弱性分析法</p><p>  AVA可適應(yīng)脆弱性分析法[4]是一種利用錯(cuò)誤注入技術(shù)對(duì)軟件源代碼進(jìn)行自動(dòng)的動(dòng)態(tài)安全性測(cè)試與評(píng)估的

87、方法,其目的是評(píng)估軟件的脆弱性或者安全性,發(fā)現(xiàn)其中最可能發(fā)生安全問(wèn)題的部分代碼所在的位置,為進(jìn)一步的代碼分析或者形式化分析提供支持,以便最終提高軟件的安全性和可靠性。</p><p>  AVA原理如圖2.3所示。首先,錯(cuò)誤注入引擎根據(jù)漏洞知識(shí)庫(kù)對(duì)程序的源代碼進(jìn)行錯(cuò)誤注入;然后,執(zhí)行已注入錯(cuò)誤的程序;接著,安全策略斷定器根據(jù)漏洞知識(shí)庫(kù)與系統(tǒng)運(yùn)行狀態(tài),判定系統(tǒng)是否具有潛在的安全性問(wèn)題;最后,統(tǒng)計(jì)器根據(jù)安全策略斷定器

88、的判斷結(jié)果,統(tǒng)計(jì)待測(cè)軟件的漏洞安全強(qiáng)度,并將統(tǒng)計(jì)結(jié)果輸出。在AVA分析之后,系統(tǒng)的設(shè)計(jì)者可以找出系統(tǒng)中強(qiáng)度較弱的設(shè)計(jì)結(jié)構(gòu),以進(jìn)行增強(qiáng)工作。</p><p>  圖2.3 可適應(yīng)脆弱性分析法(AVA)</p><p>  假設(shè)為待分析的程序,則在被誤用時(shí)的行為會(huì)與其在正常使用情況下的表現(xiàn)有所不同。如果將的正常功能記為,則當(dāng)其被攻擊之后,對(duì)于新的功能,會(huì)產(chǎn)生一個(gè)被改變的行為。對(duì)于來(lái)說(shuō),至少在某

89、些輸入時(shí),存在。當(dāng)程序在執(zhí)行被修改了的功能的時(shí)候,其內(nèi)部的程序狀態(tài)必然會(huì)與執(zhí)行正常功能的時(shí)候有所不同。AVA中的錯(cuò)誤注入就是通過(guò)“撓動(dòng)”下的程序狀態(tài)使之進(jìn)入來(lái)實(shí)現(xiàn)對(duì)程序錯(cuò)誤的模擬。</p><p>  EAI環(huán)境錯(cuò)誤注入分析法</p><p>  EAI環(huán)境錯(cuò)誤注入分析法[52]是一種自動(dòng)化的“黑盒”安全性測(cè)試方法,它是在軟件運(yùn)行的環(huán)境中故意注入人為的錯(cuò)誤,并驗(yàn)證程序?qū)λ⑷氲腻e(cuò)誤的反應(yīng)。

90、這是驗(yàn)證計(jì)算機(jī)和軟件系統(tǒng)容錯(cuò)性和可靠性的一種有效方法。</p><p>  圖2.4 環(huán)境-應(yīng)用程序交互模型(EAI)</p><p>  WenLiang Du et al.提出的EAI模型通過(guò)兩種方式影響應(yīng)用程序。如圖2.4(a)顯示了環(huán)境錯(cuò)誤作用于一個(gè)應(yīng)用程序的間接方式,圖 2.4(b)顯示了環(huán)境錯(cuò)誤作用于一個(gè)應(yīng)用程序的直接方式。</p><p>  第一種方

91、式,一個(gè)程序從環(huán)境中接收到輸入,此時(shí),環(huán)境錯(cuò)誤成為輸入中的錯(cuò)誤。它繼承了程序內(nèi)部實(shí)體的性質(zhì)。從這點(diǎn)來(lái)說(shuō),環(huán)境錯(cuò)誤通過(guò)程序的內(nèi)部實(shí)體進(jìn)行傳播。如果程序不能正確處理這個(gè)錯(cuò)誤,會(huì)導(dǎo)致安全威脅。這種威脅的直接原因看上去是內(nèi)部實(shí)體的錯(cuò)誤,但實(shí)際上這種威脅是由環(huán)境錯(cuò)誤引起的。換句話說(shuō),環(huán)境變量通過(guò)內(nèi)部實(shí)體間接的導(dǎo)致了安全威脅。 </p><p>  假設(shè)一個(gè)程序從網(wǎng)絡(luò)上接收到輸入,網(wǎng)絡(luò)上任何和這個(gè)輸入有關(guān)的錯(cuò)誤信息繼承了內(nèi)部

92、實(shí)體的性質(zhì)。當(dāng)這個(gè)程序進(jìn)行內(nèi)存拷貝操作時(shí),把收到的輸入信息拷貝它的內(nèi)部緩沖區(qū)時(shí)沒(méi)有檢查緩沖區(qū)的邊界,如果信息過(guò)長(zhǎng)將導(dǎo)致觸發(fā)安全漏洞。</p><p>  第二種方式,環(huán)境錯(cuò)誤影響應(yīng)用程序的另一種方式是錯(cuò)誤沒(méi)有通過(guò)內(nèi)部實(shí)體傳播。它位于環(huán)境實(shí)體中,當(dāng)程序和環(huán)境交互時(shí),如果不能正確處理這些錯(cuò)誤就會(huì)導(dǎo)致安全威脅。在這種情況下環(huán)境錯(cuò)誤是導(dǎo)致安全威脅的直接原因,環(huán)境錯(cuò)誤的媒介是環(huán)境本身。</p><p&g

93、t;<b>  兩種方法對(duì)比</b></p><p>  Ghosh et al. 提出的AVA可以量化評(píng)估信息系統(tǒng)的安全和生存能力。該方法以源代碼的形式運(yùn)行軟件,通過(guò)模擬引入的惡意的和非惡意的攻擊,分成各種各樣的威脅類別。EAI模型則是平行的方法,兩者最主要的差別是如何引入攻擊的方式。AVA選擇撓動(dòng)執(zhí)行程序的內(nèi)部狀態(tài),通過(guò)崩潰數(shù)據(jù)流和賦值給應(yīng)用程序變量的內(nèi)部狀態(tài)。其擾動(dòng)(Perturbat

94、ion)是企圖在不改變現(xiàn)存代碼的前提下強(qiáng)行修改程序狀態(tài)。這通常通過(guò)代碼注入來(lái)實(shí)現(xiàn)。執(zhí)行代碼(稱為擾動(dòng)函數(shù))以函數(shù)調(diào)用的形式被加入到系統(tǒng)中來(lái)修改內(nèi)部程序值。這些修改的值或基于初始值隨機(jī)產(chǎn)生,或者使用一個(gè)修改的常量值。EAI則是通過(guò)改變環(huán)境實(shí)體的屬性或撓動(dòng)從環(huán)境接受的輸入來(lái)?yè)蟿?dòng)環(huán)境狀態(tài)。</p><p>  AVA的缺點(diǎn)之一就是測(cè)試過(guò)程中的AVA撓動(dòng)與現(xiàn)實(shí)的攻擊存在溝壑,即知道在某種撓動(dòng)下應(yīng)用程序會(huì)故障,但難以推斷這

95、種故障對(duì)應(yīng)著現(xiàn)實(shí)中的何種攻擊。這使得很難評(píng)估撓動(dòng)的有效性。EAI就能彌補(bǔ)這種缺點(diǎn),因?yàn)榇蟛糠止羰怯捎谟幸獾沫h(huán)境級(jí)別的撓動(dòng)所造成的。另外,AVA隨機(jī)崩潰程序的內(nèi)部狀態(tài),時(shí)間代價(jià)開(kāi)銷大。</p><p>  基于錯(cuò)誤注入的組件安全測(cè)試方法</p><p><b>  錯(cuò)誤注入模型</b></p><p>  正如Cheswiek和Bellowin

96、在《Fire walls and Internet Security》一文中所說(shuō):“任何程序不管它看起來(lái)多么好,都有可能存在安全漏洞。因此堅(jiān)信任何事情在沒(méi)有證明是無(wú)害之前都是有害的。”一個(gè)安全的組件是能在出現(xiàn)錯(cuò)誤、異常的系統(tǒng)行為或惡意攻擊下仍然能夠持續(xù)、正確運(yùn)轉(zhuǎn)的組件。</p><p>  根據(jù)Wenliang Du et al.的漏洞分類思想,組件安全漏洞的產(chǎn)生的本質(zhì)原因可以歸納為組件開(kāi)發(fā)人員對(duì)組件運(yùn)行環(huán)境所作

97、的不恰當(dāng)假設(shè),大部分源于對(duì)環(huán)境忽視了必要的驗(yàn)證。由于對(duì)組件內(nèi)部操作的不了解,或者是沒(méi)有足夠的重視,組件開(kāi)發(fā)人員總是假定組件會(huì)在任何環(huán)境中正常運(yùn)行。顯然,一旦這種假設(shè)得不到滿足,組件內(nèi)部的相互作用和安全策略產(chǎn)生沖突時(shí),便形成了安全漏洞。</p><p>  既然組件中絕大部分漏洞都是在與環(huán)境交互過(guò)程中產(chǎn)生的,而且通過(guò)用戶的惡意行為所觸發(fā),那么組件安全性測(cè)試就可看作是一種錯(cuò)誤容忍特性的測(cè)試。因此,基于此種理論,對(duì)組件

98、與環(huán)境的各種交互點(diǎn)利用錯(cuò)誤注入技術(shù)進(jìn)行故意的擾動(dòng)或破壞,模擬用戶的惡意攻擊,監(jiān)視組件是否出現(xiàn)不安全的異常行為,本文提出一種SDFI(Static and Dynamic Fault Injection)組件安全性測(cè)試方法。</p><p>  為組件安全測(cè)試建立一個(gè)通用的測(cè)試模型,從總體上說(shuō)明本文所采用的SDFI測(cè)試方法,如圖2.5所示的錯(cuò)誤注入模型(Fault Injection Model, 簡(jiǎn)稱FIM)。本

99、文的錯(cuò)誤注入策略是針對(duì)不同階段做不同模式的錯(cuò)誤注入應(yīng)用,選擇不同的錯(cuò)誤注入方法,從而達(dá)到有針對(duì)性地高效率測(cè)試組件安全漏洞的目的。即通過(guò)靜態(tài)和動(dòng)態(tài)的錯(cuò)誤注入,全面模擬各種漏洞攻擊,觸發(fā)組件潛在的安全漏洞。</p><p>  圖2.5 錯(cuò)誤注入模型(FIM)</p><p>  由于對(duì)組件事先出現(xiàn)漏洞的地方不可預(yù)知,所以利用錯(cuò)誤注入技術(shù)自動(dòng)地模擬盡可能多的錯(cuò)誤,在盡可能多的地方自動(dòng)擾動(dòng)組件與

100、環(huán)境的交互點(diǎn)來(lái)模擬它們的影響。對(duì)組件輸入的合法性和有效性進(jìn)行驗(yàn)證。在組件運(yùn)行之前根據(jù)組件接口的靜態(tài)分析,獲取組件對(duì)象、接口、方法及方法參數(shù)等信息,然后對(duì)組件接口自動(dòng)生成多種惡意的非常規(guī)參數(shù),比如將一個(gè)非可寫(xiě)代碼段地址作為正常數(shù)據(jù)地址對(duì)接口進(jìn)行調(diào)用,檢測(cè)組件的反饋情況,判定是否發(fā)生安全故障。在組件運(yùn)行的過(guò)程中,通過(guò)動(dòng)態(tài)攔截或替換組件對(duì)環(huán)境的輸入、輸出訪問(wèn),故意破壞組件與環(huán)境的依賴關(guān)系,注入不正常的事件,如組件在訪問(wèn)某個(gè)文件之前注入該文件一

101、個(gè)“符號(hào)鏈接”錯(cuò)誤,判定是否發(fā)生安全違規(guī),導(dǎo)致“競(jìng)爭(zhēng)條件”安全漏洞。組件不僅要在接受不正常輸入的時(shí)候不擴(kuò)散為一個(gè)系統(tǒng)故障,而且要在遭遇到惡意的外部環(huán)境時(shí)候仍能提供可靠的服務(wù),才被認(rèn)為是安全的組件。</p><p>  假定C代表待測(cè)組件,代表所有可能影響C安全性的異常行為空間(并不一定的所有成員都會(huì)影響C的安全性),I代表中所有由C的接口導(dǎo)致的異常行為,E代表中所有由環(huán)境故障(人為因素或外部故障)導(dǎo)致的潛在異常行

102、為,I代表一個(gè)未知的有限的事件空間,E代表一個(gè)未知的無(wú)限空間。顯然,。</p><p>  I代表的是C固有的接口缺陷,要判斷對(duì)C的影響,只需要構(gòu)造惡意的輸入數(shù)據(jù)驅(qū)動(dòng)C運(yùn)行,監(jiān)視是否有不安全的行為,這是簡(jiǎn)單的組件安全漏洞,稱之為“顯示”安全漏洞(Explicit Security Vulnerability,簡(jiǎn)稱ESV);對(duì)E而言則是需要在一定的條件或環(huán)境才能觸發(fā),研究它對(duì)C的安全影響需要擾動(dòng)組件的運(yùn)行環(huán)境,這種

103、安全漏洞稱之為“隱式”安全漏洞(Implicit Security Vulnerability,簡(jiǎn)稱ISV)。</p><p>  可以進(jìn)一步的將E劃分為R和N,即。R代表的是那些在將來(lái)會(huì)導(dǎo)致安全問(wèn)題的空間(實(shí)際安全漏洞),N代表實(shí)際上并不會(huì)導(dǎo)致安全問(wèn)題的空間(在外部環(huán)境的擾動(dòng)下產(chǎn)生異常的不安全行為不一定對(duì)應(yīng)于現(xiàn)實(shí)的安全漏洞),在錯(cuò)誤注入分析之前或之后R和N都是未知的。因此,不能確定E的任何成員是R還是N,但是可

104、以肯定的是R是有限的,N是無(wú)限的。理想情況下,錯(cuò)誤注入只應(yīng)該模擬R(這樣最有效),但是由于事先不知道一次錯(cuò)誤注入導(dǎo)致的不安全行為是屬于R還是N,即使發(fā)現(xiàn)了很多安全漏洞,但由于E是無(wú)限的,還是不能確定就是找到了所有的組件安全漏洞。</p><p>  對(duì)E而言傳統(tǒng)的測(cè)試方法是無(wú)能為力的,但可以通過(guò)錯(cuò)誤注入來(lái)模擬盡可能多的已知的異常行為(不用考慮是來(lái)自于R還是N),因?yàn)镋的某些成員可以歸納出些通用的故障模式。最大的困

105、難之處在于觸發(fā)有效的潛在異常行為E。即如何產(chǎn)生有效的錯(cuò)誤注入類用來(lái)注入被測(cè)對(duì)象及有惡意輸入數(shù)據(jù)用于黑盒安全性測(cè)試,是組件安全性測(cè)試技術(shù)的難點(diǎn)。</p><p><b>  安全行為監(jiān)測(cè)</b></p><p>  組件安全性測(cè)試不僅僅要觸發(fā)組件的安全漏洞,還要嚴(yán)密的監(jiān)控組件運(yùn)行過(guò)程中的每一步行為。要知道組件運(yùn)行中哪些行為是不安全的是相當(dāng)困難的,這需要經(jīng)驗(yàn)積累和一些“非

106、?!笔侄蔚倪\(yùn)用,僅僅通過(guò)需求規(guī)格說(shuō)明書(shū)來(lái)得出組件運(yùn)行過(guò)程中的安全需求是不全面的。</p><p>  組件運(yùn)行時(shí),將與系統(tǒng)發(fā)生密切的交互和聯(lián)系。組件發(fā)生不安全的狀況時(shí),一般狀態(tài)會(huì)發(fā)生變化。密切監(jiān)視組件狀態(tài)變化情況,如當(dāng)前內(nèi)部函數(shù)調(diào)用情況、堆與棧的變化、寄存器的變化以及異常處理等??梢酝ㄟ^(guò)這些因素的判斷,及時(shí)發(fā)現(xiàn)組件存在的問(wèn)題,如提前預(yù)警堆或棧溢出、系統(tǒng)崩潰等。另外,日志記錄功能是必不可少的。因?yàn)闇y(cè)試過(guò)程中向組件中

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論