本科畢業(yè)設(shè)計(jì)-基于錯(cuò)誤注入的組件安全性測(cè)試研究_第1頁(yè)
本科畢業(yè)設(shè)計(jì)-基于錯(cuò)誤注入的組件安全性測(cè)試研究_第2頁(yè)
本科畢業(yè)設(shè)計(jì)-基于錯(cuò)誤注入的組件安全性測(cè)試研究_第3頁(yè)
本科畢業(yè)設(shè)計(jì)-基于錯(cuò)誤注入的組件安全性測(cè)試研究_第4頁(yè)
本科畢業(yè)設(shè)計(jì)-基于錯(cuò)誤注入的組件安全性測(cè)試研究_第5頁(yè)
已閱讀5頁(yè),還剩74頁(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)介

[60],將所有的不同系統(tǒng)調(diào)用按威脅大小確定其權(quán)值(見(jiàn)表4.2)。有兩種情況只注入單個(gè)錯(cuò)誤:一種是只有一個(gè)系統(tǒng)調(diào)用;另一種是在組合錯(cuò)誤中只對(duì)一個(gè)交互點(diǎn)注入錯(cuò)誤,其他交互點(diǎn)不注入錯(cuò)誤。在只注入單個(gè)錯(cuò)誤的測(cè)試用例中,威脅權(quán)值決定了測(cè)試用例的執(zhí)行次序。接下來(lái)根據(jù)“調(diào)用模式”確定注入多個(gè)錯(cuò)誤的測(cè)試用例的次序。首先把系統(tǒng)調(diào)用分為讀調(diào)用和寫(xiě)調(diào)用。所謂讀調(diào)用,就是對(duì)環(huán)境實(shí)體的內(nèi)容以及相關(guān)屬性進(jìn)行查詢,并不對(duì)其改寫(xiě),典型的是Read和Access;而寫(xiě)調(diào)用則造成實(shí)體內(nèi)容以及相關(guān)屬性的改變,典型的是Write和Set;但是類(lèi)似Open這種“打開(kāi)”調(diào)用應(yīng)從對(duì)其操作客體相關(guān)的操作序列進(jìn)行分析,如果序列中只含有諸如Read的讀操作,那么這個(gè)Open就是讀調(diào)用,反之則為寫(xiě)調(diào)用。對(duì)系統(tǒng)調(diào)用的讀寫(xiě)分類(lèi)也列在表4.2中。表STYLEREF1\s4.2系統(tǒng)調(diào)用威脅權(quán)值(1-5)及讀寫(xiě)分類(lèi)根據(jù)對(duì)己知安全性的分析,易出問(wèn)題的調(diào)用模式是一個(gè)讀調(diào)用緊接一個(gè)寫(xiě)調(diào)用,因此,將讀調(diào)用集合中的元素與寫(xiě)調(diào)用中的元素進(jìn)行組合,且威脅權(quán)值之和較高的組合優(yōu)先執(zhí)行,這就是多個(gè)錯(cuò)誤的測(cè)試用例生成次序。在以上的論述中,一直假設(shè)己知所有調(diào)用的操作客體,由此得到對(duì)調(diào)用集的分劃。但是在實(shí)際的測(cè)試過(guò)程中,操作客體集在動(dòng)態(tài)環(huán)境錯(cuò)誤注入之前是未知的。由此,測(cè)試前需要運(yùn)行組件并通過(guò)注入點(diǎn),也就是偽函數(shù)得到分劃。把這種測(cè)試前組件的運(yùn)行過(guò)程稱為收集(gleaning)。gleaning過(guò)程對(duì)調(diào)用序列的提取存在幾個(gè)問(wèn)題:首先,一般情況下,動(dòng)態(tài)運(yùn)行組件無(wú)法將組件中的調(diào)用完全遍歷一遍,只能提供其中的一個(gè)子集。有兩種選擇,一是將gleaning提供的調(diào)用序列作為事實(shí)上的調(diào)用,把除此之外組件代碼中其他的調(diào)用排除在測(cè)試用例之外,一是測(cè)試用例中仍然保留所有的調(diào)用,但是與之相關(guān)的測(cè)試用例不用上面提出的算法產(chǎn)生,仍舊使用不帶啟發(fā)算法的組合生成??紤]到gleaning過(guò)程基本上代表了組件的一般行為gleaning沒(méi)有遍歷的調(diào)用在組件的以后運(yùn)行中不執(zhí)行的概率還是相當(dāng)大的,并且排除一些調(diào)用可以減少測(cè)試用例。測(cè)試系統(tǒng)中采取了前一種方案。此外,由于阻塞組件不能立即結(jié)束,gleaning過(guò)程只能待續(xù)設(shè)定的一段時(shí)間,因此,得到的調(diào)用序列也只能是代碼中所有調(diào)用的子集,對(duì)此以相同的方法解決,即測(cè)試用例中的調(diào)用集以gleaning中出現(xiàn)的為準(zhǔn)。以上確定了單個(gè)分劃子集中的測(cè)試用例生成次序,再考慮到一個(gè)組件中由于操作客體集的相互鏈接造成對(duì)安全策略的違反的概率較大,給出最終的分劃和權(quán)值排序(DivisionandSortingbyWeight,簡(jiǎn)稱DSW)測(cè)試用例生成算法。算法4.1DSW測(cè)試用例生成算法輸入:環(huán)境錯(cuò)誤注入表(如表4.1),系統(tǒng)調(diào)用威脅權(quán)值和讀寫(xiě)分類(lèi)表(如表4.2)輸出:生成動(dòng)態(tài)環(huán)境錯(cuò)誤注入的測(cè)試用例集T步驟://第一步:確定操作客體集O以及調(diào)用分劃Sfori=1tondo通過(guò)的參數(shù)判定操作的環(huán)境實(shí)體,記為;forj=1todoif()then;break;endif;endforif()then;;endif;endfor//第二步:生成測(cè)試用例集T1和T2,;;fori=1tokdo,其中;通過(guò)環(huán)境錯(cuò)誤注入表找到對(duì)應(yīng)的錯(cuò)誤注入集,記為;假設(shè)代表無(wú)錯(cuò)誤,;fori=1tomdoif(符號(hào)鏈接錯(cuò)誤)then{符號(hào)鏈接于實(shí)體};{當(dāng)時(shí),;否則};endif;;endforendfor//第三步:在T1和T2中進(jìn)行排序;;,;//取出注入單個(gè)錯(cuò)誤的測(cè)試用例,按威脅權(quán)值排序fori=1tondoif(注入錯(cuò)誤數(shù)==1)then通過(guò)系統(tǒng)調(diào)用威脅權(quán)值和讀寫(xiě)分類(lèi)表找到對(duì)應(yīng)的權(quán)值;forj=1tokdo為中第j個(gè)測(cè)試用例對(duì)應(yīng)的威脅權(quán)值;if()then將插入到中第j個(gè)位置;break;endif;endforif()then將插入到中第個(gè)位置;endif;;;;endif;endfor//注入操作客體集的相互鏈接錯(cuò)誤的測(cè)試用例;//取出既包含讀調(diào)用也包含寫(xiě)調(diào)用的測(cè)試用例,按調(diào)用數(shù)量從少到多排好,其中相同調(diào)用數(shù)量相同的根據(jù)威脅權(quán)值之和大小排序fori=1tondo通過(guò)系統(tǒng)調(diào)用威脅權(quán)值和讀寫(xiě)分類(lèi)表計(jì)算讀寫(xiě)調(diào)用數(shù)量;if()thenforj=1todo為中第j個(gè)測(cè)試用例的讀寫(xiě)調(diào)用數(shù)量;if()then將插入到中第j個(gè)位置;break;endif;if()then分別計(jì)算、威脅權(quán)值之和,得到和;if()then將插入到中第j個(gè)位置;break;else將插入到中第個(gè)位置;break;endif;endif;endforif()then將插入到中第個(gè)位置;endif;endif;endfor//缺少讀調(diào)用或者缺少寫(xiě)調(diào)用的測(cè)試用例不分次序列在最后;根據(jù)“基于操作實(shí)體的測(cè)試用例分劃”中的分析,DSW算法產(chǎn)生的測(cè)試用例數(shù)為。算法首先通過(guò)分劃減小了測(cè)試用例集的規(guī)模,然后采用兩種相關(guān)的算法對(duì)其定序,使測(cè)試用例按照造成安全策略違反的可能性遞減的順序排列。第一步的時(shí)間復(fù)雜度為,n為系統(tǒng)調(diào)用數(shù);第二步得到測(cè)試用例集的大小為:,測(cè)試用例集的大小為;第三步為插入排序,在最壞情況下,時(shí)間復(fù)雜度為第二步得到的測(cè)試用例數(shù)平方。因此,總的時(shí)間復(fù)雜度近似為:。違反安全策略監(jiān)測(cè)和環(huán)境恢復(fù)可以把組件對(duì)安全策略的違反分為“局部違反”和“全局違反”。局部違反包括組件崩潰、掛起、潛伏和其他特定于組件功能的異常情況;全局違反是對(duì)系統(tǒng)全局安全環(huán)境的破壞,比如關(guān)鍵文件的破壞、信息泄漏等。判定這兩種違反是個(gè)復(fù)雜的問(wèn)題,有時(shí)候缺少人工檢測(cè)就無(wú)法判別。因此,測(cè)試系統(tǒng)中預(yù)先設(shè)定一組一般安全規(guī)則,將可自動(dòng)判斷的情況包含在內(nèi),然后,由分析人員制訂依賴于特定組件功能的安全規(guī)則,這兩種安全規(guī)則組成了對(duì)組件是否違反安全策略的判據(jù)。與通常的組件測(cè)試不同,在安全性測(cè)試中,完成一個(gè)測(cè)試用例的執(zhí)行后,執(zhí)行環(huán)境應(yīng)該恢復(fù)為此測(cè)試用例執(zhí)行前的狀態(tài),否則測(cè)試用例之間就無(wú)可比性,測(cè)試結(jié)果也缺乏準(zhǔn)確性。但是,對(duì)系統(tǒng)進(jìn)行整體備份又顯然不現(xiàn)實(shí)。這里采用的方法是“按需備份”。即對(duì)組件中操作的客體進(jìn)行備份,不備份系統(tǒng)中其他客體,而且,并不是對(duì)所有訪問(wèn)的文件進(jìn)行備份,而只保存寫(xiě)調(diào)用的操作客體,而讀調(diào)用的操作客體就無(wú)需保存。本章小結(jié)環(huán)境是漏洞攻擊者所竭力利用的地方,針對(duì)組件環(huán)境進(jìn)行動(dòng)態(tài)的錯(cuò)誤注入,是發(fā)現(xiàn)組件潛在安全漏洞的一種現(xiàn)實(shí)而又有效的方法。本章選擇在組件運(yùn)行之時(shí),對(duì)組件運(yùn)行的環(huán)境故意注入人為的錯(cuò)誤,在WenliangDuetal.的EAI模型的基礎(chǔ)上,提出了一種檢測(cè)組件安全漏洞的動(dòng)態(tài)環(huán)境錯(cuò)誤注入方法。首先從整體出發(fā),介紹了動(dòng)態(tài)環(huán)境錯(cuò)誤注入的概念和所要解決的關(guān)鍵問(wèn)題。然后圍繞所要解決的關(guān)鍵問(wèn)題,分五個(gè)要點(diǎn)進(jìn)行了詳細(xì)論述。為了解決實(shí)際測(cè)試中的“組合爆炸”問(wèn)題,提出了一種DSW測(cè)試用例生成算法,有效地約減了測(cè)試用例。在理論的基礎(chǔ)上,下面一章將從實(shí)踐的角度給出本文第三章和本章方法的一種實(shí)現(xiàn)。CSTS中錯(cuò)誤注入子系統(tǒng)實(shí)現(xiàn)在目前的Windows操作系統(tǒng)平臺(tái)上,基于微軟COM(ComponentObjectModel,組件對(duì)象模型)標(biāo)準(zhǔn)的組件是最為普遍的組件。隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,COM到目前已經(jīng)歷了OLE(ObjectLinkingandEmbedding,對(duì)象鏈接和嵌入)、ActiveX技術(shù)和.NET平臺(tái)上.NET組件的發(fā)展過(guò)程,其間爆發(fā)各種各樣的COM組件安全漏洞。組件安全測(cè)試系統(tǒng)CSTS概述CSTS(ComponentSecurityTestingSystem)是一個(gè)組件安全性測(cè)試原型系統(tǒng)所實(shí)現(xiàn)的自動(dòng)化測(cè)試工具。CSTS是在基于錯(cuò)誤注入測(cè)試方法和動(dòng)態(tài)監(jiān)測(cè)測(cè)試方法的基礎(chǔ)上對(duì)組件從靜態(tài)和動(dòng)態(tài)兩個(gè)級(jí)別進(jìn)行安全性測(cè)試。在靜態(tài)級(jí)別上,先分析出組件接口信息,然后對(duì)方法參數(shù)從參數(shù)個(gè)數(shù)、參數(shù)順序、參數(shù)范圍和參數(shù)類(lèi)型等方面進(jìn)行錯(cuò)誤注入,注入錯(cuò)誤測(cè)試用例后再編譯執(zhí)行,觀察組件運(yùn)行狀態(tài);在動(dòng)態(tài)級(jí)別上,先執(zhí)行測(cè)試驅(qū)動(dòng),然后對(duì)組件所依賴的環(huán)境進(jìn)行錯(cuò)誤注入,主要從內(nèi)存、磁盤(pán)文件系統(tǒng)、注冊(cè)表、進(jìn)程及網(wǎng)絡(luò)五個(gè)方面進(jìn)行錯(cuò)誤注入,在組件測(cè)試驅(qū)動(dòng)執(zhí)行的同時(shí)進(jìn)行動(dòng)態(tài)監(jiān)測(cè)。圖5.1是CSTS系統(tǒng)的總體結(jié)構(gòu)圖。CSTS是在WindowsXP平臺(tái)上用VisualStudio.NET2005C#開(kāi)發(fā)的一個(gè)針對(duì)COM組件安全性測(cè)試的集成測(cè)試系統(tǒng)原型,主要包含以下主要功能:(1)對(duì)COM組件進(jìn)行接口分析,得到必要的類(lèi)型信息;(2)自動(dòng)生成組件方法級(jí)的測(cè)試程序,通過(guò)進(jìn)一步生成接口方法測(cè)試用例實(shí)現(xiàn)接口參數(shù)錯(cuò)誤注入測(cè)試;(3)編譯測(cè)試程序,生成組件測(cè)試驅(qū)動(dòng);(4)對(duì)被驅(qū)動(dòng)運(yùn)行中的COM組件進(jìn)行動(dòng)態(tài)環(huán)境錯(cuò)誤注入測(cè)試;(5)動(dòng)態(tài)監(jiān)測(cè)被測(cè)試COM組件的運(yùn)行情況,記錄組件異常行為,并寫(xiě)入日志文件;(6)COM組件安全評(píng)估與分析。圖STYLEREF1\s5.SEQ圖表\*ARABIC\s11CSTS系統(tǒng)總體結(jié)構(gòu)圖對(duì)測(cè)試系統(tǒng)的一個(gè)重要的要求是自動(dòng)化,不能實(shí)現(xiàn)自動(dòng)化的測(cè)試技術(shù)妨礙了軟件項(xiàng)目運(yùn)行周期的流水線推進(jìn),而且大大增加了測(cè)試成本,因此CSTS設(shè)計(jì)運(yùn)行以全自動(dòng)化或者僅需少量人工操作的方式進(jìn)行。其中自動(dòng)化包括:(1)組件自動(dòng)化測(cè)試框架,包括自動(dòng)生成接口測(cè)試用例,自動(dòng)驅(qū)動(dòng)運(yùn)行,自動(dòng)返回測(cè)試結(jié)果;(2)自動(dòng)進(jìn)行接口靜態(tài)錯(cuò)誤注入和環(huán)境動(dòng)態(tài)錯(cuò)誤注入;(3)自動(dòng)的COM組件運(yùn)行時(shí)動(dòng)態(tài)監(jiān)視,監(jiān)視組件的行為和狀態(tài),一旦出現(xiàn)違反安全的異常行為,則證明組件存在安全漏洞;(4)自動(dòng)安全性測(cè)試有效性評(píng)估,組件運(yùn)行完畢自動(dòng)評(píng)估組件的安全性程度和錯(cuò)誤注入的有效程度。CSTS功能模塊CSTS系統(tǒng)主要功能由五個(gè)功能子系統(tǒng)完成:接口分析、測(cè)試用例生成、自動(dòng)編譯、錯(cuò)誤注入和動(dòng)態(tài)監(jiān)測(cè)。在CSTS系統(tǒng)中進(jìn)行COM組件安全測(cè)試時(shí)各模塊協(xié)作過(guò)程如圖5.2所示。接口分析對(duì)于第三方COM組件,其源代碼不可知,測(cè)試前必須通過(guò)一定的手段得到構(gòu)圖STYLEREF1\s5.SEQ圖表\*ARABIC\s12CSTS系統(tǒng)中進(jìn)行測(cè)試時(shí)各模塊協(xié)作過(guò)程示意圖件的類(lèi)型信息。CSTS系統(tǒng)中通過(guò)分析組件類(lèi)型信息(TypeInfo)得到組件的接口方法等詳細(xì)信息。類(lèi)型庫(kù)(TypeLibrary)包含COM組件所暴露接口的二進(jìn)制描述信息。它們包含的信息與IDL(接口定義語(yǔ)言)文件的基本相同。類(lèi)型庫(kù)可以是單獨(dú)的二進(jìn)制文件(.tlb),也可以是動(dòng)態(tài)鏈接庫(kù)或可執(zhí)行文件(.dll,.olb,.exe)中的資源。通過(guò)分析類(lèi)型庫(kù)可以獲得以下信息:類(lèi)型庫(kù)名稱和版本信息;類(lèi)型信息個(gè)數(shù);每個(gè)類(lèi)型信息的接口類(lèi)型(如CoClass、Interface、Dispatch等)、函數(shù)個(gè)數(shù)及變量個(gè)數(shù);函數(shù)名、返回值類(lèi)型、標(biāo)志位、調(diào)用類(lèi)型(如function、get、put等)、參數(shù)個(gè)數(shù)、可選參數(shù)個(gè)數(shù)、參數(shù)名、參數(shù)類(lèi)型和參數(shù)方向。以上分析得到的信息均同時(shí)存儲(chǔ)在預(yù)先定義的XML格式文件中。測(cè)試用例生成根據(jù)接口分析模塊產(chǎn)生的XML文件,生成測(cè)試用例模塊所需要的測(cè)試程序(CS測(cè)試文件)。主要實(shí)現(xiàn)步驟是:使用XPath技術(shù)讀取接口信息XML文件;根據(jù)XML文件,利用CodeDom技術(shù)生成測(cè)試程序文件;根據(jù)組件安全需求說(shuō)明得到組件接口方法中的初始參數(shù)。自動(dòng)編譯自動(dòng)編譯模塊主要完成把待測(cè)試COM組件、測(cè)試用例文件和相關(guān)程序集(dll格式)自動(dòng)編譯成動(dòng)態(tài)鏈接庫(kù)文件(dll格式),供驅(qū)動(dòng)程序調(diào)用。實(shí)現(xiàn)功能:通過(guò)讀取配置文件config.xml獲取指定位置的COM組件和COMTLB文件,完成COM組件注冊(cè);選擇測(cè)試用例程序(程序類(lèi)型為cs格式)及相關(guān)程序集(dll格式),編譯生成可執(zhí)行的動(dòng)態(tài)鏈接庫(kù)文件,用于驅(qū)動(dòng)器調(diào)用執(zhí)行。錯(cuò)誤注入錯(cuò)誤注入模塊主要完成從靜態(tài)和動(dòng)態(tài)兩個(gè)級(jí)別上對(duì)待測(cè)COM組件進(jìn)行錯(cuò)誤注入,以測(cè)試待測(cè)COM組件在運(yùn)行的過(guò)程中是否出現(xiàn)違反安全的異常行為。實(shí)現(xiàn)功能:接口參數(shù)錯(cuò)誤注入和動(dòng)態(tài)環(huán)境錯(cuò)誤注入(下文詳述)。動(dòng)態(tài)監(jiān)測(cè)動(dòng)態(tài)監(jiān)測(cè)模塊主要利用Windows操作系統(tǒng)中調(diào)試API技術(shù)獲得對(duì)測(cè)試驅(qū)動(dòng)的控制,從而對(duì)其運(yùn)行狀態(tài)進(jìn)行監(jiān)測(cè)。實(shí)現(xiàn)的主要功能有:監(jiān)測(cè)組件函數(shù)運(yùn)行時(shí)的堆棧值(函數(shù)的輸入?yún)?shù));在函數(shù)運(yùn)行結(jié)束時(shí)的堆棧值(函數(shù)的輸出參數(shù));CPU寄存器的值(函數(shù)返回值)?;驹恚涸讷@取組件函數(shù)的入口地址后,在函數(shù)入口上設(shè)置斷點(diǎn);當(dāng)程序調(diào)用了設(shè)置斷點(diǎn)的函數(shù)時(shí)便會(huì)產(chǎn)生調(diào)試中斷事件,進(jìn)一步可暫停目標(biāo)程序的運(yùn)行,讀取目標(biāo)程序內(nèi)存;最終獲得目標(biāo)程序內(nèi)存中希望得到的信息。測(cè)試系統(tǒng)CSTS根據(jù)狀態(tài)監(jiān)測(cè)日志中的組件狀態(tài)信息及其相關(guān)異常信息識(shí)別組件是否存在安全漏洞。錯(cuò)誤注入子系統(tǒng)設(shè)計(jì)系統(tǒng)總體流程在CSTS中,根據(jù)COM組件的特點(diǎn),系統(tǒng)采用靜態(tài)接口參數(shù)錯(cuò)誤注入和動(dòng)態(tài)環(huán)境錯(cuò)誤注入實(shí)施錯(cuò)誤注入,以測(cè)試COM組件的安全性。其總體錯(cuò)誤注入流程如圖5.3所示:圖STYLEREF1\s5.SEQ圖表\*ARABIC\s13CSTS錯(cuò)誤注入流程首先,通過(guò)COM接口分析自動(dòng)得到COM組件對(duì)象、接口、方法及方法參數(shù)等必要的錯(cuò)誤注入測(cè)試信息,然后對(duì)組件方法進(jìn)行靜態(tài)的“接口錯(cuò)誤注入”,自動(dòng)生成TestFixture(包含測(cè)試用例的測(cè)試文件),將測(cè)試文件和必要的條件引用進(jìn)行自動(dòng)編譯鏈接,生成可執(zhí)行的TestFixture(測(cè)試驅(qū)動(dòng)可以識(shí)別的DLL文件)。接著,驅(qū)動(dòng)組件運(yùn)行起來(lái),在組件運(yùn)行的過(guò)程當(dāng)中,同時(shí)對(duì)組件的運(yùn)行環(huán)境進(jìn)行動(dòng)態(tài)的“環(huán)境錯(cuò)誤注入”,并監(jiān)視組件的行為是否出現(xiàn)異常。最后,對(duì)測(cè)試的結(jié)果進(jìn)行分析,判定是否出現(xiàn)安全漏洞。其中,靜態(tài)接口錯(cuò)誤注入和動(dòng)態(tài)接口錯(cuò)誤注入是兩個(gè)相互獨(dú)立的過(guò)程,可以將靜態(tài)接口錯(cuò)誤注入和動(dòng)態(tài)環(huán)境錯(cuò)誤注入分開(kāi)測(cè)試,也可以貫穿于一個(gè)測(cè)試流程當(dāng)中,并且可以對(duì)靜態(tài)接口錯(cuò)誤注入生成的測(cè)試用例手工修改或添加新的測(cè)試用例。系統(tǒng)結(jié)構(gòu)和功能錯(cuò)誤注入子系統(tǒng)是CSTS的一個(gè)重要組成部分。按照錯(cuò)誤注入的總體流程,CSTS錯(cuò)誤注入子系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)如圖5.4所示。圖STYLEREF1\s5.SEQ圖表\*ARABIC\s14錯(cuò)誤注入子系統(tǒng)結(jié)構(gòu)圖根據(jù)系統(tǒng)功能要求錯(cuò)誤注入子系統(tǒng)包含以下兩個(gè)功能模塊:(1)接口參數(shù)錯(cuò)誤注入對(duì)接口錯(cuò)誤注入,基于的是現(xiàn)有的Ballista方法,即對(duì)接口方法的參數(shù)進(jìn)行錯(cuò)誤注入,以參數(shù)類(lèi)型為核心預(yù)先構(gòu)造無(wú)效的、畸形的異常參數(shù)案例庫(kù),對(duì)接口方法的參數(shù)類(lèi)型、參數(shù)順序、參數(shù)個(gè)數(shù)、輸入值、輸出值進(jìn)行“轟炸”,觸發(fā)組件內(nèi)部的安全漏洞通過(guò)接口爆發(fā)出來(lái)。(2)動(dòng)態(tài)環(huán)境錯(cuò)誤注入對(duì)運(yùn)行時(shí)的組件,從內(nèi)存、磁盤(pán)系統(tǒng)、進(jìn)程、網(wǎng)絡(luò)及注冊(cè)信息等相關(guān)環(huán)境進(jìn)行錯(cuò)誤注入。在組件被驅(qū)動(dòng)運(yùn)行時(shí)錯(cuò)誤注入模塊根據(jù)錯(cuò)誤注入的類(lèi)型在進(jìn)程中對(duì)組件和操作系統(tǒng)交互的相應(yīng)API進(jìn)行攔截。采用的技術(shù)是用預(yù)先定義的偽DLL替換系統(tǒng)DLL。根據(jù)環(huán)境錯(cuò)誤注入測(cè)試要求,預(yù)先編寫(xiě)一些同名的偽DLL用于替換原來(lái)的系統(tǒng)DLL。根據(jù)錯(cuò)誤注入類(lèi)型,對(duì)于不需要攔截的API函數(shù)直接把參數(shù)傳遞給系統(tǒng)DLL對(duì)應(yīng)的API函數(shù)處理并返回結(jié)果。對(duì)需要攔截的API,則在偽DLL中添加攔截代碼進(jìn)行攔截,同時(shí)注入錯(cuò)誤。系統(tǒng)實(shí)現(xiàn)關(guān)鍵技術(shù)實(shí)現(xiàn)組件動(dòng)態(tài)環(huán)境錯(cuò)誤注入,關(guān)鍵是要對(duì)選定的環(huán)境錯(cuò)誤注入點(diǎn),即組件和操作系統(tǒng)交互的相應(yīng)系統(tǒng)API調(diào)用進(jìn)行截獲。這里針對(duì)COM組件,需要對(duì)Win32API系統(tǒng)調(diào)用進(jìn)行截獲。實(shí)施Win32API系統(tǒng)調(diào)用截獲的過(guò)程主要分兩個(gè)方面:根據(jù)CSTS中選擇的錯(cuò)誤注入類(lèi)型,查找到需要截獲的系統(tǒng)API,對(duì)組件驅(qū)動(dòng)進(jìn)程中所調(diào)用的這些API進(jìn)行攔截,將其替換為指向中間偽函數(shù);為防止將環(huán)境錯(cuò)誤也注入到驅(qū)動(dòng)進(jìn)程中,在偽函數(shù)中需要對(duì)調(diào)用該API的對(duì)象進(jìn)行判斷,如果是待測(cè)COM組件則進(jìn)行錯(cuò)誤注入,否則調(diào)用原系統(tǒng)API。圖STYLEREF1\s5.SEQ圖表\*ARABIC\s15Win32API截獲原理圖5.5描述了Win32API截獲原理。其原理可以描述如下:在驅(qū)動(dòng)進(jìn)程中,需要調(diào)用三個(gè)系統(tǒng)API函數(shù)S1、S2、S3,并假定S1、S3是一次環(huán)境錯(cuò)誤注入中要截獲的系統(tǒng)API。編一個(gè)偽DLL包含兩個(gè)偽函數(shù)forgeS1和forgeS3(與S1、S3有相同的原型)。其中,驅(qū)動(dòng)進(jìn)程的IAT(ImportAddressTable,導(dǎo)入地址表)保存了其導(dǎo)入系統(tǒng)函數(shù)S1、S2、S3的地址。通過(guò)修改驅(qū)動(dòng)進(jìn)程中IAT表中S1、S3的入口地址使其分別指向偽函數(shù)forgeS1和forgeS3,這樣每當(dāng)驅(qū)動(dòng)進(jìn)程調(diào)用S1、S3時(shí),實(shí)際調(diào)用的卻是偽函數(shù)forgeS1和forgeS3,這樣就實(shí)現(xiàn)了對(duì)S1、S3的攔截。在偽函數(shù)forgeS1、forgeS3中進(jìn)一步對(duì)調(diào)用者進(jìn)行判斷,因?yàn)轵?qū)動(dòng)進(jìn)程中除了待測(cè)COM組件調(diào)用系統(tǒng)函數(shù)S1、S3外有可能還有其他調(diào)用者,如果調(diào)用者是待測(cè)COM組件,則實(shí)施環(huán)境錯(cuò)誤注入,否則轉(zhuǎn)向正常調(diào)用系統(tǒng)函數(shù)S1和S3。這樣就實(shí)現(xiàn)了COM組件對(duì)系統(tǒng)API調(diào)用的截獲。當(dāng)需要恢復(fù)COM組件對(duì)系統(tǒng)函數(shù)S1和S3的調(diào)用時(shí),只需將驅(qū)動(dòng)進(jìn)程IAT中指向偽函數(shù)forgeS1和forgeS3的指針替換回指向S1和S3的指針即可。1)通過(guò)改變導(dǎo)入地址表攔截API調(diào)用在尋找針對(duì)API函數(shù)的調(diào)用點(diǎn)時(shí),必須知道驅(qū)動(dòng)進(jìn)程空間中內(nèi)容的排列方式。在Win32操作系統(tǒng)中,進(jìn)程空間中的內(nèi)容及其排列方式由與該進(jìn)程對(duì)應(yīng)的EXE文件決定。EXE文件不但包含了進(jìn)程的可執(zhí)行代碼和數(shù)據(jù),同時(shí)也詳細(xì)地記錄了進(jìn)程所引用到的所有DLL和外部函數(shù)的信息。所以,可以根據(jù)EXE文件的格式來(lái)尋找針對(duì)目標(biāo)函數(shù)的調(diào)用點(diǎn)。Win32操作系統(tǒng)中的EXE文件和DLL文件都屬于PE(PortableExecutable)格式。PE文件格式定義了若干個(gè)數(shù)據(jù)結(jié)構(gòu),分別用于保存文件的代碼、數(shù)據(jù)和輸入輸出函數(shù)等信息,利用這些結(jié)構(gòu)可以很容易地對(duì)PE文件進(jìn)行操作(如圖5.6所示)。PE文件的主體是若干個(gè)文件節(jié),其中有一個(gè)稱為.idata的節(jié),專門(mén)用于保存EXE文件從DLL中引入的所有外部函數(shù)的信息,包括調(diào)用點(diǎn)的信息,所以,可以根據(jù)這個(gè)節(jié)的格式,并結(jié)合API函數(shù)的調(diào)用方式,來(lái)尋找并替換針對(duì)目標(biāo)函數(shù)的調(diào)用點(diǎn)。圖STYLEREF1\s5.SEQ圖表\*ARABIC\s16PE文件結(jié)構(gòu)當(dāng)程序調(diào)用某外部函數(shù)時(shí),它并非是從調(diào)用處直接跳轉(zhuǎn)到函數(shù)入口處,而是先統(tǒng)一跳轉(zhuǎn)到一個(gè)共同的中間點(diǎn),那里保存著一行CALLDWORDPTR[XXXXXXXX]形式的指令,XXXXXXXX就是IAT中與調(diào)用函數(shù)相對(duì)應(yīng)的函數(shù)指針。因此,尋找針對(duì)API函數(shù)的調(diào)用點(diǎn)時(shí),首先根據(jù)API函數(shù)所在DLL的名稱,從.idata節(jié)的結(jié)構(gòu)體數(shù)組中找到與該DLL對(duì)應(yīng)的結(jié)構(gòu)體,然后再根據(jù)API函數(shù)的名稱,可以在與該DLL對(duì)應(yīng)的IAT中找到與API函數(shù)對(duì)應(yīng)的函數(shù)指針。因?yàn)樗袑?duì)API函數(shù)的調(diào)用都將根據(jù)該處的指針來(lái)跳轉(zhuǎn)到API函數(shù),所以,修改該指針,將其改變?yōu)橹赶騻魏瘮?shù)的指針,便實(shí)現(xiàn)了用偽函數(shù)替換API函數(shù)。在恢復(fù)時(shí),執(zhí)行同樣的步驟,將指向偽函數(shù)的指針替換回指向API函數(shù)的指針即可。另外,需要改寫(xiě)的

