999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于深度學習的軟件安全漏洞挖掘

2021-10-13 13:46:16顧綿雪孫鴻宇曹婉瑩曹春杰王文杰張玉清
計算機研究與發展 2021年10期
關鍵詞:深度特征檢測

顧綿雪 孫鴻宇 韓 丹 楊 粟 曹婉瑩 郭 禎 曹春杰 王文杰 張玉清,3

1(海南大學網絡空間安全學院 海口 570228) 2(國家計算機網絡入侵防范中心(中國科學院大學) 北京 101408) 3(西安電子科技大學網絡與信息安全學院 西安 710126)

信息技術的高速發展極大地改變了人們的生活方式,便捷的計算機應用程序豐富了人們的生活.近年來,隨著計算機軟件系統的復雜性增強,潛在的安全漏洞數量呈現遞增趨勢.美國國家漏洞數據庫(National Vulnerability Database,NVD)歷年披露的安全漏洞數量[1]如圖1所示,從2018年開始,連續3年披露的安全漏洞記錄數目均已突破1.5萬條大關.

盡管部分披露的軟件安全漏洞已經被修復,這并不意味著計算機用戶在使用軟件系統時所面臨的危害有所降低.例如,2014年4月披露的“Shellshock”漏洞(1)https://www.symantec.com/connect/blogs/shellshock-all-you-need-know-about-bash-bug-vulnerability,攻擊者利用僵尸網絡進行分布式拒絕服務(distributed denial of service, DDoS)攻擊,通過搭載基于公共網關接口(common gateway interface, CGI)的Web服務器、OpenSSH服務器或DHCP客戶端在受攻擊的Bash上執行任意代碼,從而在未授權的情況下訪問計算機系統.之后,2017年5月出現的“WannaCry”勒索病毒軟件(2)http://www.cert.org.cn/publish/main/9/2017/20170513170143329476057/20170513170143329476057_.html,攻擊者利用美國國家安全局(National Security Agency, NSA)在同年3月披露的危險漏洞“永恒之藍EternalBlue”攻擊脆弱的Windows操作系統,入侵用戶主機并索要比特幣.該勒索病毒波及至少150個國家和地區,給政府、企業和高校等行業造成數以億計的損失,儼然是一場全球性的互聯網災難.近年來,軟件安全漏洞不僅在數量上逐年激增,其形態也表現出復雜性和多樣性的特點,給軟件系統的正常運行帶來了嚴峻的挑戰.

Fig. 1 The number of disclosed vulnerabilities in NVD over the years圖1 美國國家漏洞數據庫(NVD)歷年披露的漏洞記錄數目

目前,學術界和工業界尚未對軟件安全漏洞的定義形成統一廣泛的共識,本文在總結文獻[2-4]關于安全漏洞定義的基礎之上,參照文獻[5]對軟件安全漏洞的定義,即安全漏洞是指在信息產品、信息系統、信息技術在軟件生命周期中,軟件設計者在需求、設計、編碼、配置和運行等階段有意或者無意產生的軟件缺陷,從而使得攻擊者在未經授權的情況下訪問計算機資源.這些軟件缺陷一旦被惡意的攻擊者利用,比如權限越級、軟件用戶隱私數據泄露等,將會導致軟件系統之上的正常服務行為偏離,危害信息系統的機密性(confidentiality)、完整性(integrity)和可用性(availability).由于軟件安全漏洞隱蔽存在于軟件生命周期的各個階段,如何利用各種技術手段盡早挖掘潛在的安全漏洞,降低對軟件系統的危害,是網絡空間安全領域的熱點研究問題之一.

軟件安全漏洞挖掘是安全研究人員檢查和分析軟件系統中潛在的安全漏洞的主要技術手段.通過利用各種檢測工具對軟件、源代碼以及代碼補丁進行審計,或者運行可執行文件對軟件的執行過程進行測試,查找其軟件缺陷.早期的安全漏洞挖掘技術主要分為靜態分析技術、動態分析技術和混合分析技術.靜態分析技術是指在不運行程序的情況下,對程序源代碼或字節碼的語法、語義、控制流和數據流進行分析,從而檢測目標程序中可能潛在的安全漏洞.靜態分析技術主要包括基于規則的分析技術[6]、二進制對比技術[7]、靜態符號執行技術[8]和靜態污點分析技術[9]等.靜態分析技術不需要運行程序,能夠高效快速地完成對大量程序代碼的審計,代碼覆蓋率較高.但隨著軟件復雜性的增加,依靠人工專家提取漏洞規則常常具有主觀性,且構造成本過高,不可避免地導致漏洞誤報率和漏報率較高.動態分析技術是指在程序運行情況下,對運行程序的運行狀態、執行路徑和寄存器狀態進行分析,從而發現動態調試器中存在的安全漏洞.動態分析技術主要包括模糊測試[10-11]、動態符號執行技術[12-14]和動態污點分析技術[15]等.動態分析技術一般應用于軟件的測試運行階段,能夠從運行程序的狀態中追蹤程序的執行路徑和數據流向,從而提取漏洞特征信息,以提升軟件漏洞挖掘的準確率.但動態分析技術程序存在路徑覆蓋率較低和路徑爆炸問題,且需要消耗大量的計算資源[16].混合分析技術是指同時結合靜態分析和動態分析技術,以對目標程序進行安全漏洞挖掘.混合分析技術主要依賴于安全研究人員分析程序源代碼或字節碼的靜態特征和運行程序得到的動態特征,或利用動態分析對靜態分析的結果進行校驗,使得安全漏洞挖掘的準確率提升,從而降低靜態分析的高漏報率和增加動態分析的代碼覆蓋率[17-18].

近年來,隨著人工智能(artificial intelligence,AI)技術的興起,利用AI可以自動化地從復雜高維數據中提取數據的有效特征,已經被廣泛應用于圖像識別[19]、目標檢測[20]和自然語言處理[21]等領域.目前,將AI應用于安全漏洞挖掘領域主要是利用機器學習(machine learning, ML)、自然語言處理(natural language processing, NLP)和深度學習(deep learning, DL),以實現軟件安全漏洞的自動化和智能化研究.

基于機器學習的軟件安全漏洞挖掘工作一直受到安全研究人員和軟件供應商的關注和重視.在實際研究中,將機器學習技術應用于安全漏洞挖掘領域主要可以包括基于軟件代碼度量、基于代碼屬性、基于代碼相似性以及基于代碼模式的安全漏洞挖掘模型[22-23].

具體而言,軟件代碼度量是對軟件一些特征信息的量化表示,用作對軟件質量的度量指標.常用的軟件度量指標有開發者活動(developer activities)、復雜度(complexity)、代碼變化(code churn)、繼承深度(inheritance depth)、耦合度(coupling)和內聚度(cohesion)等.基于軟件代碼度量的漏洞挖掘模型[24-29]通過選取軟件的若干個度量指標量化程序特征來進行表示,在一定程度上能夠體現程序的整體屬性特征,檢測速度較快,但是量化的程序特征信息與漏洞代碼本身關聯性不強,細粒度不夠,只能提供輔助性的漏洞判斷,且具有較高的誤報率和漏報率.

基于代碼屬性的漏洞挖掘模型在軟件代碼度量的基礎之上,針對具體的漏洞信息特征,從代碼級別挖掘程序代碼本身的特征信息.基于代碼屬性的漏洞挖掘工作[30-37]主要對Web端安全漏洞進行研究,應用機器學習算法進行漏洞挖掘,能夠檢測出SQL注入、跨站點腳本攻擊(cross-site scripting, XSS)、遠程代碼執行(remote code execution, RCE)和緩沖區溢出(buffer overflow, CWE-119)等漏洞.基于代碼相似性的漏洞挖掘模型在對安全專家手工定義的特征提取之后,使用機器學習等方法計算并比較特征之間的相似度,從而判斷是否屬于同一類型漏洞.

基于代碼相似性的漏洞挖掘模型[38-40]主要能夠檢測出代碼重復利用引起的漏洞問題,在一定程度上能夠提升漏洞檢測的準確率.但漏洞特征主要依靠安全專家手工定義,且只能發現已知的漏洞信息,應用比較局限.

