基于代碼語義向量表示和深度學習的軟件漏洞檢測方法
發(fā)布時間:2021-03-09 09:57
近年來,隨著互聯(lián)網(wǎng)時代的不斷發(fā)展和軟件技術的不斷提高,軟件在人類的生活中發(fā)揮著越來越重要的作用,軟件規(guī)模越來越大。同時,由于軟件規(guī)模的不斷擴大,開發(fā)人員的疏忽,導致軟件的質(zhì)量參差不齊,軟件中存在的漏洞也越來越多,嚴重影響了軟件的使用體驗以及軟件的安全性,對人類的生命財產(chǎn)安全產(chǎn)生了極大的威脅,越早檢測出軟件中存在的漏洞,損失就會越小,所以軟件維護人員及時檢測出軟件中的漏洞就顯得尤為重要。采用人工的方式檢測代碼中的漏洞復雜度比較高,同時也費時費力,所以要利用漏洞檢測軟件進行自動化的批量檢測。目前的代碼漏洞檢測方法,誤報率和漏報率比較高,而且檢測粒度比較粗,一般是文件級別的漏洞檢測,所以本文的工作主要有兩個部分:第一個主要部分是從代碼中提取出特征,然后將特征進行表示學習,轉化成向量,第二個主要部分是將特征向量輸入到代碼漏洞檢測模型當中,通過代碼漏洞檢測模型輸出代碼有無漏洞的概率。關鍵和難點是要在代碼中提取出有用的特征,能表現(xiàn)出代碼漏洞的特征,然后將特征轉化成能輸入到代碼漏洞檢測模型當中的向量。這個向量化的方式也很重要,要可以根據(jù)代碼語句的上下文信息學習到代碼token之間的語義信息,另外針對...
【文章來源】:哈爾濱工業(yè)大學黑龍江省 211工程院校 985工程院校
【文章頁數(shù)】:63 頁
【學位級別】:碩士
【部分圖文】:
本文研究內(nèi)容主要流程
哈爾濱工業(yè)大學專業(yè)碩士學位論文-11-樹中節(jié)點類型為標識符定義語句的中間節(jié)點(即IdentifierDeclStatement),然后判斷查找出的中間節(jié)點所對應的語句中是否含有符號“[”或者“]”,如果這些條件都滿足,則將此標識符定義語句作為切片標準的語句S,并且提取語句中定義的參數(shù)變量作為切片標準的V。最后將S和V組合成最終的切片標準(S,V)。對于示例程序,如圖2-2在其對應的抽象語法樹(AST)中匹配到關鍵點,根據(jù)數(shù)組使用作為關鍵點提取的切片標準為(wchar_tsource[100];,[source])。圖2-2匹配數(shù)組使用關鍵點通過分析上述示例,可知在根據(jù)“數(shù)組的使用”關鍵點生成切片標準(S,V)的過程中語句S需要滿足以下兩個條件:(1)語句中包含標識符定義語句(IdentifierDeclStatement);(2)定義語句對應的代碼中包含符號“[”或者“]”,因為數(shù)組定義和使用時都會用到“[”和“]”。然后利用上面的切片標準(S,V)對源程序進行切片,判斷程序依賴圖(PDG)中和切片標準(S,V)存在數(shù)據(jù)依賴和控制依賴關系的語句,分別構成前向切片和后向切片,組合成最終的切片結果。針對圖2-1的示例程序,其對應的程序依賴圖以及切片分析過程如圖2-3。切片標準為(wchar_tsource[100];,[source]),圖中綠色的線代表控制依賴,紅色的線代表可達關系,語句“if(staticTrue)”和切片標準“(wchar_tsource[100];,[source])”之間存在控制依賴,并且“if(staticTrue)”出現(xiàn)在切片標準的前面,對切片標準對應的有影響,所以將其作為針對切片標準的后向切片的一部分。語句“Source[100-1]=L’\0’;”和切片標準“(wchar_tsource[100];,[source])”之間存在控制依賴,語句“wcsncat(data,source,100)”和切片標準之間
哈爾濱工業(yè)大學專業(yè)碩士學位論文-12-也存在控制依賴,并且這兩條語句都出現(xiàn)在切片標準的后面,都會受到切片標準對應語句的影響,所以將其作為針對切片標準的前向切片的一部分。圖2-3數(shù)組使用相關切片過程2.3.2切片結果根據(jù)source和data在程序依賴圖當中和別的節(jié)點之間的數(shù)據(jù)依賴關系和控制依賴關系生成以數(shù)組使用為關鍵點的切片。切片結果如圖2-4。3456if(staticTrue)wchar_tsource[100];source[100‐1]="\0";wcsncat(data,source,100);圖2-4數(shù)組使用為關鍵點的切片2.4算術表達式相關漏洞的程序切片算術表達式是指用算術運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合程序語法規(guī)則的式子。由于算術表達式的不恰當使用所引發(fā)的代碼漏洞稱為以算術表達式為關鍵點的代碼漏洞(例如:整型溢出)。同樣以圖2-3中的代碼段為例,分析算術表達式關鍵點的提取以及根據(jù)關鍵點生成程序切片的過程。其中算術表達式的使用為造成漏洞的關鍵點。根據(jù)此關鍵點對代碼進行切片,過濾出源代碼中只和算術表達式的使用相關的語句,作為漏洞檢測的數(shù)據(jù),步驟包括:(1)根據(jù)關鍵點生成切片標準。(2)根據(jù)切片標準,生成程序切片。
本文編號:3072683
【文章來源】:哈爾濱工業(yè)大學黑龍江省 211工程院校 985工程院校
【文章頁數(shù)】:63 頁
【學位級別】:碩士
【部分圖文】:
本文研究內(nèi)容主要流程
哈爾濱工業(yè)大學專業(yè)碩士學位論文-11-樹中節(jié)點類型為標識符定義語句的中間節(jié)點(即IdentifierDeclStatement),然后判斷查找出的中間節(jié)點所對應的語句中是否含有符號“[”或者“]”,如果這些條件都滿足,則將此標識符定義語句作為切片標準的語句S,并且提取語句中定義的參數(shù)變量作為切片標準的V。最后將S和V組合成最終的切片標準(S,V)。對于示例程序,如圖2-2在其對應的抽象語法樹(AST)中匹配到關鍵點,根據(jù)數(shù)組使用作為關鍵點提取的切片標準為(wchar_tsource[100];,[source])。圖2-2匹配數(shù)組使用關鍵點通過分析上述示例,可知在根據(jù)“數(shù)組的使用”關鍵點生成切片標準(S,V)的過程中語句S需要滿足以下兩個條件:(1)語句中包含標識符定義語句(IdentifierDeclStatement);(2)定義語句對應的代碼中包含符號“[”或者“]”,因為數(shù)組定義和使用時都會用到“[”和“]”。然后利用上面的切片標準(S,V)對源程序進行切片,判斷程序依賴圖(PDG)中和切片標準(S,V)存在數(shù)據(jù)依賴和控制依賴關系的語句,分別構成前向切片和后向切片,組合成最終的切片結果。針對圖2-1的示例程序,其對應的程序依賴圖以及切片分析過程如圖2-3。切片標準為(wchar_tsource[100];,[source]),圖中綠色的線代表控制依賴,紅色的線代表可達關系,語句“if(staticTrue)”和切片標準“(wchar_tsource[100];,[source])”之間存在控制依賴,并且“if(staticTrue)”出現(xiàn)在切片標準的前面,對切片標準對應的有影響,所以將其作為針對切片標準的后向切片的一部分。語句“Source[100-1]=L’\0’;”和切片標準“(wchar_tsource[100];,[source])”之間存在控制依賴,語句“wcsncat(data,source,100)”和切片標準之間
哈爾濱工業(yè)大學專業(yè)碩士學位論文-12-也存在控制依賴,并且這兩條語句都出現(xiàn)在切片標準的后面,都會受到切片標準對應語句的影響,所以將其作為針對切片標準的前向切片的一部分。圖2-3數(shù)組使用相關切片過程2.3.2切片結果根據(jù)source和data在程序依賴圖當中和別的節(jié)點之間的數(shù)據(jù)依賴關系和控制依賴關系生成以數(shù)組使用為關鍵點的切片。切片結果如圖2-4。3456if(staticTrue)wchar_tsource[100];source[100‐1]="\0";wcsncat(data,source,100);圖2-4數(shù)組使用為關鍵點的切片2.4算術表達式相關漏洞的程序切片算術表達式是指用算術運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合程序語法規(guī)則的式子。由于算術表達式的不恰當使用所引發(fā)的代碼漏洞稱為以算術表達式為關鍵點的代碼漏洞(例如:整型溢出)。同樣以圖2-3中的代碼段為例,分析算術表達式關鍵點的提取以及根據(jù)關鍵點生成程序切片的過程。其中算術表達式的使用為造成漏洞的關鍵點。根據(jù)此關鍵點對代碼進行切片,過濾出源代碼中只和算術表達式的使用相關的語句,作為漏洞檢測的數(shù)據(jù),步驟包括:(1)根據(jù)關鍵點生成切片標準。(2)根據(jù)切片標準,生成程序切片。
本文編號:3072683
本文鏈接:http://www.sikaile.net/kejilunwen/zidonghuakongzhilunwen/3072683.html
最近更新
教材專著