基于錯誤注入的組件安全性測試研究_碩士學位論文_第1頁
已閱讀1頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  碩士學位論文</b></p><p>  基于錯誤注入的組件安全性測試研究</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>  獨創(chuàng)性聲明</b></p><p>  本人聲明所呈交的學位論文是我個人在導師指導下進行的研究工作及取得的研究成果。盡我所知,除文中已經(jīng)標明引用的內容外,本論文不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫過的研究成果。對本文的研究做出貢獻的個人和集體,均已在文中以明確方式標明。本人完全意識

4、到本聲明的法律結果由本人承擔。</p><p>  學位論文作者簽名:                        </p><p>  日期:

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

6、<p>  保密□,在_______年解密后適用本授權書。</p><p>  本論文屬于           </p><p><b>  不保密。</b></p><p>  (請在以上方框內打“√”) <

7、;/p><p>  學位論文作者簽名:        指導教師簽名: </p><p>  日期: 年 月 日            日期: 年

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

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

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

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

12、ing System)中,設計和實現(xiàn)了自動化錯誤注入子系統(tǒng),并使用第三方COM組件進行測試,驗證了SDFI的有效性。</p><p>  關鍵詞:組件,錯誤注入,安全漏洞,接口錯誤注入,環(huán)境錯誤注入</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國內外研究現(xiàn)狀(2)</p><p>  1.3研究目標和方法(7)</p><p>  

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

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

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

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

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

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

28、著計算機技術的迅猛發(fā)展,計算機硬件性能越來越高,由于較少考慮硬件的局限以及人們的實際需求,相應的軟件規(guī)模越來越龐大、結構也越來越復雜。傳統(tǒng)面向過程的軟件開發(fā)技術,已無法勝任軟件開發(fā)過程中對效率和資源充分利用的要求。為了提高軟件開發(fā)的效率,面向對象及建立在面向對象技術基礎之上的組件技術得到廣泛應用,已成為軟件開發(fā)技術主流[1]。組件技術的應用引入了封裝和可重用等概念,特別是第三方組件的使用,大大提高了軟件開發(fā)的效率、降低了軟件開發(fā)的成本,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

51、a方法[32],該方法通過使用有效和異常混合的輸入流在接口級別自動執(zhí)行錯誤注入,例如一個用來讀取的文件句柄傳遞到一個文件寫函數(shù)的參數(shù)中,以檢測函數(shù)調用是否會導致系統(tǒng)崩潰和掛起,由于該方法是基于參數(shù)數(shù)據(jù)類型而非行為規(guī)格說明,實現(xiàn)上又結合面向對象方法,因而具有很強的可擴展性。</p><p>  基于接口錯誤注入的方法開發(fā)了一些有效的健壯性測試工具,如Ballista[33]、 JACA Fault Injectio

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

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

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

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

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

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

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

59、針對不同的時機,選擇不同的錯誤注入檢測模式,從而達到有針對性地高效率測試組件安全漏洞的目的。</p><p><b>  本文的組織結構</b></p><p>  本文的結構安排如下:</p><p>  第1章:介紹本課題的立題背景和研究意義,簡述了國內外組件安全性測試和錯誤注入領域的研究現(xiàn)狀,并提出了本文的主要研究目標和方法。</p

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

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

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

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

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

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

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

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

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

69、件安全漏洞</b></p><p>  在RFC2828[43]中對漏洞的定義如下:“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、就是說安全漏洞可以被惡意攻擊者用來突破系統(tǒng)的安全策略,從而訪問未授權的資源和數(shù)據(jù)。</p><p>  漏洞也叫脆弱性(Vulnerability)[44],是計算機系統(tǒng)在硬件、軟件、協(xié)議的具體實現(xiàn)或系統(tǒng)安全策略上存在的缺陷和不足。漏洞一旦被發(fā)現(xiàn),就可利用這個漏洞獲得計算機系統(tǒng)的額外權限,使攻擊者能夠在未授權的情況下訪問或破壞系統(tǒng),從而導致危害計算機系統(tǒng)安全。漏洞是軟件缺陷的一個子集。</p>&l

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

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

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

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

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

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

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

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

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

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

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

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

83、播放數(shù)字音頻或視頻文件,但卻在播放的過程中刪除了一個不該刪除的系統(tǒng)文件,這顯然就是一個安全漏洞。</p><p>  利用標準測試技術檢測“副作用”或程序的反常行為是異常困難的。因為“副作用”常常難以覺察,如文件寫、注冊表訪問、未經(jīng)加密的網(wǎng)絡傳輸?shù)取6谀M各種異常的程序行為方面,錯誤注入是一種有效的方法[50]。這是因為如果通過標準的隨機輸入數(shù)據(jù)來模擬產(chǎn)生軟件的異常行為將是困難甚至是不可能的。因此,錯誤注入在攻

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

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

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

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

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

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

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

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

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

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

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

95、種故障對應著現(xiàn)實中的何種攻擊。這使得很難評估撓動的有效性。EAI就能彌補這種缺點,因為大部分攻擊是由于有意的環(huán)境級別的撓動所造成的。另外,AVA隨機崩潰程序的內部狀態(tài),時間代價開銷大。</p><p>  基于錯誤注入的組件安全測試方法</p><p><b>  錯誤注入模型</b></p><p>  正如Cheswiek和Bellowin

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論