基于代碼模式的漏洞挖掘模型,也可以理解為基于語法語義的漏洞挖掘模型,具體又可分為基于詞法分析的漏洞挖掘模型和基于語法分析的漏洞挖掘模型.基于詞法分析的漏洞挖掘模型[41-49]主要采用文本挖掘技術對源代碼的標識符、函數名和運算符等進行標記,對提取到的有效信息進行抽象表示,接著經過編碼模型進行向量化處理之后,得到供機器學習模型訓練的特征集合.基于語法分析的漏洞挖掘模型[50-54]通過靜態分析技術對程序源代碼的數據流和數據依賴進行更深層次的特征表示,主要依據抽象語法樹(abstract syntax tree, AST)、數據流圖(data flow graph, DFG)、控制流圖(control flow graph, CFG)和程序依賴圖(program dependency graph, PDG)等語法語義結構提取特征集合.相比于基于軟件代碼度量的漏洞挖掘模型,基于代碼模式的漏洞挖掘模型在很大程度上考慮了函數組件和函數控制流之間的聯系,兼顧了代碼的語法語義信息,且能夠抽象出代碼中更深層次的特征.

然而,基于傳統機器學習的軟件安全漏洞挖掘模型依賴于安全專家去定義漏洞特征,且只能挖掘已知的漏洞信息,在實際應用環境中無法挖掘未知的漏洞信息,應用范圍比較局限.同時,現有的基于機器學習的軟件安全漏洞挖掘模型無法指明與漏洞相關的關鍵語句或特征,使得難以定位安全漏洞存在的精確位置.

隨著深度學習技術的快速發展,越來越多的安全研究人員開始將深度學習技術應用于軟件安全漏洞挖掘領域.相比于傳統的機器學習技術依賴安全專家定義手工特征,深度學習技術通過構建多樣性的神經網絡對數據進行訓練,使得能夠更加自動化和智能化地從復雜數據中提取有效特征信息,以提高軟件安全漏洞挖掘的準確率,降低漏洞的誤報率和漏報率.因此,本文主要側重于基于深度學習的軟件安全漏洞挖掘工作研究,為此廣泛收集并調研了自2013-01—2021-06期間來自IEEE Xplore,ACM Digital Library,SpringerLink和中國知網(CNKI)等國內外數據庫以及著名安全會議(IEEE S&P,USENIX Security,CCS,NDSS等)收錄的現有研究工作,如圖2所示,并總結和歸納基于深度學習的軟件安全漏洞挖掘領域目前已有的研究成果,指出該領域的研究趨勢.

本文的主要貢獻有4個方面:

1) 廣泛收集并調研了基于深度學習的軟件安全漏洞挖掘領域的現有相關文獻,總結了基于深度學習的軟件安全漏洞挖掘的一般框架和相關技術方法;

2) 以深度特征表示為切入點,分類闡述和分析基于不同代碼表征形式的安全漏洞挖掘模型,并分別指出各表征方式中相關方案的優缺點;

3) 從具體的應用場景出發,分別探討目前深度學習應用于物聯網、區塊鏈智能合約以及其他領域漏洞挖掘的研究進展,并系統進行了對比;

4) 分析當前基于深度學習的軟件安全漏洞挖掘領域面臨的九大挑戰和機遇,并對未來的研究趨勢進行展望.

Fig. 2 Literature number of software vulnerability mining based on deep learning圖2 基于深度學習的軟件漏洞挖掘文獻數量

1 基于深度學習的軟件漏洞挖掘工作框架

通過調研現有的研究工作,我們給出了基于深度學習的軟件安全漏洞挖掘模型的一般工作框架,包括數據收集、學習和檢測3個階段,如圖3所示.同時,分析和歸納了現有數碼表征和模型學習技術,供讀者進一步深入了解基于深度學習的軟件安全漏洞挖掘模型的相關技術方法.

Fig. 3 The framework of software vulnerability mining based on deep learning圖3 基于深度學習的軟件漏洞挖掘工作框架

1.1 數據收集階段

在數據收集階段,需要收集大量的漏洞數據供深度學習模型進行訓練和學習.通過梳理和分析現有研究工作發現,目前大部分的數據主要來源于NVD,通用漏洞披露數據庫(Common Vulnerabilities and Exposures, CVE)、國家信息安全漏洞庫(China National Vulnerability Database of Information Security, CNNVD)和Github等主流開源網站,且以二進制文件和源代碼為主要分析對象.

1.2 學習階段

學習階段主要由3部分構成,分別是數據預處理、數據表征和模型學習.1)數據預處理階段.首先要對獲取的程序數據集進行預處理,緩解數據重復和數據不平衡問題.一般來說,可以采用數據清洗、數據集成和數據規約等方法對訓練數據集進行預處理.2)數據表征階段.即需要將軟件程序數據集解析為合適的表示結構用于模型訓練,目前,通常使用序列、抽象語法樹、圖、文本和混合特征等表征形式抽象出源代碼漏洞的特征信息.3)模型學習階段.由于收集到的軟件程序數據集通常是文本表示,并不能直接用于深度神經網絡模型進行訓練.因此,該部分需要將從數據表征模塊抽象出的代碼表征映射為向量形式,從而作為訓練模型的輸入.在多次訓練過程中不斷調整和優化模型參數,得到一個性能較優的漏洞挖掘模型,并應用于真實數據檢測階段.

1.3 檢測階段

檢測階段中,在獲得漏洞挖掘模型之后,可以對目標軟件程序進行漏洞預測.檢測階段的流程與學習階段在數據預處理和數據表征方面類似,對目標程序提取的表征向量化之后,輸入到學習階段得到的漏洞挖掘模型,從而得到預測結果.

1.4 數據表征技術

近年來,大量安全研究人員通過對安全漏洞產生的原理、條件和特征等方面進行深入研究,采用各種數據表征方式和深度學習算法在不同程度上構建了不同的漏洞挖掘模型.由于程序數據包含豐富的特征信息,如何構建合適的數據表征方式最大程度上提取與漏洞相關的特征信息,是一個復雜艱巨的任務.本文通過整理和分析現有研究工作,發現目前代碼表征方式主要可以分為5類,分別是:基于序列的表征方式、基于抽象語法樹的表征方式、基于圖的表征方式、基于文本的表征方式和基于混合的表征方式.圖4給出了基于不同代碼表征軟件漏洞挖掘文獻數量占比情況.

Fig. 4 The percentage of studies based on different code representations for software vulnerability mining圖4 基于不同代碼表征的軟件漏洞挖掘研究占比

具體而言,1)基于序列的表征方式對源代碼或二進制文件進行詞法分析,提取與字符流相關的標識符、函數名和運算符等關鍵特征信息,同時兼顧執行路徑、函數調用序列和語句調用序列等信息.2)基于抽象語法樹的表征方式將程序源代碼解析為抽象語法樹結構并從中提取與樹節點相關的語法信息.3)基于圖的表征方式則是通過使用圖數據結構對源代碼的詞法和語義屬性進行表示,使得能夠更加有效地抽象出深層次的代碼特征信息.4)基于文本的表征方式則是直接對從程序數據中提取出的特征詞進行量化,用于描述和代替程序數據信息.5)基于混合的表征方式通常是融合多種特征表示方式,最大程度上豐富程序數據的特征信息.

如何選擇合適的向量編碼模型將抽取的特征轉換成向量表示形式,在一定程度上將直接影響模型計算的性能.常用的編碼模型有One-hot[55],Word2vec[56]和Sent2vec[57]等.One-hot[55]編碼將文本映射到向量空間,使用n維向量對n個文本單詞進行一一對應編碼,但在文本元素過多時,會造成大量的冗余,且無法反映不同元素之間的聯系.Word2vec[56]為了克服One-hot[55]編碼的不足,對每個單詞分配固定長度的向量,并為語義相似的單詞分配距離相近的向量,提升了深度學習模型理解自然語言的能力.Word2vec[56]包含連續詞袋模型(continuous bag-of-words, CBOW)和Skip-Gram兩種模型.其中,CBOW適合用于小樣本數據集,并以周圍詞作為輸入,預測中心詞.而Skip-Gram適用于數據量較大的情況下,根據中心詞,預測其對應的周圍詞.Sent2vec[57]對Word2vec[56]中CBOW方法進行擴展,以整個句子作為輸入,并引入n-gram,增強語句中單詞順序的嵌入能力.

1.5 模型學習技術

在模型學習階段,深度學習模型可以實現自動化提取漏洞特征,且能夠獲得比“淺層”模型更好的檢測性能.本文通過整理和對比現有文獻發現,目前應用于漏洞挖掘領域常見的深度學習模型有:多層感知器(multi-layer perception, MLP)、卷積神經網絡(convolutional neural network, CNN)、循環神經網絡(recurrent neural network, RNN)、長短期記憶網絡(long short-term memory network, LSTM)、門控循環單元(gated recurrent unit, GRU)、圖神經網絡(graph neural network, GNN)、深度置信網絡(deep belief network, DBN)以及其他神經網絡模型(other deep learning models, Others),如自編碼器(auto encoder, AE)、生成對抗網絡(generative adversarial network, GAN)等.

