亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

軟件源代碼安全漏洞的檢測方法及檢測裝置的制作方法

文檔序號:6466499閱讀:282來源:國知局

專利名稱::軟件源代碼安全漏洞的檢測方法及檢測裝置的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及軟件安全
技術(shù)領(lǐng)域
,特別涉及一種軟件源代碼安全漏洞的檢測方法以及檢測裝置。
背景技術(shù)
:目前,軟件被越來越多的用于處理各種敏感信息和高價值信息,例如商業(yè)信息、財政信息等,這使得軟件日益成為企圖獲取這些信息的攻擊者的攻擊目標。攻擊者企圖挖掘軟件中的安全漏洞,以干擾軟件運行,實現(xiàn)對軟件的惡意操作。其中,源代碼編寫階段引入的安全漏洞是最常見的安全漏洞。因此,開發(fā)一種有效的安全漏洞檢測方法,以檢測存在于源代碼中的潛在安全漏洞是很有必要的。目前,可以采用自動代碼安全審計技術(shù)從軟件源代碼中檢測出安全漏洞。自動代碼安全審計是一種基于軟件源代碼分析的安全漏洞檢測技術(shù),它是靜態(tài)檢測,屬于白盒(whitebox)測試技術(shù)。自動代碼安全審計是在不運行軟件的情況下,對軟件的源代碼進行靜態(tài)分析,從而獲取軟件結(jié)構(gòu)。然后再根據(jù)分析結(jié)果找出軟件中的安全漏洞。但是,其缺點在于,靜態(tài)的源代碼分析僅僅適用于檢測與語法相關(guān)的安全漏洞,例如緩沖溢出、競爭條件等,但是對于分析諸如命令注入和數(shù)據(jù)庫注入等與語義相關(guān)的安全漏洞,就顯得無能為力。從以上所述可見,目前的安全漏洞檢測方法雖然能夠檢測到存在于軟件中的一些安全漏洞,但是由于其檢測方式局限,檢測不夠全面,不能有效的檢測出存在于軟件源代碼中的各種安全漏洞。
發(fā)明內(nèi)容為了解決以上問題,本發(fā)明一方面提供一種軟件源代碼安全漏洞的檢測方法,另一方面提供一種軟件源代碼安全漏洞的檢測裝置,以便能夠有效地檢測出存在于軟件源代碼中的安全漏洞。本發(fā)明所提供的軟件源代碼安全漏洞的檢測方法,包括-象語法樹AST;根據(jù)預(yù)先定義的可操縱點和風(fēng)險點,確定所建立的AST的各節(jié)點中的可操縱點和風(fēng)險點;搜索所述AST中的可操縱點到風(fēng)險點之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制,則將所述執(zhí)行路徑確定為可能導(dǎo)致安全漏洞的潛在風(fēng)險執(zhí)行路徑。.根據(jù)本發(fā)明的方法,其中,所述可操縱點為輸入類函數(shù);所述風(fēng)險點為執(zhí)行類函數(shù)和/或賦值語句。根據(jù)本發(fā)明的方法,其中,進一步預(yù)先定義可操縱點中的可操縱參數(shù)和風(fēng)險點中的風(fēng)險參數(shù)。根據(jù)本發(fā)明的方法,其中,確定所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制的方式為如果所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)被所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)污染,則確定所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制。根據(jù)本發(fā)明的方法,其中,確定所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)被所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)污染的方式為將所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)作為初始潛在可操縱變量PEV;確定所述執(zhí)行路徑上被所述初始PEV污染的中間PEV;判斷所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)是否是所述初始PEV或中間PEV,如果是,則判定所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)被所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)污染。根據(jù)本發(fā)明的方法,其中,獲取所述執(zhí)行路徑上被所述初始PEV污染的中間PEV的方式為數(shù)據(jù)流分析方式。根據(jù)本發(fā)明的方法,其中,獲取所述執(zhí)行路徑上被所述初始PEV污染的中間PEV的方式進一步包括控制流分析方式。根據(jù)本發(fā)明的方法,其中,該方法進一步包括根據(jù)所確定的潛在風(fēng)險執(zhí)行路徑生成測試報告。根據(jù)本發(fā)明的方法,其中,所述根據(jù)所確定的潛在風(fēng)險執(zhí)行路徑生成測試報告包括如果所述潛在風(fēng)險執(zhí)行路徑能夠直接用測試輸入和測試條件表示,則根據(jù)所述測試輸入和測試條件生成測試腳本,否則,生成記載所述潛在風(fēng)險執(zhí)行路徑的測試報告。根據(jù)本發(fā)明的方法,其中,所述待檢測軟件的源代碼為高級編程語言源代碼,或者為將可執(zhí)行程序代碼進行反編譯而得到的匯編語言源代碼。本發(fā)明所提供的軟件源代碼安全漏洞的檢測裝置,包括源代碼處理單元和路徑分析單元;其中,所述源代碼處理單元,用于建立待檢測軟件的源代碼對應(yīng)的AST,根據(jù)預(yù)先定義的可操縱點和風(fēng)險點,確定所建立的AST的各節(jié)點中的可操縱點和風(fēng)險點;所述路徑分析單元,用于在所述源代碼處理單元確定的AST的各節(jié)點中,確定可操縱點到風(fēng)險點之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制,則將所述執(zhí)行路徑確定為可能導(dǎo)致安全漏洞的潛在風(fēng)險執(zhí)行路徑。根據(jù)本發(fā)明的裝置,其中,所述源代碼處理單元包括配置模塊、分析模塊,節(jié)點類型定位模塊和AST記錄模塊;所述配置模塊,用于記錄預(yù)先定義的可操縱點和風(fēng)險點;所述分析模塊,用于對待檢測軟件的源代碼進行詞法、語法和語義分析,建立AST;所述節(jié)點類型定位模塊,用于根據(jù)所述配置模塊中記錄的預(yù)先定義的可操縱點和風(fēng)險點,確定所述分析模塊建立的AST的各節(jié)點中的可操縱點和風(fēng)險點,并將所述AST以及所確定的可操縱點和風(fēng)險點記錄在AST記錄模塊中;所述AST記錄模塊,用于記錄所述AST以及所確定的可操縱點和風(fēng)險點,并提供給所述路徑分析單元。根據(jù)本發(fā)明的裝置,其中,所述源代碼處理單元進一步包括反編譯模塊,用于將可執(zhí)行程序代碼反編譯為匯編語言源代碼,并發(fā)送給所述分析模塊。根據(jù)本發(fā)明的裝置,其中,所述路徑分析單元包括執(zhí)行路徑定位模塊和漏洞定位模塊;所述執(zhí)行路徑定位模塊,用于在所述AST中搜索可操縱點到風(fēng)險點之間的執(zhí)行路徑,并將搜索到執(zhí)行路徑通知給所述漏洞定位模塊;所述漏洞定位模塊,用于在接收到所述執(zhí)行路徑定位模塊的通知后,確定所述執(zhí)行路徑上的風(fēng)險點是否能夠被所述執(zhí)行路徑上的可操縱點控制,如果是,則將所述執(zhí)行路徑確定為潛在風(fēng)險執(zhí)行路徑。根據(jù)本發(fā)明的裝置,其中,該裝置進一步包括安全測試用例生成單元,用于根據(jù)所述路徑分析單元確定的潛在風(fēng)險執(zhí)行路徑生成測試報告。從上述方案可以看出,本發(fā)明檢測安全漏洞的基礎(chǔ)是對源代碼進行分析從而建立AST,由于建立AST的過程不僅限于靜態(tài)的詞法和語法分析,還包括語義分析,因此相對于自動代碼安全審計技術(shù)來說,本發(fā)明對源代碼的分析過程更為全面。其次,本發(fā)明對建立的AST進行路徑分析,找到能夠由可操縱點控制風(fēng)險點的執(zhí)行路徑。由于利用這些執(zhí)行路徑,攻擊者能夠通過向可操縱點輸入精心設(shè)計的數(shù)據(jù)而控制風(fēng)險點,從而導(dǎo)致軟件執(zhí)行出現(xiàn)錯誤甚至陷入癱瘓。因此,本發(fā)明找到的能夠由可操縱點控制風(fēng)險點的執(zhí)行路徑就是安全漏洞。可見,本發(fā)明通過在全面的源代碼分析而建立的AST中進行路徑搜索從而得到各種安全漏洞,使得本發(fā)明可以更為有效的將軟件源代碼中的各種安全漏洞査找出來,并作為完善軟件的依據(jù),從而有效的避免了風(fēng)險點被惡意操縱,增強了軟件源代碼的安全性。下面將通過參照附圖詳細描述本發(fā)明的示例性實施例,使本領(lǐng)域的普通技術(shù)人員更清楚本發(fā)明的上述及其他特征和優(yōu)點,附圖中圖1為本發(fā)明實施例中軟件安全漏洞檢測方法的流程圖;圖2為本發(fā)明另一實施例中軟件安全漏洞檢測方法的流程圖;圖3為本發(fā)明實施例中一種AST的結(jié)構(gòu)示意圖;圖4為本發(fā)明實施例中軟件安全漏洞檢測裝置的結(jié)構(gòu)示意圖;圖5為圖4中源代碼處理單元1的結(jié)構(gòu)示意圖;圖6為圖4中路徑分析單元2的結(jié)構(gòu)示意圖。具體實施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。在實際中,攻擊者通過輸入精心設(shè)計的特定數(shù)據(jù),使得軟件按照某種路徑執(zhí)行,最終導(dǎo)致緩沖溢出、代碼注入等安全問題。這些威脅軟件安全的執(zhí)行路徑稱為潛在風(fēng)險執(zhí)行路徑(PVEP,PotentialvulnerableExecutionPath),是攻擊者挖掘的對象。因此本發(fā)明通過搜索軟件源代碼中的潛在風(fēng)險執(zhí)行路徑達到檢測安全漏洞的目的?;谝陨峡紤],本發(fā)明提供了一種軟件安全漏洞的檢測方案,該方案通過分析軟件源代碼建立抽象語法樹(AST,AbstractSyntaxTree),根據(jù)預(yù)先定義的可操縱點(EP,ExploitablePoints)和風(fēng)險點(VP,VulnerablePoints),確定所建立的AST的各節(jié)點中的EP和VP;然后通過對所述AST進行路徑分析,確定EP到VP之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的VP能夠被所述執(zhí)行路徑上的EP控制,則將查找到的執(zhí)行路徑確定為可能導(dǎo)致安全漏洞的PVEP。其中,EP是指軟件源代碼中的輸入點。通過EP,可以從軟件外部向軟件輸入命令或數(shù)據(jù),以控制軟件運行狀態(tài),進而完成各種預(yù)定任務(wù)。然而,如果EP被攻擊者利用,攻擊者可以通過EP輸入特定命令或數(shù)據(jù),實現(xiàn)對軟件的惡意操作。EP通常是以函數(shù)形式存在于軟件源代碼中的。以C語言源代碼為例,可以將動態(tài)鏈接庫(DLL)、系統(tǒng)調(diào)用接口(SCI)、應(yīng)用程序編程接口(API)以及庫函數(shù)等提供的輸入類函數(shù)定義為EP。輸入類函數(shù)包括用戶輸入函數(shù)(如scanf())、系統(tǒng)環(huán)境輸入函數(shù)(如getenv())和網(wǎng)絡(luò)輸入函數(shù)(如read())等。在實際應(yīng)用中,EP也可以是用戶自定義的函數(shù)。VP是指軟件源代碼中的執(zhí)行點。通過VP,可以進行多種處理以執(zhí)行各種預(yù)訂任務(wù)。然而,如果這些執(zhí)行點被攻擊者通過EP間接操縱,將可以導(dǎo)致軟件運行錯誤、崩潰等不良后果。VP通常包括函數(shù)和賦值語句。仍以C語言源代碼為例,可以將DLL、SCI、API以及庫函數(shù)等提供的執(zhí)行類函數(shù)和賦值語句定義為VP。執(zhí)行類函數(shù)包括訪問變量執(zhí)行函數(shù)(如execlp())、操作系統(tǒng)(OS,OperatingSystem)命令執(zhí)行函數(shù)(如system())、數(shù)據(jù)庫命令執(zhí)行函數(shù)(如嵌入式的數(shù)據(jù)庫査詢命令EXECSQL)等;賦值語句例如包括字符串拷貝函數(shù)strcpy()。以上所述的訪問變量執(zhí)行函數(shù)可能導(dǎo)致代碼注入漏洞,OS命令執(zhí)行函數(shù)可能導(dǎo)致代碼注入漏洞,數(shù)據(jù)庫命令執(zhí)行函數(shù)可能導(dǎo)致數(shù)據(jù)庫注入漏洞,賦值語句可能導(dǎo)致緩沖溢出漏洞。此外,當(dāng)對資源(文件、網(wǎng)絡(luò)等)所執(zhí)行的訪問次序異常,造成對同一資源的競爭時,可以導(dǎo)致競爭條件漏洞,其后果是程序無法正常運行。在實際應(yīng)用中,VP也可以為用戶自定義函數(shù)。由以上所述可見,本發(fā)明通過建立AST并對AST進行路徑分析從而確定PEVP。由于建立AST的過程不僅限于靜態(tài)的詞法和語法分析,還包括語義分析,因此在建立的AST的基礎(chǔ)上進行路徑分析所找到的PEVP可以系統(tǒng)、全面地反映軟件源代碼中的各種安全漏洞,實現(xiàn)了安全漏洞的有效檢測。其中,以上分析源代碼并建立AST的過程可以采用編譯器中的前端編譯器完成。編譯器的功能是讀取程序源代碼并翻譯為目標語言?,F(xiàn)有的編譯器包括前端編譯器和后端編譯器,前端編譯器對源代碼進行詞法、語法和語義分析,建立AST,同時還將源代碼轉(zhuǎn)換為編譯器的內(nèi)部表述(IR,Intermediate),即編譯器能夠識別的語言。后端編譯器分析并優(yōu)化內(nèi)部表述,最后生成目標代碼。本發(fā)明應(yīng)用前端編譯器對源代碼進行詞法、語法和語義分析,生成AST。圖1為本發(fā)明一個實施例中軟件安全漏洞檢測方法的流程圖。該實施例采用GNUC編譯器(GCC,GNUCCompiler)中的前端編譯器CC1作為分析并建立AST的模塊。Linux系統(tǒng)下的GCC是GNU推出的功能強大、性能優(yōu)越的多平臺編譯器。其中,GNU為"GNU'sNotUnix"的首字母縮寫語。如圖1所示,該方法包括以下步驟步驟101:讀取待檢測軟件的源代碼和預(yù)先定義的EP和VP。本步驟中,可以將預(yù)先定義的EP和VP分別記錄在EP配置文件和VP配置文件中。EP配置文件和VP配置文件也可以為同一個文件。其中,EP配置文件由多行組成,每行描述一個EP。EP配置文件的格式可以為函數(shù)名可操縱參數(shù)。這里,可操縱參數(shù)為函數(shù)的某個或某些輸入?yún)?shù)。由于一個函數(shù)可能具有多個輸入?yún)?shù),并不是每個參數(shù)都可能被攻擊者直接利用,因此可以根據(jù)需要具體定義EP中的哪個輸入?yún)?shù)為可操縱參數(shù)。以C語言中的字符串輸入函數(shù)gets()為例EP配置文件中記錄了gets:l,表示函數(shù)gets()為一個EP;gets()中只有一個輸入?yún)?shù),其第一個也是唯一一個輸入?yún)?shù)為可操縱參數(shù)。其中,gets()的輸入?yún)?shù)為輸入的字符串變量。以C語言源代碼為例,可以定義為EP的函數(shù)包括但不限于從文件中讀數(shù)據(jù)函數(shù)fread()、從文件句柄指示的文件中讀數(shù)據(jù)函數(shù)read()、從文件句柄指示的文件的指定偏移量處讀數(shù)據(jù)函數(shù)pread()、從文件中讀字符串函數(shù)fgets()、從標準輸入設(shè)備中輸入字符串函數(shù)gets()、從文件中讀寬字字符串函數(shù)fgetws()、從系統(tǒng)環(huán)境中取主機名函數(shù)gethostname()、從系統(tǒng)環(huán)境中取域名函數(shù)getdomainname()、從標準輸入設(shè)備中輸入數(shù)據(jù)函數(shù)scanf()、從字符串中讀數(shù)據(jù)函數(shù)sscanf()和從文件中讀數(shù)據(jù)函數(shù)fscanf(),等等。其中,VP配置文件由多行組成,每行描述一個VP。VP配置文件的格式可以為函數(shù)名風(fēng)險參數(shù)。這里,風(fēng)險參數(shù)為函數(shù)的某個或某些輸入?yún)?shù)。由于一個函數(shù)可能具有多個輸入?yún)?shù),并不是每個參數(shù)都會被攻擊者間接操縱并導(dǎo)致安全漏洞,因此可以根據(jù)需要具體定義VP中的哪個輸入?yún)?shù)為風(fēng)險參數(shù)。當(dāng)風(fēng)險參數(shù)被操縱時,其所在函數(shù)將導(dǎo)致安全漏洞。以C語言中的命令執(zhí)行函數(shù)之一system()為例VP配置文件中記錄了system:l,表示函數(shù)system()為一個VP,其第一個輸入?yún)?shù)為風(fēng)險參數(shù)。當(dāng)函數(shù)system()的第一個參數(shù)被污染(tainted),或者說被操縱時,函數(shù)system()可以被攻擊者通過某個EP控制,從而造成代碼注入的安全漏洞。其中,systemO的第一個參數(shù)為被執(zhí)行的命令名。以C語言源代碼為例,可以定義為VP的函數(shù)包括但不限于執(zhí)行shell命令函數(shù)system()、執(zhí)行指定的程序函數(shù)execve()、執(zhí)行指定路徑下的程序函數(shù)execl()、執(zhí)行指定的程序文件函數(shù)exedp()、執(zhí)行指定路徑下的程序函數(shù)execle()、執(zhí)行指定路徑下的程序函數(shù)execv()、執(zhí)行指定的程序文件函數(shù)execvp()和創(chuàng)建一個進程執(zhí)行命令函數(shù)popen(),等等。步驟102:對讀取的源代碼進行詞法、語法和語義分析,建立AST,并根據(jù)預(yù)先定義的EP和VP,確定建立的AST中的EP和VP。本步驟中,通過對讀取的源代碼進行詞法、語法和語義分析以建立AST的過程是現(xiàn)有技術(shù)。其中,詞法分析是將整個源代碼分解成多個詞元(tokens),每個詞元是一個單獨的語言原子單元(atomicunit),例如程序語句中的關(guān)鍵字(keyword)、標識符(identifier)、符號名(symbolname),詞法分析是生成AST的第一步。語法分析是通過分析各個詞元的順序來識別程序的語法結(jié)構(gòu)。語法分析階段開始建立分析樹,即AST。AST是一種釆用形式化(formal)文法規(guī)則描述的樹結(jié)構(gòu),并采用這種樹結(jié)構(gòu)表示詞元順序。語義分析是在AST中添加語義信息,并執(zhí)行語義檢查。AST是在語法和語義分析的交替進行過程中建立起來的。AST中的節(jié)點反映了源代碼中的程序語句。每個節(jié)點都可以有子節(jié)點,每個子節(jié)點又可以有自己的子節(jié)點。每個節(jié)點都具有至少一個屬性,例如該節(jié)點所記錄的程序語句的位置(Location)、類型(Type)、有效范圍(Scope)等。在建立好AST之后,或在建立AST的過程中,逐一判斷AST上各節(jié)點是否為預(yù)先定義的EP或VP,如果AST上的某節(jié)點與預(yù)先定義的EP相同,則將該節(jié)點記錄為EP,如果AST上的某節(jié)點與預(yù)先定義的VP相同,則將該節(jié)點記錄為VP。本步驟在記錄EP和VP時,可以采用將AST中的EP和VP記錄在表格中的方式,也可以采用為AST的各節(jié)點增加EP屬性和W屬性的方式。例如,當(dāng)某節(jié)點為EP時,則將其EP/VP屬性值置為預(yù)設(shè)值,例如置l;當(dāng)某節(jié)點為VP時,則將其EP/VP屬性值置為預(yù)設(shè)值,例如置0。當(dāng)然,還可以將EP屬性和VP屬性采用一個兩位的比特序列表示,該比特序列中的兩位比特分別表示EP屬性和VP屬性。步驟103:査找AST中EP到VP之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的VP能夠被所述執(zhí)行路徑上的EP控制,則確定所述執(zhí)行路徑為PVEP。本步驟中,將AST中的各EP依次作為當(dāng)前EP,并針對當(dāng)前EP進行如下處理al、將當(dāng)前EP中定義為可操縱參數(shù)的輸入變量作為初始PEV(PotentialExploitableVariable,潛在可操縱變量);其中,初始PEV可能為一個或多于一個變量;bl、從當(dāng)前EP開始,按預(yù)設(shè)搜索算法在AST中進行路徑搜索,逐一確定當(dāng)前搜索節(jié)點是否為VP以及當(dāng)前搜索節(jié)點中出現(xiàn)的中間PEV;如果當(dāng)前搜索節(jié)點是VP,則確定該VP的風(fēng)險參數(shù)是否為其所在執(zhí)行路徑上的初始PEV或中間PEV;如果該VP的風(fēng)險參數(shù)是其所在執(zhí)行路徑上的初始PEV或中間PEV,則確定該VP與當(dāng)前EP之間的執(zhí)行路徑為一條PVEP。上述al與M步驟針對AST中的各EP重復(fù)進行,直至針對所述各EP的路徑搜索全部完成。在所述步驟bl中,進行路徑搜索時采用的搜索算法通常為深度優(yōu)先搜索(deep-firstsearching)法則,其搜索方式是從樹的根節(jié)點開始,優(yōu)先向縱深搜索,直至到達樹的最后一級節(jié)點,在搜索中如果遇到樹的分叉,則可以根據(jù)預(yù)先設(shè)置的原則先搜索左分支,或先搜索右分支。以先搜索左分支為例,,再搜索左支子節(jié)點的左支子節(jié)點,直到到達樹的最后一級節(jié)點,然后,返回該最后一級節(jié)點的父節(jié)點,判斷該父節(jié)點是否有右支子節(jié)點,如果有,則繼續(xù)搜索該右支子節(jié)點,再搜索該右支子節(jié)點的左支子節(jié)點,直到到達樹的最后一級節(jié)點;否則,返回再上一級節(jié)點;如此類推,直到遍歷了由該根節(jié)點出發(fā)的所有路徑,至此,針對該根節(jié)點的路徑搜索結(jié)束。在所述步驟bl中,針對路徑搜索過程中的每一個當(dāng)前搜索節(jié)點,都進行該節(jié)點是否為W的判斷,如果是,則確定找到一條當(dāng)前EP到該VP之間的執(zhí)行路徑。所述步驟bl中,當(dāng)前搜索節(jié)點中出現(xiàn)的中間PEV可以通過數(shù)據(jù)流分析(dataflowanalysis)確定。此外,為了增加PEV分析的有效性,還可以在數(shù)據(jù)流分析的基礎(chǔ)上輔以控制流分析(controlflowanalysis)。數(shù)據(jù)流分析和控制流分析可以在搜索到每一個節(jié)點時進行。其中,數(shù)據(jù)流分析是指對于變量的定義和使用進行分析。例如,當(dāng)一個變量為PEV,可以理解為該變量會被污染,將該PEV拷貝或賦值給另一個變量時,則另一個變量也會被污染,成為另一個PEV,這個分析過程就是數(shù)據(jù)流分析。而當(dāng)程序在將一個變量拷貝或賦值給另一個變量之前,進行了合法性檢査,例如判斷第一個變量的長度是否超過合法的長度,變量的取值中是否包括非法字符(例如"/"),如果判斷為是,則不執(zhí)行拷貝或賦值操作,或在進行相應(yīng)處理后再進行拷貝或賦值操作,那么,即使有拷貝或賦值語句,第二個變量也不會被污染。這種判斷程序中是否有合法性檢查語句的分析過程就屬于控制流分析的一種分析方式。步驟104:根據(jù)檢測到的PVEP,生成測試用例,并上報給測試人員。在實際中,如果一條PVEP的執(zhí)行過程比較簡單,可以直接采用測試輸入和測試條件表示時,將測試輸入和測試條件作為測試腳本內(nèi)容并上報。其中,測試輸入為用戶、測試環(huán)境或網(wǎng)絡(luò)輸入的參數(shù)值;測試條件是令該PVEP上的VP能夠被EP控制的條件信息。當(dāng)PVEP的執(zhí)行過程比較復(fù)雜,因而測試PVEP的測試輸入和測試條件不能簡單地確定,而需要人工設(shè)置時,可以將PVEP的路徑描述記載在測試報告中并輸出給測試人員,由測試人員根據(jù)測試報告進行后續(xù)測試。PVEP的路徑描述可以為該條執(zhí)行路徑上的各節(jié)點所記錄的程序語句的行號,描述方式可以是表格方式,也可以是堆棧方式。下面,舉實例對PVEP的執(zhí)行過程比較簡單,可以生成測試腳本的情況進行描述。首先,舉一個采用測試輸入作為測試腳本的實例1。實例1中,VP中的風(fēng)險參數(shù)是EP中的可操縱參數(shù),實例1中待檢測軟件程序的C語言源代碼如下voidmain()charstr[100];scanf("%s,,,str);system(str);CC1讀取該待檢測軟件的源代碼后,生成AST。其中,節(jié)點scanf()為EP,其輸入?yún)?shù)str為可操縱參數(shù),即變量str為初始PEV;system()為VP,其輸入?yún)?shù)str為風(fēng)險參數(shù)。由于變量str為初始PEV,因此從scanf("%s",str)到system(str)之間的執(zhí)行路徑為PVEP。通過對該PVEP的分析可以發(fā)現(xiàn),此PVEP直接由用戶輸入str,未做任何檢查就當(dāng)作操作系統(tǒng)命令執(zhí)行,將會導(dǎo)致代碼注入漏洞。因此,可以令stF"cat/etc/password",那么當(dāng)沿該PVEP執(zhí)行時,會顯示保存在/etc路徑下的password文件,即系統(tǒng)用戶名文件。由于當(dāng)黑客攻擊系統(tǒng)時,首先需要獲取系統(tǒng)中合法用戶的名單,然后黑客才可能破解這些用戶的口令,所以保存合法用戶名單的用戶名文件是敏感信息,因此本實例將str="cat/etc/password"作為測試腳本的內(nèi)容。該str二"cat/etc/password"為測試輸入。根據(jù)PVEP的檢測結(jié)果,測試人員可以對軟件源代碼進行完善,例如可以在system(str)函數(shù)調(diào)用之前增加判斷語句,判斷str的值是否為安全值,例如規(guī)定str不能是被禁止訪問的路徑名cat/etc/password;如果str值安全,則執(zhí)行system(str);否則,不執(zhí)行system(str)。然后重新采用上述測試腳本,對修改后的軟件源代碼進行測試,如果不再顯示系統(tǒng)的用戶名文件,則證明原有的安全漏洞被成功彌補??梢?,生成測試腳本可以實現(xiàn)自動的軟件測試,減輕測試人員的負擔(dān),提高測試和效率。再舉一個采用測試輸入作為測試腳本的實例2。實例2中,VP中的風(fēng)險參數(shù)并不是EP中的可操縱參數(shù),但是VP中的風(fēng)險參數(shù)受到EP中的可操縱參數(shù)的污染,實例3的C語言源代碼為如下形式voidmain()charstr[100],*A;scanf("%s",str);A=str;system(A);其中,scanf()為EP,其輸入?yún)?shù)str為可操縱參數(shù),即變量str為初始PEV;system()為VP,其輸入?yún)?shù)A為風(fēng)險參數(shù)。由于A被str賦值,則A是中間PEV,因此,從scanf("。/。s",str)到system(str)之間的執(zhí)行路徑為PVEP??梢?,當(dāng)用戶為str賦值"cat/etc/password"時,將顯示保存在/etc路徑下的password文件。因此,步驟105生成的測試腳本為str="cat/etc/password",該str="cat/etc/password"為測試輸入。再舉一個采用測試輸入和測試條件作為測試腳本的實例3。實例3中,C語言源代碼為如下形式-voidmainOcharstr[,;intX;scanf("%d%s",&X,str);if(X>0)thensystem(str);elsereturn^在實例3中,只有X大于零時,才會執(zhí)行到system(str),那么,本實例中生成的測試腳本可以為str="cat/etc/password",X=l。其中,str="cat/etc/password"為測試輸入,X=l為測試條件。至此,本流程結(jié)束。以下結(jié)合圖2對圖1示出的實施例進行詳細描述。如圖2所示,該方法包括步驟201:打開EP配置文件和VP配置文件,讀取文件中的EP和VP。步驟202:讀取并分析源代碼,建立AST;識別AST中所有出現(xiàn)的EP和VP,并標記在AST中。本步驟中分析源代碼并建立AST的操作是已知技術(shù)手段,可以采用GCC中的前端編譯器CC1完成,這里就不再詳述。但是,所述識別AST中所有出現(xiàn)的EP和VP,并標記在AST中的步驟是現(xiàn)有CC1不能完成的,需要對CC1進行修改,添加用于識別EP和VP的功能。本步驟中,將識別出的EP和VP標記在AST的具體方式為在建立AST過程中,根據(jù)EP配置文件査找AST上的節(jié)點是否為EP,在EP的節(jié)點描述中將EP屬性賦值為1,將VP屬性賦值為0,表示該節(jié)點只為EP;根據(jù)VP配置文件查找AST上的節(jié)點是否為VP,在VP的節(jié)點描述中將VP屬性賦值為l,將EP屬性賦值為O,表示該節(jié)點為只是VP。如果一個節(jié)點同時為EP和VP,則在該節(jié)點的節(jié)點描述中將EP屬性和VP屬性同時賦值為1。當(dāng)然,也可以采用將AST上的EP和VP記錄于表格的方式實現(xiàn)EP和VP的記錄。本實施例中,CC1在分析源代碼之前,必須讀取源代碼并轉(zhuǎn)換為編譯器能夠識別的語言。通常,當(dāng)源代碼為采用諸如C/C++,PASCAL,JAVA等高級程序語言編寫的程序代碼時,CC1可以直接讀取,并完成轉(zhuǎn)換。但是,在實際中難于獲取程序的源代碼時,本實施例中的CC1可以將可執(zhí)行程序(ExecutableSoftware)反編譯成匯編語言,此時CC1可以讀取匯編語言編寫的程序代碼,并完成轉(zhuǎn)換。無論是高級語言還是匯編語言都是具有數(shù)據(jù)結(jié)構(gòu)的編程語言,編譯器能夠識別這些編程語言并轉(zhuǎn)換為內(nèi)部表述,是利用用戶輸入的配置文件實現(xiàn)的。每種語言都具有各自的配置文件,配置文件中記載了語言的數(shù)據(jù)結(jié)構(gòu),是編譯器進行轉(zhuǎn)換的依據(jù)。這些數(shù)據(jù)結(jié)構(gòu)是按詞法分析器(LEX)和語法分析器(YACC)的定義來描述的,這樣LEX就可以解析該語言的詞法,而YACC則可以解析該語言的語法。步驟203:選擇AST中的一個被標記為EP的節(jié)點作為當(dāng)前EP。步驟204:記錄當(dāng)前EP的位置信息;將當(dāng)前EP的可操縱參數(shù)確定為初始PEV,并記錄在本輪路徑搜索的PEV檢查列表中,然后從當(dāng)前EP開始進行搜索,將搜索到的下一個節(jié)點作為當(dāng)前搜索節(jié)點。本步驟中,將當(dāng)前EP所描述的程序語句在源代碼中的行號入棧,以記錄當(dāng)前EP的位置信息。每次從一個EP開始新一輪的路徑搜索時,都建立新的PEV檢查列表。步驟205:記錄當(dāng)前搜索節(jié)點的位置信息,確定當(dāng)前搜索節(jié)點中出現(xiàn)的中間PEV,并記錄在本輪路徑搜索的PEV檢查列表中。本步驟中,將當(dāng)前搜索節(jié)點所描述的程序語句在源代碼中的行號入棧,并采用前述步驟103中描述的PEV確定方式確定當(dāng)前搜索節(jié)點中出現(xiàn)的中間PEV。需要說明的是,在記錄PEV時,還可以進一步考慮PEV的作用域,PEV的作用域是指PEV將會污染的節(jié)點的集合。PEV的作用域可以直接采用PEV所在節(jié)點的作用域。其中,前端編譯器CC1獲取節(jié)點作用域為已知技術(shù)手段,其基本的工作方式如下首先,獲取一個節(jié)點的有效范圍(Scope)屬性值,如果Scope的屬性值為GLOBAL,則該節(jié)點為全局節(jié)點,從該節(jié)點獲取的PEV為全局變量,該PEV的作用域為AST中的所有節(jié)點。如果Scope的值為LOCAL,則該節(jié)點為局部節(jié)點,從該節(jié)點獲取的PEV為局部變量,那么,該PEV的作用域就為AST中與其所在節(jié)點具有相同父節(jié)點的所有同級(兄弟)節(jié)點;如果其中存在一個同級節(jié)點所描述的程序語句為一函數(shù),則該PEV的作用域不包括該同級節(jié)點的子節(jié)點;而對于其他情況,如一個同級節(jié)點所描述的程序語句為表達式等,則該PEV的作用域包括該同級節(jié)點的子節(jié)點。因此本步驟205在記錄PEV時,可以先判斷PEV檢査列表中的已有PEV的作用域是否包括當(dāng)前搜索節(jié)點,并將作用域不包括當(dāng)前搜索節(jié)點的PEV從PEV檢查列表中刪除??梢岳斫?,由于被刪除的PEV不會污染本輪路徑搜索中的后續(xù)搜索節(jié)點中的變量,因而在后續(xù)確定PEV的操作中不需再考慮這些被刪除的PEV。下面舉一個例子對PEV的作用域及其在記錄PEV時的作用進行描述。圖3為一種AST的結(jié)構(gòu)示意圖。如圖3所示,圖中的圓形表示節(jié)點,圓形中的N為節(jié)點(Node)的英文縮寫,圓形中的數(shù)字為節(jié)點編號,兩個圓形中間的直線表示兩個節(jié)點之間的連接關(guān)系。各節(jié)點及其連接關(guān)系構(gòu)成了AST。在圖3示出的該AST中,Nl為根節(jié)點且為EP,N2為Nl的左支子節(jié)點,N5為Nl的右支子節(jié)點,N3和N4為N2的子節(jié)點,N6為N5的子節(jié)點。在分析N3時,確定了PEV2,由于N3的有效范圍為與其具有相同父節(jié)點的同級子節(jié)點,即N2的子節(jié)點N4,那么當(dāng)分析N4時,由于PEV2的作用域包括N4,因此如果N4中的變量被PEV2污染,則該變量為N4中出現(xiàn)的中間PEV。'但是,當(dāng)N2及其子節(jié)點分析完了,需要分析N5的時候,由于PEV2的作用域不包括N5,此時,可以從PEV檢查列表中刪除PEV2,然后再根據(jù)PEV檢查列表中的PEV確定N5中是否出現(xiàn)中間PEV。步驟206:判斷當(dāng)前搜索節(jié)點是否為VP,如果是,則執(zhí)行步驟207;否則,執(zhí)行步驟209。本步驟中,判斷當(dāng)前搜索節(jié)點的VP屬性是否為1,如果是,則判定當(dāng)前處理節(jié)點為VP,執(zhí)行步驟207。步驟207:判斷所述VP的風(fēng)險參數(shù)是否為PEV檢查列表中的PEV,如果是,則執(zhí)行步驟208,否則,執(zhí)行步驟209。本實施例中,在對當(dāng)前搜索節(jié)點進行分析時,先將當(dāng)前搜索節(jié)點中出現(xiàn)的中間PEV記錄在PEV檢查列表中,再判斷當(dāng)前搜索節(jié)點是否為VP,如果是,然后判斷該VP的風(fēng)險參數(shù)是否為PEV檢査列表中的PEV。在實施中,也可以先判斷當(dāng)前搜索節(jié)點是否為VP,如果是,再判斷該VP中的風(fēng)險參數(shù)是否受到PEV檢查列表中的PEV的污染,如果是,則將VP中受到污染的風(fēng)險參數(shù)添加到PEV檢查列表中,并執(zhí)行步驟208。步驟208:將當(dāng)前EP到所述VP之間的路徑確定為PVEP,根據(jù)PVEP生成測試用例上報給測試人員??梢?,確定AST中的PVEP有兩個條件,其一是當(dāng)前搜索節(jié)點為一個VP,其二是該節(jié)點的風(fēng)險參數(shù)為PEV。步驟209:判斷當(dāng)前搜索節(jié)點是否為本輪路徑搜索中的最后一個節(jié)點,如果是,則執(zhí)行步驟210;否則,執(zhí)行步驟212。步驟210:判斷是否遍歷了AST上的所有EP,如果是,則結(jié)束本流程;否則,執(zhí)行步驟211。步驟211:選擇AST中下一個被標記為EP的節(jié)點,作為當(dāng)前EP,返回執(zhí)行步驟204。步驟212:將本輪路徑搜索中的下一個節(jié)點作為當(dāng)前搜索節(jié)點,返回執(zhí)行步驟205。步驟212中,下一個節(jié)點根據(jù)預(yù)定的搜索算法確定。至此,本流程結(jié)束。為了實現(xiàn)上述實施例描述的軟件安全漏洞檢測方法,本發(fā)明實施例還提供了一種軟件安全漏洞的檢測裝置。圖4為本發(fā)明實施例中軟件安全漏洞檢測裝置的結(jié)構(gòu)示意圖。如圖4所示,該裝置包括源代碼處理單元l、路徑分析單元2和安全測試用例生成單元3。以下分別對各組成模塊進行詳細描述。首先,源代碼處理單元l,用于建立待檢測軟件的源代碼對應(yīng)的AST,根據(jù)預(yù)先定義的EP和VP,確定所建立的AST的各節(jié)點中的EP和VP。圖5為圖4中源代碼處理單元1的結(jié)構(gòu)示意圖。如圖5所示,該源代碼處理單元l可以具體包括配置模塊ll、分析模塊12,節(jié)點類型定位模塊13和AST記錄模塊14。其中,配置模塊ll,用于記錄預(yù)先定義的EP和VP。具體地,可以存儲EP配置文件和VP配置文件,配置文件的具體格式前面已經(jīng)具體描述。分析模塊12,用于對待檢測軟件的源代碼進行詞法、語法和語義分析,建立AST。節(jié)點類型定位模塊13,用于根據(jù)配置模塊11中記錄的預(yù)先定義的EP和VP,確定分析模塊12建立的AST的各節(jié)點中的EP和VP,并將所述AST以及所確定的EP和VP記錄在AST記錄模塊14中。AST記錄模塊14,用于記錄AST以及該AST上的EP和VP,并提供給路徑分析單元2。具體地,可以保存AST和該AST中的EP和VP的表格,或者保存具有EP和VP標記的AST。源代碼處理單元1還可以進一步包括反編譯單元15,用于將可執(zhí)行程序代碼反編譯為匯編語言編寫的源代碼,發(fā)送給分析模塊12。如果源代碼為高級編程語言編寫的程序代碼,則可以直接由分析模塊12讀取。所述檢測裝置中的路徑分析單元2,用于在源代碼處理單元1確定的AST的各節(jié)點中,確定EP到VP之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的VP能夠被所述執(zhí)行路徑上的EP控制,則將所述執(zhí)行路徑確定為可能導(dǎo)致安全漏洞的PVEP。圖6示出了圖4中路徑分析單元2的結(jié)構(gòu)示意圖。如圖6所示,該路徑分析單元2中可以具體包括執(zhí)行路徑定位模塊21和漏洞定位模塊22。其中,執(zhí)行路徑定位模塊21,用于采用預(yù)設(shè)搜索算法遍歷AST中的各節(jié)點,搜索各EP到VP之間的執(zhí)行路徑,將搜索到執(zhí)行路徑通知給漏洞定位模塊22。其中,預(yù)設(shè)搜索算法如前所述可以為深度優(yōu)先搜索算法。漏洞定位模塊22,用于在接收到執(zhí)行路徑定位模塊21的上述通知后,確定所述執(zhí)行路徑上的VP是否能夠被所述執(zhí)行路徑上的EP控制,如果是,則將所述執(zhí)行路徑確定為PVEP。在預(yù)先定義的EP和VP中包括了可操縱參數(shù)和風(fēng)險參數(shù)時,執(zhí)行路徑定位模塊21還用于在搜索執(zhí)行路徑時,以各EP中的可操縱參數(shù)為初始PEV,確定所述執(zhí)行路徑上被所述初始PEV污染的中間PEV,并將所確定的初始PEV和中間PEV發(fā)送給漏洞定位模塊22。其中,確定中間PEV的方式如前所述可以采用數(shù)據(jù)流分析方式,或者釆用數(shù)據(jù)流分析與控制流分析相結(jié)合的方式。相應(yīng)的,漏洞定位模塊22則具體用于在接收到執(zhí)行路徑定位模塊21的上述通知、初始PEV和中間PEV后,確定所述執(zhí)行路徑上的VP中的風(fēng)險參數(shù)是否為所述初始PEV或中間PEV,如果是,則將所述執(zhí)行路徑確定為PVEP。具體地,該漏洞定位模塊22可以包括判斷子模塊61和定位子模塊62。其中,判斷子模塊61,用于接收執(zhí)行路徑定位模塊21發(fā)來的所述通知、初始PEV和中間PEV,確定執(zhí)行路徑定位模塊21搜索到的執(zhí)行路徑上的VP中的風(fēng)險參數(shù)是否為所述初始PEV或中間PEV,將判斷結(jié)果發(fā)送給定位子模塊62。定位子模塊62,用于在接收到的所述判斷結(jié)果為是時,將執(zhí)行路徑定位模塊21搜索到的執(zhí)行路徑確定為PVEP。所述檢測裝置中的安全測試用例生成單元3,用于根據(jù)接收自執(zhí)行路徑分析單元2的PVEP生成測試用例。具體地,該安全測試用例生成單元3可以判斷所接收的EPVP是否可以采用測試輸入和測試條件表示,如果是,則根據(jù)測試輸入和測試條件生成測試腳本,并上報給測試人員;否則,則將EPVP的路徑記載在測試報告中上報給測試人員。由以上所述可見,本發(fā)明檢測安全漏洞的基礎(chǔ)是對源代碼進行分析,而且分析并不局限于靜態(tài)的詞法和語法分析,還包括語義分析,以及能夠模擬軟件執(zhí)行過程的執(zhí)行路徑分析,因此能夠有效的檢測到各種潛在風(fēng)險執(zhí)行路徑,從而有效地檢測出存在于軟件源代碼中的安全漏洞。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。權(quán)利要求1、一種軟件源代碼安全漏洞的檢測方法,其特征在于,該方法包括建立待檢測軟件的源代碼對應(yīng)的抽象語法樹AST;根據(jù)預(yù)先定義的可操縱點和風(fēng)險點,確定所建立的AST的各節(jié)點中的可操縱點和風(fēng)險點;搜索所述AST中的可操縱點到風(fēng)險點之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制,則將所述執(zhí)行路徑確定為可能導(dǎo)致安全漏洞的潛在風(fēng)險執(zhí)行路徑。2、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述可操縱點為輸入類函數(shù);所述風(fēng)險點為執(zhí)行類函數(shù)和/或賦值語句。3、根據(jù)權(quán)利要求2所述的方法,其特征在于,進一步預(yù)先定義可操縱點中的可操縱參數(shù)和風(fēng)險點中的風(fēng)險參數(shù)。4、根據(jù)權(quán)利要求3所述的方法,其特征在于,確定所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制的方式為如果所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)被所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)污染,則確定所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制。5、根據(jù)權(quán)利要求4所述的方法,其特征在于,確定所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)被所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)污染的方式為將所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)作為初始潛在可操縱變量PEV;確定所述執(zhí)行路徑上被所述初始PEV污染的中間PEV;判斷所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)是否是所述初始PEV或中間PEV,如果是,則判定所述執(zhí)行路徑上的風(fēng)險點中的風(fēng)險參數(shù)被所述執(zhí)行路徑上的可操縱點中的可操縱參數(shù)污染。6、根據(jù)權(quán)利要求5所述的方法,其特征在于,獲取所述執(zhí)行路徑上被所述初始PEV污染的中間PEV的方式為數(shù)據(jù)流分析方式。7、根據(jù)權(quán)利要求6所述的方法,其特征在于,獲取所述執(zhí)行路徑上被所述初始PEV污染的中間PEV的方式進一步包括控制流分析方式。8、根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進一步包括根據(jù)所確定的潛在風(fēng)險執(zhí)行路徑生成測試報告。9、根據(jù)權(quán)利要求8所述的方法,其特征在于,所述根據(jù)所確定的潛在風(fēng)險執(zhí)行路徑生成測試報告包括如果所述潛在風(fēng)險執(zhí)行路徑能夠直接用測試輸入和測試條件表示,則根據(jù)所述測試輸入和測試條件生成測試腳本,否則,生成記載所述潛在風(fēng)險執(zhí)行路徑的測試報告。10、根據(jù)上述任一權(quán)利要求所述的方法,其特征在于,所述待檢測軟件的源代碼為高級編程語言源代碼,或者為將可執(zhí)行程序代碼進行反編譯而得到的匯編語言源代碼。11、一種軟件源代碼安全漏洞的檢測裝置,其特征在于,該裝置包括源代碼處理單元(1)和路徑分析單元(2);所述源代碼處理單元(1),用于建立待檢測軟件的源代碼對應(yīng)的AST,根據(jù)預(yù)先定義的可操縱點和風(fēng)險點,確定所建立的AST的各節(jié)點中的可操縱點和風(fēng)險點;所述路徑分析單元(2),用于在所述源代碼處理單元(1)確定的AST的各節(jié)點中,確定可操縱點到風(fēng)險點之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制,則將所述執(zhí)行路徑確定為可能導(dǎo)致安全漏洞的潛在風(fēng)險執(zhí)行路徑。12、根據(jù)權(quán)利要求11所述的檢測裝置,其特征在于,所述源代碼處理單元(1)包括配置模塊(11)、分析模塊(12),節(jié)點類型定位模塊(13)和AST記錄模塊(14);所述配置模塊(11),用于記錄預(yù)先定義的可操縱點和風(fēng)險點;所述分析模塊(12),用于對待檢測軟件的源代碼進行詞法、語法和語義分析,建立AST;所述節(jié)點類型定位模塊(13),用于根據(jù)所述配置模塊(11)中記錄的預(yù)先定義的可操縱點和風(fēng)險點,確定所述分析模塊(12)建立的AST的各節(jié)點中的可操縱點和風(fēng)險點,并將所述AST以及所確定的可操縱點和風(fēng)險點記錄在AST記錄模塊(14)中;所述AST記錄模塊(14),用于記錄所述AST以及所確定的可操縱點和風(fēng)險點,并提供給所述路徑分析單元(2)。13、根據(jù)權(quán)利要求12所述的檢測裝置,其特征在于,所述源代碼處理單元(1)進一步包括反編譯模塊(15),用于將可執(zhí)行程序代碼反編譯為匯編語言源代碼,并發(fā)送給所述分析模塊(12)。14、根據(jù)權(quán)利要求11所述的檢測裝置,其特征在于,所述路徑分析單元(2)包括執(zhí)行路徑定位模塊(21)和漏洞定位模塊(22);所述執(zhí)行路徑定位模塊(21),用于在所述AST中搜索可操縱點到風(fēng)險點之間的執(zhí)行路徑,并將搜索到執(zhí)行路徑通知給所述漏洞定位模塊(22);所述漏洞定位模塊(22),用于在接收到所述執(zhí)行路徑定位模塊(21)的通知后,確定所述執(zhí)行路徑上的風(fēng)險點是否能夠被所述執(zhí)行路徑上的可操縱點控制,如果是,則將所述執(zhí)行路徑確定為潛在風(fēng)險執(zhí)行路徑。15、根據(jù)權(quán)利要求11所述的檢測裝置,其特征在于,該裝置進一步包括安全測試用例生成單元(3),用于根據(jù)所述路徑分析單元(2)確定的潛在風(fēng)險執(zhí)行路徑生成測試報告。全文摘要本發(fā)明公開了一種軟件源代碼安全漏洞的檢測方法,該方法包括建立待檢測軟件的源代碼對應(yīng)的抽象語法樹AST;根據(jù)預(yù)先定義的可操縱點和風(fēng)險點,確定所建立的AST的各節(jié)點中的可操縱點和風(fēng)險點;搜索所述AST中的可操縱點到風(fēng)險點之間的執(zhí)行路徑,如果所述執(zhí)行路徑上的風(fēng)險點能夠被所述執(zhí)行路徑上的可操縱點控制,則將所述執(zhí)行路徑確定為可能導(dǎo)致安全漏洞的潛在風(fēng)險執(zhí)行路徑。本發(fā)明還公開了一種軟件安全漏洞的檢測裝置。使用本發(fā)明能夠有效地檢測出存在于軟件源代碼中的安全漏洞。文檔編號G06F21/00GK101661543SQ20081014695公開日2010年3月3日申請日期2008年8月28日優(yōu)先權(quán)日2008年8月28日發(fā)明者文唐申請人:西門子(中國)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1