[發明專利]一種基于語法特征和語義特征的軟件安全漏洞檢測方法有效
| 申請號: | 202011488425.3 | 申請日: | 2020-12-16 |
| 公開(公告)號: | CN112541180B | 公開(公告)日: | 2022-09-13 |
| 發明(設計)人: | 危勝軍;胡昌振;鐘浩;陶莎;趙敬賓 | 申請(專利權)人: | 北京理工大學;鵬城實驗室 |
| 主分類號: | G06F21/57 | 分類號: | G06F21/57;G06F11/36;G06N3/04 |
| 代理公司: | 北京中海智圣知識產權代理有限公司 11282 | 代理人: | 楊樹芬 |
| 地址: | 100081 *** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 語法 特征 語義 軟件 安全漏洞 檢測 方法 | ||
本發明公開了一種基于語法特征和語義特征的軟件安全漏洞檢測方法。包括以下步驟:步驟1、確定檢測對象的粒度;步驟2、建立軟件歷史漏洞庫;步驟3、建立檢測對象的抽象語法樹;步驟4、對抽象語法樹進行嵌入;步驟5、對檢測對象軟件源代碼進行編譯;步驟6、建立檢測對象的程序依賴圖;步驟7、對程序依賴圖進行嵌入,步驟8、使用圖卷積神經網絡對AST的特征進行學習:步驟9、使用雙向LSTM對PDG的特征進行學習;本發明的優越效果是:提高了檢測模型的精度、準確率、召回率的性能指標;采用一種圖神經網絡直接對AST樹形結構進行學習,因此不會丟失任何信息,基于圖神經網絡的特征直接提取方式能夠極大提高模型的檢測性能。
技術領域
本發明屬于軟件安全技術領域,尤其涉及一種基于語法特征和語義特征的軟件安全漏洞檢測方法。
背景技術
目前,隨著軟件源代碼及其漏洞數據的大量公開,相關數據能夠低成本海量獲取,基于數據驅動的方法被用于漏洞檢測。其中,思路是利用深度學習技術的特征學習能力自動提取源代碼模塊的漏洞特征建立漏洞檢測模型,整個過程分為兩個階段。一是模型建立階段,二是模型應用階段。在模型建立階段中,首先確定分析對象的粒度,也就是確定軟件源代碼模塊的大小,軟件軟代碼模塊是一段有相互關系的代碼,可自行定義,可以是一個文件、一個函數、一個組件或者任意大小的一段代碼;第二步是針對分析的對象進行預處理,解析出可用于分析的代碼中間表示,中間表示包括Token序列、AST和CFG,第三步是針對中間表示進行數量化,采用空間嵌入的方式,第四步是選擇合適的深度學習算法,將第三步的數量化的向量作為深度學習算法的輸入且輸出即為學習到的特征,第五步,將學習到的特征作為一個分類器的輸入,同時將對應代碼模塊的是否具有漏洞標簽或者漏洞的具體類別作為分類器的輸出,對分類器進行訓練,訓練好的分類器即可用于模型應用階段:針對一個新的軟件源代碼模塊,對其進行預處理轉換為中間代碼后使用相同的量化和嵌入向量作為深度學習模型的輸入學習提取特征,特征作為分類器的輸入,分類器的輸出為漏洞類別的概率。
現有技術1(VulDeePecker:A Deep Learning-Based System for VulnerabilityDetection,2018)的分析粒度為一個code gadget,一個code gadget是一段語義相關的代碼語句集合,通過分析程序的數據流生成。針對code gadget通過lexical analysis將gadget表示成token序列,基于word2vec將每個token轉換為向量,之后得到每個gadget的矢量表示,再采用一個Bidirectional LSTM(BLSTM)進行特征學習建立漏洞檢測模型。現有技術2(SySeVR:A Framework for Using Deep Learning to Detect SoftwareVulnerabilities)對現有技術1的工作進行擴展,基于Bidirectional Gated RecurrentUnit(BGRU)建立漏洞檢測模型。現有技術3(μVulDeePecker:A Deep Learning-BasedSystem for Multiclass Vulnerability Detection)針對現有技術1的不足,基于現有技術1中相同的code gadget思路,采用深度學習方法設計了一個漏洞多分類器,能夠精確指出漏洞的類型。現有技術4(VulDeeLocator:A Deep Learning-based Fine-grainedVulnerability Detector)在現有技術2的基礎上進行擴展,基于LLVM的中間代碼獲取語義相關的LLVM slice,使用BRNN建立模型。現有技術5(Towards a Deep Learning Model forVulnerability Detection on Web Application Variants)針對一個PHP slices建立漏洞檢測模型,首先將PHP slices轉換為基于操作碼的中間表示,然后對操作碼進行分詞,使用word2vec進行向量化,之后使用一個5層的LSTM神經網絡建立分類模型,一個Slice是一個代碼片段,代碼片段中的程序語句具有一定的關聯關系,關聯關系由人為定義,比如語句間具有數據依賴關系、控制依賴關系。現有技術6(Automatic feature learning forvulnerability prediction)針對JAVA文件建立漏洞分類模型,以JAVA文件中的method為單位進行分詞后,使用LSTM深度學習對每個token進行嵌入,同時得到了每個method的語法特征,經過池化后得到每個file的語法特征。對所有的token向量進行聚類分析,得到分類的類別,再將計算構成每個file的token落入到每個類別的數量,數量即為file的語義特征。將語法和語義特征作為分類器的輸入建立分類模型。現有技術7(Project Achilles:APrototype Tool for Static Method-Level Vulnerability Detection of Java SourceCode Using a Recurrent Neural Network)采用了現有技術6中類似的方法,將LSTM模型應用于JAVA程序,分析粒度不是一個file,針對不同的具體類型的漏洞檢測進行了測試。現有技術8(Automated Vulnerability Detection in Source Code Using DeepRepresentation Learning)的分析粒度為C/C++函數,對每個函數進行分詞得到token,再采用與句子情感分類類似的特征提取方法提取特征,基于卷積神經網絡(CNNs)和遞歸神經網絡(RNNs)進行漏洞分類。現有技術9(Automated software vulnerability detectionwith machine learning)的分析粒度為C/C++函數,對多種不同輸入特征的性能進行了對比,分析了詞袋模型和詞向量方法,詞袋模型采用extremely random trees分類器,詞向量的方法采用TextCNN模型。現有技術10(A deep tree-based model for software defectprediction)針對一個Java源代碼文件,首先建立文件的抽象語法樹(AST),再基于AST采用一種樹結構的LSTM網絡建立漏洞檢測模型。現有技術11(Cross-Project TransferRepresentation Learning for Vulnerable Function Discovery)、現有技術12(POSTER:Vulnerability Discovery with Function Representation Learning from UnlabeledProjects)針對C/C++源程序的函數,建立每個函數的AST,采用深度優先搜索得到AST的節點序列,之后使用Word2vec對節點序列進行嵌入,再使用5層的LSTM網絡建立分類模型。現有技術13針對一個java文件,建立其AST,提取AST的節點,所有不同的AST節點構成一個庫,對每個節點分配一個整數表示節點,將節點換成整數作為DBN的輸入建立分類模型。現有技術14(Software Defect Prediction via Convolutional Neural Network)在現有技術13(Automatically Learning Semantic Features for Defect Prediction)的基礎上,對AST的節點采用CNN進行詞嵌入得到其向量表示,同時學習到整個AST節點序列的特征,將特征作為Logistic Regression classifier的輸入建立分類模型。現有技術15(StaticDetection of Control-Flow-Related Vulnerabilities Using Graph Embedding)使用圖卷積神經網絡(graph convolutional network),針對控制流相關的漏洞建立檢測模型,首先建立一個method的控制流圖,之后使用Doc2Vec對控制流圖的節點進行嵌入,然后使用graph convolutional network對整個控制流圖進行學習得到圖的特征表示建立漏洞檢測模型。現有技術16(Convolutional Neural Networks over Control Flow Graphs forSoftware Defect Prediction)針對一個源file,首先對源文件編譯得到匯編指令,建立基于匯編指令的CFG,基于CFG使用directed graph-based convolutional neural network建立漏洞檢測模型。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京理工大學;鵬城實驗室,未經北京理工大學;鵬城實驗室許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202011488425.3/2.html,轉載請聲明來源鉆瓜專利網。