其中,MLP模型在非線性數據上表現較好,但該模型需要大量的訓練數據實現擬合,且可解釋性不強.CNN模型可以用來學習結構化的空間數據,但該模型在池化過程中會丟失大量有價值的信息,忽略局部與整體之間的關聯性.RNN模型可以用來處理時序數據,來學習程序數據上下文依賴關系,但在處理序列過長的數據時,容易產生梯度消失問題.LSTM模型是RNN模型的一個變體,在此基礎之上添加記憶單元和遺忘門,使得能夠捕獲序列的長期依賴關系.GRU模型在將LSTM模型的遺忘門、輸入門和輸出門合并轉化為更新門和重置門,以較少的門函數將重要特征進行保存.GNN模型可以用來學習圖中節點、邊或子圖的低維向量空間表示,以獲得深層次的程序數據表示.DBN模型可以對程序數據在不同概念的粒度上進行抽象,在自動化訓練過程中通過調節自身的權重值持久化數據之間的依賴關系,具有更好的性能.AE是一種無監督學習方法,對高維輸入信息進行降維、進行表征學習.GAN包含一個生成器和一個判別器,分別用于自動學習真實的數據分布和正確判別輸入數據是來自真實數據還是生成器.

為了使讀者宏觀上了解各深度學習算法應用于軟件漏洞挖掘的研究情況,本文對該領域現有研究工作進行整理和歸納,占比情況具體如圖5所示.其中,為了有效量化混合模型采用的深度學習算法,本文對其進行了拆分,分別歸納到相應的模型進行統計.例如,文獻[58]分別在CNN和RNN模型上進行量化統計1次.

通過對現有基于深度學習的軟件漏洞挖掘文獻進行梳理和分析,本文發現大部分工作主要從數據表征方式的改進和學習模型的優化2個方面提出新的漏洞挖掘方法,且偏向于數據表征方式的改進,這也是本文側重于以深度特征表示進行研究綜述的依據.

Fig. 5 The percentage of studies which applied different deep learning algorithms for software vulnerability mining圖5 軟件漏洞挖掘模型采用不同深度學習算法研究占比

2 深度特征表示方法

通過整理和分析現有基于深度學習的漏洞挖掘研究工作,目前常見的代碼表征方式有序列表征、AST表征、圖表征、文本表征和混合表征.圖6給出了不同數據表征方式下,現有研究工作文獻數量從2013-01—2021-06的分布情況.本文對其整理和歸納,以便讀者有一個直觀的認識.因此,本節將以每種代碼表征方式為出發點,分類闡述現有具有代表性的基于深度學習的漏洞挖掘研究工作.同時,在現有研究工作基礎之上,本文對每種表征方式的漏洞挖掘模型從不同角度進行討論和分析,并給出觀點,供感興趣的研究人員對該領域進行進一步研究.

Fig. 6 Literature muber of different code representations for vulnerability mining 圖6 不同代碼表征的漏洞挖掘文獻數量

2.1 基于序列表征的漏洞挖掘模型

序列表征是指對源代碼或二進制文件進行詞法分析,提取與字符流相關的標識符、函數名和運算符等關鍵特征信息.同時還包含執行路徑、函數調用序列和語句調用序列等特征信息.基于序列表征的漏洞挖掘模型[58-72]是通過利用深度神經網絡(deep neural network, DNN)自動化提取序列特征信息進行漏洞挖掘.文獻[59-60]均從函數調用序列出發,實現漏洞挖掘.文獻[59]首次將深度學習應用于序列特征提取,從庫/API函數調用序列出發,采用雙向長短期記憶網絡(bidirectional long short-term memory network, BLSTM)構建VulDeePecker漏洞檢測系統.基于啟發式方法將程序源代碼轉化為“code gadget”代碼集合,使其產生一組語義聯系但不一定連續的多行代碼,檢測出4種未在NVD數據庫中報告的漏洞信息,具有一定的有效性.然而,VulDeePecker[59]用例漏洞類型較少,誤報率較大,且只能給出一段代碼中是否包含漏洞信息,無法精確提供與漏洞相關的位置信息.

文獻[60]在文獻[59]基礎上引入控制依賴關系,提出“code attention”,以函數調用序列為關鍵特征信息構建一個多分類神經網絡模型μVulDeePecker,從而輔助系統精確捕捉40種漏洞的挖掘工作,具有較高的F1-指數,并檢測出開源軟件Xen中2種未報告的安全漏洞類型.然而,在提取全局特征和局部特征時存在一定的學習偏差,提升了誤報率.

文獻[59-61]在構建學習模型時,僅使用單深度學習模型進行特征提取.為了對比單深度學習模型和混合深度學習模型的效果,文獻[58,62]采用混合深度學習模型進行特征提取.文獻[62]分別使用CNN,LSTM和混合模型CNN+LSTM進行漏洞特征提取,從二進制程序執行過程中收集近萬條函數調用序列作為特征用來訓練模型.其實驗結果發現采用混合神經網絡模型在進行特征訓練時,往往能夠挖掘出更多的特征信息,具有較好的漏洞挖掘效果.

然而,在實際漏洞應用場景中,由于對全局特征和局部特征的學習偏差,準確獲取漏洞特征信息并非易事.文獻[58]針對文獻[63]存在的特征學習偏差問題,采用底層虛擬機中間表示技術(lower level virtual machine intermediate representation, LLVM IR)和混合神經網絡模型對源代碼關鍵序列結構信息進行表征,用于自動化漏洞檢測.該表征方式能夠同時兼顧詞法分析并從細粒度上進行漏洞挖掘,能夠精確識別出漏洞的具體位置.通過對比不同的單深度學習模型方法,發現基于混合神經網絡的漏洞挖掘模型具有較好的性能.

通過調研基于序列表征的漏洞挖掘研究工作發現,文獻[58-71]均采用手工標注方式解決樣本之間數據不平衡問題,花費了大量的時間成本,且具有較高的誤報率.為了解決二進制軟件漏洞檢測中高誤報率和數據不平衡問題,文獻[72]結合內核方法和雙向循環神經網絡(bidirectional recurrent neural network, BRNN)構建深度代價敏感內核機模型(deep cost-sensitive kernel machine, DCKM),用于處理機器指令集序列.該研究將多種數據集進行切分,分別與6種開源軟件進行對比,其實驗結果表明結合深度學習的代價敏感內核機模型能夠有效解決樣本之間數據不平衡問題,降低誤報率.同時,本文發現該工作在多源數據集漏洞收集方面,能夠對數據集自動化標注有一定的借鑒意義.

基于序列表征的漏洞挖掘模型利用深度神經網絡自動化提取序列特征信息,本文從現有的基于序列表征的漏洞挖掘研究工作中,挑選和總結了5項具有代表性的研究工作,具體如表1所示.表1分別從分析對象、模型構造、檢測細粒度、漏洞類型以及性能多個角度進行分析和討論,并給出了基于序列表征的漏洞挖掘模型領域的一些觀點.

Table 1 Comparisons of Some Reviewed Works Which Applied Sequence-based Feature Representation for Vulnerability Mining表1 基于序列表征的漏洞挖掘模型部分工作對比

討論1.由表1可知,從分析對象而言,對C/C++源代碼以及二進制代碼中存在的漏洞挖掘是目前的研究熱點.從采用的深度學習模型方面而言,相比于采用單深度學習模型[59-61],利用混合模型[58,62]學習序列漏洞特征信息,往往具有較好的漏洞檢測能力,在性能方面可見一斑.從檢測細粒度上看,由于沒有一個規范統一的漏洞數據集,不同漏洞挖掘工作構建的數據集在一定程度上對檢測細粒度產生了不同的影響.從漏洞類型上而言,文獻[58,61-62]能夠實現多種漏洞類型的挖掘.而針對常見的緩沖區溢出類型(CWE-119)和資源管理溢出類型(CWE-399)漏洞挖掘,文獻[59]的挖掘效果較優于文獻[72],取得了4.7%的提升.