.idata

節(jié)不一定都是可寫(xiě)的,可以調(diào)用系統(tǒng)函數(shù)VirtualProtect(…)

來(lái)實(shí)現(xiàn)。2)利用“鉤子”技術(shù)注入偽DLLWin32操作系統(tǒng)實(shí)行了“進(jìn)程地址空間分離”的機(jī)制,每個(gè)進(jìn)程有自己獨(dú)立的地址空間,所以CSTS主進(jìn)程不能直接訪問(wèn)驅(qū)動(dòng)進(jìn)程空間中的內(nèi)容,不能直接在驅(qū)動(dòng)進(jìn)程空間中尋找針對(duì)系統(tǒng)API函數(shù)的調(diào)用點(diǎn),因此必須設(shè)法突破進(jìn)程邊界,將執(zhí)行尋找API函數(shù)調(diào)用點(diǎn)的代碼和偽函數(shù)注入到驅(qū)動(dòng)進(jìn)程的空間內(nèi)。有多種打破進(jìn)程邊界的方法,比較簡(jiǎn)單的方法是使用鉤子(Hook)。鉤子是Win32操作系統(tǒng)中用來(lái)攔截窗體消息的一項(xiàng)技術(shù),分為兩種類(lèi)型:線程鉤子和全局鉤子。前者只攔截某個(gè)具體窗體的消息,后者則能攔截所有正在運(yùn)行程序的窗體消息。鉤子通過(guò)安裝來(lái)運(yùn)行。安裝鉤子時(shí)需要提供一個(gè)鉤子回調(diào)函數(shù),而且該函數(shù)必須位于一個(gè)DLL中,當(dāng)鉤子安裝好后,系統(tǒng)就會(huì)將該DLL加載到窗體所屬進(jìn)程的空間內(nèi)。每次鉤子攔截到窗體消息時(shí),回調(diào)函數(shù)都會(huì)首先被系統(tǒng)調(diào)用,以預(yù)處理消息,直至鉤子被卸載。鉤子被卸載后,DLL也將被從窗體進(jìn)程的空間內(nèi)卸載。這樣,可以利用鉤子來(lái)打破進(jìn)程邊界:將執(zhí)行截獲的代碼和偽函數(shù)與鉤子回調(diào)函數(shù)放在同一個(gè)偽DLL中,然后針對(duì)驅(qū)動(dòng)進(jìn)程的窗體安裝一個(gè)線程鉤子,鉤子運(yùn)行后,偽DLL便會(huì)被強(qiáng)制注入到驅(qū)動(dòng)進(jìn)程的空間內(nèi)。當(dāng)需要從驅(qū)動(dòng)進(jìn)程空間內(nèi)撤離這些代碼時(shí),只需將鉤子卸載掉即可。3)根據(jù)返回地址確定調(diào)用對(duì)象在錯(cuò)誤注入之前,關(guān)鍵是需要判定調(diào)用者是否是待測(cè)的COM組件。確定API函數(shù)的調(diào)用者,可以通過(guò)API函數(shù)調(diào)用的返回地址進(jìn)行判斷。圖STYLEREF1\s5.SEQ圖表\*ARABIC\s17函數(shù)調(diào)用棧空間在如圖5.7所示的函數(shù)調(diào)用??臻g中,用如下內(nèi)聯(lián)匯編可獲取調(diào)用API函數(shù)的返回地址。DWORD*retAddress;__asm{Movecx,[ebp+4]/*4是4個(gè)byte,32位機(jī)器,就是指針下一個(gè),取到存returnaddress的塊的地址*/MovretAddress,ecx/*從寄存器中取出放入一個(gè)指針里面,用指針記錄這個(gè)地址*/}DWORDadd=*retAddress;/*add中就是返回地址的值*/通過(guò)該地址,可以借助操作系統(tǒng)系統(tǒng)提供的一個(gè)函數(shù)virturalquery(…)得到該地址所在虛擬地址空間塊的信息。在這個(gè)結(jié)構(gòu)體信息中有一個(gè)值,是調(diào)用模塊的基址值也即句柄值,通過(guò)句柄值就可知道該模塊的名稱和其他信息。于是,通過(guò)模塊的名稱就可知道調(diào)用該API函數(shù)是否是待測(cè)COM組件。本章小結(jié)本章針對(duì)目前普遍使用的COM組件研制自動(dòng)化安全性測(cè)試工具并實(shí)現(xiàn)其中的核心部分之一——錯(cuò)誤注入子系統(tǒng)。首先對(duì)組件安全測(cè)試系統(tǒng)(CSTS)的總體框架和功能模塊進(jìn)行了簡(jiǎn)要的介紹,然后詳細(xì)給出了錯(cuò)誤注入子系統(tǒng)的總體流程、結(jié)構(gòu)和功能設(shè)計(jì),最后對(duì)系統(tǒng)實(shí)現(xiàn)關(guān)鍵技術(shù)——API截獲技術(shù)進(jìn)行了充分的論述。COM組件測(cè)試及效果評(píng)估上一章已經(jīng)介紹了CSTS中錯(cuò)誤注入子系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),為了進(jìn)一步檢驗(yàn)錯(cuò)誤注入子系統(tǒng)在測(cè)試COM組件安全漏洞中的實(shí)際效果,本章選擇兩個(gè)第三方COM組件作為測(cè)試實(shí)例進(jìn)行錯(cuò)誤注入前后的對(duì)比分析,達(dá)到驗(yàn)證接口參數(shù)錯(cuò)誤注入和動(dòng)態(tài)環(huán)境錯(cuò)誤注入有效性的測(cè)試目的。COM組件測(cè)試測(cè)試環(huán)境在配置Intel處理器并安裝WindowsXPSP2中文版操作系統(tǒng)和.NETFramework2.0版本的軟硬件平臺(tái)上,對(duì)CSTS中錯(cuò)誤注入子系統(tǒng)的有效性進(jìn)行測(cè)試。測(cè)試實(shí)例為了證明接口參數(shù)錯(cuò)誤注入的有效性,以一個(gè)有漏洞的第三方COM組件vuln.dll作為測(cè)試樣本(考慮到第三方COM組件一般接口和方法數(shù)較多,樣本組件中僅有針對(duì)性設(shè)計(jì)了一個(gè)接口和五個(gè)成員方法,這五個(gè)成員方法中有幾個(gè)方法是存在安全漏洞的,但事先并不知),分兩個(gè)方面去證明接口錯(cuò)誤注入的有效性:在沒(méi)有接口錯(cuò)誤注入之前,考察能否測(cè)試出組件安全漏洞;在接口參數(shù)錯(cuò)誤注入之后,考察能否檢測(cè)出組件安全漏洞并能給出漏洞原因的分析結(jié)論。除了能證明接口參數(shù)錯(cuò)誤注入在揭露已知安全漏洞方面的能力,接口錯(cuò)誤注入還要能夠檢測(cè)出事先未知是否有漏洞,即新的、未曾公布的COM組件安全漏洞,接下來(lái)給出這樣的測(cè)試案例。由于目前公布的COM組件安全漏洞尚無(wú)環(huán)境擾動(dòng)方面的實(shí)例,為了證明動(dòng)態(tài)環(huán)境錯(cuò)誤注入的有效性,以一個(gè)第三方COM組件GomWeb3.dll作為測(cè)試實(shí)例,對(duì)在沒(méi)有環(huán)境錯(cuò)誤注入和環(huán)境錯(cuò)誤注入后COM組件安全測(cè)試的結(jié)果進(jìn)行對(duì)照,根據(jù)動(dòng)態(tài)環(huán)境錯(cuò)誤注入所發(fā)現(xiàn)的新的潛在安全漏洞表明動(dòng)態(tài)環(huán)境錯(cuò)誤注入的有效性。測(cè)試過(guò)程1)測(cè)試第三方COM組件vuln.dll在不進(jìn)行接口錯(cuò)誤注入的前提下,使用CSTS測(cè)試vuln.dll有如下幾個(gè)步驟:(1)新建項(xiàng)目,選擇待測(cè)COM組件vuln.dll;(2)COM組件接口分析;(3)自動(dòng)生成測(cè)試腳本文件;(4)手動(dòng)添加或修改測(cè)試用例;(5)編譯鏈接;(6)啟動(dòng)測(cè)試驅(qū)動(dòng)程序;(7)開(kāi)始動(dòng)態(tài)監(jiān)視;(8)執(zhí)行測(cè)試;(9)測(cè)試結(jié)果查看分析。經(jīng)過(guò)COM組件接口分析,發(fā)現(xiàn)vuln.dll有一個(gè)組件對(duì)象Server,Server中有一個(gè)接口Iserver,Iserver中有五個(gè)成員方法:Method1()、Method2()、Method3()、Method4()、HeapCorruption(),其原型如下所示:dispinterfaceIserver{properties:methods:longMethod1([in]BSTRsPath);longMethod2([in]longlin);longMethod3([in]VARIANTvin);longMethod4([in]BSTRsPath,[in]BSTRmsg);longHeapCorruption([in]BSTRstrIn,[in]longbufSize);}針對(duì)這五個(gè)成員方法,可手動(dòng)輸入簡(jiǎn)單測(cè)試用例如下:namespacevulntest{usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;usingCOMTest;[TestFixture]publicclassserver{privateVULNLib.serverClassmyserverClass=newVULNLib.serverClass();[SetUp]publicvoidSetUp(){}[Test]publicvoidIserverMethod1(){stringsPath="test";myserverClass.Method1(sPath);}[Test]publicvoidIserverMethod2(){myserverClass.Method2(0);}[Test]publicvoidIserverMethod3(){stringvin="test";myserverClass.Method3(vin);}[Test]publicvoidIserverMethod4(){stringsPath="test";stringmsg="test";myserverClass.Method4(sPath,msg);}[Test]publicvoidIserverHeapCorruption(){stringstrIn="test";myserverClass.HeapCorruption(strIn,0);}}}圖6.1是在未進(jìn)行接口參數(shù)錯(cuò)誤注入的測(cè)試結(jié)果。圖STYLEREF1\s6.1未接口參數(shù)錯(cuò)誤注入的測(cè)試結(jié)果使用CSTS進(jìn)行接口參數(shù)錯(cuò)誤注入測(cè)試vuln.dll的步驟如下:(1)新建項(xiàng)目,選擇待測(cè)COM組件vuln.dll;(2)COM組件接口分析;(3)選擇“接口錯(cuò)誤注入”自動(dòng)生成測(cè)試用例;(5)編譯鏈接;(6)啟動(dòng)測(cè)試驅(qū)動(dòng)程序;(7)開(kāi)始動(dòng)態(tài)監(jiān)視;(8)執(zhí)行測(cè)試;(9)測(cè)試結(jié)果查看分析。針對(duì)以上五個(gè)方法原型,接口參數(shù)錯(cuò)誤注入自動(dòng)生成如下測(cè)試用例:namespacevulnInterfaceFaultInjection{usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;usingCOMTest;[TestFixture]publicclassserver{privateVULNLib.serverClassmyserverClass=newVULNLib.serverClass();[SetUp]publicvoidSetUp(){}[TearDown]publicvoidTearDown(){}[Test]publicvoidIserverMethod1(){stringsPath=newstring('A',500);longresult=myserverClass.Method1(sPath);}[Test]publicvoidIserverMethod2(){longresult=myserverClass.Method2(2147483647);}[Test]publicvoidIserverMethod3(){stringvin=newstring('A',500);longresult=myserverClass.Method3(vin);}[Test]publicvoidIserverMethod4(){stringsPath=newstring('A',500);stringmsg=newstring('A',500);longresult=myserverClass.Method4(sPath,msg);}[Test]publicvoidIserverHeapCorruption(){stringstrIn=newstring('A',500);longresult=myserverClass.HeapCorruption(strIn,2147483647);}}}圖6.2是在進(jìn)行接口參數(shù)錯(cuò)誤注入后的測(cè)試結(jié)果。圖STYLEREF1\s6.2接口參數(shù)錯(cuò)誤注入后的測(cè)試結(jié)果2)測(cè)試第三方COM組件GomWeb3.dll在不進(jìn)行動(dòng)態(tài)環(huán)境錯(cuò)誤注入下測(cè)試GomWeb3.dll和在不進(jìn)行接口錯(cuò)誤注入的前提下測(cè)試vuln.dll的步驟一樣,其測(cè)試結(jié)果如圖6.3所示。圖STYLEREF1\s6.3未動(dòng)態(tài)環(huán)境錯(cuò)誤注入的測(cè)試結(jié)果使用CSTS進(jìn)行動(dòng)態(tài)環(huán)境錯(cuò)誤注入測(cè)試GomWeb3.dll的步驟如下:(1)新建項(xiàng)目,選擇待測(cè)COM組件GomWeb3.dll;(2)GomWeb3.dll接口分析;(3)自動(dòng)生成測(cè)試腳本文件;(4)編譯鏈接;(5)啟動(dòng)測(cè)試驅(qū)動(dòng)程序;(6)開(kāi)始動(dòng)態(tài)監(jiān)視;(7)選擇要注入的“環(huán)境錯(cuò)誤”,如內(nèi)存不足和注冊(cè)表崩潰(如圖6.4所示);(8)執(zhí)行測(cè)試。動(dòng)態(tài)環(huán)境錯(cuò)誤注入后的測(cè)試結(jié)果如圖6.5、圖6.7所示。圖STYLEREF1\s6.4選擇注入的環(huán)境錯(cuò)誤圖STYLEREF1\s6.5環(huán)境錯(cuò)誤注入后的測(cè)試結(jié)果測(cè)試效果評(píng)估一個(gè)首要的安全需求是阻止一個(gè)不可信的組件訪問(wèn)主機(jī)上任意地址和資源,如“存儲(chǔ)越界訪問(wèn)”或“非法訪問(wèn)異?!?。如果在測(cè)試過(guò)程中出現(xiàn)“存儲(chǔ)越界訪問(wèn)”,則表明待測(cè)組件存在安全漏洞。接口參數(shù)錯(cuò)誤注入的有效性從圖6.1可以看到在沒(méi)有接口參數(shù)錯(cuò)誤注入之前,手動(dòng)輸入的12個(gè)測(cè)試用例全部執(zhí)行成功,但在接口參數(shù)錯(cuò)誤注入后,第三方COM組件vuln.dll出現(xiàn)“存儲(chǔ)越界訪問(wèn)”異常(如圖6.2所示),從而表明vuln.dll存在安全漏洞。進(jìn)一步反復(fù)對(duì)vuln.dll進(jìn)行“接口參數(shù)錯(cuò)誤注入”,生成不同的測(cè)試用例,通過(guò)查看參數(shù)在輸入何值時(shí)導(dǎo)致異常,最終得出vuln.dll漏洞原因結(jié)論:(1)Method1()僅有一個(gè)字符串類(lèi)型參數(shù)sPath,在輸入超長(zhǎng)字符串的時(shí)候,產(chǎn)生緩沖區(qū)溢出漏洞,因此漏洞原因在于sPath沒(méi)有進(jìn)行有效的參數(shù)長(zhǎng)度檢查;(2)Method2()、Method3()經(jīng)檢測(cè)無(wú)安全漏洞;(3)Method4()的二個(gè)參數(shù)sPath和msg均是字符串類(lèi)型,但只有第二個(gè)存在緩沖區(qū)溢出漏洞,因此漏洞原因在于msg沒(méi)有進(jìn)行有效的參數(shù)長(zhǎng)度檢查,未經(jīng)驗(yàn)證就輸入到緩沖區(qū)導(dǎo)致安全漏洞;(4)HeapCorruption()的兩個(gè)參數(shù)strIn和bufSize,一個(gè)是字符串,另一個(gè)是長(zhǎng)整型,對(duì)第一個(gè)參數(shù)輸入超長(zhǎng)字符串導(dǎo)致緩沖區(qū)溢出,對(duì)第二個(gè)參數(shù)輸入大整數(shù)時(shí)造成整數(shù)溢出。通過(guò)以上對(duì)第三方COM組件vuln.dll的安全測(cè)試,可知:在沒(méi)有接口錯(cuò)誤注入之前,不能測(cè)試出組件安全漏洞,而在接口參數(shù)錯(cuò)誤注入之后,能檢測(cè)出組件安全漏洞并能給出漏洞原因的分析結(jié)論。因此,證明了接口參數(shù)錯(cuò)誤注入在揭露已知安全漏洞方面的有效性。除了能完全檢查出現(xiàn)今已知的或已公布的COM組件安全漏洞,接口參數(shù)錯(cuò)誤注入還能夠檢測(cè)出事先未知是否有漏洞和未曾公布的COM組件安全漏洞。圖6.6就是一個(gè)通過(guò)接口參數(shù)錯(cuò)誤注入檢測(cè)出的未曾在網(wǎng)上公布的新的安全漏洞。該漏洞源自騰訊QQ2006珊瑚蟲(chóng)版CoralAssist.dll組件(版本15),其中的一個(gè)方法Excute()的三個(gè)字符型參數(shù),均未對(duì)輸入值進(jìn)行長(zhǎng)度檢查,導(dǎo)致緩沖區(qū)溢出漏洞。圖STYLEREF1\s6.6CoralAssist.dll組件漏洞另外,暴風(fēng)影音Ⅱ的一個(gè)COM組件mps.dll(版本2.07.06.15)經(jīng)接口參數(shù)錯(cuò)誤注入也發(fā)現(xiàn)了未曾公布的安全漏洞,該組件中的URL屬性輸入超長(zhǎng)字符串時(shí),出現(xiàn)存儲(chǔ)訪問(wèn)越界異常,另一個(gè)函數(shù)advancedOpen()也暴露出緩沖區(qū)溢出漏洞。綜上所述,接口參數(shù)錯(cuò)誤注入不僅在揭露已知安全漏洞方面有效,而且在揭露未知安全漏洞方面也同樣具有一定的有效性,因而證明了接口錯(cuò)誤注入的有效性。動(dòng)態(tài)環(huán)境錯(cuò)誤注入的有效性從圖6.3可以看到在沒(méi)有動(dòng)態(tài)環(huán)境錯(cuò)誤注入之前,手動(dòng)輸入的78個(gè)測(cè)試用例全部執(zhí)行成功,但在動(dòng)態(tài)環(huán)境錯(cuò)誤注入后,78個(gè)測(cè)試用例失敗2個(gè),同時(shí)第三方COM組件GomWeb3.dll在執(zhí)行過(guò)程中出現(xiàn)“存儲(chǔ)越界訪問(wèn)”異常(如圖6.7),表明GomWeb3.dll存在安全漏洞。在以上測(cè)試GomWeb3.dll過(guò)程中,可知是由于注入了“環(huán)境錯(cuò)誤”——內(nèi)存不足和注冊(cè)表崩潰而導(dǎo)致GomWeb3.dll執(zhí)行出現(xiàn)異常,通過(guò)監(jiān)視日志查看GomWeb3.dll在執(zhí)行過(guò)程中調(diào)用系統(tǒng)API的情況,發(fā)現(xiàn)GomWeb3.dll在執(zhí)行接口方法OpenURL()對(duì)應(yīng)的測(cè)試用例時(shí)調(diào)用了系統(tǒng)函數(shù)LocalAlloc(),即本地內(nèi)存分配函數(shù),當(dāng)選擇注入“內(nèi)存不足”環(huán)境錯(cuò)誤時(shí),返回一個(gè)“ERROR_NOT_ENOUGH_MEMORY”的模圖STYLEREF1\s6.7環(huán)境錯(cuò)誤注入后出現(xiàn)“存儲(chǔ)越界訪問(wèn)”異常擬錯(cuò)誤,而GomWeb3.dll沒(méi)有正確處理該錯(cuò)誤,忽視了返回值的應(yīng)有判斷,導(dǎo)致在沒(méi)有分配的內(nèi)存空間上越界訪問(wèn),所以出現(xiàn)“存儲(chǔ)越界訪問(wèn)”異常。綜上,通過(guò)在沒(méi)有環(huán)境錯(cuò)誤注入和環(huán)境錯(cuò)誤注入后GomWeb3.dll安全測(cè)試的結(jié)果進(jìn)行對(duì)比分析,動(dòng)態(tài)環(huán)境錯(cuò)誤注入不僅能發(fā)現(xiàn)新的安全漏洞,并且能定位到安全漏洞產(chǎn)生的具體來(lái)源,從而證明了動(dòng)態(tài)環(huán)境錯(cuò)誤注入的有效性。本章小結(jié)本章對(duì)錯(cuò)誤注入子系統(tǒng)進(jìn)行了測(cè)試,通過(guò)選取兩個(gè)典型的測(cè)試實(shí)例進(jìn)行系統(tǒng)測(cè)試驗(yàn)證了系統(tǒng)的功能。測(cè)試表明針對(duì)第三方COM組件運(yùn)用所設(shè)計(jì)與實(shí)現(xiàn)的錯(cuò)誤注入子系統(tǒng)完成了對(duì)組件靜態(tài)的接口參數(shù)錯(cuò)誤注入和動(dòng)態(tài)的環(huán)境錯(cuò)誤注入功能,通過(guò)錯(cuò)誤注入子系統(tǒng)能有效地觸發(fā)組件內(nèi)部的安全漏洞,并能結(jié)合動(dòng)態(tài)監(jiān)視得出組件漏洞原因的結(jié)論。這說(shuō)明錯(cuò)誤注入子系統(tǒng)的功能設(shè)計(jì)正確,實(shí)現(xiàn)有效。結(jié)束語(yǔ)本文工作總結(jié)隨著組件特別是第三方組件的使用,大大提高了軟件開(kāi)發(fā)的效率,但同時(shí)也增加了軟件可靠性和安全性的風(fēng)險(xiǎn)。隨著互聯(lián)網(wǎng)的發(fā)展,這種風(fēng)險(xiǎn)越來(lái)越突出。作為保障組件安全的可靠手段——組件安全性測(cè)試成為重要的研究?jī)?nèi)容。然而由于其理論和技術(shù)的難度,組件安全性測(cè)試研究尚未取得實(shí)質(zhì)的進(jìn)展。本文即在此背景下對(duì)組件安全性測(cè)試的理論與技術(shù)進(jìn)行研究,提出了一種基于錯(cuò)誤注入技術(shù)的SDFI組件安全性測(cè)試方法,并在實(shí)踐上設(shè)計(jì)和開(kāi)發(fā)了一個(gè)COM組件安全自動(dòng)化錯(cuò)誤注入測(cè)試系統(tǒng),測(cè)試結(jié)果表明SDFI在組件安全性測(cè)試中具有一定的實(shí)用性和有效性。本文的主要工作及創(chuàng)新總結(jié)如下:1)對(duì)錯(cuò)誤注入技術(shù)概念、歷史以及利用錯(cuò)誤注入技術(shù)進(jìn)行安全性測(cè)試的方法進(jìn)行了深入的研究和探討,并針對(duì)組件、尤其是第三方組件,提出一種基于錯(cuò)誤注入的SDFI組件安全性測(cè)試方法;2)通過(guò)對(duì)組件安全性測(cè)試基本概念、研究?jī)?nèi)容和難點(diǎn)的研究,在安全漏洞分類(lèi)學(xué)研究的基礎(chǔ)之上,給出了一種FIM組件安全錯(cuò)誤注入測(cè)試模型;3)根據(jù)FIM針對(duì)組件運(yùn)行前和運(yùn)行時(shí)兩個(gè)不同的時(shí)機(jī),分別提出了測(cè)試組件安全漏洞的基于Ballista的接口參數(shù)錯(cuò)誤注入方法和基于EAI模型的動(dòng)態(tài)環(huán)境錯(cuò)誤注入方法,并給出了相應(yīng)的EEC和DSW測(cè)試用例約減算法;4)在理論研究的基礎(chǔ)上,針對(duì)目前普遍使用的COM組件,設(shè)計(jì)和實(shí)現(xiàn)了基于Win32API截獲技術(shù)的CSTS組件安全自動(dòng)化錯(cuò)誤注入子系統(tǒng);5)選取第三方COM組件作為測(cè)試實(shí)例進(jìn)行錯(cuò)誤注入前后的對(duì)比分析,測(cè)試結(jié)果表明通過(guò)錯(cuò)誤注入子系統(tǒng)不僅能有效地揭露已知的安全漏洞,還能觸發(fā)組件未知的安全漏洞,從而驗(yàn)證了SDFI組件安全性測(cè)試方法的有效性。后續(xù)工作展望由于時(shí)間關(guān)系和作者水平有限,課題研究中還存在一些不足,一些工作還需要進(jìn)一步的完善和深入。作者認(rèn)為還需要在下面這些方面做更深層次的研究工作:1)深化接口參數(shù)錯(cuò)誤注入方法的研究在本文基于Ballista的接口參數(shù)錯(cuò)誤注入方法中,通過(guò)預(yù)先針對(duì)不同參數(shù)類(lèi)型構(gòu)建各種各樣的異常元素,測(cè)試用例就是這些不同異常元素的組合,但并沒(méi)有提供對(duì)不同類(lèi)型的異常元素進(jìn)行結(jié)構(gòu)化的設(shè)計(jì),下一步的工作就是如何使測(cè)試用例的構(gòu)造更為系統(tǒng)化,使測(cè)試用例更有針對(duì)性。2)改進(jìn)錯(cuò)誤注入測(cè)試用例生成算法在本文提出的接口參數(shù)錯(cuò)誤注入和動(dòng)態(tài)環(huán)境錯(cuò)誤注入方法中,測(cè)試用例生成算法仍然需要改進(jìn),現(xiàn)有的算法在處理較復(fù)雜的組件時(shí)產(chǎn)生的測(cè)試用例集合還是過(guò)大,并且錯(cuò)誤注入測(cè)試用例的有效性還需要進(jìn)一步提高。今后工作重點(diǎn)可圍繞這一方面進(jìn)行深入研究。3)完善和增強(qiáng)CSTS與錯(cuò)誤注入子系統(tǒng)的功能目前的CSTS工具只能測(cè)試基于COM標(biāo)準(zhǔn)的簡(jiǎn)單組件,對(duì)參數(shù)約束、有狀態(tài)的情況以及需要搭建運(yùn)行環(huán)境的復(fù)雜組件仍然需要手工操作。如何實(shí)現(xiàn)一個(gè)更通用的、針對(duì)任何Windows平臺(tái)的組件安全性測(cè)試工具也將是下一階段工作的方向之一。另外,錯(cuò)誤注入子系統(tǒng)中動(dòng)態(tài)環(huán)境錯(cuò)誤注入功能需要提高Win32API截獲的穩(wěn)定性和效率,這方面也有待解決。碩士階段的生活短暫而充實(shí),在師長(zhǎng)的關(guān)心和幫助下,作者在專業(yè)知識(shí)方面取得了不小的進(jìn)步,各方面的能力也有了提高。作者十分清楚自己存在的缺點(diǎn)和不足,在今后的工作和學(xué)習(xí)中還要不斷努力提高自己的綜合素質(zhì)。致謝碩士階段的學(xué)習(xí)即將結(jié)束,兩年的學(xué)習(xí)生活緊張而又愉快。論文是我這一階段學(xué)習(xí)工作情況的總結(jié)。在此謹(jǐn)向所有關(guān)心、幫助、支持過(guò)我的老師、同學(xué)、朋友和親人致以最誠(chéng)摯的感謝!首先要感謝我的導(dǎo)師徐麗萍副教授,本文是在她的孜孜不倦的教誨和無(wú)微不至的關(guān)懷下完成的。這里謹(jǐn)向徐老師表示最誠(chéng)摯的謝意與敬意!我還要特別感謝敬愛(ài)的盧炎生教授:盧老師深厚的理論功底、淵博的學(xué)識(shí)、儒雅的學(xué)術(shù)風(fēng)范和兢兢業(yè)業(yè)、精益求精的工作態(tài)度給我留下了深刻的印象,深深地感染和激勵(lì)著我,也將永遠(yuǎn)鞭策著我不斷進(jìn)??!盧老師正直無(wú)私的品格,豁達(dá)的胸襟,樂(lè)觀積極地人生態(tài)度展現(xiàn)了學(xué)者的思想境界和人格魅力,為我樹(shù)立了做人的楷模,使我終生難忘!感謝謝曉東老師在課題研究上給我悉心的幫助和指導(dǎo)。謝老師嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)態(tài)度、忘我的工作精神和耐心細(xì)致的言傳身教不斷激勵(lì)著我,在此特別感謝謝老師對(duì)我的鼓勵(lì),幫助和信任感謝殷賢亮副教授、楊茂林老師、趙小松老師、潘鵬老師、吳海老師、江勝老師、瞿彬彬老師等各位老師在學(xué)習(xí)和生活中對(duì)我的指導(dǎo)和幫助,從你們身上我學(xué)到了豐富的知識(shí)和寶貴的經(jīng)驗(yàn)。感謝陳錦富、游亮、黃晉博士,同課題組的溫賢鑫、王平、張超、倪銘同學(xué),在實(shí)驗(yàn)室的學(xué)習(xí)生活中我們朝夕相處,與他們?cè)趯W(xué)術(shù)上的交流,給了我很多有益的啟示,使我受益頗多。感謝師兄,感謝實(shí)驗(yàn)室所有的師兄師姐和師弟師妹們,感謝你們和我一起度過(guò)快樂(lè)的時(shí)光!感謝我的父母。一直以來(lái),他們都無(wú)私地為我貢獻(xiàn)著,風(fēng)風(fēng)雨雨陪伴我走了過(guò)來(lái)。回首這兩年走過(guò)的路,回顧過(guò)去的點(diǎn)點(diǎn)滴滴,覺(jué)得萬(wàn)分地感動(dòng)。我要向他們深深地鞠一躬!最后感謝所有關(guān)心、愛(ài)護(hù)和幫助過(guò)我的親人和朋友!PAGE參考文獻(xiàn)GPour.Component-BasedsoftwareDevelopmentApproach:NewOpportunitiesandChallenges[C].In:ProcofTechnologyofObject-OrientedLanguages,1998:375-383.張勇,基于規(guī)格說(shuō)明的組件安全性測(cè)試技術(shù)研究與實(shí)現(xiàn),中國(guó)人民解放軍信息工程大學(xué)碩士學(xué)位論文,2005.12。毛澄映,盧炎生,構(gòu)件軟件測(cè)試技術(shù)研究進(jìn)展,計(jì)算機(jī)研究與發(fā)展,2006年08期:1375-1382。ClarkJAPradhanDK.FaultInjection:AMethodforValidatingComputer-SystemDependability.IEEEComputer,1995,28(6):47-56.AnupK.Ghosh,TomO'Connor&GaryMcGraw,AnAutomatedApproachforIdentifyingPotentialVulnerabilitiesinSoftware,ReliableSoftwareTechnologiesCorporation,1998.鄒濤,張翠,許博義,基于故障注入的軟件安全性測(cè)試方法研究,全國(guó)抗惡劣環(huán)境計(jì)算機(jī)第十五屆學(xué)術(shù)年會(huì),2005:26-29

