專利名稱:一種基于檢測對象的軟件漏洞模型檢測方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機軟件的檢測方法,尤其是一種軟件漏洞模型檢測方法。
背景技術(shù):
軟件因存在著隱藏的安全漏洞易于受到攻擊而遭受損失,其安全威脅有不斷增加 的趨勢。通過對軟件代碼進行漏洞檢測,發(fā)現(xiàn)和消除軟件安全漏洞是減少安全威脅、降低安 全風險的重要手段之一。漏洞模型檢測是一種具有代表性的代碼漏洞檢測方法。我們提 出一種基于檢測對象的漏洞模型檢測方法,以供對軟件代碼中可能存在的漏洞進行自動檢 測。目前的漏洞模型軟件漏洞檢測方法在檢測過程中存在著重復檢查、不夠準確等缺 點,檢測的速度和準確性顯得不足,影響著檢測方法的適用性。因此,我們提出一種具有較 高檢測精度和速度的檢測方法,該方法并不采用原有的模擬程序執(zhí)行流程的檢測順序,而 是只檢測與漏洞模型相關(guān)的程序操作特征,注重對重點參數(shù)的檢測,以提高軟件漏洞檢測 的速度和準確性。
發(fā)明內(nèi)容
針對目前軟件漏洞檢測方法存在大量重復工作、影響檢測速度、準確性不高的問 題,本發(fā)明提供一種基于漏洞模型的軟件漏洞模型檢測方法?;谲浖┒吹臓顟B(tài)機模型, 以重點檢測對象為中心,對軟件代碼進行抽象建模,只對與漏洞狀態(tài)相關(guān)的程序操作序列 進行漏洞靜態(tài)檢測,判斷漏洞模型在代碼中的存在性。為實現(xiàn)本發(fā)明的所述目的,本發(fā)明提供一種基于檢測對象的軟件漏洞模型檢測方 法,方法主要步驟包括
1)漏洞載入流程,建立漏洞模型的數(shù)據(jù)結(jié)構(gòu);
漏洞模型由漏洞狀態(tài)機的狀態(tài)的集合和操作的集合構(gòu)成,狀態(tài)表示狀態(tài)機的狀態(tài)。每 個狀態(tài)有狀態(tài)號、類型和特征等屬性。類型是指漏洞的分類,如文件、內(nèi)存等類別。特征有 開始、過渡和漏洞等值。操作表示引起狀態(tài)發(fā)生變化的動作,每個操作具有操作號、動作、特 征、檢測對象指示、原狀態(tài)和新狀態(tài)等屬性。操作的動作指具體的程序動作。操作的特征有 產(chǎn)生、轉(zhuǎn)移、使用等值。檢測對象為程序中漏洞相關(guān)操作所涉及的需檢測的變量,檢測對象 指示為操作涉及的參數(shù)編號。狀態(tài)、操作的集合分別存儲在數(shù)據(jù)庫中的一個表中狀態(tài)表和 操作表。為方便模型檢測處理,在內(nèi)存中建立由操作動作進行檢索的操作轉(zhuǎn)換表。每個操 作動作對應一個鏈表,鏈表的結(jié)點為一個操作,表示一個原狀態(tài)到新狀態(tài)的轉(zhuǎn)換關(guān)系。具體 步驟如下。步驟20是起始狀態(tài)。步驟21在數(shù)據(jù)庫操作表中取一個操作的記錄。步驟22若取 到轉(zhuǎn)步驟23,否則轉(zhuǎn)步驟26。步驟23判斷取得該操作動作的操作轉(zhuǎn)換表表頭是否已存在。 若已存在轉(zhuǎn)步驟24,否則轉(zhuǎn)步驟25。步驟24創(chuàng)建一個操作結(jié)點,結(jié)點的操作號、特征、檢測 對象指示、原狀態(tài)和新狀態(tài)分別為該操作的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài)。把此結(jié)點連接到對應的操作動作操作轉(zhuǎn)換表的鏈表尾部,轉(zhuǎn)步驟21。步驟25創(chuàng)建該操作動 作的操作轉(zhuǎn)換表表頭,創(chuàng)建一個操作結(jié)點,結(jié)點的操作號、特征、檢測對象指示、原狀態(tài)和新 狀態(tài)分別為該操作的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài)。把此結(jié)點作為該操作 動作的第一個結(jié)點,轉(zhuǎn)步驟21。步驟26為結(jié)束狀態(tài),操作轉(zhuǎn)換表建立完成。通過對程序抽象提取處理,過濾去處無關(guān)的操作,提取了與漏洞模型相關(guān)的操作 序列。程序特征鏈表以函數(shù)為單位進行組織,每個函數(shù)對應若干個與檢測對象相關(guān)的操作 序列鏈表,鏈表的每個結(jié)點為一個與漏洞狀態(tài)相關(guān)的操作或函數(shù)。函數(shù)的檢測對象包括輸 入檢測對象和本地檢測對象兩類。程序特征載入時,將磁盤中程序特征鏈表裝入內(nèi)存,包括 輸入檢測對象集合和本地檢測對象集合及其操作序列鏈表。2)模型檢測處理流程,以函數(shù)為單位進行模型檢測工作,并報告漏洞的存在,步驟 30:起始狀態(tài);步驟31初始化設(shè)置所有函數(shù)的訪問標記為OFF (值為0);取main的檢測 對象集合為函數(shù)檢測對象集合。步驟32從函數(shù)檢測對象集合中,取一個檢測對象。步驟33 判斷是否取到。若取到則轉(zhuǎn)步驟34,否則轉(zhuǎn)步驟36。步驟34設(shè)置輸入狀態(tài)為開始,檢測函 數(shù)為main函數(shù),輸入檢測對象為取得的檢測對象。步驟35對檢測函數(shù)進行程序操作序列 分析,處理流程見圖4;轉(zhuǎn)步驟32。步驟36為結(jié)束狀態(tài)。圖4為函數(shù)程序操作序列分析流程,表示針對檢測對象進行函數(shù)程序序列分析的 過程,具體步驟如下。步驟40是起始狀態(tài)。步驟41判斷檢測函數(shù)的訪問標記為ON(值為 1)。是則轉(zhuǎn)步驟41d,否則轉(zhuǎn)步驟41a。步驟41a置檢測階段為本地。步驟41b從檢測函數(shù) 的本地檢測對象集合中,取一個檢測對象。步驟41c判斷是否取到檢測對象。若取到則轉(zhuǎn) 步驟41e,否則轉(zhuǎn)步驟41d。步驟41d置檢測階段為輸入,置檢測函數(shù)的訪問標記為ON(值 為1)。置檢測對象為輸入檢測對象,輸入狀態(tài)為當前狀態(tài)。轉(zhuǎn)步驟42。步驟41e置輸入狀 態(tài)為開始。轉(zhuǎn)步驟42。步驟42從檢測對象的操作序列中,取一個操作結(jié)點。步驟43判斷 是否取到。若取到,轉(zhuǎn)步驟44,否則轉(zhuǎn)步驟4f。步驟44判斷該語句操作是否在漏洞狀態(tài)機 操作集合中。是則轉(zhuǎn)步驟45,否則轉(zhuǎn)步驟46。步驟45操作狀態(tài)轉(zhuǎn)換計算,處理流程見圖5, 得到轉(zhuǎn)換狀態(tài)。置當前狀態(tài)為轉(zhuǎn)換狀態(tài)。轉(zhuǎn)步驟4c。步驟46判斷該語句操作是否函數(shù)調(diào) 用。是則轉(zhuǎn)步驟47,否則轉(zhuǎn)步驟4c。步驟47順序取每個函數(shù)調(diào)用參數(shù)。步驟48判斷是否 取到。若取到,轉(zhuǎn)步驟49,沒取到則轉(zhuǎn)步驟42。步驟49判斷所取的函數(shù)調(diào)用參數(shù)是否為檢 測對象。是則轉(zhuǎn)步驟4a,否則轉(zhuǎn)步驟47。步驟4a設(shè)置當前狀態(tài)為輸入狀態(tài)、檢測函數(shù)為被 調(diào)用函數(shù)、輸入檢測對象為現(xiàn)檢測對象。進行函數(shù)程序操作序列分析,處理流程見圖4。置 當前狀態(tài)為函數(shù)結(jié)果狀態(tài)。步驟4c判斷當前狀態(tài)是否漏洞狀態(tài)。是則轉(zhuǎn)步驟4d,否則轉(zhuǎn) 步驟42。步驟4d漏洞報警,轉(zhuǎn)步驟42。步驟4f操作序列分析結(jié)束處理判斷檢測階段是 否為本地。是則轉(zhuǎn)步驟41b,否則轉(zhuǎn)步驟4g。步驟4g置函數(shù)結(jié)果狀態(tài)為當前狀態(tài)。步驟4h 為結(jié)束狀態(tài)。40-4c循環(huán)中步驟43也總會轉(zhuǎn)向步驟4f,跳出循環(huán)。圖5所示為操作的狀態(tài)轉(zhuǎn)換處理過程,計算操作后的轉(zhuǎn)換狀態(tài)。步驟50是起始狀 態(tài)。步驟51置次狀態(tài)為空。步驟52在操作轉(zhuǎn)換表中,查找操作動作所對應的操作結(jié)點。步 驟53判斷查到操作結(jié)點否。若得到,轉(zhuǎn)步驟54,否則轉(zhuǎn)步驟56。步驟54判斷操作結(jié)點的 源狀態(tài)是否為當前狀態(tài)。是則轉(zhuǎn)步驟55,否則轉(zhuǎn)步驟52。步驟55置轉(zhuǎn)換狀態(tài)為操作結(jié)點 的新狀態(tài),轉(zhuǎn)步驟57。步驟56數(shù)據(jù)錯誤報警。步驟57為結(jié)束狀態(tài)。本發(fā)明的有益效果是本發(fā)明提供一種基于漏洞模型的軟件漏洞模型檢測方法?;谲浖┒吹臓顟B(tài)機模型,以重點檢測對象為中心,對軟件代碼進行抽象建模,只對與漏 洞狀態(tài)相關(guān)的程序操作序列進行漏洞靜態(tài)檢測,判斷漏洞模型在代碼中的存在性??朔F(xiàn) 有技術(shù)需要大量重復工作、影響檢測速度、準確性不高的問題。
圖1為基于漏洞模型的軟件漏洞模型檢測方法結(jié)構(gòu)示意圖 圖2漏洞載入流程圖
圖3漏洞模型檢測處理流程圖 圖4函數(shù)程序序列分析流程圖 圖5操作狀態(tài)轉(zhuǎn)換處理過程圖。
具體實施例方式本發(fā)明方法工作流程如圖1-圖5所示。圖1所示為本方法實施的整體結(jié)構(gòu)和工作原理。本方法的目的是根據(jù)漏洞模型所 涉及的操作對待檢測程序進行分析檢測,報告發(fā)現(xiàn)的漏洞。為提高處理速度,需要將漏洞模 型從數(shù)據(jù)庫中裝入內(nèi)存,以便分析程序時,作為參考依據(jù)。漏洞模型檢測過程中,以函數(shù)為 單位根據(jù)漏洞相關(guān)操作逐步進行模型檢測工作。漏洞模型檢測工作從主函數(shù)開始進行檢 測,根據(jù)漏洞相關(guān)操作以及逐級函數(shù)的模型檢測結(jié)果,進行狀態(tài)檢測并報告漏洞的存在性。圖2表示漏洞模型載入流程。漏洞模型由漏洞狀態(tài)機的狀態(tài)的集合和操作的集合 構(gòu)成。狀態(tài)表示狀態(tài)機的狀態(tài)。每個狀態(tài)有狀態(tài)號、類型和特征等屬性。類型是指漏洞的 分類,如文件、內(nèi)存等類別。特征有開始、過渡和漏洞等值。操作表示引起狀態(tài)發(fā)生變化的 動作,每個操作具有操作號、動作、特征、檢測對象指示、原狀態(tài)和新狀態(tài)等屬性。操作的動 作指具體的程序動作。操作的特征有產(chǎn)生、轉(zhuǎn)移、使用等值。檢測對象為程序中漏洞相關(guān)操 作所涉及的需檢測的變量,檢測對象指示為操作涉及的參數(shù)編號。狀態(tài)、操作的集合分別存 儲在數(shù)據(jù)庫中的一個表中狀態(tài)表和操作表。為方便模型檢測處理,在內(nèi)存中建立由操作動 作進行檢索的操作轉(zhuǎn)換表。每個操作動作對應一個鏈表,鏈表的結(jié)點為一個操作,表示一個 原狀態(tài)到新狀態(tài)的轉(zhuǎn)換關(guān)系。具體步驟如下。步驟20是起始狀態(tài)。步驟21在數(shù)據(jù)庫操作表中取一個操作的記錄。步驟22若取 到轉(zhuǎn)步驟23,否則轉(zhuǎn)步驟26。步驟23判斷取得該操作動作的操作轉(zhuǎn)換表表頭是否已存在。 若已存在轉(zhuǎn)步驟24,否則轉(zhuǎn)步驟25。步驟24創(chuàng)建一個操作結(jié)點,結(jié)點的操作號、特征、檢測 對象指示、原狀態(tài)和新狀態(tài)分別為該操作的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài)。 把此結(jié)點連接到對應的操作動作操作轉(zhuǎn)換表的鏈表尾部,轉(zhuǎn)步驟21。步驟25創(chuàng)建該操作動 作的操作轉(zhuǎn)換表表頭,創(chuàng)建一個操作結(jié)點,結(jié)點的操作號、特征、檢測對象指示、原狀態(tài)和新 狀態(tài)分別為該操作的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài)。把此結(jié)點作為該操作 動作的第一個結(jié)點,轉(zhuǎn)步驟21。步驟26為結(jié)束狀態(tài),操作轉(zhuǎn)換表建立完成。通過對程序抽象提取處理,過濾去處無關(guān)的操作,提取了與漏洞模型相關(guān)的操作 序列。程序特征鏈表以函數(shù)為單位進行組織,每個函數(shù)對應若干個與檢測對象相關(guān)的操作 序列鏈表,鏈表的每個結(jié)點為一個與漏洞狀態(tài)相關(guān)的操作或函數(shù)。函數(shù)的檢測對象包括輸 入檢測對象和本地檢測對象兩類。程序特征載入時,將磁盤中程序特征鏈表裝入內(nèi)存,包括輸入檢測對象集合和本地檢測對象集合及其操作序列鏈表。圖3表示漏洞模型檢測處理流程,具體步驟如下。步驟30是起始狀態(tài)。步驟31 初始化設(shè)置所有函數(shù)的訪問標記為OFF (值為0);取main的檢測對象集合為函數(shù)檢測 對象集合。步驟32從函數(shù)檢測對象集合中,取一個檢測對象。步驟33判斷是否取到。若 取到則轉(zhuǎn)步驟34,否則轉(zhuǎn)步驟36。步驟34設(shè)置輸入狀態(tài)為開始,檢測函數(shù)為main函數(shù),輸 入檢測對象為取得的檢測對象。步驟35對檢測函數(shù)進行程序操作序列分析,處理流程見圖 4;轉(zhuǎn)步驟32。步驟36為結(jié)束狀態(tài)。圖4為函數(shù)程序操作序列分析流程,表示針對檢測對象進行函數(shù)程序序列分析的 過程,具體步驟如下。步驟40是起始狀態(tài)。步驟41判斷檢測函數(shù)的訪問標記為ON(值為 1)。是則轉(zhuǎn)步驟41d,否則轉(zhuǎn)步驟41a。步驟41a置檢測階段為本地。步驟41b從檢測函數(shù) 的本地檢測對象集合中,取一個檢測對象。步驟41c判斷是否取到檢測對象。若取到則轉(zhuǎn) 步驟41e,否則轉(zhuǎn)步驟41d。步驟41d置檢測階段為輸入,置檢測函數(shù)的訪問標記為ON(值 為1)。置檢測對象為輸入檢測對象,輸入狀態(tài)為當前狀態(tài)。轉(zhuǎn)步驟42。步驟41e置輸入狀 態(tài)為開始。轉(zhuǎn)步驟42。步驟42從檢測對象的操作序列中,取一個操作結(jié)點。步驟43判斷 是否取到。若取到,轉(zhuǎn)步驟44,否則轉(zhuǎn)步驟4f。步驟44判斷該語句操作是否在漏洞狀態(tài)機 操作集合中。是則轉(zhuǎn)步驟45,否則轉(zhuǎn)步驟46。步驟45操作狀態(tài)轉(zhuǎn)換計算,處理流程見圖5, 得到轉(zhuǎn)換狀態(tài)。置當前狀態(tài)為轉(zhuǎn)換狀態(tài)。轉(zhuǎn)步驟4c。步驟46判斷該語句操作是否函數(shù)調(diào) 用。是則轉(zhuǎn)步驟47,否則轉(zhuǎn)步驟4c。步驟47順序取每個函數(shù)調(diào)用參數(shù)。步驟48判斷是否 取到。若取到,轉(zhuǎn)步驟49,沒取到則轉(zhuǎn)步驟42。步驟49判斷所取的函數(shù)調(diào)用參數(shù)是否為檢 測對象。是則轉(zhuǎn)步驟4a,否則轉(zhuǎn)步驟47。步驟4a設(shè)置當前狀態(tài)為輸入狀態(tài)、檢測函數(shù)為被 調(diào)用函數(shù)、輸入檢測對象為現(xiàn)檢測對象。進行函數(shù)程序操作序列分析,處理流程見圖4。置 當前狀態(tài)為函數(shù)結(jié)果狀態(tài)。步驟4c判斷當前狀態(tài)是否漏洞狀態(tài)。是則轉(zhuǎn)步驟4d,否則轉(zhuǎn) 步驟42。步驟4d漏洞報警,轉(zhuǎn)步驟42。步驟4f操作序列分析結(jié)束處理判斷檢測階段是 否為本地。是則轉(zhuǎn)步驟41b,否則轉(zhuǎn)步驟4g。步驟4g置函數(shù)結(jié)果狀態(tài)為當前狀態(tài)。步驟4h 為結(jié)束狀態(tài)。圖5所示為操作的狀態(tài)轉(zhuǎn)換處理過程,計算操作后的轉(zhuǎn)換狀態(tài)。步驟50是起始狀 態(tài)。步驟51置次狀態(tài)為空。步驟52在操作轉(zhuǎn)換表中,查找操作動作所對應的操作結(jié)點。步 驟53判斷查到操作結(jié)點否。若得到,轉(zhuǎn)步驟54,否則轉(zhuǎn)步驟56。步驟54判斷操作結(jié)點的 源狀態(tài)是否為當前狀態(tài)。是則轉(zhuǎn)步驟55,否則轉(zhuǎn)步驟52。步驟55置轉(zhuǎn)換狀態(tài)為操作結(jié)點 的新狀態(tài),轉(zhuǎn)步驟57。步驟56數(shù)據(jù)錯誤報警。步驟57為結(jié)束狀態(tài)。
權(quán)利要求
一種基于檢測對象的軟件漏洞模型檢測方法,其特征是步驟如下1)漏洞載入流程,建立漏洞模型的數(shù)據(jù)結(jié)構(gòu);漏洞模型由漏洞狀態(tài)機的狀態(tài)的集合和操作的集合構(gòu)成,其特征是狀態(tài)表示狀態(tài)機的狀態(tài);每個狀態(tài)有狀態(tài)號、類型和特征屬性;類型是指漏洞的分類,即文件、內(nèi)存類別;特征有開始、過渡和漏洞值;操作表示引起狀態(tài)發(fā)生變化的動作,每個操作具有操作號、動作、特征、檢測對象指示、原狀態(tài)和新狀態(tài)屬性;操作的動作指具體的程序動作;操作的特征有產(chǎn)生、轉(zhuǎn)移、使用值;檢測對象為程序中漏洞相關(guān)操作所涉及的需檢測的變量,檢測對象指示為操作涉及的參數(shù)編號;狀態(tài)、操作的集合分別存儲在數(shù)據(jù)庫中的一個表中狀態(tài)表和操作表;在內(nèi)存中建立由操作動作進行檢索的操作轉(zhuǎn)換表;每個操作動作對應一個鏈表,鏈表的結(jié)點為一個操作,表示一個原狀態(tài)到新狀態(tài)的轉(zhuǎn)換關(guān)系;具體流程如下步驟20起始狀態(tài);步驟21在數(shù)據(jù)庫操作表中取一個操作的記錄;步驟22若取到轉(zhuǎn)步驟23,否則轉(zhuǎn)步驟26;步驟23判斷取得該操作動作的操作轉(zhuǎn)換表表頭是否已存在,若已存在轉(zhuǎn)步驟24,否則轉(zhuǎn)步驟25;步驟24創(chuàng)建一個操作結(jié)點,結(jié)點的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài)分別為該操作的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài),把此結(jié)點連接到對應的操作動作操作轉(zhuǎn)換表的鏈表尾部,并轉(zhuǎn)步驟21;步驟25創(chuàng)建該操作動作的操作轉(zhuǎn)換表表頭,創(chuàng)建一個操作結(jié)點,結(jié)點的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài)分別為該操作的操作號、特征、檢測對象指示、原狀態(tài)和新狀態(tài);把此結(jié)點作為該操作動作的第一個結(jié)點,轉(zhuǎn)步驟21;步驟26為結(jié)束狀態(tài),操作轉(zhuǎn)換表建立完成;提取了與漏洞模型相關(guān)的操作序列;程序特征鏈表以函數(shù)為單位進行組織,每個函數(shù)對應若干個與檢測對象相關(guān)的操作序列鏈表,操作序列鏈表的每個結(jié)點為一個與漏洞狀態(tài)相關(guān)的操作或函數(shù);函數(shù)的檢測對象包括輸入檢測對象和本地檢測對象兩類;程序特征載入時,將磁盤中程序特征鏈表裝入內(nèi)存,包括輸入檢測對象集合和本地檢測對象集合及其操作序列鏈表;2)模型檢測處理流程,以函數(shù)為單位進行模型檢測工作,并報告漏洞的存在,步驟30起始狀態(tài);步驟31初始化,設(shè)置所有函數(shù)的訪問標記為 OFF ,值為0;取main的檢測對象集合為函數(shù)檢測對象集合;步驟32從函數(shù)檢測對象集合中,取一個檢測對象;步驟33判斷是否取到,若取到則轉(zhuǎn)步驟34,否則轉(zhuǎn)步驟36;步驟34設(shè)置輸入狀態(tài)為開始,檢測函數(shù)為main函數(shù),輸入檢測對象為取得的檢測對象;步驟35對檢測函數(shù)進行程序操作序列分析,處理流程見步驟40 4c;轉(zhuǎn)步驟32;步驟36結(jié)束狀態(tài);步驟40起始狀態(tài);步驟41判斷檢測函數(shù)的訪問標記為ON,其值為1,是則轉(zhuǎn)步驟41d,否則轉(zhuǎn)步驟41a;步驟41a置檢測階段為本地;步驟41b從檢測函數(shù)的本地檢測對象集合中,取一個檢測對象;步驟41c判斷是否取到檢測對象,若取到則轉(zhuǎn)步驟41e,否則轉(zhuǎn)步驟41d;步驟41d置檢測階段為輸入,置檢測函數(shù)的訪問標記為 ON,其值為1;置檢測對象為輸入檢測對象,輸入狀態(tài)為當前狀態(tài),轉(zhuǎn)步驟42;步驟41e置輸入狀態(tài)為開始,轉(zhuǎn)步驟42;步驟42從檢測對象的操作序列中,取一個操作結(jié)點;步驟43判斷是否取到,若取到轉(zhuǎn)步驟44,否則轉(zhuǎn)步驟4f;步驟44判斷該語句操作是否在漏洞狀態(tài)機操作集合中,是則轉(zhuǎn)步驟45,否則轉(zhuǎn)步驟46;步驟45操作狀態(tài)轉(zhuǎn)換計算,處理流程見步驟50 57,得到轉(zhuǎn)換狀態(tài),置當前狀態(tài)為轉(zhuǎn)換狀態(tài),轉(zhuǎn)步驟4c;步驟46判斷該語句操作是否函數(shù)調(diào)用,是則轉(zhuǎn)步驟47,否則轉(zhuǎn)步驟4c;步驟47順序取每個函數(shù)調(diào)用參數(shù);步驟48判斷是否取到,若取到,轉(zhuǎn)步驟49,沒取到則轉(zhuǎn)步驟42;步驟49判斷所取的函數(shù)調(diào)用參數(shù)是否為檢測對象,是則轉(zhuǎn)步驟4a,否則轉(zhuǎn)步驟47;步驟4a設(shè)置當前狀態(tài)為輸入狀態(tài)、檢測函數(shù)為被調(diào)用函數(shù)、輸入檢測對象為現(xiàn)檢測對象;進行函數(shù)程序操作序列分析,處理流程見步驟40 4c,置當前狀態(tài)為函數(shù)結(jié)果狀態(tài);步驟4c 判斷當前狀態(tài)是否漏洞狀態(tài),是則轉(zhuǎn)步驟4d,否則轉(zhuǎn)步驟42;步驟4d漏洞報警,轉(zhuǎn)步驟42;步驟4f操作序列分析結(jié)束處理,判斷檢測階段是否為本地,是則轉(zhuǎn)步驟41b,否則轉(zhuǎn)步驟4g;步驟4g置函數(shù)結(jié)果狀態(tài)為當前狀態(tài);步驟4h結(jié)束狀態(tài);步驟50起始狀態(tài);步驟51置次狀態(tài)為空;步驟52在操作轉(zhuǎn)換表中,查找操作動作所對應的操作結(jié)點;步驟53判斷查到操作結(jié)點否,若得到,轉(zhuǎn)步驟54,否則轉(zhuǎn)步驟56;步驟54 判斷操作結(jié)點的源狀態(tài)是否為當前狀態(tài),是則轉(zhuǎn)步驟55,否則轉(zhuǎn)步驟52;步驟55置轉(zhuǎn)換狀態(tài)為操作結(jié)點的新狀態(tài),轉(zhuǎn)步驟57;步驟56數(shù)據(jù)錯誤報警步驟57結(jié)束狀態(tài)。
全文摘要
一種基于檢測對象的軟件漏洞模型檢測方法,步驟包括1)漏洞載入流程,建立漏洞模型的數(shù)據(jù)結(jié)構(gòu);漏洞模型由漏洞狀態(tài)機的狀態(tài)的集合和操作的集合構(gòu)成,狀態(tài)表示狀態(tài)機的狀態(tài),2)漏洞模型檢測處理流程,3)函數(shù)程序操作序列分析流程,表示針對檢測對象進行函數(shù)程序序列分析的過程,4)操作的狀態(tài)轉(zhuǎn)換處理過程,計算操作后的轉(zhuǎn)換狀態(tài)。本發(fā)明提供一種基于漏洞模型的軟件漏洞模型檢測方法?;谲浖┒吹臓顟B(tài)機模型,以重點檢測對象為中心,對軟件代碼進行抽象建模,只對與漏洞狀態(tài)相關(guān)的程序操作序列進行漏洞靜態(tài)檢測,判斷漏洞模型在代碼中的存在性??朔F(xiàn)有技術(shù)需要大量重復工作、影響檢測速度、準確性不高的問題。
文檔編號G06F11/36GK101930401SQ20101028666
公開日2010年12月29日 申請日期2010年9月20日 優(yōu)先權(quán)日2010年9月20日
發(fā)明者曾慶凱 申請人:南京大學