觀點1.基于序列表征的漏洞挖掘模型能夠直接對代碼進行詞法分析,并對字符流相關的關鍵特征信息、執行路徑和調用序列等信息進行統計得到序列表征,映射到向量空間作為神經模型的輸入.通過對比和歸納現有研究工作,本文發現:1)利用DNN學習得到的序列表征與漏洞特征的關聯性較強,具有良好的漏洞檢測能力;2)相比于單深度學習模型,混合模型學習到的序列特征信息更加豐富,檢測能力也相對較強;3)在漏洞挖掘過程中,提取所需的序列特征需要大量的訓練數據,再進行向量化輸入到深度學習模型之中,檢測速度一般較慢.

2.2 基于抽象語法樹表征的漏洞挖掘模型

抽象語法樹(abstract syntax tree, AST)是程序編譯過程中對源代碼抽象語法結構的一種樹狀表現形式,其中每一個樹節點代表實際代碼的一種語法結構信息[73].基于抽象語法樹特征表示的漏洞挖掘模型[74-87]通過使用Clang,ANTLR和Lex等開源軟件將程序源代碼文件生成AST,接著對AST節點進行遍歷轉化為數據流結構,從而提取層次化的特征信息.

文獻[74-76]在不同程度上均實現了項目內漏洞預測(within-project vulnerability prediction, WPVP),并取得了不錯的性能.文獻[74]結合雙向門控循環單元(bidirectional gated recurrent unit, BGRU)提出了一種基于AST表征的具有可解釋性的細粒度漏洞挖掘模型.該模型能夠區分不同行和不同語法元素對于漏洞信息的重要性,對漏洞AST中節點關鍵信息進行標記,使得對漏洞的具體位置進行精確定位,達到細粒度的漏洞挖掘.然而,該工作在生成AST的過程中時間漫長且容易出現AST語義信息爆炸問題,難以應用于規模較大的軟件系統,具有一定的局限性.

文獻[75]對生成后的AST規模如何縮減這方面進行了深入的研究,提出了一種新型切割AST神經網絡模型ASTNN,用來捕捉詞法和語義信息.該研究在語句級別上,將一個代碼片段得到的較大規模的AST分割成多個小語句樹,采用BGRU對生成的代碼片段進行訓練.他們的研究成果取得了不錯的實驗性能.但相比于文獻[74],該方案只能用于特定的代碼克隆漏洞檢測,無法實現多類型漏洞檢測以及跨項目漏洞檢測任務.

在基于序列表征的漏洞挖掘模型中,利用混合模型學習漏洞表征,常常具有較好的漏洞檢測能力,文獻[76]針對緩沖區溢出類型和資源管理異常類型漏洞,分別使用CNN與LSTM提取漏洞的全局和局部特征信息,提出一種結合傅里葉變換的深度卷積LSTM神經網絡模型用于漏洞檢測,并利用注意力機制對關鍵代碼特征進行重要性分析,使得模型具有更加良好的解釋性.

通過調研現有基于AST表征的漏洞挖掘研究工作,本文發現針對跨項目漏洞預測(cross-project vulnerability prediction, CPVP)研究在文獻數量上較少.事實上,跨項目漏洞挖掘需要在一個項目上構造漏洞挖掘模型從而實現另一個項目的漏洞挖掘,在實際開發場景之中,由于AST生成規模較大和容易出現語義爆炸等問題,常常導致模型的性能不佳.

在CPVP研究中,針對文獻[75]易出現的AST語義信息爆炸問題,文獻[77]發現結合DBN對AST語法語義信息進行特征降維,能夠有效增強CPVP的能力.文獻[78]首次將遷移學習(transfer learning, TL)應用于跨項目軟件漏洞挖掘,證明發現即使在小數量的數據標簽項目中,也能取得不錯的檢測效果.該研究從6個開源軟件中收集函數層次的數據集,實驗結果表明:無論是在WPVP或者在CPVP中,將AST和TL應用于漏洞挖掘具有較好的漏洞檢測能力.

為了實現CPVP中細粒度的漏洞挖掘,文獻[79]在文獻[75-76]基礎上提出了基于注意力機制的雙向長短期記憶網絡模型(attention-based bidirectional long short-term memory network, ABLSTM),用于漏洞特征提取,取得了較好的漏洞檢測效果.然而在提取詞法語義的特征模型中沒有太大的變化,因此本文推測基于AST表征的漏洞挖掘模型在一定程度上雖然較好地保留了代碼的語法語義特征,但在進行漏洞特征提取時效果比較有限.

基于抽象語法樹的漏洞挖掘模型能夠挖掘源代碼層次化的特征信息,本文從基于抽象語法樹的漏洞挖掘研究工作中挑選和總結了6項具有代表性的研究工作,具體如表2所示.表2分別從分析對象、模型構造、是否跨項目、漏洞類型和性能等多個方面進行對比和分析.

Table 2 Comparisons of Some Reviewed Works Which Applied AST-based Feature Representation for Vulnerability Mining表2 基于抽象語法樹表征的漏洞挖掘模型部分工作對比

討論2.本文發現基于AST表征方式的漏洞挖掘模型從分析對象而言主要以C/C++和Java源代碼為主,針對其他編程語言漏洞挖掘的研究相對較少.在模型構造方面,采用混合神經網絡[76]的漏洞挖掘效果優于單深度學習模型[74-75,77-79].從檢測細粒度而言,檢測粒度越“細”,模型的挖掘性能越高.也就是說,從語句級別[75]進行漏洞特征的提取,會獲得比函數級別[76,79]和文件級別[77-78]更好的挖掘效果.從是否能夠實現跨項目漏洞挖掘而言,能夠發現基于AST表征方式的漏洞挖掘模型在挖掘能力上明顯優于基于序列表征方式的漏洞挖掘模型.從漏洞類型上看,基于AST表征方式的漏洞挖掘不僅能夠實現某種特定類型漏洞類型[75-76]的挖掘,也能實現多種漏洞類型[74,77-79]的挖掘.通過分析發現,降維技術和遷移學習能夠在CPVP中取得不錯的效果.

觀點2.基于AST表征的漏洞挖掘模型能夠實現對程序源代碼的抽象表示,完整地保留程序的語法語義信息,刪除了一些與實際語法結構不相關的細節,如程序的注釋和分界符號等,適合對程序進行分析.因此,本文發現:1)相比于基于序列表征的漏洞挖掘模型,基于AST表征的漏洞挖掘模型能夠完整保留源代碼的詞法和語義語法信息,檢測能力相對較優;2)由于AST規模較大,在生成和提取函數節點時會花費較長的時間成本,檢測速度也相對較慢.

2.3 基于圖表征的漏洞挖掘模型

基于圖特征表示的漏洞挖掘模型[30,88-96]是通過使用圖數據結構對源代碼的詞法和語義屬性進行表示,使得能夠更加有效地抽象出深層次的代碼特征信息.目前常用的圖結構有:DFG、CFG、PDG、數據依賴圖(data dependency graph, DDG)和代碼屬性圖 (code property graph, CPG)[51]等.相比于AST對源代碼進行直接表示,DFG是一種結構化系統分析方法,以圖形方式表示源代碼在系統內部的邏輯流向.CFG則用來描述代碼語句的執行順序,以及程序運行過程中遍歷到的所有執行路徑.PDG對源代碼進行標記的有向多重圖,能夠反映程序的控制依賴和數據依賴關系.DDG是描述數據之間的相互制約關系,主要分為函數依賴和連接依賴關系.CPG是將程序的CFG和DDG等信息進行結合,從而更好地表征程序的結構信息.

基于圖表征的漏洞挖掘模型主要從不同程序源代碼或二進制文件中進行安全漏洞挖掘.文獻[30,88-89]從語句層次出發進行漏洞挖掘,均取得了不錯的性能.文獻[30]采用靜態代碼屬性從CFG和DDG提取源代碼中與漏洞特征相關的信息,實現Web應用中SQLI和XSS漏洞挖掘.該研究基于圖表征對比了不同的機器學習模型和MLP的性能,發現采用MLP的實驗結果要比同一數據集上采用不同機器學習模型的實驗結果效果好得多.但圖的生成過程引入了不必要的重復節點信息,降低了模型的有效性.