。AnupK.Ghosh&GaryMcGraw,AnApproachforCertifyingSecurityinSoftwareComponents,ReliableSoftwareTechnologies,1998.PanelModerator:JimReynolds,Teknowledge,HowUsefulIsSoftwareFaultInjectionforEvaluatingtheSecurityofCOTSProducts,IEEESoftware,1998.NimalNissanke,ComponentSecurity–IssuesandanApproach,Proceedingsofthe29thAnnualInternationalComputerSoftwareandApplicationsConference(COMPSAC’05),IEEE,2005.K.Md.Khan,J.HanandY.Zheng,"CharacterisingUserDataProtectionofSoftwareComponents,"inSoftwareEngineeringConference,2000Australian,IEEEsoftware,Canberra,ACT,Australia,2000,pp.3-11.K.Md.Khan,J.Han,"AssessingSecurityPropertiesofSoftwareComponents:ASoftwareEngineer'sPerspective,"inProceedingsofthe2006AustralianSoftwareEngineeringConference(ASWEC),IEEE,2006,pp.199-210.J.Han,K.Md.Khan,"ASecurityCharacterisationFrameworkforTrustworthyComponentBasedSoftwareSystem,"inProceedingsofthe27thAnnualInternationalComputerSoftwareandApplicationsConference(COMPSAC),IEEE,pp.164-169,2003.J.Han,Y.Zheng,"SecurityCharacterisationandIntegrityAssuranceforComponent-BasedSoftware,"IEEEsoftware,pp.61-66,2000.A.Bertolino,A.Polini,"AFrameworkforComponentDeploymentTesting,"inthe25thInternationalConferenceonSoftwareEngineering(ICSE),IEEEComputerSociety,pp.221–231,2003.J.M.Haddox,G.M.KapfhammerandC.C.Michael,"AnApproachforUnderstandingandTestingThirdPartySoftwareComponents,"inProceedingsAnnualReliabilityandMaintainabilitySymposium,IEEE,Seattle,WA,USA,pp.293-299,2002.MartinS¨u?krautChristofFetzer,RobustnessandSecurityHardeningofCOTSSoftwareLibraries,37thAnnualIEEE/IFIPInternationalConferenceonDependableSystemsandNetworks,2007.Hsueh,M.C.,Tsai,T.,Iyer,R.:FaultInjectionTechniquesandTools.In:IEEEComputer,pp.75-82,1997.J.V.Carreira,D.Costa,andS.J.G,"FaultInjectionSpot-ChecksComputerSystemDependability",IEEESpectrum,pp.50-55,1999.J.Carrara,H.Madeira,J.GabrielSilva.Xception:ATechniquefortheExperimentalEvaluationofDependabilityinModernComputers.IEEETrans.onSoftwareEngineering,1998,24(2):125-136.H.Mills.Onthestatisticalvalidationofcomputerprograms.TechnicalReportFSC-726015,IBMFederalSystemsDivision,1972.BiemanJM,DreilingerD,LINLi-jun.Usingfaultinjectiontoincreasesoftwaretestcoverage[A].SoftwareReliabilityEngineeringProceedingsSeventhInternationalSymposium[C].NewYork:IEEEComputerSocietyPress,pp.166-174,1996.J.Voas,"FaultInjectionfortheMasses,"Computer,vol.30,pp.129-130,1997.R.Barbosa,N.Siliva,J.Dur?e,HMadeira,VerificationandValidationof(RealTime)COTSProductsusingFaultInjectionTechniques,2007.W.DuandA.P.Mathur.VulnerabilityTestingofSoftwareSystemUsingFaultInjection.TechnicalReport,COAST,PurdueUniversity,WestLafayette,IN,US,1998.JMVoas&AnupK.Ghosh.Softwarefaultinjectionforsurvivability.DARPAInformationSurvivabilityConferenceandExposition,P338-346,1999.CowanCPuCMaierDetal.StackguardAutomaticAdaptiveDetectionandPreventionofBuffer-overflowAttacks.InProceedingsofthe7thUSENIXSecuritySymposium,pages:63-78,1998.11.MillerB.PKoskiDLeeC.Petal.FuzzRevistedARe-examinationoftheReliabilityofUnixUtilitiesandServices.Technicalreport,UniversityofWisconsin,ComputerSciencesDept,1995.Jo?oDur?e,HenriqueMadeira,DefinitionofSoftwareFaultEmulationOperators:aFieldDataStudy.TheInternationalConferenceonDependableSystemsandNetworks,2003.朱鴻宇,謝余強(qiáng),劉瑰,基于故障注入發(fā)現(xiàn)緩沖區(qū)溢出漏洞的研究,微計(jì)算機(jī)應(yīng)用,2005年06期26卷:676-678。R.Moraes,R.Barbosa,J.Dur?es,N.Mendes,E.Martins,H.Madeira,Injectionoffaultsatcomponentinterfacesandinsidethecomponentcodearetheyequivalent,ProceedingsoftheSixthEuropeanDependableComputingConference,IEEE,2006.B.P.Miller,L.Fredriksen,andB.So,"AnEmpiricalStudyoftheReliabilityofUNIXUtilities",CommunicationsoftheACM33,12(December1990).Alsoappears(inGermantranslation)as"FataleFehlertractigkeit:EineEmpirischeStudiezurZuverlassigkeitvonUNIX-Utilities",iX,March1991.NathanP.Kropp,PhilipJ.Koopman,DanielP.Siewiorek,AutomatedRobustnessTestingofOff-the-ShelfSoftwareComponent,CarnegieMellonUniversity,1998.Koopman,P.Siewiorek,D.DeVale,K.DeVale,J.Fernsler,K.Guttendorf,D.Kropp,N.Pan,J.Shelton,C.Shi,Y.“BallistaProject:COTSSoftwareRobustnessTesting”,CarnegieMellonUniversity,2003.Martins,E.Rubira,C.M.F.LemeN.G.M.“Jaca:Areflectivefaultinjectiontoolbasedonpatterns”P(pán)rocofthe2002InternConferenceonDependableSystems&Networks,pp.483-487,WashingtonD.C.USA,23-267,2002.李明,高勇,李祥和,基于語(yǔ)法的軟件安全檢測(cè),信息安全與通信保密,2006年08期:86-87,91。PeteBroadwell,NaveenSastry,JonathanTraupman.FIGProject-FaultInjectioninglibc(FIG),RecoveryOrientedComputing(ROC)-UCB,December10,2001.JamesA.Whittaker.ICSE–RuntimeFaultInjection.Toappear.單國(guó)棟,連一峰,環(huán)境錯(cuò)誤注入測(cè)試機(jī)制,計(jì)算機(jī)工程,2004年第30卷19期:113-114,182。\o"王航"王航,\o"戴英俠"戴英俠,單國(guó)棟,連一峰,軟件系統(tǒng)安全脆弱性測(cè)試技術(shù),\o"計(jì)算機(jī)科學(xué)"計(jì)算機(jī)科學(xué),2002年29卷08期:134-136。C.Szyperski.ComponentSoftware-BeyondObjectOrientedProgramming[M].AddisonWesley,1997.Moraes,R.andMartins,E.“AnArchitecture-basedStr

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論