專利名稱:基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件安全測(cè)試,尤其涉及基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法。
背景技術(shù):
軟件的安全漏洞目前已成為其受到安全威脅的最主要的基本因素。通過挖掘安全漏洞來進(jìn)行安全測(cè)試的現(xiàn)有技術(shù)主要包括黑盒模糊(FUZZ)測(cè)試技術(shù)、白盒源代碼審計(jì)技術(shù)、以及灰盒路徑測(cè)試技術(shù)。黑盒模糊測(cè)試技術(shù)通過按一定策略對(duì)給定數(shù)據(jù)樣本進(jìn)行變形生成大量新的測(cè)試樣本,然后啟動(dòng)被測(cè)試應(yīng)用處理這些測(cè)試樣本,檢測(cè)應(yīng)用是否出現(xiàn)異常。該技術(shù)的優(yōu)點(diǎn)在于,門檻低,無需源代碼和相關(guān)技術(shù)信息,只需要有應(yīng)用和對(duì)應(yīng)的數(shù)據(jù)樣本就可以實(shí)現(xiàn)。但是該技術(shù)的缺陷在于,只能挖掘出淺層次的安全漏洞,無法理解數(shù)據(jù)真實(shí)的含義,更多深層次的漏洞難以發(fā)現(xiàn),而且分析出來的信息還需要做二次分析,同時(shí)作為安全測(cè)試方法,無法準(zhǔn)確描述其安全測(cè)試的覆蓋率,測(cè)試效果依賴于樣本的覆蓋空間。白盒源代碼審計(jì)技術(shù)是在源代碼級(jí)檢測(cè)軟件的安全漏洞的技術(shù)。白盒源代碼審計(jì)技術(shù)的優(yōu)點(diǎn)在于,對(duì)于已被總結(jié)出特定特征的安全漏洞可以做全路徑的覆蓋,無需做二次分析。但是該技術(shù)的缺點(diǎn)在于,第一是需要源代碼,然而在很多情況下源代碼是很難獲取的。第二是只能針對(duì)比較簡單的具有一定特征的安全漏洞形式,對(duì)于很多復(fù)雜的安全漏洞形式難以描述從而也就難以檢測(cè)。第三是只能針對(duì)源代碼,對(duì)于在編譯過程中由于編譯優(yōu)化等因素而導(dǎo)致的安全漏洞就無法查找?;液新窂綔y(cè)試技術(shù)先把二進(jìn)制程序轉(zhuǎn)換成中間語言,然后使用動(dòng)態(tài)流程分析跟蹤數(shù)據(jù)流進(jìn)行分析。該技術(shù)一直是國內(nèi)外研究的焦點(diǎn),但是目前很難實(shí)用化,其存在的問題是應(yīng)用很復(fù)雜,大量的執(zhí)行路徑需要覆蓋,難以分析。另外就是動(dòng)態(tài)執(zhí)行的時(shí)候,只能根據(jù)已知樣本的路徑來分析,難以發(fā)現(xiàn)和追蹤分支路徑,反向構(gòu)造樣本也是困難點(diǎn)。當(dāng)前,在黑盒模糊測(cè)試技術(shù)的基礎(chǔ)上,出現(xiàn)了基于簡單的數(shù)據(jù)結(jié)構(gòu)實(shí)施半透明測(cè)試的技術(shù),其代表技術(shù)是PEACH。PEACH在傳統(tǒng)的模糊測(cè)試之上,增加了用戶可以用一個(gè)特定腳本來描述相關(guān)文件數(shù)據(jù)結(jié)構(gòu)的能力,使得測(cè)試策略可以依據(jù)這個(gè)腳本描述的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)。但是PEACH具有以下缺點(diǎn)1)描述能力和規(guī)則簡單,無法描述復(fù)雜的文件結(jié)構(gòu)PEACH只簡單實(shí)現(xiàn)了結(jié)構(gòu)(其在PEACH內(nèi)部被稱為塊)與字段這兩層的結(jié)構(gòu)關(guān)系。 然而,文件結(jié)構(gòu)通常是非常復(fù)雜的,很多文件在自身的格式和規(guī)則之外,還允許包含另一種文件格式和規(guī)則,這被稱為容器。這樣的結(jié)構(gòu)方式,兩層結(jié)構(gòu)根本無法描述。同時(shí),結(jié)構(gòu)之間的邏輯關(guān)系和物理關(guān)系是有一定區(qū)別的。例如,對(duì)于微軟公司 OFFICE的EXCEL的XLS文件結(jié)構(gòu),在物理上,每個(gè)記錄都需要在0x8020字節(jié)之內(nèi),如果一個(gè)記錄大于0x8020字節(jié),則要分割成兩個(gè)物理記錄,但是在數(shù)據(jù)結(jié)構(gòu)邏輯視圖中,這兩個(gè)物理記錄屬于一個(gè)記錄,需要先進(jìn)行物理合并,再使用數(shù)據(jù)結(jié)構(gòu)邏輯視圖來處理,這樣的規(guī)則,PEACH根本無法描述。2)描述規(guī)則和測(cè)試無法針對(duì)網(wǎng)絡(luò)報(bào)文很多網(wǎng)絡(luò)應(yīng)用協(xié)議是負(fù)載在低層另一個(gè)協(xié)議之上的,使用完全不同的規(guī)則,情況和上文提到的文件的容器概念是一致的。同時(shí),大量的網(wǎng)絡(luò)協(xié)議都有封包和解包的概念,與上文提到的文件結(jié)構(gòu)之間的邏輯關(guān)系和物理關(guān)系是一致的。因此PEACH也難以描述這些規(guī)則和方法。3)無法描述復(fù)雜的字段關(guān)系,只能針對(duì)簡單的長度關(guān)系來進(jìn)行描述PEACH對(duì)字段關(guān)系只支持簡單的長度關(guān)系描述,即B字段的長度是A字段,但是字段之間更復(fù)雜的關(guān)系就難以描述,例如B字段的長度是A字段*C字段的情況。同時(shí),字段之間還有很多其他的計(jì)算關(guān)系能影響到安全問題。4)無法實(shí)現(xiàn)整體數(shù)據(jù)視圖,也沒有針對(duì)整體數(shù)據(jù)視圖的測(cè)試策略由于PEACH只能簡單地描述結(jié)構(gòu),所以無法形成整體數(shù)據(jù)視圖,也無法在數(shù)據(jù)整體的高度上進(jìn)行更高級(jí)的測(cè)試,因而無法突破傳統(tǒng)模糊測(cè)試只能針對(duì)字段來測(cè)試的局限。5)依賴于原始樣本覆蓋的數(shù)據(jù)區(qū)域,無法突破由于PEACH缺乏新記錄或記錄內(nèi)部其他選擇分支生成能力,所以也和傳統(tǒng)模糊測(cè)試一樣,PEACH依賴于原始樣本覆蓋的數(shù)據(jù)區(qū)域。
發(fā)明內(nèi)容
針對(duì)上文提到的現(xiàn)有技術(shù)的種種缺點(diǎn),本發(fā)明所要解決的技術(shù)問題是提供一種能夠?qū)崿F(xiàn)覆蓋率更高、測(cè)試樣本更精準(zhǔn)、測(cè)試結(jié)果更可數(shù)據(jù)指標(biāo)量化的軟件安全測(cè)試方法。為此,根據(jù)本發(fā)明的實(shí)施例,提供一種基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法。所述軟件安全測(cè)試方法包括下列步驟基于所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)和規(guī)則的描述文檔, 按照數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則來書寫所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)描述文件;使用數(shù)據(jù)結(jié)構(gòu)描述文件來獲取基礎(chǔ)樣本的全局?jǐn)?shù)據(jù)視圖;從測(cè)試點(diǎn)開始逐步解析基礎(chǔ)樣本,生成局部數(shù)據(jù)視圖, 根據(jù)全局?jǐn)?shù)據(jù)視圖和局部數(shù)據(jù)視圖,依照測(cè)試策略由基礎(chǔ)樣本生成測(cè)試樣本組;以及使用測(cè)試樣本組對(duì)所測(cè)試軟件進(jìn)行安全測(cè)試。所述數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則定義了五層數(shù)據(jù)結(jié)構(gòu),即容器、記錄、結(jié)構(gòu)、數(shù)組、字段。容器是一組擁有相同封裝規(guī)則、實(shí)現(xiàn)特定功能的記錄的集合。記錄是遵循容器封裝規(guī)則、實(shí)現(xiàn)一個(gè)特定功能的數(shù)據(jù)體。結(jié)構(gòu)是一組有內(nèi)在邏輯關(guān)聯(lián)的、獨(dú)立可復(fù)用的數(shù)據(jù)體。數(shù)組是一組擁有相同子結(jié)構(gòu)或字段類型的數(shù)據(jù)組合。字段是數(shù)據(jù)處理具備最小完整邏輯含義的葉子節(jié)點(diǎn)單位。
通過結(jié)合附圖來閱讀后面的具體實(shí)施方式
,可以更好地理解本發(fā)明的特征和優(yōu)點(diǎn),其中在附圖中用相同的附圖標(biāo)記表示相同或相似的元素。在附圖中圖1是示出根據(jù)本發(fā)明一個(gè)實(shí)施例的基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法的流程圖;圖2是示出根據(jù)本發(fā)明一個(gè)實(shí)施例的在初始樣本的基礎(chǔ)上生成基礎(chǔ)樣本的方法的流程圖;以及圖3是示出根據(jù)本發(fā)明另一實(shí)施例的在初始樣本的基礎(chǔ)上生成基礎(chǔ)樣本的方法的流程圖。
具體實(shí)施例方式下面將結(jié)合附圖詳細(xì)說明本發(fā)明的各個(gè)實(shí)施例。請(qǐng)注意,在整個(gè)說明書和權(quán)利要求書中,軟件既包括系統(tǒng)軟件,也包括應(yīng)用軟件。而且,“應(yīng)用”與“應(yīng)用程序”表示相同的含義,都是作為軟件的例子而給出的,并且能夠互換地進(jìn)行使用。參考圖1,其中示出根據(jù)本發(fā)明一個(gè)實(shí)施例的基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法100的流程圖。在步驟102中,基于所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)和規(guī)則的描述文檔,按照數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則來書寫所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)描述文件。所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)和規(guī)則的描述文檔的來源可能是a)所測(cè)試軟件的廠商對(duì)外公布的技術(shù)開發(fā)文檔。例如微軟公司為應(yīng)對(duì)歐盟的反壟斷訴訟,就公開了 WINDOWS系統(tǒng)使用的重要網(wǎng)絡(luò)協(xié)議、WINDOWS系統(tǒng)使用的OLE文件數(shù)據(jù)格式、OFFICE文檔使用的數(shù)據(jù)結(jié)構(gòu)格式等多種文檔。b)所測(cè)試軟件的廠商為了配合測(cè)試而主動(dòng)提供的在軟件開發(fā)過程中產(chǎn)生的開發(fā)設(shè)計(jì)文檔,包括但不限于詳細(xì)設(shè)計(jì)文檔,特別是包含系統(tǒng)數(shù)據(jù)流和數(shù)據(jù)結(jié)構(gòu)格式與含義的文檔。c)研究社區(qū)或測(cè)試機(jī)構(gòu)通過逆向分析所獲取的針對(duì)所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)分析文檔。上述文檔大多是以自然語言或圖形的方式進(jìn)行描述的。在本實(shí)施例中,按照數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則將所測(cè)試軟件的上述文檔書寫成數(shù)據(jù)結(jié)構(gòu)描述文件。數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則是由本發(fā)明提出的一種通用的能夠描述各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)之間的關(guān)系的規(guī)范。在所述數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則中,定義了五層數(shù)據(jù)結(jié)構(gòu)來描述復(fù)雜的數(shù)據(jù)結(jié)構(gòu)關(guān)系。所述五層數(shù)據(jù)結(jié)構(gòu)可以通過嵌套關(guān)系形成更復(fù)雜的樹狀邏輯體系。五層數(shù)據(jù)結(jié)構(gòu)是最大的框架形式,一些簡單的所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)只需使用其中的二、三層就可以實(shí)現(xiàn)對(duì)其的描述。所述五層數(shù)據(jù)結(jié)構(gòu)包括五個(gè)層次,即容器、記錄、結(jié)構(gòu)、數(shù)組、字段。優(yōu)選地,在五層數(shù)據(jù)結(jié)構(gòu)中,一個(gè)容器可以被包含到上級(jí)容器的記錄中,從而允許多層次容器嵌套。這就使得具有復(fù)雜物理結(jié)構(gòu)的文件格式或者網(wǎng)絡(luò)協(xié)議都可以被處理。下面對(duì)這五個(gè)層次進(jìn)行詳細(xì)說明。(一)容器容器是一組擁有相同封裝規(guī)則、實(shí)現(xiàn)特定功能的記錄的集合。一個(gè)容器包含一條或多條記錄。所測(cè)試軟件通常使用的數(shù)據(jù)傳遞載體主要包括文件、網(wǎng)絡(luò)報(bào)文、消息、調(diào)用接口、 10,其中文件和網(wǎng)絡(luò)報(bào)文是最復(fù)雜的載體形式。網(wǎng)絡(luò)報(bào)文通常會(huì)定義多層次的協(xié)議,每一層次的協(xié)議都可以由多種不同的下層協(xié)議進(jìn)行負(fù)載。例如,一個(gè)SMB協(xié)議可以使用TCP協(xié)議負(fù)載,也可以使用UDP協(xié)議負(fù)載,甚至還可以使用IPX協(xié)議負(fù)載。文件特別是WINDOWS體系下的文件又引入流的概念,一個(gè)物理文件可以由多個(gè)流組合而成,每個(gè)流都是具備完整獨(dú)立邏輯功能的單元,流之下又可以嵌入多種OLE定義的數(shù)據(jù)結(jié)構(gòu)。例如,一個(gè)XLS文件可以由W0RKB00T流、0BJC0MP流組成,WORKBOOK流又可以包含各種OLE規(guī)范的對(duì)象,比如WMF圖片、VBA工程、外部控件等。單獨(dú)從一個(gè)測(cè)試樣本來看,這些獨(dú)立的邏輯單元形成了一種非常復(fù)雜的包含和封裝規(guī)則的關(guān)系,但是從多個(gè)被測(cè)試軟件的角度來看,它們具備復(fù)用性。例如,WMF文件的數(shù)據(jù)結(jié)構(gòu)描述既可以直接用于WMF文件,也可以用于WORD、EXCEL、POWERPOINT等多種應(yīng)用程序的數(shù)據(jù)結(jié)構(gòu)描述中。但是實(shí)際上,后一種情況下的應(yīng)用程序在處理WMF文件時(shí),是直接使用WMF相關(guān)的系統(tǒng)庫來處理的,而并不是應(yīng)用程序自身處理的。所以區(qū)分這部分邏輯單元的關(guān)系,既可以使測(cè)試的復(fù)用性提高,編寫大量的已經(jīng)形成標(biāo)準(zhǔn)的協(xié)議/文件的規(guī)范的數(shù)據(jù)結(jié)構(gòu)描述文件,能極大地降低被測(cè)試軟件的相關(guān)工作量,也能區(qū)分測(cè)試出的安全問題是屬于被測(cè)試軟件自身,還是來自于操作系統(tǒng)或者其他第三方組件。下面給出容器劃分的例子a)文件類0FFICE PPT 文件物理文件是最底層的容器。根據(jù)微軟公司COM流規(guī)范,物理文件容器包含多個(gè)子容器(流),其中PowerPoint Document流遵循微軟公司的PPT文件規(guī)范對(duì)PowerPoint Document子容器的定義。如果PowerPoint Document容器里包含有微軟公司ODRAW規(guī)范定義的ODRAW對(duì)象記錄,則PowerPoint Document子容器又包含有ODRAW子容器。如果ODRAW 子容器里又包含有微軟公司W(wǎng)MF文件規(guī)范定義的WMF圖片對(duì)象,則ODRAW子容器里又包含有WMF子容器。b)網(wǎng)絡(luò)報(bào)文類WINDOWS SMB網(wǎng)絡(luò)協(xié)議如果SMB使用NETBIOS協(xié)議負(fù)載,NETBIOS協(xié)議使用TCP協(xié)議負(fù)載,則以太網(wǎng)絡(luò)規(guī)范是最底層的容器,其上包含一個(gè)IP網(wǎng)絡(luò)協(xié)議子容器,IP網(wǎng)絡(luò)協(xié)議上面包含TCP網(wǎng)絡(luò)協(xié)議子容器,TCP網(wǎng)絡(luò)協(xié)議上面包含NETBIOS網(wǎng)絡(luò)協(xié)議子容器,NETBIOS網(wǎng)絡(luò)協(xié)議之上是SMB協(xié)議。SMB容器數(shù)據(jù)里如果包含了 MSRPC協(xié)議定義的數(shù)據(jù),則其上還可以包含MSRPC子容器。( 二 )記錄記錄是遵循容器封裝規(guī)則、實(shí)現(xiàn)一個(gè)特定功能的數(shù)據(jù)體。容器定義的是一組符合規(guī)范的功能集合,記錄則是遵循其封裝規(guī)范的特定功能的實(shí)現(xiàn)。一條記錄由結(jié)構(gòu)、數(shù)組、字段、子容器中的一個(gè)或多個(gè)組成。例如,WMF容器定義了一個(gè)WMF圖片可以由多種資源(點(diǎn)、 線、框、圓、字符)組成,那么針對(duì)每種資源的具體描述結(jié)構(gòu)定義(比如點(diǎn)、線)就是記錄。下面結(jié)合容器給出記錄劃分的例子a)文件類0FFICE XLS 文件微軟公司的XLS文件格式規(guī)范里定義了 MsoDrawing記錄。MsoDrawing記錄允許包含一個(gè)ODRAW子容器。ODRAW子容器又定義了一個(gè)EmfContent記錄,允許描述一個(gè)EMF 圖片。按照XLS容器的定義,其封裝規(guī)則是偏移O 記錄標(biāo)記2字節(jié)偏移2 記錄內(nèi)容長度 2字節(jié)偏移4 記錄內(nèi)容。然而,如果記錄大于0x2020字節(jié),則必須把記錄分解為主記錄或多個(gè)continue記錄組裝的形式。
按照ODRAW容器的定義,其封裝規(guī)則是偏移0 版本號(hào)4比特偏移0 實(shí)例號(hào)12比特偏移2 記錄標(biāo)記 2字節(jié)偏移4 記錄長度 4字節(jié)。如果基礎(chǔ)樣本里EmfContent記錄的長度只有100字節(jié),通過測(cè)試策略進(jìn)行擴(kuò)展后,EmfContent記錄里包含的數(shù)據(jù)長度達(dá)0x6970字節(jié),則其先按ODRAW容器封裝,修改記錄長度字段,封裝成為0x6978字節(jié)長度,再按XLS規(guī)范封裝,由于超過了 0x2020字節(jié)長度, 所以必須封裝成如下形式主記錄記錄號(hào):MsoDrawing記錄長度0x2020記錄內(nèi)容0DRAW子容器內(nèi)容的前0x2020字節(jié)第一個(gè) continue 記錄記錄號(hào) continue記錄長度0x2020記錄內(nèi)容0DRAW子容器內(nèi)容的第0x2021-0x4040字節(jié)第二個(gè) continue 記錄記錄號(hào) continue記錄長度0x2020記錄內(nèi)容0DRAW子容器內(nèi)容的第0x4041-0x6060字節(jié)第三個(gè)continue記錄記錄號(hào) continue記錄長度0x918記錄內(nèi)容0DRAW子容器內(nèi)容的第0x6061-0x6978字節(jié)b)網(wǎng)絡(luò)報(bào)文類通過SMB協(xié)議讀取一個(gè)文件SMB協(xié)議讀取一個(gè)文件??蛻舳送ㄟ^SMB協(xié)議發(fā)送請(qǐng)求功能號(hào)為OUe的報(bào)文記錄給服務(wù)器端,服務(wù)器端返回應(yīng)答功能號(hào)為OUe的報(bào)文記錄給客戶端,其中包含有讀取文件的返回值和文件大小、內(nèi)容。但是按照NETBIOS的協(xié)議規(guī)則,每個(gè)NETBIOS的記錄大小不超過0db4。如果讀取的文件大小超過0x5b4大小,則服務(wù)器端返回應(yīng)答功能號(hào)為OUe的 SMB報(bào)文記錄需要封裝成多個(gè)NETBIOS報(bào)文進(jìn)行返回。每個(gè)NETBIOS報(bào)文又要按照下層的 TCP協(xié)議、IP協(xié)議、以太協(xié)議再進(jìn)行封裝。(三)結(jié)構(gòu)結(jié)構(gòu)是一組有內(nèi)在邏輯關(guān)聯(lián)的、獨(dú)立可復(fù)用的數(shù)據(jù)體。一個(gè)結(jié)構(gòu)由數(shù)組、字段、子容器、子結(jié)構(gòu)中的一個(gè)或多個(gè)組成。而且,結(jié)構(gòu)是可以復(fù)用的內(nèi)容,即在多條不同的記錄中可以使用同一個(gè)結(jié)構(gòu)。例如,微軟公司OFFICE的EXCEL的XLS的WORKBOOK容器中的多條記錄都包含一個(gè)RefS結(jié)構(gòu)。該RefS結(jié)構(gòu)由4個(gè)2字節(jié)的字段組成,分別描述XLS里面開始行、結(jié)束行、開始列、結(jié)束列的信息,用于定位記錄表達(dá)的數(shù)據(jù)在XLS表格里的區(qū)域范圍。(四)數(shù)組
數(shù)組是一組擁有相同子結(jié)構(gòu)或字段類型的數(shù)據(jù)組合。數(shù)據(jù)具有兩種形式子結(jié)構(gòu)數(shù)組和字段數(shù)組。子結(jié)構(gòu)數(shù)組由多個(gè)固定長度或可變長度的子結(jié)構(gòu)組成,比如多個(gè)UNICODE 結(jié)構(gòu)表達(dá)形式的結(jié)構(gòu)。字段數(shù)組由多個(gè)固定類型的字段組成。舉例來說,在微軟公司的DOC文件格式規(guī)范中,STSH記錄由一個(gè)Ipstshi結(jié)構(gòu)和一個(gè)rglpstd數(shù)組組成。rglpstd數(shù)組由可變數(shù)目的LPStd結(jié)構(gòu)組成。每個(gè)LPStd結(jié)構(gòu)用于描述DOC文檔里的段落或區(qū)域、分割符的信息。(五)字段字段是數(shù)據(jù)處理具備最小完整邏輯含義的葉子節(jié)點(diǎn)單位,用于表達(dá)最具體含義的一個(gè)數(shù)據(jù)。字段的類型包括比特、單字節(jié)、有符號(hào)或無符號(hào)雙字節(jié)、四字節(jié)整數(shù)、八字節(jié)整數(shù)、浮點(diǎn)數(shù)、單字節(jié)字符串、雙字節(jié)字符串、二進(jìn)制數(shù)據(jù)等。舉例來說,GIF文件格式規(guī)范里定義了一個(gè)ColorR結(jié)構(gòu),用于描述圖片使用的顏色信息。ColorR結(jié)構(gòu)由以下3個(gè)字段組成RED字段長度1字節(jié)用途標(biāo)記圖片顏色中紅色顏色值GREEN字段長度1字節(jié)用途標(biāo)記圖片顏色中綠色顏色值BLUE字段長度1字節(jié)用途標(biāo)記圖片顏色中藍(lán)色顏色值。在上述通用的描述規(guī)范中,還必須考慮對(duì)數(shù)據(jù)之間的關(guān)系的描述。通常,數(shù)據(jù)之間的關(guān)系是非常復(fù)雜和多樣的,甚至難以用自然語言表達(dá)清楚,并且還涉及到跨域問題和命名問題。這導(dǎo)致了兩個(gè)極端。一個(gè)極端是認(rèn)為通用描述方法不可行,最后放棄采用腳本技術(shù)來實(shí)現(xiàn),例如微軟公司的內(nèi)部項(xiàng)目組。另一個(gè)極端只使用最簡單的長度關(guān)系描述機(jī)制,例如 PEACH。本發(fā)明的發(fā)明人認(rèn)為,通過數(shù)據(jù)結(jié)構(gòu)描述語言來實(shí)現(xiàn)100%的關(guān)系描述確實(shí)是不可能的。但是,一個(gè)安全測(cè)試工具只需要關(guān)注與安全測(cè)試有關(guān)聯(lián)的關(guān)系。根據(jù)這一思想,能夠大大降低對(duì)各種關(guān)系描述的需求。根據(jù)安全測(cè)試的需要,本發(fā)明的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則實(shí)現(xiàn)了以下關(guān)系描述1)字段取值范圍和固定值描述固定值和取值范圍可以幫助測(cè)試程序更好地決定測(cè)試樣本的邊界等價(jià)類。本發(fā)明通過利用表達(dá)式來支持固定值描述、單值描述、取值區(qū)間描述,從而實(shí)現(xiàn)對(duì)上述關(guān)系的描述。2)數(shù)據(jù)內(nèi)部指針(偏移量)描述很多數(shù)據(jù)結(jié)構(gòu)中包含著對(duì)數(shù)據(jù)內(nèi)部指針(偏移量)的描述。如果一個(gè)數(shù)據(jù)結(jié)構(gòu)因?yàn)闇y(cè)試需求增加或減短了長度,則指針(偏移量)的值描述應(yīng)該產(chǎn)生對(duì)應(yīng)的變化,否則會(huì)產(chǎn)生失效。同時(shí)指針(偏移量)與實(shí)際不一致也是導(dǎo)致很多安全問題的因素。本發(fā)明通過支持全局指針(偏移量)的定義,并針對(duì)全局指針(偏移量)進(jìn)行全局記錄,然后根據(jù)測(cè)試中產(chǎn)生的變化,實(shí)際更新其值,從而保證測(cè)試的完整性。3)上級(jí)數(shù)據(jù)結(jié)構(gòu)完整性關(guān)系描述安全測(cè)試程序在修改了某級(jí)數(shù)據(jù)結(jié)構(gòu)以后,如果對(duì)應(yīng)的上級(jí)數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)的描述字段未改變則可能導(dǎo)致測(cè)試失效,比如上級(jí)字段里描述某級(jí)數(shù)據(jù)結(jié)構(gòu)的長度、偏移、結(jié)構(gòu) (數(shù)組)個(gè)數(shù)、記錄類型等等。本發(fā)明通過對(duì)上級(jí)的相關(guān)字段進(jìn)行關(guān)聯(lián)描述,從而實(shí)現(xiàn)上級(jí)數(shù)據(jù)結(jié)構(gòu)中的關(guān)聯(lián)字段得以更新以保證測(cè)試的完整性。4)跨記錄和跨容器域字段引用和狀態(tài)關(guān)聯(lián)關(guān)系在很多程序中,需要使用跨域的引用來決定數(shù)據(jù)結(jié)構(gòu)選擇的分支或狀態(tài)。為了保證性能的可行性,大多數(shù)情況下,全局?jǐn)?shù)據(jù)視圖主要通過保存當(dāng)前記錄視圖和全局變量來實(shí)現(xiàn)的。不包含所有的記錄數(shù)據(jù)視圖(這對(duì)大數(shù)據(jù)文件不可能完成),就難以實(shí)現(xiàn)跨記錄域字段引用和狀態(tài)關(guān)聯(lián)關(guān)系。一種方法是把跨記錄域字段轉(zhuǎn)化為全局變量,這樣在讀引用的時(shí)候不會(huì)產(chǎn)生問題,但是在測(cè)試中需要同期更新該字段時(shí)則引起問題。本發(fā)明引入了全局字段的概念,允許一個(gè)記錄里的字段標(biāo)記為全局字段,即使在該記錄處理完畢后也不銷毀,保證在后面的另外的記錄域字段引用和更新。5)字段長度關(guān)系描述這是最常見的,也是PEACH所能覆蓋到的,但是PEACH只能使用簡單等價(jià)描述,而實(shí)際中,字段長度關(guān)系是可能有復(fù)雜運(yùn)算表達(dá)方式的,比如在UNICODE STRING中,字段1的值應(yīng)該是字段2的字節(jié)個(gè)數(shù)/2,在數(shù)組或表格字段中,字段2的字節(jié)個(gè)數(shù)應(yīng)該是字段1的值 *字段3的值,字段2的字節(jié)改變必須符合字段1和字段3的規(guī)則。本發(fā)明通過引入表達(dá)式來支持以上所有更加復(fù)雜的關(guān)系描述。具體而言,對(duì)字段長度關(guān)系的描述,有明確計(jì)算約束的是通過表達(dá)式來實(shí)現(xiàn)的,無明確計(jì)算約束而依賴解析條件滿足的,是通過運(yùn)行時(shí)的局部變量計(jì)算符合滿足條件表達(dá)式來實(shí)現(xiàn)的。6)數(shù)組個(gè)數(shù)關(guān)系描述一個(gè)數(shù)組可能包含多個(gè)結(jié)構(gòu)或者字段,其包含的個(gè)數(shù)往往使用另一字段表示,該字段的值需要和實(shí)際數(shù)組存在關(guān)聯(lián)關(guān)系。但其值并不是準(zhǔn)確的可依據(jù)數(shù)組長度來計(jì)算。比如一個(gè)字符串?dāng)?shù)組,有3個(gè)字符串,1個(gè)長12字節(jié),1個(gè)長3字節(jié),1個(gè)長6字節(jié),但是數(shù)組個(gè)數(shù)是3。這種關(guān)系難以用表達(dá)式來描述。本發(fā)明引入ADDCOUNT、COUNT內(nèi)部變量,按照實(shí)際數(shù)組結(jié)構(gòu)規(guī)則解析數(shù)組個(gè)數(shù)以及增加的個(gè)數(shù),以增加對(duì)數(shù)組個(gè)數(shù)關(guān)系的描述和處理。以上例子中,在按字符串規(guī)則中,處理分析了字符串后COUNT = 3,如果測(cè)試中需要增加一個(gè)數(shù)組,則COUNT = 4,ADDCOUNT = 1。7)字段與字段的同一計(jì)算關(guān)系描述很多安全漏洞是由數(shù)據(jù)結(jié)構(gòu)中存在同一計(jì)算關(guān)系的兩個(gè)或更多個(gè)字段導(dǎo)致的。在實(shí)現(xiàn)中一個(gè)計(jì)算或比較條件依賴于字段1,而其他的計(jì)算或比較條件字段2。如果字段1和字段2不一致,則導(dǎo)致其計(jì)算結(jié)果矛盾,并且最后導(dǎo)致安全問題。例如,按字段1來分配數(shù)據(jù)內(nèi)存,按字段2來操作拷貝,則最后導(dǎo)致內(nèi)存溢出漏洞。本發(fā)明通過允許標(biāo)記同一關(guān)系來有針對(duì)性地對(duì)多缺陷進(jìn)行安全測(cè)試。8)字段與字段的邏輯依賴關(guān)系描述此類類似于字段與字段同一計(jì)算關(guān)系描述,其差別在于,不是直接的計(jì)算關(guān)系導(dǎo)致,而是邏輯不一致導(dǎo)致。例如,某字段描述中有2比特的FLAG,1標(biāo)記要使用全局組,2標(biāo)記是否使用局部組,那么就可能存在矛盾沖突的地方,程序按照FLAG標(biāo)記又按全局組處理又按局部組處理,最后導(dǎo)致邏輯沖突或者競(jìng)爭條件等一些未知的安全問題。本發(fā)明自動(dòng)分析同一記錄中具有一定邏輯依賴關(guān)系的字段,例如比特(FLAG)字段、整數(shù)值字段、導(dǎo)致數(shù)據(jù)分支選擇的字段等,對(duì)它們進(jìn)行重點(diǎn)的邏輯關(guān)系不一致測(cè)試。
9)記錄關(guān)系描述在記錄中可能需要有一定的順序關(guān)系或包含關(guān)系,比如A、B、C記錄需要按次序出現(xiàn),或者AB記錄里中間必須是某一類的記錄,如果出現(xiàn)問題會(huì)導(dǎo)致程序不處理(測(cè)試樣本無效),或者導(dǎo)致邏輯問題(發(fā)現(xiàn)安全問題)本發(fā)明通過全局變量來實(shí)現(xiàn)對(duì)記錄關(guān)系(順序和/或包含關(guān)系)的描述,從而實(shí)現(xiàn)更高層的記錄級(jí)別的安全測(cè)試。繼續(xù)參考圖1,在步驟104中,使用數(shù)據(jù)結(jié)構(gòu)描述文件來獲取基礎(chǔ)樣本的全局?jǐn)?shù)據(jù)視圖。所述基礎(chǔ)樣本可以是測(cè)試者操作所測(cè)試軟件的界面功能所構(gòu)造的初始樣本,也可以是在初始樣本的基礎(chǔ)上,根據(jù)后面的圖2和圖3的流程圖生成的包含初始樣本中所不包含的記錄選擇分支和記錄的新樣本。現(xiàn)有技術(shù)中的黑盒模糊測(cè)試、局部數(shù)據(jù)結(jié)構(gòu)測(cè)試、二進(jìn)制數(shù)據(jù)流污染測(cè)試由于無法理解樣本的數(shù)據(jù)結(jié)構(gòu)和全局?jǐn)?shù)據(jù)關(guān)系,所以測(cè)試效果都依賴于樣本。樣本未覆蓋到的數(shù)據(jù)結(jié)構(gòu)無法進(jìn)行測(cè)試。由于所測(cè)試軟件往往非常復(fù)雜,所以通過普通的操作是很難構(gòu)造出包含一些功能不被經(jīng)常使用的數(shù)據(jù)結(jié)構(gòu)的樣本來的?;谠创a的測(cè)試技術(shù)雖然不依賴于樣本,但是只能覆蓋有限的路徑分析,所以找到的安全漏洞都只能說是疑似的。要確認(rèn)安全漏洞還是需要構(gòu)造樣本。但是由于對(duì)全局?jǐn)?shù)據(jù)結(jié)構(gòu)無法理解,反向構(gòu)造樣本進(jìn)行確認(rèn)也是源代碼測(cè)試中的一個(gè)技術(shù)難題。對(duì)于本發(fā)明的基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試,由于全部數(shù)據(jù)之間的關(guān)系是已知的,所以在理論上可以自我構(gòu)造出各種樣本。但是這種做法具有一定復(fù)雜性,因?yàn)樾枰獜亩M(jìn)制的物理層就開始描述其容器的邏輯順序關(guān)系。因此在本實(shí)施例中,測(cè)試者操作所測(cè)試軟件的界面功能構(gòu)造初始樣本??蛇x擇地,測(cè)試者還可以在這個(gè)初始樣本的基礎(chǔ)上,利用后面的圖2和/或圖3的流程圖再生成包含一些功能不被經(jīng)常使用的數(shù)據(jù)結(jié)構(gòu)的新樣本。這樣做的好處是由于生成的初始樣本已經(jīng)包含被測(cè)試容器下層封裝容器邏輯順序,所以可以縮減處理的范圍和復(fù)雜性,因?yàn)橹挥每紤]被測(cè)試容器級(jí)和之上的容器的記錄邏輯順序關(guān)系以及全局?jǐn)?shù)據(jù)關(guān)系。在本發(fā)明的該實(shí)施例中,數(shù)據(jù)之間的關(guān)系被稱為數(shù)據(jù)視圖。全局?jǐn)?shù)據(jù)視圖是指非包含關(guān)系的不同容器之間、以及一個(gè)容器內(nèi)的不同記錄之間的數(shù)據(jù)關(guān)系。局部數(shù)據(jù)視圖是指包含關(guān)系的不同容器之間、或者在同一記錄之內(nèi)的數(shù)據(jù)關(guān)系。下面舉例說明局部數(shù)據(jù)視圖和全局?jǐn)?shù)據(jù)視圖。容器A
0123]記錄 ARl
0124]記錄 AR2
0125]字段 AR2F1
0126]容器 Bl
0127]記錄 BlRl
0128]記錄 B1R2
0129]結(jié)構(gòu) B1R2S1
0130]字段 B1R2S1F1
0131]字段 B1R2F1
0132]字段 B1R2F2
記錄B1R3
結(jié)構(gòu)B1R3S1
字段 B1R3S1F1
字段B1R3F1 容器Cl
記錄ClRl
記錄AR3 容器B2
記錄B2R1
字段B2R1F1上述中的字段AR2F1標(biāo)記容器Bl內(nèi)容的長度大小,字段B2R1F1是容器Bl內(nèi)容的 CRC校驗(yàn)信息。字段B1R2F2是一個(gè)可變長度的字符串。字段B1R2F1是字段B1R2F2的長度由于字段B2R1F1是在與容器Bl并列的容器B2中,所以字段B2R1F1和容器Bl之間的關(guān)系是一個(gè)全局?jǐn)?shù)據(jù)視圖。字段AR2F1與容器Bl處于同一個(gè)記錄AR2中,字段B1R2F1 與字段B1R2F2處于同一個(gè)記錄B1R2中,所以這些是局部數(shù)據(jù)視圖。注意,在步驟104中僅獲得全局?jǐn)?shù)據(jù)視圖而沒有獲得局部數(shù)據(jù)視圖是基于以下考慮。首先,全局?jǐn)?shù)據(jù)視圖隨全局?jǐn)?shù)據(jù)的修改而改變,而局部數(shù)據(jù)視圖只隨局部數(shù)據(jù)的修改而改變。全局?jǐn)?shù)據(jù)視圖的數(shù)據(jù)量相對(duì)要小,而所有的局部數(shù)據(jù)視圖則非常龐大??紤]到性能以及局部數(shù)據(jù)視圖只隨局部數(shù)據(jù)的修改而改變,所以如果在處理時(shí)只保存和處理相關(guān)的局部數(shù)據(jù)視圖,則能化復(fù)雜為簡單,因此就需要首先獲取全局?jǐn)?shù)據(jù)視圖。其次是為了應(yīng)對(duì)數(shù)據(jù)壓縮、加密的處理。在每段壓縮或加密的數(shù)據(jù)被解壓或解密后,由于其關(guān)系的變化都會(huì)影響整個(gè)視圖關(guān)系而需要重新計(jì)算,所以現(xiàn)在就把局部數(shù)據(jù)視圖包含進(jìn)行,工作量過大。最后, 局部數(shù)據(jù)視圖由于只影響局部數(shù)據(jù)關(guān)系,所以其實(shí)是可以隨處理記錄區(qū)域變化而隨時(shí)丟棄的信息,只在運(yùn)行周期生效。因此,無論是從性能考慮還是從分析的靈活性考慮,此階段只獲取全局?jǐn)?shù)據(jù)視圖都是優(yōu)選的。優(yōu)選地,本實(shí)施例支持對(duì)常見壓縮算法(例如ZIP算法、哈夫曼算法、重復(fù)替代壓縮算法等)的描述和解壓處理。優(yōu)選地,本實(shí)施例支持對(duì)常見加密數(shù)據(jù)的方法(例如M)R加密方法、RC4加密方法等)的描述和解密處理。優(yōu)選地,本發(fā)明還支持對(duì)CRC校驗(yàn)的描述。在步驟104中,使用在步驟102中生成的所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)描述文件來匹配分析基礎(chǔ)樣本,找出其中具有全局?jǐn)?shù)據(jù)關(guān)系的字段和關(guān)聯(lián)關(guān)系,將其地址、關(guān)系類型、影響范圍記錄到全局關(guān)系視圖文件中,以供在后續(xù)步驟中使用。舉例來說,微軟公司的DOC文檔規(guī)范定義了 WORD DOCUMENT流容器和TABLE流容器。WORD DOCUMENT容器包含一個(gè)FIB記錄和數(shù)據(jù)。FIB記錄定義了所有TABLE流記錄使用的偏移指針。這些都是跨容器的全局?jǐn)?shù)據(jù)關(guān)系。TABLE里記錄的長度發(fā)生改變,對(duì)應(yīng)的 W0RDD0CUMENT容器里的FIB記錄里相關(guān)的指針值也需要發(fā)生相應(yīng)的變動(dòng)以滿足其一致性。 同時(shí),TABLE流里包含的一些記錄又有指向W0RDD0CUMENT流容器后續(xù)內(nèi)容的指針。它們也是全局?jǐn)?shù)據(jù)關(guān)系。為了獲取全局?jǐn)?shù)據(jù)視圖,首先要解析WORD DOCUMENT流的FIB記錄,獲得對(duì)應(yīng) TABLE流容器相關(guān)記錄的信息。根據(jù)這些信息,可以解析TABLE流容器對(duì)應(yīng)的記錄,從而獲得TABLE流容器記錄內(nèi)包含WORD DOCUMENT流剩余數(shù)據(jù)內(nèi)容的信息,反復(fù)多次才能獲取全部的全局?jǐn)?shù)據(jù)視圖,并且進(jìn)行了保存。當(dāng)再次處理這個(gè)樣本數(shù)據(jù)時(shí),就可以直接讀取這些全局?jǐn)?shù)據(jù)視圖來解析樣本數(shù)據(jù),而無需再反復(fù)這一過程,提高了效率。繼續(xù)參考圖1,在步驟106中,從測(cè)試點(diǎn)開始逐步解析基礎(chǔ)樣本的需要測(cè)試的容器、記錄、結(jié)構(gòu)、數(shù)組、字段的關(guān)系,針對(duì)這些關(guān)系生成局部數(shù)據(jù)視圖,根據(jù)全局?jǐn)?shù)據(jù)視圖和局部數(shù)據(jù)視圖,依照測(cè)試策略由基礎(chǔ)樣本生成測(cè)試樣本組。測(cè)試點(diǎn)是指一個(gè)樣本按照數(shù)據(jù)結(jié)構(gòu)解析依次被測(cè)試的地址。假如一個(gè)樣本由A、B、 C三個(gè)記錄組成。當(dāng)對(duì)記錄A進(jìn)行測(cè)試時(shí),記錄A所處的樣本的物理地址就是測(cè)試點(diǎn)。在測(cè)試完記錄A之后再測(cè)試記錄B時(shí),則記錄B所處的樣本的物理地址就是測(cè)試點(diǎn)。這樣的構(gòu)造允許同時(shí)針對(duì)記錄A、記錄B、記錄C生成不同的樣本,以便進(jìn)行分布式測(cè)試和調(diào)度,提高效率,同時(shí)也允許實(shí)施斷點(diǎn)繼續(xù)測(cè)試,從而在一個(gè)任務(wù)中斷后,再次啟動(dòng)中斷的測(cè)試點(diǎn)開始測(cè)試,以提供更方便的測(cè)試。針對(duì)前面在說明局部數(shù)據(jù)視圖和全局?jǐn)?shù)據(jù)視圖時(shí)給出的例子,如果從記錄AR2的容器Bl的記錄B1R2開始解析,則生成針對(duì)記錄AR2的局部數(shù)據(jù)視圖以及針對(duì)記錄B1R2的局部數(shù)據(jù)視圖。如果字段B 1R2F2發(fā)生長度變化,則根據(jù)記錄B1R2更新字段B1R2F1,同時(shí)遞歸處理到上層容器中,根據(jù)記錄AR2的局部數(shù)據(jù)視圖更新字段AR2F1。最后根據(jù)全局?jǐn)?shù)據(jù)視圖計(jì)算和更新字段B2R1F1。當(dāng)解析完記錄B1R2的所有內(nèi)容并且繼續(xù)解析記錄B1R3時(shí),丟棄記錄B1R2的局部數(shù)據(jù)視圖,生成針對(duì)記錄B1R3的局部數(shù)據(jù)視圖。當(dāng)處理完記錄AR2并且繼續(xù)解析記錄AR3 時(shí),丟棄記錄AR2的局部數(shù)據(jù)視圖,生成針對(duì)記錄AR3的局部數(shù)據(jù)視圖。以此類推。以這種方式,既能保證所有的數(shù)據(jù)更新都符合數(shù)據(jù)之間的關(guān)系描述,又不會(huì)因?yàn)榫S持一個(gè)龐大的數(shù)據(jù)視圖而影響性能和增加復(fù)雜性。在步驟106的解析過程中每當(dāng)生成局部數(shù)據(jù)視圖時(shí),就根據(jù)全局?jǐn)?shù)據(jù)視圖和當(dāng)前局部數(shù)據(jù)視圖,依照測(cè)試策略由基礎(chǔ)樣本生成測(cè)試樣本組。所述測(cè)試策略是根據(jù)所測(cè)試軟件的實(shí)際運(yùn)行環(huán)境而由測(cè)試者自行設(shè)定的一些基礎(chǔ)測(cè)試策略。例如,記錄重合度達(dá)到閾值后是否繼續(xù)測(cè)試這一類記錄,測(cè)試是否關(guān)注不是由所測(cè)試軟件自身定義的子容器(比如WMF圖片、WAV聲音,因?yàn)榇蟛糠质钦{(diào)用系統(tǒng)的庫來處理的),是直接測(cè)試模式還是樣本批量生成模式等等。根據(jù)這些策略,可以更靈活地實(shí)施測(cè)
試ο生成測(cè)試樣本組的過程包括以下操作a)修改基礎(chǔ)樣本根據(jù)基礎(chǔ)樣本,按照一定策略生成新的更容易觸發(fā)安全問題的測(cè)試樣本組,主要修改依據(jù)包括i)字段級(jí)1)字段的數(shù)據(jù)類型根據(jù)字段的數(shù)據(jù)類型容易引發(fā)的常見安全問題進(jìn)行有目的的字段值修改。例如針對(duì)長整型數(shù)據(jù),修改其值為Oxffffffff可以輔助發(fā)現(xiàn)整型溢出漏洞;針對(duì)字符串類數(shù)據(jù), 修改其長度可以輔助發(fā)現(xiàn)緩沖區(qū)溢出漏洞。本發(fā)明的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則支持對(duì)字段級(jí)別的數(shù)據(jù)描述的數(shù)據(jù)類型,主要包括但不限于無符號(hào)/有符號(hào)長/短整數(shù)G字節(jié)和2字節(jié))、單字節(jié)字符、比特、64位整數(shù)、浮點(diǎn)數(shù)、日期、ASC字符串、雙字節(jié)字符串、二進(jìn)制串、XML 標(biāo)簽字符串(包括單雙字節(jié))、XML數(shù)據(jù)塊(包括BASE64和HEX16編碼方式),這些字段形式可以組合成更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。2)字段的取值范圍根據(jù)字段的取值范圍,結(jié)合測(cè)試?yán)碚撝械挠行У葍r(jià)值,可以更有效地生成測(cè)試樣本組以發(fā)現(xiàn)邊界值處理相關(guān)的安全問題。本發(fā)明的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則支持對(duì)字段的取值范圍約束進(jìn)行描述,許可用戶通過枚舉、規(guī)定范圍的方式,描述字段許可的取值范圍。3)字段的語義很多安全問題是和語義相關(guān)的。比如一個(gè)路徑字符串,如果是規(guī)定返回一個(gè)固定路徑的文件內(nèi)容,則必須檢測(cè)通過..I..是否能繞過規(guī)定的路徑讀用戶無權(quán)讀寫的文件。 又如微軟公司的0ΝΕΝ0ΤΕ應(yīng)用程序許可用戶把一個(gè)自定義的字符串放在系統(tǒng)警報(bào)框的文字段開頭里,如果沒有過濾換行回車,攻擊者就可以讓系統(tǒng)后面的信息無法展示給正常用戶看到,這樣用戶就會(huì)把攻擊者的信息當(dāng)成是系統(tǒng)提示的可信信息,從而欺騙用戶實(shí)施操作。本發(fā)明的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則支持對(duì)數(shù)據(jù)語義的描述,許可用戶描述其常見的表達(dá)形式和含義。這類描述特別適合描述字符串形式的數(shù)據(jù),包括XML標(biāo)簽許可的屬性、屬性的取值形式等信息。通過語義和傳遞的取值模糊表達(dá)式,可以取更多符合語義測(cè)試的樣本。4)字段之間的非確定性關(guān)聯(lián)關(guān)系很多數(shù)據(jù)結(jié)構(gòu)規(guī)定了相互有關(guān)聯(lián)或沖突但非強(qiáng)制性規(guī)則的字段。例如,字段A代表是否刪除對(duì)象,字段B代表是否移動(dòng)對(duì)象。如果字段A、B都被設(shè)置為“是”邏輯,則可能出現(xiàn)安全問題。根據(jù)本發(fā)明的實(shí)施例,在一個(gè)記錄內(nèi),把具備同樣類型的字段作為一個(gè)非確定關(guān)聯(lián)組,把一個(gè)顯式有標(biāo)記的字段(數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則支持)作為一個(gè)非確定關(guān)聯(lián)組,把所有有意義的比特是否邏輯作為一個(gè)非確定關(guān)聯(lián)組,然后針對(duì)這些關(guān)系組,同時(shí)修改這些屬于同一組的字段,但是修改數(shù)據(jù)方式不一致(例如一個(gè)數(shù)據(jù)+1,一個(gè)數(shù)據(jù)-1,以此類推), 這樣可以測(cè)試關(guān)聯(lián)性錯(cuò)誤和多缺陷錯(cuò)誤。5)字段之間的確定性關(guān)聯(lián)關(guān)系用于在字段值修改之后輔助處理其關(guān)聯(lián)的字段以保持其關(guān)系一致性。避免出現(xiàn)不一致而導(dǎo)致測(cè)試無效。例如,如果對(duì)數(shù)據(jù)存在有CRC校驗(yàn),則在修改了數(shù)據(jù)以后必須重新計(jì)算CRC并填寫到CRC字段里。又如,如果修改了字符串的長度,則在前面有一個(gè)整型字段標(biāo)記其長度的情況下,應(yīng)該把新長度更新到這個(gè)字段里。同時(shí)還可以故意生成關(guān)系不一致的樣本發(fā)現(xiàn)關(guān)系一致性處理的安全問題。ii)數(shù)組級(jí)1)數(shù)組的類型用于生成新的數(shù)組成員。2)數(shù)組的區(qū)域用于刪除數(shù)組(0數(shù)組)、整體替換數(shù)組測(cè)試。3)數(shù)組的個(gè)數(shù)和單個(gè)數(shù)組位置用于數(shù)組增長(大量重復(fù)相同數(shù)組)測(cè)試、數(shù)組位置顛倒測(cè)試(如果數(shù)組內(nèi)部有順序邏輯關(guān)系,則可能引發(fā)一些邏輯安全問題)。iii)記錄級(jí)
記錄的區(qū)域用于刪除記錄測(cè)試、修改上下記錄異常測(cè)試、重復(fù)記錄測(cè)試、記錄整體替換測(cè)試。b)測(cè)試樣本組的局部數(shù)據(jù)視圖更新根據(jù)局部數(shù)據(jù)視圖和數(shù)據(jù)修改情況來進(jìn)行局部數(shù)據(jù)視圖更新。例如,長度修改需要更新與長度相關(guān)的字段,內(nèi)容修改需要更新與CRC相關(guān)的字段等。c)測(cè)試樣本組的容器封裝在當(dāng)前容器的局部數(shù)據(jù)視圖更新后,按照當(dāng)前容器的封裝規(guī)則進(jìn)行封裝。如果上層還有容器,則循環(huán)b)、c)的操作直至處理到根容器。d)測(cè)試樣本組的全局?jǐn)?shù)據(jù)視圖更新最后,根據(jù)全局?jǐn)?shù)據(jù)視圖和數(shù)據(jù)修改情況來進(jìn)行全局?jǐn)?shù)據(jù)視圖更新。例如,長度修改需要更新與長度相關(guān)的全局字段以及與指針相關(guān)的全局字段,內(nèi)容修改需要更新與CRC 相關(guān)的字段等。通過步驟106可以生成多個(gè)測(cè)試樣本組。例如,針對(duì)字段的數(shù)據(jù)類型、字段的取值范圍、字段的語義、以及字段之間的確定性關(guān)聯(lián)關(guān)系進(jìn)行修改,可以生成關(guān)聯(lián)字段正常組1。 針對(duì)字段之間的非確定性關(guān)聯(lián)關(guān)系進(jìn)行修改,可以生成關(guān)聯(lián)字段異常組2和多缺陷不一致組3。針對(duì)數(shù)組級(jí)進(jìn)行修改,可以生成數(shù)組測(cè)試組4。針對(duì)記錄級(jí)進(jìn)行修改,可以生成記錄測(cè)試組5。另外,針對(duì)關(guān)聯(lián)字段正常組1,可以有意生成其中對(duì)應(yīng)的關(guān)系(特別是最近的局部相關(guān)關(guān)系字段)不再保持一致的測(cè)試樣本組,這屬于關(guān)聯(lián)字段異常組2。繼續(xù)參考圖1,在步驟108中,使用在步驟106中生成的測(cè)試樣本組對(duì)所測(cè)試軟件進(jìn)行安全測(cè)試。具體而言,這一步驟包括啟動(dòng)所測(cè)試軟件;將測(cè)試樣本組傳遞給所測(cè)試軟件;監(jiān)控所測(cè)試軟件是否產(chǎn)生異常;如果產(chǎn)生異常,則記錄異常并保存觸發(fā)異常的樣本。優(yōu)選地,在本實(shí)施例中,對(duì)測(cè)試樣本組所使用的容器的記錄種類和內(nèi)部選擇分支進(jìn)行統(tǒng)計(jì)分析。當(dāng)某種同容器同記錄和同內(nèi)部選擇分支測(cè)試記錄達(dá)到一定閾值時(shí),可以降低其測(cè)試的樣本生成方式,從而有效降低重復(fù)的測(cè)試樣本。同時(shí)統(tǒng)計(jì)未被覆蓋到的記錄或記錄選擇分支,以提供給根據(jù)圖2和/或圖3的流程圖來生成新選擇分支和/或新記錄。這些統(tǒng)計(jì)數(shù)據(jù)同時(shí)是提供可覆蓋性和估量安全測(cè)試的關(guān)鍵指標(biāo)。本發(fā)明的上述基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法是一種核心技術(shù)跨平臺(tái)的安全測(cè)試技術(shù)。目前主流的幾種技術(shù)都難以做到跨平臺(tái)。例如,源代碼掃描技術(shù)與語言種類和編譯器直接相關(guān),針對(duì)不同的語言和編譯平臺(tái),其核心技術(shù)都得重新開發(fā)。又如, 基于二進(jìn)制數(shù)據(jù)流分析的技術(shù)與CPU體系結(jié)構(gòu)和操作系統(tǒng)直接相關(guān),針對(duì)不同的CPU體系結(jié)構(gòu)和操作系統(tǒng),其核心技術(shù)也得重新開發(fā)。而對(duì)于本發(fā)明的基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的安全測(cè)試技術(shù),其識(shí)別分析數(shù)據(jù)并根據(jù)規(guī)則生成高覆蓋的測(cè)試樣本是跨平臺(tái)的,唯一需要做的是針對(duì)不同平臺(tái)上實(shí)施自動(dòng)化測(cè)試的過程編程。而這一類過程編程,其技術(shù)難度是非常低的,屬于基礎(chǔ)編程類的。下面給出針對(duì)不同平臺(tái)的安全測(cè)試示例a)本地文件應(yīng)用(例如WORD等)測(cè)試生成的測(cè)試樣本組最后直接以對(duì)應(yīng)的文件保存,測(cè)試引擎依次按測(cè)試樣本啟動(dòng)被測(cè)試應(yīng)用,并把要處理的測(cè)試樣本信息通過參數(shù)傳遞給被測(cè)試應(yīng)用,通過監(jiān)控被測(cè)試應(yīng)用進(jìn)程的異常(如崩潰、跳出異???、異常終止,針對(duì)WINDOWS和LINUX等系統(tǒng)本發(fā)明還提供了以HOOK異常處理機(jī)制的方式獲取異常)來發(fā)現(xiàn)安全問題。b)本地消息、內(nèi)核調(diào)用、IPC(進(jìn)程間通信)等應(yīng)用的測(cè)試生成測(cè)試樣本組,測(cè)試引擎依據(jù)測(cè)試配置獲得的信息,通過相應(yīng)的機(jī)制傳遞到被測(cè)試系統(tǒng)上,例如WINDOWS的內(nèi)核調(diào)用測(cè)試,通過配置文件測(cè)試引擎打開對(duì)應(yīng)的設(shè)備文件, 然后通過對(duì)應(yīng)功能號(hào)的IO調(diào)用將測(cè)試數(shù)據(jù)傳遞給被測(cè)試的驅(qū)動(dòng)程序。通過監(jiān)控被測(cè)試應(yīng)用進(jìn)程的異常(同a))來發(fā)現(xiàn)安全問題。但是針對(duì)驅(qū)動(dòng)的測(cè)試,本發(fā)明還額外提供了驅(qū)動(dòng)級(jí)的一些檢測(cè)和記錄方法,以保證驅(qū)動(dòng)漏洞導(dǎo)致整個(gè)測(cè)試系統(tǒng)崩潰而來不及記錄的情況。c)本地網(wǎng)絡(luò)客戶端等應(yīng)用的測(cè)試(例如測(cè)試游戲客戶端)測(cè)試引擎根據(jù)測(cè)試配置獲得的信息,建立一個(gè)虛擬服務(wù)器,然后通過啟動(dòng)被測(cè)試系統(tǒng),并根據(jù)對(duì)應(yīng)的配置行為描述方法,模擬人為操作被測(cè)試系統(tǒng)的,使其完成與虛擬服務(wù)器鏈接并啟動(dòng)需要測(cè)試的功能。虛擬服務(wù)器接收到客戶端請(qǐng)求后,按照測(cè)試樣本的報(bào)文區(qū)分方式依次發(fā)回給客戶端,同時(shí)測(cè)試引擎,通過監(jiān)控被測(cè)試應(yīng)用進(jìn)程的異常(同a))來發(fā)現(xiàn)安全問題。d)遠(yuǎn)程可編程接口開放的本地應(yīng)用測(cè)試(例如測(cè)試智能手機(jī)上的圖片瀏覽應(yīng)用)需要在被測(cè)試平臺(tái)上開發(fā)一個(gè)簡單的代理(雖然這部分不是跨平臺(tái)的,但是這部分相對(duì)于把整個(gè)復(fù)雜的測(cè)試工作都依賴與平臺(tái)工作量和難度要小很多,如源代碼測(cè)試對(duì)所有的不同語言和編譯環(huán)境都得研究。針對(duì)C和GCC的都得重新開發(fā)并了解整個(gè)編譯器機(jī)制,二進(jìn)制得對(duì)所有不同平臺(tái)和操作系統(tǒng)低層機(jī)制和CPU體系結(jié)構(gòu)都得研究),而本發(fā)明的基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的安全測(cè)試只是在被測(cè)試平臺(tái)上開發(fā)簡單的代理實(shí)現(xiàn)和測(cè)試控制端的通信以及啟動(dòng)被測(cè)試應(yīng)用和發(fā)現(xiàn)異常。測(cè)試引擎負(fù)責(zé)將要測(cè)試的樣本發(fā)送到共享空間 (文件性測(cè)試)或者發(fā)送給遠(yuǎn)程代理,遠(yuǎn)程代理負(fù)責(zé)啟動(dòng)被測(cè)試應(yīng)用使用測(cè)試樣本數(shù)據(jù),然后檢測(cè)被測(cè)試應(yīng)用是否產(chǎn)生異常,并將測(cè)試結(jié)果發(fā)送會(huì)測(cè)試引擎,測(cè)試引擎記錄測(cè)試結(jié)果和保存導(dǎo)致異常的測(cè)試樣本。e)遠(yuǎn)程可編程接口開放的網(wǎng)絡(luò)客戶端應(yīng)用測(cè)試(例如測(cè)試智能手機(jī)的瀏覽器應(yīng)用)測(cè)試引擎首先在本地建立一個(gè)虛擬服務(wù)器,并把測(cè)試樣本組發(fā)送給虛擬服務(wù)器, 然后通過遠(yuǎn)程代理啟動(dòng)遠(yuǎn)程被測(cè)試應(yīng)用連接虛擬服務(wù)器并發(fā)送對(duì)應(yīng)功能的請(qǐng)求,虛擬服務(wù)器將測(cè)試樣本組發(fā)送給被測(cè)試應(yīng)用,遠(yuǎn)程代理檢測(cè)被測(cè)試應(yīng)用是否產(chǎn)生異常,并將測(cè)試結(jié)果發(fā)送會(huì)測(cè)試引擎,測(cè)試引擎記錄測(cè)試結(jié)果和保存導(dǎo)致異常的測(cè)試樣本。f)遠(yuǎn)程可編程接口開放服務(wù)器端測(cè)試(例如測(cè)試WINDOWS 2003SERVER的RPC服務(wù))在遠(yuǎn)程服務(wù)器上開發(fā)一個(gè)代理,負(fù)責(zé)啟動(dòng)服務(wù),檢測(cè)服務(wù)測(cè)試后是否異常以及重啟服務(wù)。測(cè)試引擎首先通過遠(yuǎn)程代理確保服務(wù)被啟動(dòng),然后按照定義的通信規(guī)則連接遠(yuǎn)程服務(wù)器對(duì)應(yīng)的端口,然后模擬客戶端將測(cè)試樣本數(shù)據(jù)發(fā)送給遠(yuǎn)程服務(wù)器,遠(yuǎn)程代理檢測(cè)被測(cè)試服務(wù)是否產(chǎn)生異常并負(fù)責(zé)異?;謴?fù),并將測(cè)試結(jié)果發(fā)送會(huì)測(cè)試引擎,測(cè)試引擎記錄測(cè)試結(jié)果和保存導(dǎo)致異常的測(cè)試樣本。g)遠(yuǎn)程可編程接口不開放的本地應(yīng)用(主要是文件類型應(yīng)用,例如IPTV終端設(shè)備的本地文件播放功能)測(cè)試在本地測(cè)試機(jī)器上開發(fā)對(duì)應(yīng)的測(cè)試啟動(dòng)(根據(jù)被測(cè)試硬件操作接口,如IPTV的紅外操作接口)和異常檢測(cè)(檢測(cè)遠(yuǎn)程設(shè)備的通連性和操作接口可操作性),測(cè)試引擎將測(cè)試樣本組發(fā)送給遠(yuǎn)程設(shè)備可共享的空間,然后利用測(cè)試啟動(dòng)操作模塊操作遠(yuǎn)程被測(cè)試應(yīng)用打開對(duì)應(yīng)的文件,然后利用遠(yuǎn)程設(shè)備是否連通和相關(guān)功能的操作接口是否可操作來判斷是否產(chǎn)生異常,返回給測(cè)試引擎記錄測(cè)試結(jié)果和保存導(dǎo)致異常的測(cè)試樣本。h)遠(yuǎn)程可編程接口不開放的網(wǎng)絡(luò)客戶端應(yīng)用(例如IPTV終端設(shè)備的網(wǎng)絡(luò)電視點(diǎn)播功能)測(cè)試測(cè)試引擎先在本地測(cè)試機(jī)器上建立一個(gè)虛擬服務(wù)器,并將測(cè)試樣本數(shù)據(jù)發(fā)送給虛擬服務(wù)器。在本地測(cè)試機(jī)器上開發(fā)對(duì)應(yīng)的測(cè)試啟動(dòng)(根據(jù)被測(cè)試硬件操作接口,如IPTV的紅外操作接口)和異常檢測(cè)(檢測(cè)遠(yuǎn)程設(shè)備的通連性和操作接口可操作性),然后利用測(cè)試啟動(dòng)操作模塊操作遠(yuǎn)程被測(cè)試應(yīng)用并且連接虛擬服務(wù)器發(fā)送對(duì)應(yīng)功能請(qǐng)求,虛擬服務(wù)器發(fā)送相關(guān)的測(cè)試樣本數(shù)據(jù)給遠(yuǎn)程設(shè)備應(yīng)用,然后利用遠(yuǎn)程設(shè)備是否連通和相關(guān)功能的操作接口是否可操作來判斷是否產(chǎn)生異常,返回給測(cè)試引擎記錄測(cè)試結(jié)果和保存導(dǎo)致異常的測(cè)試樣本。i)遠(yuǎn)程可編程接口不開放的網(wǎng)絡(luò)服務(wù)器應(yīng)用測(cè)試(例如測(cè)試網(wǎng)絡(luò)防火墻、入侵檢測(cè)設(shè)備等)在本地測(cè)試機(jī)器上開發(fā)對(duì)應(yīng)的測(cè)試重新啟動(dòng)(如果操作接口不支持,則無需開發(fā),檢測(cè)到異常后報(bào)警等待人工重啟設(shè)備)和異常檢測(cè)(檢測(cè)遠(yuǎn)程設(shè)備的通連性和操作接口可操作性,如果操作接口不支持,則無需開發(fā),只依靠連通性來做檢測(cè)),然后測(cè)試引擎對(duì)相應(yīng)的遠(yuǎn)程服務(wù)發(fā)起請(qǐng)求并將測(cè)試樣本數(shù)據(jù)發(fā)送給遠(yuǎn)程服務(wù)器,通過異常檢測(cè)發(fā)現(xiàn)遠(yuǎn)程服務(wù)器是否異常并記錄和保存異常樣本,如果支持操作接口則重啟服務(wù),如果不支持操作接口則報(bào)警進(jìn)行人工干預(yù)重啟設(shè)備。在圖1所示的方法的步驟104中,可以簡單地選取初始樣本作為基礎(chǔ)樣本。然而, 為了提高安全測(cè)試的覆蓋性,還可以根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件所描述的數(shù)據(jù)關(guān)系,針對(duì)初始樣本沒有覆蓋到的地方,構(gòu)造全新記錄或者在原有記錄中構(gòu)造新選擇分支,從而產(chǎn)生新樣本作為基礎(chǔ)樣本。下面結(jié)合圖2和圖3來詳細(xì)說明這種基礎(chǔ)樣本的生成過程。圖2是示出根據(jù)本發(fā)明一個(gè)實(shí)施例的在初始樣本的基礎(chǔ)上生成初始樣本中所不包含的記錄選擇分支的基礎(chǔ)樣本的方法的流程圖200。在同一記錄中或相關(guān)結(jié)構(gòu)中往往存在這樣的情況,依據(jù)某一字段或者某一條件的不同,整個(gè)記錄或結(jié)構(gòu)的數(shù)據(jù)內(nèi)容或者含義不同。例如,XLS 2007 二進(jìn)制格式定義的 XLSB容器中的BrtBeginP⑶SRange記錄中存在一個(gè)fname字段,占一個(gè)比特。如果該字段為0,則代表其后是一個(gè)UncheckedRfx結(jié)構(gòu)。如果該字段為1,則代表其后是一個(gè) XLNameffideString結(jié)構(gòu)。如果初始樣本只包含該字段為0的情況,則無法構(gòu)造出該字段為1 時(shí)其后的XLNameWideMring數(shù)據(jù)進(jìn)行測(cè)試以測(cè)試該記錄對(duì)XLNameWideMring結(jié)構(gòu)處理的情況。然而,利用本發(fā)明的數(shù)據(jù)視圖就可以分析出此種情況,并根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件生成符合其數(shù)據(jù)規(guī)范的新樣本,對(duì)這樣選擇分支的數(shù)據(jù)進(jìn)行測(cè)試,從而滿足安全測(cè)試的覆蓋性。參考圖2,在步驟202中,獲取初始樣本的全局?jǐn)?shù)據(jù)視圖。步驟202與圖1中的步驟104類似,也就是,使用所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)描述文件來匹配分析初始樣本,找出其中具有全局?jǐn)?shù)據(jù)關(guān)系的字段和關(guān)聯(lián)關(guān)系,將其地址、關(guān)系類型、影響范圍記錄到全局關(guān)系視圖文件中,以供在后續(xù)步驟中使用。
在步驟204中,生成初始樣本的已有記錄未曾覆蓋的新選擇分支。具體而言,例如,首先將數(shù)據(jù)結(jié)構(gòu)描述文件中所描述的所有記錄的所有選擇分支路徑形成一個(gè)路徑圖, 然后用初始樣本中每條記錄的每個(gè)選擇分支路徑對(duì)該路徑圖的對(duì)應(yīng)路徑進(jìn)行染色。當(dāng)初始樣本中所有記錄的所有選擇分支路徑都被處理完畢時(shí),則未被染色的路徑的集合就是需要生成的新選擇分支的集合。接著針對(duì)每一個(gè)需要生成的新選擇分支,根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件中對(duì)應(yīng)記錄的描述,依據(jù)選擇分支匹配條件對(duì)比,尋找符合其選擇分支路徑的相關(guān)結(jié)構(gòu)、 數(shù)組、字段,并按其信息和取值信息,生成新選擇分支數(shù)據(jù)。在步驟206中,根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件,找到初始樣本中對(duì)應(yīng)的已有記錄并解析到對(duì)應(yīng)記錄以生成各層級(jí)的局部數(shù)據(jù)視圖,并且用包含新選擇分支的記錄來替換對(duì)應(yīng)的已有記錄。在步驟208中,進(jìn)行局部數(shù)據(jù)視圖和全局?jǐn)?shù)據(jù)視圖更新,從而生成新樣本以作為圖1的步驟104中的基礎(chǔ)樣本。由于該新樣本包含了初始樣本的記錄中未包含的新選擇分支,所以使用該新樣本作為基礎(chǔ)樣本進(jìn)行測(cè)試就可以覆蓋到使用初始樣本作為基礎(chǔ)樣本進(jìn)行測(cè)試所不曾覆蓋到的測(cè)試域。優(yōu)選地,如果已經(jīng)使用初始樣本作為基礎(chǔ)樣本完成了對(duì)所測(cè)試軟件的安全測(cè)試, 則針對(duì)上述新樣本,可以只測(cè)試包含新選擇分支的記錄以及整體記錄順序,而對(duì)其他記錄內(nèi)部不再進(jìn)行測(cè)試以減少重復(fù)測(cè)試,從而提高測(cè)試效率。圖3是示出根據(jù)本發(fā)明另一實(shí)施例的在初始樣本的基礎(chǔ)上生成初始樣本中所不包含的記錄的基礎(chǔ)樣本的方法的流程圖300。通常,靠人工操作所構(gòu)造的初始樣本很難包含一些特殊功能記錄,而這些特殊功能記錄往往是依賴于樣本的軟件安全測(cè)試的盲點(diǎn)。圖3的流程圖所示出的方法即可解決這一問題。參考圖3,在步驟302中,獲取初始樣本的全局?jǐn)?shù)據(jù)視圖。步驟302與圖1中的步驟104類似,也就是,使用所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)描述文件來匹配分析初始樣本,找出其中具有全局?jǐn)?shù)據(jù)關(guān)系的字段和關(guān)聯(lián)關(guān)系,將其地址、關(guān)系類型、影響范圍記錄到全局關(guān)系視圖文件中,以供在后續(xù)步驟中使用。在步驟304中生成初始樣本未包含的新記錄。數(shù)據(jù)結(jié)構(gòu)描述文件是根據(jù)接口文檔生成的描述文件,其內(nèi)部已經(jīng)包含了對(duì)各種可能的記錄的匯總情況。統(tǒng)計(jì)初始樣本中覆蓋到的記錄,對(duì)比數(shù)據(jù)結(jié)構(gòu)描述文件中的所有記錄,尋找未包含在初始樣本中的記錄。然后針對(duì)每一條需要生成的新記錄,根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件中對(duì)應(yīng)記錄的描述,依據(jù)默認(rèn)選擇分支匹配條件對(duì)比,尋找符合其選擇分支的相關(guān)結(jié)構(gòu)、數(shù)組、字段,并按其信息和取值信息,生成新記錄數(shù)據(jù)。如果新記錄包含多個(gè)選擇分支,則可以只按默認(rèn)選擇分支生成記錄。然后在按照?qǐng)D3的流程圖生成新樣本之后,再把該新樣本作為圖2的流程圖所使用的初始樣本進(jìn)行輸入,以構(gòu)造其他選擇分支的情況。生成新記錄還必須考慮關(guān)聯(lián)記錄。根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件中所描述的該新記錄的外部關(guān)聯(lián)關(guān)系和順序關(guān)系,補(bǔ)充生成關(guān)聯(lián)記錄。例如,XLSB格式要求,,BrtBookView 記錄必須在BrtBeginBookViews記錄和BrtEndBookViews記錄之間。因此,要生成全新的_BrtBookView記錄進(jìn)行測(cè)試,就必須在其前后附加上BrtBeginBookViews記錄和BrtEndBookViews記錄。根據(jù)本發(fā)明的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則使用定義的標(biāo)簽支持對(duì)這樣的關(guān)聯(lián)記錄的描述。在解析樣本時(shí)如果遇到這種情況,會(huì)自動(dòng)分析和處理關(guān)聯(lián)記錄,按照同樣的規(guī)則生成關(guān)聯(lián)記錄的數(shù)據(jù),并最后一起組合成一個(gè)符號(hào)規(guī)定定義的記錄組數(shù)據(jù)。在步驟306中,根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件,找到初始樣本中適合插入新記錄的位置 (例如XLS的WORKBOOK流中的hterfaceHdr記錄必須緊接在BOF記錄之后)并針對(duì)插入位置生成各層級(jí)的局部數(shù)據(jù)視圖,并且在插入位置將新記錄插入。在步驟308中,進(jìn)行局部數(shù)據(jù)視圖和全局?jǐn)?shù)據(jù)視圖更新,從而生成新樣本以作為圖1的步驟104中的基礎(chǔ)樣本。由于該新樣本包含了初始樣本的記錄中未包含的新記錄, 所以使用該新樣本作為基礎(chǔ)樣本進(jìn)行測(cè)試可以覆蓋到使用初始樣本作為基礎(chǔ)樣本進(jìn)行測(cè)試所不曾覆蓋到的測(cè)試域。優(yōu)選地,如果已經(jīng)使用初始樣本作為基礎(chǔ)樣本完成了對(duì)所測(cè)試軟件的安全測(cè)試, 則針對(duì)上述新樣本,可以只測(cè)試新記錄與關(guān)聯(lián)記錄以及整體記錄順序,而對(duì)其他記錄內(nèi)部不再進(jìn)行測(cè)試以減少重復(fù)測(cè)試,從而提高測(cè)試效率。優(yōu)選地,如果把該新樣本作為圖2的流程圖所使用的初始樣本進(jìn)行輸入,則可以只針對(duì)新記錄進(jìn)行圖2的流程圖的處理,從而生成新記錄的其他選擇分支,這樣在測(cè)試時(shí)就能覆蓋到更多的測(cè)試域。下面再簡單討論一下本發(fā)明的要點(diǎn)。首先,本發(fā)明提出了一種通用的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則,從而使得各種復(fù)雜的文件格式或網(wǎng)絡(luò)協(xié)議都得以被描述。本發(fā)明的數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則采用了五層數(shù)據(jù)結(jié)構(gòu),即容器、記錄、結(jié)構(gòu)、數(shù)組、字段。當(dāng)然,也可以采用兩層、三層、四層、六層或更多層的數(shù)據(jù)結(jié)構(gòu),并且不同層采取不同的命名方式。然而,只要其他分層方法的實(shí)質(zhì)與本發(fā)明的五層相同或類似,則其仍在本發(fā)明的范圍之內(nèi)。例如,把數(shù)組歸和成字段,在字段里分類處理,表面上是縮減為四層,但實(shí)際上還是本發(fā)明的五層劃分方法。其次,針對(duì)數(shù)據(jù)之間的關(guān)系,本發(fā)明引入了取值范圍、表達(dá)式、全局變量、局部變量、全局字段、全局指針(偏移量)描述字段、內(nèi)建長度、數(shù)組個(gè)數(shù)字段等技術(shù),完成通用的具備一定復(fù)雜度描述并以此來生成全局和局部數(shù)據(jù)視圖,以便于測(cè)試樣本生成決策以及保證樣本生成符合解析規(guī)則以保證測(cè)試的有效性。再者,在獲取了全局?jǐn)?shù)據(jù)視圖之后,本發(fā)明脫離開以前只能在字段級(jí)做測(cè)試的束縛,現(xiàn)在可以在數(shù)組、結(jié)構(gòu)、記錄級(jí)別做更高層次的測(cè)試。這樣能擴(kuò)大更多的測(cè)試范圍,發(fā)現(xiàn)以前傳統(tǒng)工具無法發(fā)現(xiàn)和覆蓋的邏輯實(shí)現(xiàn)層面的安全漏洞。本發(fā)明在數(shù)組和結(jié)構(gòu)級(jí)別可以實(shí)現(xiàn)數(shù)組缺失、大重復(fù)數(shù)組、數(shù)組與個(gè)數(shù)字段不一致、結(jié)構(gòu)內(nèi)部選擇分支不一致等多方面的測(cè)試。本發(fā)明在在記錄級(jí)別可以實(shí)現(xiàn)記錄缺失、大重復(fù)記錄、記錄順序改變、關(guān)聯(lián)記錄生成、 包含記錄改變、關(guān)聯(lián)記錄描述字段不一致等多方面的測(cè)試。又有,本發(fā)明具有可擴(kuò)展的樣本自生成能力。本發(fā)明支持完整的新增記錄生成方式。根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件,本發(fā)明可以生成一個(gè)全新的記錄并插入到樣本中,同時(shí)支持將其關(guān)聯(lián)的記錄(如必須要順序出現(xiàn)的記錄或者前后包含的記錄)同期生成,以保證測(cè)試記錄的完整性和正確性。同時(shí),本發(fā)明自動(dòng)根據(jù)已有記錄和數(shù)據(jù)結(jié)構(gòu)描述文件,生成完全覆蓋數(shù)據(jù)結(jié)構(gòu)描述文件的新選擇分支的數(shù)據(jù)結(jié)構(gòu)。因此,利用上述樣本自生成能力,就可以擴(kuò)展出符合應(yīng)用處理和檢測(cè)規(guī)則、幾乎覆蓋所有數(shù)據(jù)結(jié)構(gòu)的樣本,而無須依賴原始樣本的覆蓋區(qū)域。還有,在本發(fā)明中,因?yàn)榫邆渌型暾臄?shù)據(jù)結(jié)構(gòu)和分支的知識(shí),所以對(duì)于測(cè)試結(jié)果的覆蓋率等數(shù)據(jù)指標(biāo),本發(fā)明可以實(shí)現(xiàn)相關(guān)的量化計(jì)算,例如總數(shù)據(jù)記錄個(gè)數(shù)、數(shù)據(jù)記錄分支個(gè)數(shù)、測(cè)試覆蓋記錄個(gè)數(shù)、測(cè)試覆蓋記錄分支個(gè)數(shù)等等。這對(duì)于軟件公司把漏洞挖掘工具轉(zhuǎn)化為專業(yè)的安全測(cè)試流程和管理非常重要。以上參考附圖示出并描述了本發(fā)明的實(shí)施例,但是本發(fā)明不限于此。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種修改、變型和替換而不脫離本發(fā)明的精神范圍。因此, 只要本發(fā)明的這些修改、變型和替換屬于本發(fā)明的權(quán)利要求書及其等同技術(shù)方案的范圍之內(nèi),則本發(fā)明也意圖包含這些修改、變型和替換。
權(quán)利要求
1.一種基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法(100),其特征在于包括以下步驟基于所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)和規(guī)則的描述文檔,按照數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則來書寫所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)描述文件(102);使用數(shù)據(jù)結(jié)構(gòu)描述文件來獲取基礎(chǔ)樣本的全局?jǐn)?shù)據(jù)視圖(104); 從測(cè)試點(diǎn)開始逐步解析基礎(chǔ)樣本,生成局部數(shù)據(jù)視圖,根據(jù)全局?jǐn)?shù)據(jù)視圖和局部數(shù)據(jù)視圖,依照測(cè)試策略由基礎(chǔ)樣本生成測(cè)試樣本組(106);以及使用測(cè)試樣本組對(duì)所測(cè)試軟件進(jìn)行安全測(cè)試(108);其中所述數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則定義了五層數(shù)據(jù)結(jié)構(gòu),即容器、記錄、結(jié)構(gòu)、數(shù)組、字段,容器是一組擁有相同封裝規(guī)則、實(shí)現(xiàn)特定功能的記錄的集合, 記錄是遵循容器封裝規(guī)則、實(shí)現(xiàn)一個(gè)特定功能的數(shù)據(jù)體, 結(jié)構(gòu)是一組有內(nèi)在邏輯關(guān)聯(lián)的、獨(dú)立可復(fù)用的數(shù)據(jù)體, 數(shù)組是一組擁有相同子結(jié)構(gòu)或字段類型的數(shù)據(jù)組合, 字段是數(shù)據(jù)處理具備最小完整邏輯含義的葉子節(jié)點(diǎn)單位。
2.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試方法,其特征在于,所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)和規(guī)則的描述文檔來自于下述中的一個(gè)或多個(gè)所測(cè)試軟件的廠商對(duì)外公布的技術(shù)開發(fā)文檔,所測(cè)試軟件的廠商提供的開發(fā)設(shè)計(jì)文檔,通過逆向分析所獲取的針對(duì)所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)分析文檔。
3.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試方法,其特征在于,所述五層數(shù)據(jù)結(jié)構(gòu)允許多層次容器嵌套。
4.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試方法,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則包括對(duì)下列中的一項(xiàng)或多項(xiàng)的描述字段取值范圍和固定值、數(shù)據(jù)內(nèi)部指針、上級(jí)數(shù)據(jù)結(jié)構(gòu)完整性關(guān)系、跨記錄和跨容器域字段引用和狀態(tài)關(guān)聯(lián)關(guān)系、字段長度關(guān)系、數(shù)組個(gè)數(shù)關(guān)系、字段與字段的同一計(jì)算關(guān)系、字段與字段的邏輯依賴關(guān)系、記錄關(guān)系。
5.根據(jù)權(quán)利要求4所述的軟件安全測(cè)試方法,其特征在于,對(duì)字段取值范圍和固定值的描述是通過表達(dá)式來實(shí)現(xiàn)的。
6.根據(jù)權(quán)利要求4所述的軟件安全測(cè)試方法,其特征在于,對(duì)數(shù)據(jù)內(nèi)部指針的描述是通過全局指針來實(shí)現(xiàn)的。
7.根據(jù)權(quán)利要求4所述的軟件安全測(cè)試方法,其特征在于,對(duì)上級(jí)數(shù)據(jù)結(jié)構(gòu)完整性關(guān)系的描述是通過上級(jí)相關(guān)字段的關(guān)聯(lián)描述來實(shí)現(xiàn)的。
8.根據(jù)權(quán)利要求4所述的軟件安全測(cè)試方法,其特征在于,對(duì)跨記錄和跨容器域字段引用和狀態(tài)關(guān)聯(lián)關(guān)系的描述是通過全局字段來實(shí)現(xiàn)的。
9.根據(jù)權(quán)利要求4所述的軟件安全測(cè)試方法,其特征在于,對(duì)記錄關(guān)系的描述是通過全局變量來實(shí)現(xiàn)的。
10.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試方法,其特征在于,所述基礎(chǔ)樣本是通過下列步驟得到的操作所測(cè)試軟件的界面功能來構(gòu)造初始樣本以作為基礎(chǔ)樣本。
11.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試方法,其特征在于,所述基礎(chǔ)樣本是通過下列步驟得到的操作所測(cè)試軟件的界面功能來構(gòu)造初始樣本;獲取初始樣本的全局?jǐn)?shù)據(jù)視圖(202);生成初始樣本的已有記錄未曾覆蓋的新選擇分支(204);根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件,找到初始樣本中對(duì)應(yīng)的已有記錄并解析到對(duì)應(yīng)記錄以生成各層級(jí)的局部數(shù)據(jù)視圖,并且用包含新選擇分支的記錄來替換對(duì)應(yīng)的已有記錄O06);進(jìn)行局部數(shù)據(jù)視圖和全局?jǐn)?shù)據(jù)視圖更新,從而生成新樣本以作為基礎(chǔ)樣本(208)。
12.根據(jù)權(quán)利要求11所述的軟件安全測(cè)試方法,其特征在于,如果已經(jīng)使用初始樣本作為基礎(chǔ)樣本完成了對(duì)所測(cè)試軟件的安全測(cè)試,則針對(duì)所述新樣本,只測(cè)試包含新選擇分支的記錄以及整體記錄順序。
13.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試方法,其特征在于,所述基礎(chǔ)樣本是通過下列步驟得到的操作所測(cè)試軟件的界面功能來構(gòu)造初始樣本;獲取初始樣本的全局?jǐn)?shù)據(jù)視圖(302);生成初始樣本未包含的新記錄(304);根據(jù)數(shù)據(jù)結(jié)構(gòu)描述文件,找到初始樣本中適合插入新記錄的位置并針對(duì)插入位置生成各層級(jí)的局部數(shù)據(jù)視圖,并且在插入位置將新記錄插入(306);進(jìn)行局部數(shù)據(jù)視圖和全局?jǐn)?shù)據(jù)視圖更新,從而生成新樣本以作為基礎(chǔ)樣本(308)。
14.根據(jù)權(quán)利要求13所述的軟件安全測(cè)試方法,其特征在于,如果已經(jīng)使用初始樣本作為基礎(chǔ)樣本完成了對(duì)所測(cè)試軟件的安全測(cè)試,則針對(duì)所述新樣本,只測(cè)試新記錄與關(guān)聯(lián)記錄以及整體記錄順序。
15.根據(jù)權(quán)利要求13所述的軟件安全測(cè)試方法,其特征在于,把權(quán)利要求13中所述的新樣本作為權(quán)利要求11中所述的初始樣本來執(zhí)行權(quán)利要求11中所述的各步驟,從而使得權(quán)利要求11中所生成的新樣本包含新選擇分支的新記錄,并且針對(duì)所生成的新樣本,只測(cè)試包含新選擇分支的新記錄以及整體記錄順序。
16.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試方法,其特征在于,所述軟件安全測(cè)試方法是跨平臺(tái)的。
全文摘要
本發(fā)明公開了基于全局?jǐn)?shù)據(jù)結(jié)構(gòu)描述的軟件安全測(cè)試方法(100)。所述軟件安全測(cè)試方法(100)包括下列步驟基于所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)和規(guī)則的描述文檔,按照數(shù)據(jù)結(jié)構(gòu)統(tǒng)一描述規(guī)則來書寫所測(cè)試軟件的數(shù)據(jù)結(jié)構(gòu)描述文件(102);使用數(shù)據(jù)結(jié)構(gòu)描述文件來獲取基礎(chǔ)樣本的全局?jǐn)?shù)據(jù)視圖(104);從測(cè)試點(diǎn)開始逐步解析基礎(chǔ)樣本,生成局部數(shù)據(jù)視圖,根據(jù)全局?jǐn)?shù)據(jù)視圖和局部數(shù)據(jù)視圖,依照測(cè)試策略由基礎(chǔ)樣本生成測(cè)試樣本組(106);以及使用測(cè)試樣本組對(duì)所測(cè)試軟件進(jìn)行安全測(cè)試(108)。所述軟件安全測(cè)試方法(100)的覆蓋率更高,測(cè)試樣本更精準(zhǔn),測(cè)試結(jié)果更可數(shù)據(jù)指標(biāo)量化。
文檔編號(hào)G06F11/36GK102243608SQ20101017676
公開日2011年11月16日 申請(qǐng)日期2010年5月13日 優(yōu)先權(quán)日2010年5月13日
發(fā)明者方興 申請(qǐng)人:方興