文獻[88]在數據預處理階段將數據依賴和控制依賴關系,通過嚴格的去重步驟,移除了重復編譯的特征向量并生成系統依賴圖(system dependency graph, SDG),輸入到CNN中進行學習得到圖表征.SDG由去重后的最小中間代碼表示生成而得,發現具有中間表示學習階段的方法有更好的性能.然而,文獻[30,88]實現了單個函數中語句級別的漏洞檢測,無法進行多個函數比對.為了同時實現多個函數比對和在語句級別上的漏洞檢測,文獻[89]將深度學習與程序切片技術相結合,提出了一種面向二進制代碼漏洞檢測的深度學習系統BVDetector.首先對二進制程序的數據流和控制流分析,基于CFG提取庫/API函數調用,并基于PDG對多個庫/API函數調用生成各自對應的程序切片,采用BGRU實現語句級別的漏洞挖掘,提升了漏洞挖掘的效果.文獻[30,88-89]都是從語句級別出發構建了不同的深度學習模型用于漏洞挖掘,但表現出來的性能有所不佳.這就表明圖表征方式的優勢沒有完全挖掘出來,應該構建適合挖掘圖語法語義信息的深度學習模型,實現挖掘性能的提升.

不少研究工作采用圖神經網絡(graph neural network, GNN)從代碼塊級別[90]和函數級別[91]實現漏洞挖掘,取得了不錯的效果.文獻[90]以C#編程語言為分析對象,從代碼塊級別出發,預測每個代碼塊中含有的變量名(VARNAMING)和判斷變量是否被正確使用(VARMISUSE).他們利用PDG邊之間的語法和語義信息,采用GNN構建漏洞挖掘模型,取得了較好的檢測能力.然而文獻[30,88-90]僅能挖掘現有已知的漏洞類型,無法檢測其他未知類型的漏洞,具有一定的局限性.

文獻[91]首次將深度學習技術與漏洞外推(vulnerability extrapolation)概念相結合,研究利用PDG提取已知漏洞函數級別的控制依賴和數據依賴關系,采用GNN模型進行漏洞模式外推,發現了一些未曾公布的漏洞信息,這就表明將深度學習技術與漏洞外推結合的漏洞挖掘模型具有一定的有效性.然而,由于需要對已知漏洞的特征信息進行全面的深入分析,這就要求安全研究人員構建合適的模型用于學習代碼表征,同時漏洞外推只能針對某一種特定漏洞進行挖掘,無法檢測其他類型的漏洞,可擴展性不強.

基于圖表征的漏洞挖掘模型通過使用圖數據結構對源代碼特征進行表示,使得能夠抽象出深層次的代碼特征信息.本文從現有的基于圖表征的漏洞挖掘研究工作中,選擇其中5項具有代表性的研究工作進行了總結和對比,具體情況如表3所示.表3分別從分析對象、模型構造、檢測細粒度、漏洞類型以及性能多個角度進行分析和討論.

Table 3 Comparisons of Some Reviewed Works Which Applied Graph-based Feature Representation for Vulnerability Mining表3 基于圖表征的漏洞挖掘模型部分工作對比

討論3.文獻[30,88-91]在不同程度上構建了基于圖表征的漏洞挖掘模型,從分析對象而言,基于圖表征方式的漏洞挖掘模型能夠實現多種編程語言[30,88,90-91]以及二進制文件[89]的漏洞挖掘.從檢測細粒度而言,以基本塊屬性為檢測細粒度的圖表征方式[90],檢測效果相比于函數級別和語句級別的圖表征方式[30,88-89,91]欠佳.從挖掘的漏洞類型來看,基于圖表征方式的漏洞挖掘模型在特定的漏洞類型挖掘[30,,89-90]以及多種類型漏洞挖掘[88,91]方面,均取得了不錯的檢測效果.

觀點3.基于圖的表征方式能夠抽象出源代碼中詞法和語義更深層次的特征信息.但由于生成圖表征這一過程復雜性較高,以及構建深度學習模型算法存在時間復雜度和空間復雜度較高的問題.因此,本文發現:1)選擇圖表征能在一定程度上保留源代碼完整的語法和語義信息,能夠幫助提升漏洞挖掘的效果,但檢測速度較慢,很難應用于大規模的軟件系統;2)利用圖嵌入技術和圖神經網絡模型學習圖表征,可能會帶來更好的漏洞挖掘效果;3)將深度學習與漏洞外推相結合,能夠有效挖掘一種特定類型的漏洞,在未來的研究中如何增強現有漏洞外推工作的能力,是一個值得探索的研究課題.

2.4 基于文本表征的漏洞挖掘模型

代碼文本是指源代碼的表面文本、匯編指令和代碼lexer處理的源代碼.文本特征表示是指對從文本中提取出的特征詞進行量化,用于描述和代替文本信息.目前,基于文本特征表示的漏洞挖掘模型[97-107]常使用分詞和詞頻統計等方法對程序源代碼進行表征,以提取有效的源代碼特征信息.

文獻[97-102]采用文本挖掘與深度學習技術結合的方式實現漏洞挖掘,將深度學習應用于程序分析,均取得了不錯的檢測性能.文獻[97]提出了構建程序向量表示的編碼標準,利用詞頻統計方法對Java源文件的漏洞模式進行表征,采用單深層全卷積神經網絡(fully convolutional networks, FCN)對特征向量進行學習和訓練,其實驗結果表明深度學習模型能夠獲得比“淺層”學習模型更好的挖掘性能.事實上,僅依靠詞法分析沒有考慮到語義的上下文關系,只對程序源代碼信息進行了粗糙的語法語義信息提取,限制了漏洞挖掘模型的性能.

文獻[99-101]以C/C++為分析對象,在不同程度上構建了深度學習模型用于漏洞挖掘.文獻[99]發現僅使用詞法分析得到的漏洞特征[97]具有較低的性能,將CNN與NLP相結合抽象出候選集樣本中的特征,提出了一個系統化的特征提取框架PreNNsem,用于漏洞挖掘.文獻[100]將遷移學習應用于漏洞挖掘,將基于轉換器的雙向編碼表征(bidirectional encoder representation from transform, BERT)方法與BLSTM結合,從文件級別出發,實現了從英語文本信息到計算機文件特征提取的過渡,取得了不錯的檢測性能.然而,由于檢測的細粒度只能從文件級別出發,缺少對程序代碼語義的信息提取,降低了模型的挖掘性能.

除利用FCN[97],CNN[99]和BLSTM[100]從語料庫中提取漏洞上下文模式和結構信息之外,文獻[101]從語句級別提取語法語義信息,采用神經記憶網絡(neural memory network, NMN)將源代碼的行編碼為特征向量,并存儲到內部記憶塊中,有效提升了緩沖區溢出漏洞類型挖掘的性能.文獻[102]以PHP源代碼為分析對象,結合深度學習技術和NLP解決PHP Web應用程序中SQL注入漏洞檢測問題,豐富了漏洞挖掘的能力.通過分析基于文本表征的漏洞挖掘研究工作發現,大部分研究工作[97-102]僅使用各自構建的數據集進行漏洞挖掘,無法進行基準參考.文獻[103]為了對比不同深度學習模型在同一數據集上的表現效果,分別采用CNN和RNN進行漏洞特征提取,從函數級數據出發,設計了C/C++詞法分析器歸一化標識符信息.其實驗結果發現在同一數據集上CNN表現出比RNN更好的性能.

基于文本表征的漏洞挖掘模型直接將源代碼作為文本處理,能夠有效地提取源代碼特征信息.本文從現有的基于文本表征的漏洞挖掘研究工作中,選擇其中6項具有代表性的研究工作進行了總結和對比,具體情況如表4所示.表4分別從分析對象、模型構造、檢測細粒度、漏洞類型以及性能多個角度進行分析和討論.

Table 4 Comparisons of Some Reviewed Works Which Applied Text-based Feature Representation for Vulnerability Mining表4 基于文本表征的漏洞挖掘模型部分工作對比

討論4.相比于基于序列、基于AST以及基于圖3種表征方式的漏洞挖掘模型,基于文本表征的漏洞挖掘模型采用DNN直接將源代碼作為文本進行輸入,能抽象出隱藏在代碼中的語法語義信息.從分析對象而言,基于文本表征的漏洞挖掘模型能夠采用不同類型的網絡結構從各種輸入數據中提取抽象特征,從而挖掘易受攻擊的代碼片段的語義特征.在模型方面,FCN可以擬合高度非線性和抽象的模式,比傳統機器學習算法更有發展潛力[97].CNN模型可以用來學習結構化的空間數據,能夠輔助安全研究人員進行漏洞挖掘的工作[99,103].RNN和它的變形模型能夠捕獲順序數據的長期依賴關系,對于理解多種類型漏洞的語義至關重要[100,102-103].最新的研究工作使用NMN用來存儲具有長期依賴關系的代碼文本,取得了不錯的效果[101].

觀點4.從文獻數量上來看,將文本挖掘與深度學習技術結合的方法相對較少,針對不同的分析對象、如何構建合適的深度網絡模型提取代碼的上下文依賴關系和設計統一公開的數據集等方面,基于文本特征表示的漏洞挖掘模型依然是一個值得研究的方向.

2.5 基于混合表征的漏洞挖掘模型

基于混合特征表示的漏洞挖掘模型[108-123]是指結合序列特征表示、抽象語法樹特征表示、圖特征表示和文本特征表示中至少2種特征表示方法,用于源代碼詞法和語義信息的有效提取.相比于單個特征表示的漏洞挖掘模型,基于混合特征表示的漏洞挖掘模型往往具有較高的性能.

使用單表征方式在一定程度上能夠抽象出代碼的語法和語義信息,但由于易受攻擊的代碼模式多種多樣,且代碼片段之間的上下文依賴關系錯綜復雜,定義通用描述所有類型的特征集是幾乎不可能的一項工作.文獻[108-112]采取多個表征形式盡可能完整地提取代碼片段特征信息,來進一步彌補語義之間的差距.

早期的混合特征提取方法[50]需要安全研究人員手工進行,無法自動化地進行特征提取.文獻[108]面向Android二進制文件提取符號特征序列信息和AST語義特征共同構建缺陷特征,采用DNN來進行缺陷預測,其受試者工作特征曲線(area under curve, AUC)在WPVP和CPVP中均取得了不錯的實驗性能.

文獻[109-112]使用AST和圖表示方法共同提取漏洞特征,提高了模型對程序代碼的表示能力.文獻[109]從函數級數據出發,采用一種復合流動挖掘模型,以AST為基礎骨架,增加CFG和DFG用于追蹤控制流和數據流的依賴關系.采用GNN對圖表征進行建模,提升模型對程序代碼的理解能力.文獻[110]提出了基于語法、基于語義和向量表示的漏洞挖掘框架SySeVR,側重于抽象出與過程間與過程內漏洞相關的語法和語義信息的程序表示,應用于多種開源軟件產品,檢測到了15個在NVD中未報告的漏洞,進一步證明了該工作的有效性.文獻[111]在文獻[110]基礎之上,引入LLVM定位漏洞具體的位置,對比了不同的深度學習模型,表明BGRU取得了最佳的檢測效果.

一般從直觀上認為,提取的特征越復雜,所得到的語法和語義信息越豐富,檢測效果會較優.但在文獻[112]中提出了一種基于簡化代碼屬性圖表征的漏洞挖掘模型,從函數級數據出發,以較少的表征信息最大程度上保留了漏洞的特征信息,選取GNN和MLP自動學習表征,其實驗結果發現該方法用于漏洞挖掘時,具有良好的性能.

基于混合表征的漏洞挖掘模型采取多種特征表示方法,用于提取源代碼詞法和語義信息.本文從現有的基于混合表征的漏洞挖掘研究工作中,選擇其中5項具有代表性的研究工作進行了總結和對比,具體情況如表5所示.表5分別從分析對象、模型構造、檢測細粒度、是否跨項目、漏洞類型以及性能多個角度進行分析和討論.

Table 5 Comparisons of Some Reviewed Work Which Applied Mixed-based Feature Representation for Vulnerability Mining表5 基于混合表征的漏洞挖掘模型部分工作對比

討論5.本文從不同角度分析和歸納了基于混合表征方式的漏洞挖掘模型,從分析對象而言,目前大部分文獻主要集中于源代碼漏洞檢測[109-112],二進制文件漏洞檢測[108]文獻相對較少.從模型構造而言,BRNN[111]和BGRU[110]能夠取得比其他深度學習模型較優的檢測性能.從檢測細粒度而言,文獻[110-111]面向過程內和過程間進行漏洞特征提取,能夠實現比函數級別[109,112]和語句級別[108]更“細”的語法語義信息提取.文獻[108]雖能夠實現跨項目漏洞挖掘,但僅限于二進制文件.由于不同編程語言和應用環境的差異性,基于混合特征表示的漏洞挖掘模型在跨項目漏洞挖掘這方面的研究仍然需要安全人員投入大量的時間進行探索.

觀點5.相比于前4種單特征表示方法,基于混合表征的漏洞挖掘模型能夠綜合考慮程序源代碼的詞法、語法和結構、語義信息,同時兼顧函數組件與函數控制流之間的依賴關系,與漏洞的特征具有較強的關聯性,檢測能力也更強.因此,如何融合多種特征實現自動化和細粒度漏洞挖掘,是一個值得探索的研究課題.

2.6 小 結

最大程度上完整保留程序數據的語法語義信息,抽象出代碼蘊含的更深層信息,構建合適的數據表征方式,將有助于深度神經網絡在進行漏洞挖掘時擁有更好的檢測性能.

本節分別從序列表征、AST表征、圖表征、文本表征和混合表征等方面分析了現有一系列基于深度學習的漏洞挖掘模型研究成果,同時指出了現有代表性研究工作的優缺點,并給出了一些研究思路.其工作發展歷程如圖7所示:

Fig. 7 The development of software vulnerability mining based on deep learning圖7 基于深度學習的軟件漏洞挖掘發展歷程

3 具體應用場景的漏洞挖掘模型

通過調研現有研究工作,本文發現在實際應用場景中,基于深度學習的漏洞挖掘模型表現出來的差異有所不同.因此,本節從不同的的應用場景出發,給出基于深度學習的漏洞挖掘模型在物聯網、區塊鏈智能合約和其他領域(瀏覽器漏洞、文檔類型漏洞和操作系統安全漏洞)漏洞挖掘的研究進展.

本文選擇物聯網、區塊鏈智能合約這2個應用領域進行詳細分析和討論,有3個原因.1)通過梳理現有文獻發現,現有結合深度學習進行漏洞挖掘的研究成果數量主要集中于這2個領域,有必要分別進行單獨調研和分析.2)物聯網設備底層的第三方庫/API源代碼往往存在大量的安全缺陷,一旦其漏洞被惡意的攻擊者進行利用,會造成整個網絡空間安全的穩定性.同時,區塊鏈應用場景的多樣化加劇了智能合約的復雜性,智能合約作為區塊鏈的核心部分,往往都是以公開透明的方式存在于區塊鏈中,一旦出現安全漏洞,將會帶來不可估量的損失,危害系統的安全.3)將深度學習應用于其他領域的研究成果在數量上相對較少,因此本文將其歸納到其他領域中進行探討,以供讀者全方位了解深度學習在具體應用場景的研究進展.

3.1 物聯網中基于深度學習的漏洞挖掘模型

物聯網是近幾年互聯網時代研究的熱潮之一,大量智能產品給人們帶來便捷的同時,其安全事件也不斷攀升.因此,針對物聯網中智能產品中的安全漏洞問題,如何利用深度學習技術實現智能化和自動化漏洞挖掘迫在眉睫.

需要注意的是,本文主要側重于物聯網中基于第三方庫/API中存在的安全漏洞,對采用相似度檢測方法或者二進制關聯算法實現跨平臺二進制代碼安全漏洞檢測[124-129]進行對比和分析.

文獻[124-126]以基本塊為檢測細粒度,對二進制代碼構建了不同的深度學習模型,用于漏洞檢測.文獻[124]發現采用圖表征提取漏洞特征時,采用圖嵌入神經網絡(graph embedding neural network,GENN)增強了漏洞挖掘的效果.實驗結果表明:該方法能夠應用于不同的應用場景,但依賴于手工提取漏洞特征,檢測速度相對較慢且準確率較低.文獻[124]是利用GENN對二進制代碼相似性檢測的一次次有效嘗試.文獻[125-126]將CFG和DFG相結合,形成標記語義流圖(labeled semantic flow graph, LSFG),并且采用深度學習算法實現跨平臺二進制相似性漏洞搜索工具.通過與現有研究工作[124]比較,體現出較好的函數語義和搜索精度.然而文獻[124-126]僅僅粗淺以代碼塊為檢測細粒度,并沒有考慮函數之間的依賴關系,降低了模型的檢測性能.

文獻[127]從函數級別出發,兼顧函數之間的依賴關系,測試多種無監督學習計算屬性控制流圖,自動化提取跨平臺特征,能夠提升檢測的AUC性能.文獻[128]認為Gemini[124]手工提取和壓縮特征的過程會損失語義信息,發現在不同平臺編譯出的二進制代碼的控制流圖節點順序非常相似,采用BERT和CNN提取語義信息,取得了較好的效果.然而由于在檢測細粒度上仍以基本塊和函數級別為主,不同文獻所構建的深度學習模型的檢測性能無法進一步改善性能.為了更加細粒度的挖掘語法語義信息,文獻[129]分別從函數過程內和過程間進行特征提取,提出了新的跨平臺二進制代碼相似性檢測方案αDiff,采用CNN實現跨平臺的漏洞挖掘,取得了不錯的實驗結果.

本文從現有的針對物聯網安全漏洞挖掘問題的研究工作中,選擇其中6項具有代表性的研究工作進行了總結和對比,具體情況如表6所示:

Table 6 Comparisons of Some Reviewed Works Based on Deep Learning for Vulnerability Mining in IoT表6 物聯網中基于深度學習的漏洞挖掘部分工作對比

表6分別從表征方式、模型構造、檢測細粒度、是否跨項目以及性能多個角度進行分析和討論,并且從召回率、準確率、AUC和效率等方面進行了簡單的評估.

討論6.本文發現物聯網中基于第三方庫/API中存在的安全漏洞檢測主要采用圖表征方式提取特征,采用GENN[124-127]和CNN[128-129]等主流深度神經網絡模型進行訓練,文獻[129]從函數過程內和過程間出發,實現比函數級別[127-128]和基本塊屬性[124-126]更豐富的漏洞特征信息提取,取得了更好的檢測效果.

觀點6.目前,針對物聯網中第三方庫/API中存在的安全漏洞檢測,主要采用圖表征方式進行漏洞特征表示,雖然能取得一定的檢測效果,但檢測效果提升不是很明顯.由此看來,改善現有圖表征方式,進一步豐富漏洞特征信息或者構建其他新的代碼表征方式,挖掘蘊含在代碼中更深層面的信息,在未來的漏洞挖掘研究中值得探索.總體來說,利用深度學習進行物聯網第三方庫/API中的安全漏洞檢測研究目前還在起步階段,是一個值得安全研究人員探討和實踐的方向.

3.2 智能合約中基于深度學習的漏洞挖掘模型

智能合約是區塊鏈上可執行合約條款的計算機交易協議,區塊鏈通過智能合約向鏈上用戶提供復雜多樣的業務功能,但智能合約的復雜性會隨著應用場景的多樣化不斷增加,勢必會造成大量安全漏洞存在,給整個計算機系統帶來巨大的威脅.

智能合約安全漏洞檢測面臨一系列的安全挑戰.一方面,由于區塊鏈中許多項目大都會公開智能合約代碼,這就使得在提升用戶對部署合約信任度的同時也降低了黑客攻擊的成本.另一方面,區塊鏈技術起步相對較晚,發展時間短,在其開發過程中自身存在嚴重的缺陷,嚴重阻礙了區塊鏈的技術進步發展.因此,針對智能合約漏洞安全檢測問題,需要安全研究人員采用相應的安全技術充分分析潛在的安全威脅,盡可能規避漏洞.

為了解決以上問題,目前不少安全研究人員嘗試將深度學習引入到智能合約漏洞檢測領域[130-135].文獻[130-133]均從字節碼層面出發,采用不同的深度學習算法進行漏洞挖掘.文獻[130]利用深度學習輔助智能合約漏洞檢測,采用LSTM在字節碼層面分析智能合約的威脅,取得了不錯的效果.文獻[131]同樣從字節碼出發,將智能合約的字節碼轉化為RGB顏色,再轉化為圖像輸入到CNN自動化提取豐富的特征信息,從而克服安全專家手動定義規則的主觀性.該方法將圖像相似性識別領域的相關方法應用于智能合約安全漏洞檢測,給讀者提供了新的思考方向,具有一定的啟示作用.

文獻[132]采用DNN對易受攻擊的以太坊虛擬機字節碼進行分析,提出了靜態分析工具Eth2Vec用于提取集成代碼和AST特征信息,取得了不錯的實驗結果.然而,該研究只針對部分字節碼進行分析,模型的可擴展性不強.考慮到文獻[132]在挖掘模型在可擴展性上的不足,文獻[133]首先將遷移學習應用于智能合約安全漏洞檢測,提出基于深度神經網絡的以太坊智能合約安全漏洞檢測框架ESCORT,利用文本表征字節碼信息,采用RNN實現自動化特征提取,取得了不錯的檢測效果.

除此之外,文獻[134-135]從函數層次出發,利用GNN構建漏洞挖掘模型,取得了不錯的檢測性能.文獻[134]構造了智能合約函數的詞法和語義結構圖,利用圖表征方式進行漏洞檢測,取得了不錯的實驗性能.文獻[135]將深度學習與模糊測試技術結合,從而生成智能合約中更好的測試用例和交易調用序列.使用符號執行引擎產生覆蓋率較高的調用序列,并采用深度神經網絡對序列特征進行學習得到訓練模型,取得了較高的代碼覆蓋率.

本文從現有針對智能合約安全漏洞挖掘問題的研究工作中,選擇了其中6項具有代表性的研究工作進行總結和對比,并給出了智能合約安全漏洞挖掘領域的一些觀點.表7分別從表征方式、模型構造、檢測細粒度、是否跨項目以及性能多個角度進行討論.

Table 7 Comparisons of Some Reviewed Works Based on Deep Learning for Vulnerability Mining in Smart Contract表7 智能合約中基于深度學習的漏洞挖掘部分工作對比

討論7.從表征方式而言,將序列表征[130,135]、圖表征[134]、文本表征[133]或混合表征[132]等與深度學習技術結合,均取得了不錯的檢測性能.從檢測細粒度而言,文獻[130-133]從字節碼級數據出發,能夠實現比從函數級數據[134-235]出發更深層次的語法語義信息提取,取得了相對較優的性能.從是否能夠實現跨項目漏洞挖掘而言,文獻[133]將遷移學習應用于智能合約跨項目安全漏洞檢測,取得了不錯的檢測性能.

觀點7.將深度學習應用于智能合約安全漏洞挖掘還處于研究初期,仍然還有很長的路要走.通過對現有研究工作的對比和分析,本文認為:1)相比于單表征方式的漏洞挖掘模型,基于混合表征的漏洞挖掘模型應用于智能合約安全漏洞挖掘,能夠進一步豐富漏洞的特征信息,提升漏洞挖掘的能力,但這方面的研究從文獻數量上來看相對較少,未來這方面的工作依然值得探索;2)在跨項目智能合約安全漏洞檢測中,遷移學習的能力未有明確的上限,需要進一步進行考量.

3.3 其他領域

將深度學習應用于除了3.1~3.2節物聯網以及智能合約安全漏洞挖掘領域之外,在瀏覽器安全漏洞、文檔類型漏洞和操作系統安全漏洞挖掘等方面也存在著相關的研究.本節進行集中介紹,以便讀者了解在具體應用場景中,應用深度學習進行漏洞挖掘的現有研究工作.

為了緩解操作系統中x86程序出現的內存崩潰漏洞,文獻[136]提出了一個輕量級的深度學習檢測系統VDiscover,具有良好的性能.文獻[137]提出了基于深度學習的通用模糊測試框架SmartSeed,用于生成有價值的文件作為模糊工具的測試用例,在檢測過程中發現了16個新的安全漏洞,表明該方法能夠有效提升模糊測試觸發漏洞的能力.此外,還有針對文檔類型漏洞的智能化漏洞挖掘方法,文獻[138]采用LSTM深度學習模型挖掘PDF文件對象的復雜結構,通過引入畸形數據對原樣本域進行隨機擾動,從而執行錯誤處理代碼.

就目前而言,將深度學習應用于瀏覽器安全漏洞、文檔類型漏洞和操作系統安全漏洞挖掘等方面的研究還在初期階段.針對具體的應用場景設計針對性的漏洞挖掘模型,這方面的研究依然值得安全研究人員進行探索.

4 未來研究展望

通過梳理和歸納現有基于深度學習的軟件漏洞挖掘的研究成果,一方面,本文以每種代碼表征方式為出發點,分別在2.1~2.5節分類闡述和對比現有具有代表性的研究工作,并給出了詳盡的討論和觀點(討論&觀點1~5).另一方面,本文從不同的的應用場景出發,給出基于深度學習的漏洞挖掘模型在物聯網、區塊鏈智能合約和其他領域漏洞挖掘的研究進展,具體如3.1~3.3節表述,指出目前深度學習應用于具體應用領域的一些想法(討論&觀點6~7).由于漏洞種類繁多、漏洞產生原理復雜和現有漏洞挖掘技術發展不完備等原因,實現自動化和智能化漏洞挖掘仍然還有很長的路要走.將深度學習應用于漏洞挖掘領域,雖已取得一定數量的代表性成果,但現階段的發展仍未成熟.

本節基于2~3節對現有研究成果的一些討論和觀點(討論&觀點1~7),嘗試總結基于深度學習的漏洞挖掘領域現階段面臨的主要挑戰,并在已有綜述文獻[139-147]之上,對未來的重點研究方向主要從5個方向進行展望.深度學習應用于漏洞挖掘領域研究的九大挑戰和機遇如表8所示:

Table 8 Challenges and Opportunities in the Field of Vulnerability Mining based on Deep Learning表8 深度學習應用于漏洞挖掘領域研究面臨的挑戰和機遇

4.1 漏洞數據集

將深度學習應用于自動化、智能化漏洞挖掘,首先面臨的挑戰是數據集的獲取(挑戰①),通過對現階段該領域文獻調研,發現現有各項研究在性能評估階段都幾乎依賴于各自收集和建立的數據集,尚未形成一個統一規范的數據集.同時,在深度學習訓練模型過程中,需要足夠準確的標記數據集,才能獲得高度有效的訓練結果.因此,為了輔助深度學習訓練模型,必須構建一個公開規范且可以作為基準的數據集.

4.2 程序數據表征

基于深度學習的漏洞挖掘模型,根據提取特征的方式,可以分為基于序列表征、基于抽象語法樹、基于圖表征、基于文本表征和基于混合表征的漏洞挖掘模型.最大程度上完整保留程序數據的語法語義信息,抽象出代碼蘊含的更深層信息,構建新的數據表征方式(挑戰②),將有助于構建的神經網絡訓練模型擁有更好的檢測性能.基于單特征表示的漏洞挖掘模型雖然在一定程度上能夠抽象出程序數據的相關信息,但基于混合表征的漏洞挖掘模型在實際應用中具有更高的性能效果.因此,融合多種特征進行漏洞挖掘似乎是漏洞自動化挖掘的有效方案.針對語義模型中的特征爆炸問題(挑戰③),可以采用特征降維方法提升模型的性能.同時,由于易受攻擊的代碼模式復雜,現有研究在特定類型的漏洞挖掘上取得了較好的性能,但實現多種漏洞挖掘(挑戰④)仍待安全研究人員進一步進行探索.

4.3 深度學習模型

將深度學習應用于漏洞挖掘不需要安全專家手工定義漏洞特征,能夠實現自動化和智能化漏洞特征提取.然而目前基于深度學習的漏洞挖掘面臨的問題是如何將抽象出的程序數據表征轉化為適合深度模型的向量表示形式.其次,程序數據具有豐富的層次結構和語法語義信息,盡管現有研究已經實現了從文件級別、函數級別到語句級別為粒度的漏洞檢測,但仍然未提供與漏洞相關更全面的位置信息(挑戰⑤).最后,不同的深度學習算法在同一數據集上會產生不同的性能效果,如何構建合適的深度學習模型(挑戰⑥),挖掘更深層次的代碼特征,實現細粒度的可解釋漏洞挖掘模型,也需要進一步加以研究.

4.4 漏洞智能評估

傳統的漏洞挖掘方法使用靜態分析、動態分析等程序分析技術,雖取得一定的進展,卻面臨嚴重的高誤報和高漏報等問題.同時,基于深度學習的漏洞挖掘模型在一定程度上能夠提升基于機器學習的漏洞挖掘的性能.因此,將深度學習與靜、動態分析技術相結合進行漏洞挖掘能夠提升模型的準確率,降低高誤報和高漏報等問題(挑戰⑦).面對復雜的深度學習模型以及多層次的代碼表征方式,實現高效率的漏洞挖掘也是一大難題(挑戰⑧).雖然現有的一部分工作采用LLVM等方法實現高效率的漏洞挖掘,但尚未找到有效的代碼表征方式進行漏洞挖掘,該方面的研究也是未來的一個研究難點.

4.5 跨項目漏洞挖掘

跨項目安全漏洞挖掘(挑戰⑨)是對不同項目的漏洞進行檢測,需要將一個項目上構造的深度學習模型用于挖掘另外一個項目的漏洞.然而,由于不同項目的開發流程、應用領域、編程語言和開發人員的經驗等差異,使得跨項目漏洞檢測的難度加大.雖然有部分研究嘗試采用遷移學習實現跨項目漏洞檢測,但僅限于同種編程語言的不同項目之間,尚未實現跨語言的漏洞挖掘.由此看來,跨語言和跨項目的漏洞挖掘在未來依舊是一個值得探索的研究熱點.

5 結束語

隨著人工智能技術的不斷發展,將深度學習應用于軟件漏洞檢測能夠實現自動化和智能化漏洞挖掘,緩解了高誤報率和高漏報率等問題.本文通過梳理和總結現有基于深度學習的漏洞挖掘最新研究,歸納其整體工作流程和技術路線,并從其中核心的深度表征方式為切入點,對現有研究成果進行分類闡述.同時也總結了不同應用場景中基于深度學習的漏洞挖掘方法的研究進展.最后,對該領域所面臨的挑戰和機遇進行展望.

通過總結現有研究工作,本文認為在未來的研究工作中:最大程度上抽象出漏洞特征的更深層信息,構建新的代碼表征方式將有助于提升現有漏洞挖掘模型的性能.同時,采用遷移學習和注意力機制等對跨項目檢測、漏洞位置定位等問題進一步分析,克服現有研究方法的局限性,將有助于提升漏洞挖掘的能力.

猜你喜歡
深度特征檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
深度理解一元一次方程
如何表達“特征”
不忠誠的四個特征
當代陜西(2019年10期)2019-06-03 10:12:04
深度觀察
深度觀察
深度觀察
抓住特征巧觀察
主站蜘蛛池模板: 国产高清在线丝袜精品一区| 久久国产精品麻豆系列| 亚洲AⅤ波多系列中文字幕| 九九香蕉视频| 人妻免费无码不卡视频| 久久精品无码中文字幕| 久久一色本道亚洲| 国产剧情国内精品原创| 狠狠躁天天躁夜夜躁婷婷| 永久免费无码成人网站| 熟女日韩精品2区| 五月婷婷综合网| 亚洲水蜜桃久久综合网站 | 久久综合婷婷| 亚洲欧美另类中文字幕| 欧洲极品无码一区二区三区| 国产伦片中文免费观看| 99热国产在线精品99| 色偷偷一区| 国产一区二区在线视频观看| 国产欧美视频在线观看| 精品视频一区二区观看| 亚洲综合久久成人AV| 无码aaa视频| 亚洲综合色婷婷| www.日韩三级| 亚洲国产AV无码综合原创| 欧美日韩资源| 亚洲AV免费一区二区三区| 香蕉色综合| 色婷婷色丁香| 欧美不卡视频在线| 国产精品亚洲一区二区在线观看| 99久久性生片| 色婷婷久久| 国产第一色| 日韩欧美高清视频| 人妻丰满熟妇AV无码区| 日韩经典精品无码一区二区| 熟女日韩精品2区| 免费观看男人免费桶女人视频| 午夜精品影院| 国产丰满大乳无码免费播放| 日韩亚洲综合在线| 少妇精品网站| 欧美一区二区自偷自拍视频| 丝袜国产一区| 欧美日韩专区| av色爱 天堂网| 91久久偷偷做嫩草影院精品| 自拍偷拍一区| 亚洲国产精品美女| 免费看a级毛片| 九九九精品成人免费视频7| 免费av一区二区三区在线| 丰满人妻中出白浆| 55夜色66夜色国产精品视频| 色噜噜久久| 亚洲区欧美区| 无码区日韩专区免费系列| 国产欧美自拍视频| 中文国产成人精品久久一| 国产第二十一页| 国产成人h在线观看网站站| 欧美中文字幕第一页线路一| 香蕉色综合| 九色视频在线免费观看| 色综合激情网| 人妻免费无码不卡视频| 91网红精品在线观看| 91在线精品麻豆欧美在线| 69av免费视频| 人妻精品久久久无码区色视| av在线人妻熟妇| 在线视频97| 2020国产在线视精品在| 国产乱人乱偷精品视频a人人澡 | 国产激爽大片在线播放| 性色生活片在线观看| 精品国产一区91在线| 亚洲热线99精品视频| 国产黄色免费看|