顧綿雪 孫鴻宇 韓 丹 楊 粟 曹婉瑩 郭 禎 曹春杰 王文杰 張玉清,3
1(海南大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 海口 570228) 2(國(guó)家計(jì)算機(jī)網(wǎng)絡(luò)入侵防范中心(中國(guó)科學(xué)院大學(xué)) 北京 101408) 3(西安電子科技大學(xué)網(wǎng)絡(luò)與信息安全學(xué)院 西安 710126)
信息技術(shù)的高速發(fā)展極大地改變了人們的生活方式,便捷的計(jì)算機(jī)應(yīng)用程序豐富了人們的生活.近年來(lái),隨著計(jì)算機(jī)軟件系統(tǒng)的復(fù)雜性增強(qiáng),潛在的安全漏洞數(shù)量呈現(xiàn)遞增趨勢(shì).美國(guó)國(guó)家漏洞數(shù)據(jù)庫(kù)(National Vulnerability Database,NVD)歷年披露的安全漏洞數(shù)量[1]如圖1所示,從2018年開(kāi)始,連續(xù)3年披露的安全漏洞記錄數(shù)目均已突破1.5萬(wàn)條大關(guān).
盡管部分披露的軟件安全漏洞已經(jīng)被修復(fù),這并不意味著計(jì)算機(jī)用戶在使用軟件系統(tǒng)時(shí)所面臨的危害有所降低.例如,2014年4月披露的“Shellshock”漏洞(1)https://www.symantec.com/connect/blogs/shellshock-all-you-need-know-about-bash-bug-vulnerability,攻擊者利用僵尸網(wǎng)絡(luò)進(jìn)行分布式拒絕服務(wù)(distributed denial of service, DDoS)攻擊,通過(guò)搭載基于公共網(wǎng)關(guān)接口(common gateway interface, CGI)的Web服務(wù)器、OpenSSH服務(wù)器或DHCP客戶端在受攻擊的Bash上執(zhí)行任意代碼,從而在未授權(quán)的情況下訪問(wèn)計(jì)算機(jī)系統(tǒng).之后,2017年5月出現(xiàn)的“WannaCry”勒索病毒軟件(2)http://www.cert.org.cn/publish/main/9/2017/20170513170143329476057/20170513170143329476057_.html,攻擊者利用美國(guó)國(guó)家安全局(National Security Agency, NSA)在同年3月披露的危險(xiǎn)漏洞“永恒之藍(lán)EternalBlue”攻擊脆弱的Windows操作系統(tǒng),入侵用戶主機(jī)并索要比特幣.該勒索病毒波及至少150個(gè)國(guó)家和地區(qū),給政府、企業(yè)和高校等行業(yè)造成數(shù)以億計(jì)的損失,儼然是一場(chǎng)全球性的互聯(lián)網(wǎng)災(zāi)難.近年來(lái),軟件安全漏洞不僅在數(shù)量上逐年激增,其形態(tài)也表現(xiàn)出復(fù)雜性和多樣性的特點(diǎn),給軟件系統(tǒng)的正常運(yùn)行帶來(lái)了嚴(yán)峻的挑戰(zhàn).
Fig. 1 The number of disclosed vulnerabilities in NVD over the years圖1 美國(guó)國(guó)家漏洞數(shù)據(jù)庫(kù)(NVD)歷年披露的漏洞記錄數(shù)目
目前,學(xué)術(shù)界和工業(yè)界尚未對(duì)軟件安全漏洞的定義形成統(tǒng)一廣泛的共識(shí),本文在總結(jié)文獻(xiàn)[2-4]關(guān)于安全漏洞定義的基礎(chǔ)之上,參照文獻(xiàn)[5]對(duì)軟件安全漏洞的定義,即安全漏洞是指在信息產(chǎn)品、信息系統(tǒng)、信息技術(shù)在軟件生命周期中,軟件設(shè)計(jì)者在需求、設(shè)計(jì)、編碼、配置和運(yùn)行等階段有意或者無(wú)意產(chǎn)生的軟件缺陷,從而使得攻擊者在未經(jīng)授權(quán)的情況下訪問(wèn)計(jì)算機(jī)資源.這些軟件缺陷一旦被惡意的攻擊者利用,比如權(quán)限越級(jí)、軟件用戶隱私數(shù)據(jù)泄露等,將會(huì)導(dǎo)致軟件系統(tǒng)之上的正常服務(wù)行為偏離,危害信息系統(tǒng)的機(jī)密性(confidentiality)、完整性(integrity)和可用性(availability).由于軟件安全漏洞隱蔽存在于軟件生命周期的各個(gè)階段,如何利用各種技術(shù)手段盡早挖掘潛在的安全漏洞,降低對(duì)軟件系統(tǒng)的危害,是網(wǎng)絡(luò)空間安全領(lǐng)域的熱點(diǎn)研究問(wèn)題之一.
軟件安全漏洞挖掘是安全研究人員檢查和分析軟件系統(tǒng)中潛在的安全漏洞的主要技術(shù)手段.通過(guò)利用各種檢測(cè)工具對(duì)軟件、源代碼以及代碼補(bǔ)丁進(jìn)行審計(jì),或者運(yùn)行可執(zhí)行文件對(duì)軟件的執(zhí)行過(guò)程進(jìn)行測(cè)試,查找其軟件缺陷.早期的安全漏洞挖掘技術(shù)主要分為靜態(tài)分析技術(shù)、動(dòng)態(tài)分析技術(shù)和混合分析技術(shù).靜態(tài)分析技術(shù)是指在不運(yùn)行程序的情況下,對(duì)程序源代碼或字節(jié)碼的語(yǔ)法、語(yǔ)義、控制流和數(shù)據(jù)流進(jìn)行分析,從而檢測(cè)目標(biāo)程序中可能潛在的安全漏洞.靜態(tài)分析技術(shù)主要包括基于規(guī)則的分析技術(shù)[6]、二進(jìn)制對(duì)比技術(shù)[7]、靜態(tài)符號(hào)執(zhí)行技術(shù)[8]和靜態(tài)污點(diǎn)分析技術(shù)[9]等.靜態(tài)分析技術(shù)不需要運(yùn)行程序,能夠高效快速地完成對(duì)大量程序代碼的審計(jì),代碼覆蓋率較高.但隨著軟件復(fù)雜性的增加,依靠人工專家提取漏洞規(guī)則常常具有主觀性,且構(gòu)造成本過(guò)高,不可避免地導(dǎo)致漏洞誤報(bào)率和漏報(bào)率較高.動(dòng)態(tài)分析技術(shù)是指在程序運(yùn)行情況下,對(duì)運(yùn)行程序的運(yùn)行狀態(tài)、執(zhí)行路徑和寄存器狀態(tài)進(jìn)行分析,從而發(fā)現(xiàn)動(dòng)態(tài)調(diào)試器中存在的安全漏洞.動(dòng)態(tài)分析技術(shù)主要包括模糊測(cè)試[10-11]、動(dòng)態(tài)符號(hào)執(zhí)行技術(shù)[12-14]和動(dòng)態(tài)污點(diǎn)分析技術(shù)[15]等.動(dòng)態(tài)分析技術(shù)一般應(yīng)用于軟件的測(cè)試運(yùn)行階段,能夠從運(yùn)行程序的狀態(tài)中追蹤程序的執(zhí)行路徑和數(shù)據(jù)流向,從而提取漏洞特征信息,以提升軟件漏洞挖掘的準(zhǔn)確率.但動(dòng)態(tài)分析技術(shù)程序存在路徑覆蓋率較低和路徑爆炸問(wèn)題,且需要消耗大量的計(jì)算資源[16].混合分析技術(shù)是指同時(shí)結(jié)合靜態(tài)分析和動(dòng)態(tài)分析技術(shù),以對(duì)目標(biāo)程序進(jìn)行安全漏洞挖掘.混合分析技術(shù)主要依賴于安全研究人員分析程序源代碼或字節(jié)碼的靜態(tài)特征和運(yùn)行程序得到的動(dòng)態(tài)特征,或利用動(dòng)態(tài)分析對(duì)靜態(tài)分析的結(jié)果進(jìn)行校驗(yàn),使得安全漏洞挖掘的準(zhǔn)確率提升,從而降低靜態(tài)分析的高漏報(bào)率和增加動(dòng)態(tài)分析的代碼覆蓋率[17-18].
近年來(lái),隨著人工智能(artificial intelligence,AI)技術(shù)的興起,利用AI可以自動(dòng)化地從復(fù)雜高維數(shù)據(jù)中提取數(shù)據(jù)的有效特征,已經(jīng)被廣泛應(yīng)用于圖像識(shí)別[19]、目標(biāo)檢測(cè)[20]和自然語(yǔ)言處理[21]等領(lǐng)域.目前,將AI應(yīng)用于安全漏洞挖掘領(lǐng)域主要是利用機(jī)器學(xué)習(xí)(machine learning, ML)、自然語(yǔ)言處理(natural language processing, NLP)和深度學(xué)習(xí)(deep learning, DL),以實(shí)現(xiàn)軟件安全漏洞的自動(dòng)化和智能化研究.
基于機(jī)器學(xué)習(xí)的軟件安全漏洞挖掘工作一直受到安全研究人員和軟件供應(yīng)商的關(guān)注和重視.在實(shí)際研究中,將機(jī)器學(xué)習(xí)技術(shù)應(yīng)用于安全漏洞挖掘領(lǐng)域主要可以包括基于軟件代碼度量、基于代碼屬性、基于代碼相似性以及基于代碼模式的安全漏洞挖掘模型[22-23].
具體而言,軟件代碼度量是對(duì)軟件一些特征信息的量化表示,用作對(duì)軟件質(zhì)量的度量指標(biāo).常用的軟件度量指標(biāo)有開(kāi)發(fā)者活動(dòng)(developer activities)、復(fù)雜度(complexity)、代碼變化(code churn)、繼承深度(inheritance depth)、耦合度(coupling)和內(nèi)聚度(cohesion)等.基于軟件代碼度量的漏洞挖掘模型[24-29]通過(guò)選取軟件的若干個(gè)度量指標(biāo)量化程序特征來(lái)進(jìn)行表示,在一定程度上能夠體現(xiàn)程序的整體屬性特征,檢測(cè)速度較快,但是量化的程序特征信息與漏洞代碼本身關(guān)聯(lián)性不強(qiáng),細(xì)粒度不夠,只能提供輔助性的漏洞判斷,且具有較高的誤報(bào)率和漏報(bào)率.
基于代碼屬性的漏洞挖掘模型在軟件代碼度量的基礎(chǔ)之上,針對(duì)具體的漏洞信息特征,從代碼級(jí)別挖掘程序代碼本身的特征信息.基于代碼屬性的漏洞挖掘工作[30-37]主要對(duì)Web端安全漏洞進(jìn)行研究,應(yīng)用機(jī)器學(xué)習(xí)算法進(jìn)行漏洞挖掘,能夠檢測(cè)出SQL注入、跨站點(diǎn)腳本攻擊(cross-site scripting, XSS)、遠(yuǎn)程代碼執(zhí)行(remote code execution, RCE)和緩沖區(qū)溢出(buffer overflow, CWE-119)等漏洞.基于代碼相似性的漏洞挖掘模型在對(duì)安全專家手工定義的特征提取之后,使用機(jī)器學(xué)習(xí)等方法計(jì)算并比較特征之間的相似度,從而判斷是否屬于同一類(lèi)型漏洞.
基于代碼相似性的漏洞挖掘模型[38-40]主要能夠檢測(cè)出代碼重復(fù)利用引起的漏洞問(wèn)題,在一定程度上能夠提升漏洞檢測(cè)的準(zhǔn)確率.但漏洞特征主要依靠安全專家手工定義,且只能發(fā)現(xiàn)已知的漏洞信息,應(yīng)用比較局限.
基于代碼模式的漏洞挖掘模型,也可以理解為基于語(yǔ)法語(yǔ)義的漏洞挖掘模型,具體又可分為基于詞法分析的漏洞挖掘模型和基于語(yǔ)法分析的漏洞挖掘模型.基于詞法分析的漏洞挖掘模型[41-49]主要采用文本挖掘技術(shù)對(duì)源代碼的標(biāo)識(shí)符、函數(shù)名和運(yùn)算符等進(jìn)行標(biāo)記,對(duì)提取到的有效信息進(jìn)行抽象表示,接著經(jīng)過(guò)編碼模型進(jìn)行向量化處理之后,得到供機(jī)器學(xué)習(xí)模型訓(xùn)練的特征集合.基于語(yǔ)法分析的漏洞挖掘模型[50-54]通過(guò)靜態(tài)分析技術(shù)對(duì)程序源代碼的數(shù)據(jù)流和數(shù)據(jù)依賴進(jìn)行更深層次的特征表示,主要依據(jù)抽象語(yǔ)法樹(shù)(abstract syntax tree, AST)、數(shù)據(jù)流圖(data flow graph, DFG)、控制流圖(control flow graph, CFG)和程序依賴圖(program dependency graph, PDG)等語(yǔ)法語(yǔ)義結(jié)構(gòu)提取特征集合.相比于基于軟件代碼度量的漏洞挖掘模型,基于代碼模式的漏洞挖掘模型在很大程度上考慮了函數(shù)組件和函數(shù)控制流之間的聯(lián)系,兼顧了代碼的語(yǔ)法語(yǔ)義信息,且能夠抽象出代碼中更深層次的特征.
然而,基于傳統(tǒng)機(jī)器學(xué)習(xí)的軟件安全漏洞挖掘模型依賴于安全專家去定義漏洞特征,且只能挖掘已知的漏洞信息,在實(shí)際應(yīng)用環(huán)境中無(wú)法挖掘未知的漏洞信息,應(yīng)用范圍比較局限.同時(shí),現(xiàn)有的基于機(jī)器學(xué)習(xí)的軟件安全漏洞挖掘模型無(wú)法指明與漏洞相關(guān)的關(guān)鍵語(yǔ)句或特征,使得難以定位安全漏洞存在的精確位置.
隨著深度學(xué)習(xí)技術(shù)的快速發(fā)展,越來(lái)越多的安全研究人員開(kāi)始將深度學(xué)習(xí)技術(shù)應(yīng)用于軟件安全漏洞挖掘領(lǐng)域.相比于傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)依賴安全專家定義手工特征,深度學(xué)習(xí)技術(shù)通過(guò)構(gòu)建多樣性的神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練,使得能夠更加自動(dòng)化和智能化地從復(fù)雜數(shù)據(jù)中提取有效特征信息,以提高軟件安全漏洞挖掘的準(zhǔn)確率,降低漏洞的誤報(bào)率和漏報(bào)率.因此,本文主要側(cè)重于基于深度學(xué)習(xí)的軟件安全漏洞挖掘工作研究,為此廣泛收集并調(diào)研了自2013-01—2021-06期間來(lái)自IEEE Xplore,ACM Digital Library,SpringerLink和中國(guó)知網(wǎng)(CNKI)等國(guó)內(nèi)外數(shù)據(jù)庫(kù)以及著名安全會(huì)議(IEEE S&P,USENIX Security,CCS,NDSS等)收錄的現(xiàn)有研究工作,如圖2所示,并總結(jié)和歸納基于深度學(xué)習(xí)的軟件安全漏洞挖掘領(lǐng)域目前已有的研究成果,指出該領(lǐng)域的研究趨勢(shì).
本文的主要貢獻(xiàn)有4個(gè)方面:
1) 廣泛收集并調(diào)研了基于深度學(xué)習(xí)的軟件安全漏洞挖掘領(lǐng)域的現(xiàn)有相關(guān)文獻(xiàn),總結(jié)了基于深度學(xué)習(xí)的軟件安全漏洞挖掘的一般框架和相關(guān)技術(shù)方法;
2) 以深度特征表示為切入點(diǎn),分類(lèi)闡述和分析基于不同代碼表征形式的安全漏洞挖掘模型,并分別指出各表征方式中相關(guān)方案的優(yōu)缺點(diǎn);
3) 從具體的應(yīng)用場(chǎng)景出發(fā),分別探討目前深度學(xué)習(xí)應(yīng)用于物聯(lián)網(wǎng)、區(qū)塊鏈智能合約以及其他領(lǐng)域漏洞挖掘的研究進(jìn)展,并系統(tǒng)進(jìn)行了對(duì)比;
4) 分析當(dāng)前基于深度學(xué)習(xí)的軟件安全漏洞挖掘領(lǐng)域面臨的九大挑戰(zhàn)和機(jī)遇,并對(duì)未來(lái)的研究趨勢(shì)進(jìn)行展望.
Fig. 2 Literature number of software vulnerability mining based on deep learning圖2 基于深度學(xué)習(xí)的軟件漏洞挖掘文獻(xiàn)數(shù)量
通過(guò)調(diào)研現(xiàn)有的研究工作,我們給出了基于深度學(xué)習(xí)的軟件安全漏洞挖掘模型的一般工作框架,包括數(shù)據(jù)收集、學(xué)習(xí)和檢測(cè)3個(gè)階段,如圖3所示.同時(shí),分析和歸納了現(xiàn)有數(shù)碼表征和模型學(xué)習(xí)技術(shù),供讀者進(jìn)一步深入了解基于深度學(xué)習(xí)的軟件安全漏洞挖掘模型的相關(guān)技術(shù)方法.
Fig. 3 The framework of software vulnerability mining based on deep learning圖3 基于深度學(xué)習(xí)的軟件漏洞挖掘工作框架
在數(shù)據(jù)收集階段,需要收集大量的漏洞數(shù)據(jù)供深度學(xué)習(xí)模型進(jìn)行訓(xùn)練和學(xué)習(xí).通過(guò)梳理和分析現(xiàn)有研究工作發(fā)現(xiàn),目前大部分的數(shù)據(jù)主要來(lái)源于NVD,通用漏洞披露數(shù)據(jù)庫(kù)(Common Vulnerabilities and Exposures, CVE)、國(guó)家信息安全漏洞庫(kù)(China National Vulnerability Database of Information Security, CNNVD)和Github等主流開(kāi)源網(wǎng)站,且以二進(jìn)制文件和源代碼為主要分析對(duì)象.
學(xué)習(xí)階段主要由3部分構(gòu)成,分別是數(shù)據(jù)預(yù)處理、數(shù)據(jù)表征和模型學(xué)習(xí).1)數(shù)據(jù)預(yù)處理階段.首先要對(duì)獲取的程序數(shù)據(jù)集進(jìn)行預(yù)處理,緩解數(shù)據(jù)重復(fù)和數(shù)據(jù)不平衡問(wèn)題.一般來(lái)說(shuō),可以采用數(shù)據(jù)清洗、數(shù)據(jù)集成和數(shù)據(jù)規(guī)約等方法對(duì)訓(xùn)練數(shù)據(jù)集進(jìn)行預(yù)處理.2)數(shù)據(jù)表征階段.即需要將軟件程序數(shù)據(jù)集解析為合適的表示結(jié)構(gòu)用于模型訓(xùn)練,目前,通常使用序列、抽象語(yǔ)法樹(shù)、圖、文本和混合特征等表征形式抽象出源代碼漏洞的特征信息.3)模型學(xué)習(xí)階段.由于收集到的軟件程序數(shù)據(jù)集通常是文本表示,并不能直接用于深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練.因此,該部分需要將從數(shù)據(jù)表征模塊抽象出的代碼表征映射為向量形式,從而作為訓(xùn)練模型的輸入.在多次訓(xùn)練過(guò)程中不斷調(diào)整和優(yōu)化模型參數(shù),得到一個(gè)性能較優(yōu)的漏洞挖掘模型,并應(yīng)用于真實(shí)數(shù)據(jù)檢測(cè)階段.
檢測(cè)階段中,在獲得漏洞挖掘模型之后,可以對(duì)目標(biāo)軟件程序進(jìn)行漏洞預(yù)測(cè).檢測(cè)階段的流程與學(xué)習(xí)階段在數(shù)據(jù)預(yù)處理和數(shù)據(jù)表征方面類(lèi)似,對(duì)目標(biāo)程序提取的表征向量化之后,輸入到學(xué)習(xí)階段得到的漏洞挖掘模型,從而得到預(yù)測(cè)結(jié)果.
近年來(lái),大量安全研究人員通過(guò)對(duì)安全漏洞產(chǎn)生的原理、條件和特征等方面進(jìn)行深入研究,采用各種數(shù)據(jù)表征方式和深度學(xué)習(xí)算法在不同程度上構(gòu)建了不同的漏洞挖掘模型.由于程序數(shù)據(jù)包含豐富的特征信息,如何構(gòu)建合適的數(shù)據(jù)表征方式最大程度上提取與漏洞相關(guān)的特征信息,是一個(gè)復(fù)雜艱巨的任務(wù).本文通過(guò)整理和分析現(xiàn)有研究工作,發(fā)現(xiàn)目前代碼表征方式主要可以分為5類(lèi),分別是:基于序列的表征方式、基于抽象語(yǔ)法樹(shù)的表征方式、基于圖的表征方式、基于文本的表征方式和基于混合的表征方式.圖4給出了基于不同代碼表征軟件漏洞挖掘文獻(xiàn)數(shù)量占比情況.
Fig. 4 The percentage of studies based on different code representations for software vulnerability mining圖4 基于不同代碼表征的軟件漏洞挖掘研究占比
具體而言,1)基于序列的表征方式對(duì)源代碼或二進(jìn)制文件進(jìn)行詞法分析,提取與字符流相關(guān)的標(biāo)識(shí)符、函數(shù)名和運(yùn)算符等關(guān)鍵特征信息,同時(shí)兼顧執(zhí)行路徑、函數(shù)調(diào)用序列和語(yǔ)句調(diào)用序列等信息.2)基于抽象語(yǔ)法樹(shù)的表征方式將程序源代碼解析為抽象語(yǔ)法樹(shù)結(jié)構(gòu)并從中提取與樹(shù)節(jié)點(diǎn)相關(guān)的語(yǔ)法信息.3)基于圖的表征方式則是通過(guò)使用圖數(shù)據(jù)結(jié)構(gòu)對(duì)源代碼的詞法和語(yǔ)義屬性進(jìn)行表示,使得能夠更加有效地抽象出深層次的代碼特征信息.4)基于文本的表征方式則是直接對(duì)從程序數(shù)據(jù)中提取出的特征詞進(jìn)行量化,用于描述和代替程序數(shù)據(jù)信息.5)基于混合的表征方式通常是融合多種特征表示方式,最大程度上豐富程序數(shù)據(jù)的特征信息.
如何選擇合適的向量編碼模型將抽取的特征轉(zhuǎn)換成向量表示形式,在一定程度上將直接影響模型計(jì)算的性能.常用的編碼模型有One-hot[55],Word2vec[56]和Sent2vec[57]等.One-hot[55]編碼將文本映射到向量空間,使用n維向量對(duì)n個(gè)文本單詞進(jìn)行一一對(duì)應(yīng)編碼,但在文本元素過(guò)多時(shí),會(huì)造成大量的冗余,且無(wú)法反映不同元素之間的聯(lián)系.Word2vec[56]為了克服One-hot[55]編碼的不足,對(duì)每個(gè)單詞分配固定長(zhǎng)度的向量,并為語(yǔ)義相似的單詞分配距離相近的向量,提升了深度學(xué)習(xí)模型理解自然語(yǔ)言的能力.Word2vec[56]包含連續(xù)詞袋模型(continuous bag-of-words, CBOW)和Skip-Gram兩種模型.其中,CBOW適合用于小樣本數(shù)據(jù)集,并以周?chē)~作為輸入,預(yù)測(cè)中心詞.而Skip-Gram適用于數(shù)據(jù)量較大的情況下,根據(jù)中心詞,預(yù)測(cè)其對(duì)應(yīng)的周?chē)~.Sent2vec[57]對(duì)Word2vec[56]中CBOW方法進(jìn)行擴(kuò)展,以整個(gè)句子作為輸入,并引入n-gram,增強(qiáng)語(yǔ)句中單詞順序的嵌入能力.
在模型學(xué)習(xí)階段,深度學(xué)習(xí)模型可以實(shí)現(xiàn)自動(dòng)化提取漏洞特征,且能夠獲得比“淺層”模型更好的檢測(cè)性能.本文通過(guò)整理和對(duì)比現(xiàn)有文獻(xiàn)發(fā)現(xiàn),目前應(yīng)用于漏洞挖掘領(lǐng)域常見(jiàn)的深度學(xué)習(xí)模型有:多層感知器(multi-layer perception, MLP)、卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network, RNN)、長(zhǎng)短期記憶網(wǎng)絡(luò)(long short-term memory network, LSTM)、門(mén)控循環(huán)單元(gated recurrent unit, GRU)、圖神經(jīng)網(wǎng)絡(luò)(graph neural network, GNN)、深度置信網(wǎng)絡(luò)(deep belief network, DBN)以及其他神經(jīng)網(wǎng)絡(luò)模型(other deep learning models, Others),如自編碼器(auto encoder, AE)、生成對(duì)抗網(wǎng)絡(luò)(generative adversarial network, GAN)等.
其中,MLP模型在非線性數(shù)據(jù)上表現(xiàn)較好,但該模型需要大量的訓(xùn)練數(shù)據(jù)實(shí)現(xiàn)擬合,且可解釋性不強(qiáng).CNN模型可以用來(lái)學(xué)習(xí)結(jié)構(gòu)化的空間數(shù)據(jù),但該模型在池化過(guò)程中會(huì)丟失大量有價(jià)值的信息,忽略局部與整體之間的關(guān)聯(lián)性.RNN模型可以用來(lái)處理時(shí)序數(shù)據(jù),來(lái)學(xué)習(xí)程序數(shù)據(jù)上下文依賴關(guān)系,但在處理序列過(guò)長(zhǎng)的數(shù)據(jù)時(shí),容易產(chǎn)生梯度消失問(wèn)題.LSTM模型是RNN模型的一個(gè)變體,在此基礎(chǔ)之上添加記憶單元和遺忘門(mén),使得能夠捕獲序列的長(zhǎng)期依賴關(guān)系.GRU模型在將LSTM模型的遺忘門(mén)、輸入門(mén)和輸出門(mén)合并轉(zhuǎn)化為更新門(mén)和重置門(mén),以較少的門(mén)函數(shù)將重要特征進(jìn)行保存.GNN模型可以用來(lái)學(xué)習(xí)圖中節(jié)點(diǎn)、邊或子圖的低維向量空間表示,以獲得深層次的程序數(shù)據(jù)表示.DBN模型可以對(duì)程序數(shù)據(jù)在不同概念的粒度上進(jìn)行抽象,在自動(dòng)化訓(xùn)練過(guò)程中通過(guò)調(diào)節(jié)自身的權(quán)重值持久化數(shù)據(jù)之間的依賴關(guān)系,具有更好的性能.AE是一種無(wú)監(jiān)督學(xué)習(xí)方法,對(duì)高維輸入信息進(jìn)行降維、進(jìn)行表征學(xué)習(xí).GAN包含一個(gè)生成器和一個(gè)判別器,分別用于自動(dòng)學(xué)習(xí)真實(shí)的數(shù)據(jù)分布和正確判別輸入數(shù)據(jù)是來(lái)自真實(shí)數(shù)據(jù)還是生成器.
為了使讀者宏觀上了解各深度學(xué)習(xí)算法應(yīng)用于軟件漏洞挖掘的研究情況,本文對(duì)該領(lǐng)域現(xiàn)有研究工作進(jìn)行整理和歸納,占比情況具體如圖5所示.其中,為了有效量化混合模型采用的深度學(xué)習(xí)算法,本文對(duì)其進(jìn)行了拆分,分別歸納到相應(yīng)的模型進(jìn)行統(tǒng)計(jì).例如,文獻(xiàn)[58]分別在CNN和RNN模型上進(jìn)行量化統(tǒng)計(jì)1次.
通過(guò)對(duì)現(xiàn)有基于深度學(xué)習(xí)的軟件漏洞挖掘文獻(xiàn)進(jìn)行梳理和分析,本文發(fā)現(xiàn)大部分工作主要從數(shù)據(jù)表征方式的改進(jìn)和學(xué)習(xí)模型的優(yōu)化2個(gè)方面提出新的漏洞挖掘方法,且偏向于數(shù)據(jù)表征方式的改進(jìn),這也是本文側(cè)重于以深度特征表示進(jìn)行研究綜述的依據(jù).
Fig. 5 The percentage of studies which applied different deep learning algorithms for software vulnerability mining圖5 軟件漏洞挖掘模型采用不同深度學(xué)習(xí)算法研究占比
通過(guò)整理和分析現(xiàn)有基于深度學(xué)習(xí)的漏洞挖掘研究工作,目前常見(jiàn)的代碼表征方式有序列表征、AST表征、圖表征、文本表征和混合表征.圖6給出了不同數(shù)據(jù)表征方式下,現(xiàn)有研究工作文獻(xiàn)數(shù)量從2013-01—2021-06的分布情況.本文對(duì)其整理和歸納,以便讀者有一個(gè)直觀的認(rèn)識(shí).因此,本節(jié)將以每種代碼表征方式為出發(fā)點(diǎn),分類(lèi)闡述現(xiàn)有具有代表性的基于深度學(xué)習(xí)的漏洞挖掘研究工作.同時(shí),在現(xiàn)有研究工作基礎(chǔ)之上,本文對(duì)每種表征方式的漏洞挖掘模型從不同角度進(jìn)行討論和分析,并給出觀點(diǎn),供感興趣的研究人員對(duì)該領(lǐng)域進(jìn)行進(jìn)一步研究.
Fig. 6 Literature muber of different code representations for vulnerability mining 圖6 不同代碼表征的漏洞挖掘文獻(xiàn)數(shù)量
序列表征是指對(duì)源代碼或二進(jìn)制文件進(jìn)行詞法分析,提取與字符流相關(guān)的標(biāo)識(shí)符、函數(shù)名和運(yùn)算符等關(guān)鍵特征信息.同時(shí)還包含執(zhí)行路徑、函數(shù)調(diào)用序列和語(yǔ)句調(diào)用序列等特征信息.基于序列表征的漏洞挖掘模型[58-72]是通過(guò)利用深度神經(jīng)網(wǎng)絡(luò)(deep neural network, DNN)自動(dòng)化提取序列特征信息進(jìn)行漏洞挖掘.文獻(xiàn)[59-60]均從函數(shù)調(diào)用序列出發(fā),實(shí)現(xiàn)漏洞挖掘.文獻(xiàn)[59]首次將深度學(xué)習(xí)應(yīng)用于序列特征提取,從庫(kù)/API函數(shù)調(diào)用序列出發(fā),采用雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(bidirectional long short-term memory network, BLSTM)構(gòu)建VulDeePecker漏洞檢測(cè)系統(tǒng).基于啟發(fā)式方法將程序源代碼轉(zhuǎn)化為“code gadget”代碼集合,使其產(chǎn)生一組語(yǔ)義聯(lián)系但不一定連續(xù)的多行代碼,檢測(cè)出4種未在NVD數(shù)據(jù)庫(kù)中報(bào)告的漏洞信息,具有一定的有效性.然而,VulDeePecker[59]用例漏洞類(lèi)型較少,誤報(bào)率較大,且只能給出一段代碼中是否包含漏洞信息,無(wú)法精確提供與漏洞相關(guān)的位置信息.
文獻(xiàn)[60]在文獻(xiàn)[59]基礎(chǔ)上引入控制依賴關(guān)系,提出“code attention”,以函數(shù)調(diào)用序列為關(guān)鍵特征信息構(gòu)建一個(gè)多分類(lèi)神經(jīng)網(wǎng)絡(luò)模型μVulDeePecker,從而輔助系統(tǒng)精確捕捉40種漏洞的挖掘工作,具有較高的F1-指數(shù),并檢測(cè)出開(kāi)源軟件Xen中2種未報(bào)告的安全漏洞類(lèi)型.然而,在提取全局特征和局部特征時(shí)存在一定的學(xué)習(xí)偏差,提升了誤報(bào)率.
文獻(xiàn)[59-61]在構(gòu)建學(xué)習(xí)模型時(shí),僅使用單深度學(xué)習(xí)模型進(jìn)行特征提取.為了對(duì)比單深度學(xué)習(xí)模型和混合深度學(xué)習(xí)模型的效果,文獻(xiàn)[58,62]采用混合深度學(xué)習(xí)模型進(jìn)行特征提取.文獻(xiàn)[62]分別使用CNN,LSTM和混合模型CNN+LSTM進(jìn)行漏洞特征提取,從二進(jìn)制程序執(zhí)行過(guò)程中收集近萬(wàn)條函數(shù)調(diào)用序列作為特征用來(lái)訓(xùn)練模型.其實(shí)驗(yàn)結(jié)果發(fā)現(xiàn)采用混合神經(jīng)網(wǎng)絡(luò)模型在進(jìn)行特征訓(xùn)練時(shí),往往能夠挖掘出更多的特征信息,具有較好的漏洞挖掘效果.
然而,在實(shí)際漏洞應(yīng)用場(chǎng)景中,由于對(duì)全局特征和局部特征的學(xué)習(xí)偏差,準(zhǔn)確獲取漏洞特征信息并非易事.文獻(xiàn)[58]針對(duì)文獻(xiàn)[63]存在的特征學(xué)習(xí)偏差問(wèn)題,采用底層虛擬機(jī)中間表示技術(shù)(lower level virtual machine intermediate representation, LLVM IR)和混合神經(jīng)網(wǎng)絡(luò)模型對(duì)源代碼關(guān)鍵序列結(jié)構(gòu)信息進(jìn)行表征,用于自動(dòng)化漏洞檢測(cè).該表征方式能夠同時(shí)兼顧詞法分析并從細(xì)粒度上進(jìn)行漏洞挖掘,能夠精確識(shí)別出漏洞的具體位置.通過(guò)對(duì)比不同的單深度學(xué)習(xí)模型方法,發(fā)現(xiàn)基于混合神經(jīng)網(wǎng)絡(luò)的漏洞挖掘模型具有較好的性能.
通過(guò)調(diào)研基于序列表征的漏洞挖掘研究工作發(fā)現(xiàn),文獻(xiàn)[58-71]均采用手工標(biāo)注方式解決樣本之間數(shù)據(jù)不平衡問(wèn)題,花費(fèi)了大量的時(shí)間成本,且具有較高的誤報(bào)率.為了解決二進(jìn)制軟件漏洞檢測(cè)中高誤報(bào)率和數(shù)據(jù)不平衡問(wèn)題,文獻(xiàn)[72]結(jié)合內(nèi)核方法和雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(bidirectional recurrent neural network, BRNN)構(gòu)建深度代價(jià)敏感內(nèi)核機(jī)模型(deep cost-sensitive kernel machine, DCKM),用于處理機(jī)器指令集序列.該研究將多種數(shù)據(jù)集進(jìn)行切分,分別與6種開(kāi)源軟件進(jìn)行對(duì)比,其實(shí)驗(yàn)結(jié)果表明結(jié)合深度學(xué)習(xí)的代價(jià)敏感內(nèi)核機(jī)模型能夠有效解決樣本之間數(shù)據(jù)不平衡問(wèn)題,降低誤報(bào)率.同時(shí),本文發(fā)現(xiàn)該工作在多源數(shù)據(jù)集漏洞收集方面,能夠?qū)?shù)據(jù)集自動(dòng)化標(biāo)注有一定的借鑒意義.
基于序列表征的漏洞挖掘模型利用深度神經(jīng)網(wǎng)絡(luò)自動(dòng)化提取序列特征信息,本文從現(xiàn)有的基于序列表征的漏洞挖掘研究工作中,挑選和總結(jié)了5項(xiàng)具有代表性的研究工作,具體如表1所示.表1分別從分析對(duì)象、模型構(gòu)造、檢測(cè)細(xì)粒度、漏洞類(lèi)型以及性能多個(gè)角度進(jìn)行分析和討論,并給出了基于序列表征的漏洞挖掘模型領(lǐng)域的一些觀點(diǎn).
Table 1 Comparisons of Some Reviewed Works Which Applied Sequence-based Feature Representation for Vulnerability Mining表1 基于序列表征的漏洞挖掘模型部分工作對(duì)比
討論1.由表1可知,從分析對(duì)象而言,對(duì)C/C++源代碼以及二進(jìn)制代碼中存在的漏洞挖掘是目前的研究熱點(diǎn).從采用的深度學(xué)習(xí)模型方面而言,相比于采用單深度學(xué)習(xí)模型[59-61],利用混合模型[58,62]學(xué)習(xí)序列漏洞特征信息,往往具有較好的漏洞檢測(cè)能力,在性能方面可見(jiàn)一斑.從檢測(cè)細(xì)粒度上看,由于沒(méi)有一個(gè)規(guī)范統(tǒng)一的漏洞數(shù)據(jù)集,不同漏洞挖掘工作構(gòu)建的數(shù)據(jù)集在一定程度上對(duì)檢測(cè)細(xì)粒度產(chǎn)生了不同的影響.從漏洞類(lèi)型上而言,文獻(xiàn)[58,61-62]能夠?qū)崿F(xiàn)多種漏洞類(lèi)型的挖掘.而針對(duì)常見(jiàn)的緩沖區(qū)溢出類(lèi)型(CWE-119)和資源管理溢出類(lèi)型(CWE-399)漏洞挖掘,文獻(xiàn)[59]的挖掘效果較優(yōu)于文獻(xiàn)[72],取得了4.7%的提升.
觀點(diǎn)1.基于序列表征的漏洞挖掘模型能夠直接對(duì)代碼進(jìn)行詞法分析,并對(duì)字符流相關(guān)的關(guān)鍵特征信息、執(zhí)行路徑和調(diào)用序列等信息進(jìn)行統(tǒng)計(jì)得到序列表征,映射到向量空間作為神經(jīng)模型的輸入.通過(guò)對(duì)比和歸納現(xiàn)有研究工作,本文發(fā)現(xiàn):1)利用DNN學(xué)習(xí)得到的序列表征與漏洞特征的關(guān)聯(lián)性較強(qiáng),具有良好的漏洞檢測(cè)能力;2)相比于單深度學(xué)習(xí)模型,混合模型學(xué)習(xí)到的序列特征信息更加豐富,檢測(cè)能力也相對(duì)較強(qiáng);3)在漏洞挖掘過(guò)程中,提取所需的序列特征需要大量的訓(xùn)練數(shù)據(jù),再進(jìn)行向量化輸入到深度學(xué)習(xí)模型之中,檢測(cè)速度一般較慢.
抽象語(yǔ)法樹(shù)(abstract syntax tree, AST)是程序編譯過(guò)程中對(duì)源代碼抽象語(yǔ)法結(jié)構(gòu)的一種樹(shù)狀表現(xiàn)形式,其中每一個(gè)樹(shù)節(jié)點(diǎn)代表實(shí)際代碼的一種語(yǔ)法結(jié)構(gòu)信息[73].基于抽象語(yǔ)法樹(shù)特征表示的漏洞挖掘模型[74-87]通過(guò)使用Clang,ANTLR和Lex等開(kāi)源軟件將程序源代碼文件生成AST,接著對(duì)AST節(jié)點(diǎn)進(jìn)行遍歷轉(zhuǎn)化為數(shù)據(jù)流結(jié)構(gòu),從而提取層次化的特征信息.
文獻(xiàn)[74-76]在不同程度上均實(shí)現(xiàn)了項(xiàng)目?jī)?nèi)漏洞預(yù)測(cè)(within-project vulnerability prediction, WPVP),并取得了不錯(cuò)的性能.文獻(xiàn)[74]結(jié)合雙向門(mén)控循環(huán)單元(bidirectional gated recurrent unit, BGRU)提出了一種基于AST表征的具有可解釋性的細(xì)粒度漏洞挖掘模型.該模型能夠區(qū)分不同行和不同語(yǔ)法元素對(duì)于漏洞信息的重要性,對(duì)漏洞AST中節(jié)點(diǎn)關(guān)鍵信息進(jìn)行標(biāo)記,使得對(duì)漏洞的具體位置進(jìn)行精確定位,達(dá)到細(xì)粒度的漏洞挖掘.然而,該工作在生成AST的過(guò)程中時(shí)間漫長(zhǎng)且容易出現(xiàn)AST語(yǔ)義信息爆炸問(wèn)題,難以應(yīng)用于規(guī)模較大的軟件系統(tǒng),具有一定的局限性.
文獻(xiàn)[75]對(duì)生成后的AST規(guī)模如何縮減這方面進(jìn)行了深入的研究,提出了一種新型切割A(yù)ST神經(jīng)網(wǎng)絡(luò)模型ASTNN,用來(lái)捕捉詞法和語(yǔ)義信息.該研究在語(yǔ)句級(jí)別上,將一個(gè)代碼片段得到的較大規(guī)模的AST分割成多個(gè)小語(yǔ)句樹(shù),采用BGRU對(duì)生成的代碼片段進(jìn)行訓(xùn)練.他們的研究成果取得了不錯(cuò)的實(shí)驗(yàn)性能.但相比于文獻(xiàn)[74],該方案只能用于特定的代碼克隆漏洞檢測(cè),無(wú)法實(shí)現(xiàn)多類(lèi)型漏洞檢測(cè)以及跨項(xiàng)目漏洞檢測(cè)任務(wù).
在基于序列表征的漏洞挖掘模型中,利用混合模型學(xué)習(xí)漏洞表征,常常具有較好的漏洞檢測(cè)能力,文獻(xiàn)[76]針對(duì)緩沖區(qū)溢出類(lèi)型和資源管理異常類(lèi)型漏洞,分別使用CNN與LSTM提取漏洞的全局和局部特征信息,提出一種結(jié)合傅里葉變換的深度卷積LSTM神經(jīng)網(wǎng)絡(luò)模型用于漏洞檢測(cè),并利用注意力機(jī)制對(duì)關(guān)鍵代碼特征進(jìn)行重要性分析,使得模型具有更加良好的解釋性.
通過(guò)調(diào)研現(xiàn)有基于AST表征的漏洞挖掘研究工作,本文發(fā)現(xiàn)針對(duì)跨項(xiàng)目漏洞預(yù)測(cè)(cross-project vulnerability prediction, CPVP)研究在文獻(xiàn)數(shù)量上較少.事實(shí)上,跨項(xiàng)目漏洞挖掘需要在一個(gè)項(xiàng)目上構(gòu)造漏洞挖掘模型從而實(shí)現(xiàn)另一個(gè)項(xiàng)目的漏洞挖掘,在實(shí)際開(kāi)發(fā)場(chǎng)景之中,由于AST生成規(guī)模較大和容易出現(xiàn)語(yǔ)義爆炸等問(wèn)題,常常導(dǎo)致模型的性能不佳.
在CPVP研究中,針對(duì)文獻(xiàn)[75]易出現(xiàn)的AST語(yǔ)義信息爆炸問(wèn)題,文獻(xiàn)[77]發(fā)現(xiàn)結(jié)合DBN對(duì)AST語(yǔ)法語(yǔ)義信息進(jìn)行特征降維,能夠有效增強(qiáng)CPVP的能力.文獻(xiàn)[78]首次將遷移學(xué)習(xí)(transfer learning, TL)應(yīng)用于跨項(xiàng)目軟件漏洞挖掘,證明發(fā)現(xiàn)即使在小數(shù)量的數(shù)據(jù)標(biāo)簽項(xiàng)目中,也能取得不錯(cuò)的檢測(cè)效果.該研究從6個(gè)開(kāi)源軟件中收集函數(shù)層次的數(shù)據(jù)集,實(shí)驗(yàn)結(jié)果表明:無(wú)論是在WPVP或者在CPVP中,將AST和TL應(yīng)用于漏洞挖掘具有較好的漏洞檢測(cè)能力.
為了實(shí)現(xiàn)CPVP中細(xì)粒度的漏洞挖掘,文獻(xiàn)[79]在文獻(xiàn)[75-76]基礎(chǔ)上提出了基于注意力機(jī)制的雙向長(zhǎng)短期記憶網(wǎng)絡(luò)模型(attention-based bidirectional long short-term memory network, ABLSTM),用于漏洞特征提取,取得了較好的漏洞檢測(cè)效果.然而在提取詞法語(yǔ)義的特征模型中沒(méi)有太大的變化,因此本文推測(cè)基于AST表征的漏洞挖掘模型在一定程度上雖然較好地保留了代碼的語(yǔ)法語(yǔ)義特征,但在進(jìn)行漏洞特征提取時(shí)效果比較有限.
基于抽象語(yǔ)法樹(shù)的漏洞挖掘模型能夠挖掘源代碼層次化的特征信息,本文從基于抽象語(yǔ)法樹(shù)的漏洞挖掘研究工作中挑選和總結(jié)了6項(xiàng)具有代表性的研究工作,具體如表2所示.表2分別從分析對(duì)象、模型構(gòu)造、是否跨項(xiàng)目、漏洞類(lèi)型和性能等多個(gè)方面進(jìn)行對(duì)比和分析.
Table 2 Comparisons of Some Reviewed Works Which Applied AST-based Feature Representation for Vulnerability Mining表2 基于抽象語(yǔ)法樹(shù)表征的漏洞挖掘模型部分工作對(duì)比
討論2.本文發(fā)現(xiàn)基于AST表征方式的漏洞挖掘模型從分析對(duì)象而言主要以C/C++和Java源代碼為主,針對(duì)其他編程語(yǔ)言漏洞挖掘的研究相對(duì)較少.在模型構(gòu)造方面,采用混合神經(jīng)網(wǎng)絡(luò)[76]的漏洞挖掘效果優(yōu)于單深度學(xué)習(xí)模型[74-75,77-79].從檢測(cè)細(xì)粒度而言,檢測(cè)粒度越“細(xì)”,模型的挖掘性能越高.也就是說(shuō),從語(yǔ)句級(jí)別[75]進(jìn)行漏洞特征的提取,會(huì)獲得比函數(shù)級(jí)別[76,79]和文件級(jí)別[77-78]更好的挖掘效果.從是否能夠?qū)崿F(xiàn)跨項(xiàng)目漏洞挖掘而言,能夠發(fā)現(xiàn)基于AST表征方式的漏洞挖掘模型在挖掘能力上明顯優(yōu)于基于序列表征方式的漏洞挖掘模型.從漏洞類(lèi)型上看,基于AST表征方式的漏洞挖掘不僅能夠?qū)崿F(xiàn)某種特定類(lèi)型漏洞類(lèi)型[75-76]的挖掘,也能實(shí)現(xiàn)多種漏洞類(lèi)型[74,77-79]的挖掘.通過(guò)分析發(fā)現(xiàn),降維技術(shù)和遷移學(xué)習(xí)能夠在CPVP中取得不錯(cuò)的效果.
觀點(diǎn)2.基于AST表征的漏洞挖掘模型能夠?qū)崿F(xiàn)對(duì)程序源代碼的抽象表示,完整地保留程序的語(yǔ)法語(yǔ)義信息,刪除了一些與實(shí)際語(yǔ)法結(jié)構(gòu)不相關(guān)的細(xì)節(jié),如程序的注釋和分界符號(hào)等,適合對(duì)程序進(jìn)行分析.因此,本文發(fā)現(xiàn):1)相比于基于序列表征的漏洞挖掘模型,基于AST表征的漏洞挖掘模型能夠完整保留源代碼的詞法和語(yǔ)義語(yǔ)法信息,檢測(cè)能力相對(duì)較優(yōu);2)由于AST規(guī)模較大,在生成和提取函數(shù)節(jié)點(diǎn)時(shí)會(huì)花費(fèi)較長(zhǎng)的時(shí)間成本,檢測(cè)速度也相對(duì)較慢.
基于圖特征表示的漏洞挖掘模型[30,88-96]是通過(guò)使用圖數(shù)據(jù)結(jié)構(gòu)對(duì)源代碼的詞法和語(yǔ)義屬性進(jìn)行表示,使得能夠更加有效地抽象出深層次的代碼特征信息.目前常用的圖結(jié)構(gòu)有:DFG、CFG、PDG、數(shù)據(jù)依賴圖(data dependency graph, DDG)和代碼屬性圖 (code property graph, CPG)[51]等.相比于AST對(duì)源代碼進(jìn)行直接表示,DFG是一種結(jié)構(gòu)化系統(tǒng)分析方法,以圖形方式表示源代碼在系統(tǒng)內(nèi)部的邏輯流向.CFG則用來(lái)描述代碼語(yǔ)句的執(zhí)行順序,以及程序運(yùn)行過(guò)程中遍歷到的所有執(zhí)行路徑.PDG對(duì)源代碼進(jìn)行標(biāo)記的有向多重圖,能夠反映程序的控制依賴和數(shù)據(jù)依賴關(guān)系.DDG是描述數(shù)據(jù)之間的相互制約關(guān)系,主要分為函數(shù)依賴和連接依賴關(guān)系.CPG是將程序的CFG和DDG等信息進(jìn)行結(jié)合,從而更好地表征程序的結(jié)構(gòu)信息.
基于圖表征的漏洞挖掘模型主要從不同程序源代碼或二進(jìn)制文件中進(jìn)行安全漏洞挖掘.文獻(xiàn)[30,88-89]從語(yǔ)句層次出發(fā)進(jìn)行漏洞挖掘,均取得了不錯(cuò)的性能.文獻(xiàn)[30]采用靜態(tài)代碼屬性從CFG和DDG提取源代碼中與漏洞特征相關(guān)的信息,實(shí)現(xiàn)Web應(yīng)用中SQLI和XSS漏洞挖掘.該研究基于圖表征對(duì)比了不同的機(jī)器學(xué)習(xí)模型和MLP的性能,發(fā)現(xiàn)采用MLP的實(shí)驗(yàn)結(jié)果要比同一數(shù)據(jù)集上采用不同機(jī)器學(xué)習(xí)模型的實(shí)驗(yàn)結(jié)果效果好得多.但圖的生成過(guò)程引入了不必要的重復(fù)節(jié)點(diǎn)信息,降低了模型的有效性.
文獻(xiàn)[88]在數(shù)據(jù)預(yù)處理階段將數(shù)據(jù)依賴和控制依賴關(guān)系,通過(guò)嚴(yán)格的去重步驟,移除了重復(fù)編譯的特征向量并生成系統(tǒng)依賴圖(system dependency graph, SDG),輸入到CNN中進(jìn)行學(xué)習(xí)得到圖表征.SDG由去重后的最小中間代碼表示生成而得,發(fā)現(xiàn)具有中間表示學(xué)習(xí)階段的方法有更好的性能.然而,文獻(xiàn)[30,88]實(shí)現(xiàn)了單個(gè)函數(shù)中語(yǔ)句級(jí)別的漏洞檢測(cè),無(wú)法進(jìn)行多個(gè)函數(shù)比對(duì).為了同時(shí)實(shí)現(xiàn)多個(gè)函數(shù)比對(duì)和在語(yǔ)句級(jí)別上的漏洞檢測(cè),文獻(xiàn)[89]將深度學(xué)習(xí)與程序切片技術(shù)相結(jié)合,提出了一種面向二進(jìn)制代碼漏洞檢測(cè)的深度學(xué)習(xí)系統(tǒng)BVDetector.首先對(duì)二進(jìn)制程序的數(shù)據(jù)流和控制流分析,基于CFG提取庫(kù)/API函數(shù)調(diào)用,并基于PDG對(duì)多個(gè)庫(kù)/API函數(shù)調(diào)用生成各自對(duì)應(yīng)的程序切片,采用BGRU實(shí)現(xiàn)語(yǔ)句級(jí)別的漏洞挖掘,提升了漏洞挖掘的效果.文獻(xiàn)[30,88-89]都是從語(yǔ)句級(jí)別出發(fā)構(gòu)建了不同的深度學(xué)習(xí)模型用于漏洞挖掘,但表現(xiàn)出來(lái)的性能有所不佳.這就表明圖表征方式的優(yōu)勢(shì)沒(méi)有完全挖掘出來(lái),應(yīng)該構(gòu)建適合挖掘圖語(yǔ)法語(yǔ)義信息的深度學(xué)習(xí)模型,實(shí)現(xiàn)挖掘性能的提升.
不少研究工作采用圖神經(jīng)網(wǎng)絡(luò)(graph neural network, GNN)從代碼塊級(jí)別[90]和函數(shù)級(jí)別[91]實(shí)現(xiàn)漏洞挖掘,取得了不錯(cuò)的效果.文獻(xiàn)[90]以C#編程語(yǔ)言為分析對(duì)象,從代碼塊級(jí)別出發(fā),預(yù)測(cè)每個(gè)代碼塊中含有的變量名(VARNAMING)和判斷變量是否被正確使用(VARMISUSE).他們利用PDG邊之間的語(yǔ)法和語(yǔ)義信息,采用GNN構(gòu)建漏洞挖掘模型,取得了較好的檢測(cè)能力.然而文獻(xiàn)[30,88-90]僅能挖掘現(xiàn)有已知的漏洞類(lèi)型,無(wú)法檢測(cè)其他未知類(lèi)型的漏洞,具有一定的局限性.
文獻(xiàn)[91]首次將深度學(xué)習(xí)技術(shù)與漏洞外推(vulnerability extrapolation)概念相結(jié)合,研究利用PDG提取已知漏洞函數(shù)級(jí)別的控制依賴和數(shù)據(jù)依賴關(guān)系,采用GNN模型進(jìn)行漏洞模式外推,發(fā)現(xiàn)了一些未曾公布的漏洞信息,這就表明將深度學(xué)習(xí)技術(shù)與漏洞外推結(jié)合的漏洞挖掘模型具有一定的有效性.然而,由于需要對(duì)已知漏洞的特征信息進(jìn)行全面的深入分析,這就要求安全研究人員構(gòu)建合適的模型用于學(xué)習(xí)代碼表征,同時(shí)漏洞外推只能針對(duì)某一種特定漏洞進(jìn)行挖掘,無(wú)法檢測(cè)其他類(lèi)型的漏洞,可擴(kuò)展性不強(qiáng).
基于圖表征的漏洞挖掘模型通過(guò)使用圖數(shù)據(jù)結(jié)構(gòu)對(duì)源代碼特征進(jìn)行表示,使得能夠抽象出深層次的代碼特征信息.本文從現(xiàn)有的基于圖表征的漏洞挖掘研究工作中,選擇其中5項(xiàng)具有代表性的研究工作進(jìn)行了總結(jié)和對(duì)比,具體情況如表3所示.表3分別從分析對(duì)象、模型構(gòu)造、檢測(cè)細(xì)粒度、漏洞類(lèi)型以及性能多個(gè)角度進(jìn)行分析和討論.
Table 3 Comparisons of Some Reviewed Works Which Applied Graph-based Feature Representation for Vulnerability Mining表3 基于圖表征的漏洞挖掘模型部分工作對(duì)比
討論3.文獻(xiàn)[30,88-91]在不同程度上構(gòu)建了基于圖表征的漏洞挖掘模型,從分析對(duì)象而言,基于圖表征方式的漏洞挖掘模型能夠?qū)崿F(xiàn)多種編程語(yǔ)言[30,88,90-91]以及二進(jìn)制文件[89]的漏洞挖掘.從檢測(cè)細(xì)粒度而言,以基本塊屬性為檢測(cè)細(xì)粒度的圖表征方式[90],檢測(cè)效果相比于函數(shù)級(jí)別和語(yǔ)句級(jí)別的圖表征方式[30,88-89,91]欠佳.從挖掘的漏洞類(lèi)型來(lái)看,基于圖表征方式的漏洞挖掘模型在特定的漏洞類(lèi)型挖掘[30,,89-90]以及多種類(lèi)型漏洞挖掘[88,91]方面,均取得了不錯(cuò)的檢測(cè)效果.
觀點(diǎn)3.基于圖的表征方式能夠抽象出源代碼中詞法和語(yǔ)義更深層次的特征信息.但由于生成圖表征這一過(guò)程復(fù)雜性較高,以及構(gòu)建深度學(xué)習(xí)模型算法存在時(shí)間復(fù)雜度和空間復(fù)雜度較高的問(wèn)題.因此,本文發(fā)現(xiàn):1)選擇圖表征能在一定程度上保留源代碼完整的語(yǔ)法和語(yǔ)義信息,能夠幫助提升漏洞挖掘的效果,但檢測(cè)速度較慢,很難應(yīng)用于大規(guī)模的軟件系統(tǒng);2)利用圖嵌入技術(shù)和圖神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)圖表征,可能會(huì)帶來(lái)更好的漏洞挖掘效果;3)將深度學(xué)習(xí)與漏洞外推相結(jié)合,能夠有效挖掘一種特定類(lèi)型的漏洞,在未來(lái)的研究中如何增強(qiáng)現(xiàn)有漏洞外推工作的能力,是一個(gè)值得探索的研究課題.
代碼文本是指源代碼的表面文本、匯編指令和代碼lexer處理的源代碼.文本特征表示是指對(duì)從文本中提取出的特征詞進(jìn)行量化,用于描述和代替文本信息.目前,基于文本特征表示的漏洞挖掘模型[97-107]常使用分詞和詞頻統(tǒng)計(jì)等方法對(duì)程序源代碼進(jìn)行表征,以提取有效的源代碼特征信息.
文獻(xiàn)[97-102]采用文本挖掘與深度學(xué)習(xí)技術(shù)結(jié)合的方式實(shí)現(xiàn)漏洞挖掘,將深度學(xué)習(xí)應(yīng)用于程序分析,均取得了不錯(cuò)的檢測(cè)性能.文獻(xiàn)[97]提出了構(gòu)建程序向量表示的編碼標(biāo)準(zhǔn),利用詞頻統(tǒng)計(jì)方法對(duì)Java源文件的漏洞模式進(jìn)行表征,采用單深層全卷積神經(jīng)網(wǎng)絡(luò)(fully convolutional networks, FCN)對(duì)特征向量進(jìn)行學(xué)習(xí)和訓(xùn)練,其實(shí)驗(yàn)結(jié)果表明深度學(xué)習(xí)模型能夠獲得比“淺層”學(xué)習(xí)模型更好的挖掘性能.事實(shí)上,僅依靠詞法分析沒(méi)有考慮到語(yǔ)義的上下文關(guān)系,只對(duì)程序源代碼信息進(jìn)行了粗糙的語(yǔ)法語(yǔ)義信息提取,限制了漏洞挖掘模型的性能.
文獻(xiàn)[99-101]以C/C++為分析對(duì)象,在不同程度上構(gòu)建了深度學(xué)習(xí)模型用于漏洞挖掘.文獻(xiàn)[99]發(fā)現(xiàn)僅使用詞法分析得到的漏洞特征[97]具有較低的性能,將CNN與NLP相結(jié)合抽象出候選集樣本中的特征,提出了一個(gè)系統(tǒng)化的特征提取框架PreNNsem,用于漏洞挖掘.文獻(xiàn)[100]將遷移學(xué)習(xí)應(yīng)用于漏洞挖掘,將基于轉(zhuǎn)換器的雙向編碼表征(bidirectional encoder representation from transform, BERT)方法與BLSTM結(jié)合,從文件級(jí)別出發(fā),實(shí)現(xiàn)了從英語(yǔ)文本信息到計(jì)算機(jī)文件特征提取的過(guò)渡,取得了不錯(cuò)的檢測(cè)性能.然而,由于檢測(cè)的細(xì)粒度只能從文件級(jí)別出發(fā),缺少對(duì)程序代碼語(yǔ)義的信息提取,降低了模型的挖掘性能.
除利用FCN[97],CNN[99]和BLSTM[100]從語(yǔ)料庫(kù)中提取漏洞上下文模式和結(jié)構(gòu)信息之外,文獻(xiàn)[101]從語(yǔ)句級(jí)別提取語(yǔ)法語(yǔ)義信息,采用神經(jīng)記憶網(wǎng)絡(luò)(neural memory network, NMN)將源代碼的行編碼為特征向量,并存儲(chǔ)到內(nèi)部記憶塊中,有效提升了緩沖區(qū)溢出漏洞類(lèi)型挖掘的性能.文獻(xiàn)[102]以PHP源代碼為分析對(duì)象,結(jié)合深度學(xué)習(xí)技術(shù)和NLP解決PHP Web應(yīng)用程序中SQL注入漏洞檢測(cè)問(wèn)題,豐富了漏洞挖掘的能力.通過(guò)分析基于文本表征的漏洞挖掘研究工作發(fā)現(xiàn),大部分研究工作[97-102]僅使用各自構(gòu)建的數(shù)據(jù)集進(jìn)行漏洞挖掘,無(wú)法進(jìn)行基準(zhǔn)參考.文獻(xiàn)[103]為了對(duì)比不同深度學(xué)習(xí)模型在同一數(shù)據(jù)集上的表現(xiàn)效果,分別采用CNN和RNN進(jìn)行漏洞特征提取,從函數(shù)級(jí)數(shù)據(jù)出發(fā),設(shè)計(jì)了C/C++詞法分析器歸一化標(biāo)識(shí)符信息.其實(shí)驗(yàn)結(jié)果發(fā)現(xiàn)在同一數(shù)據(jù)集上CNN表現(xiàn)出比RNN更好的性能.
基于文本表征的漏洞挖掘模型直接將源代碼作為文本處理,能夠有效地提取源代碼特征信息.本文從現(xiàn)有的基于文本表征的漏洞挖掘研究工作中,選擇其中6項(xiàng)具有代表性的研究工作進(jìn)行了總結(jié)和對(duì)比,具體情況如表4所示.表4分別從分析對(duì)象、模型構(gòu)造、檢測(cè)細(xì)粒度、漏洞類(lèi)型以及性能多個(gè)角度進(jìn)行分析和討論.
Table 4 Comparisons of Some Reviewed Works Which Applied Text-based Feature Representation for Vulnerability Mining表4 基于文本表征的漏洞挖掘模型部分工作對(duì)比
討論4.相比于基于序列、基于AST以及基于圖3種表征方式的漏洞挖掘模型,基于文本表征的漏洞挖掘模型采用DNN直接將源代碼作為文本進(jìn)行輸入,能抽象出隱藏在代碼中的語(yǔ)法語(yǔ)義信息.從分析對(duì)象而言,基于文本表征的漏洞挖掘模型能夠采用不同類(lèi)型的網(wǎng)絡(luò)結(jié)構(gòu)從各種輸入數(shù)據(jù)中提取抽象特征,從而挖掘易受攻擊的代碼片段的語(yǔ)義特征.在模型方面,FCN可以擬合高度非線性和抽象的模式,比傳統(tǒng)機(jī)器學(xué)習(xí)算法更有發(fā)展?jié)摿97].CNN模型可以用來(lái)學(xué)習(xí)結(jié)構(gòu)化的空間數(shù)據(jù),能夠輔助安全研究人員進(jìn)行漏洞挖掘的工作[99,103].RNN和它的變形模型能夠捕獲順序數(shù)據(jù)的長(zhǎng)期依賴關(guān)系,對(duì)于理解多種類(lèi)型漏洞的語(yǔ)義至關(guān)重要[100,102-103].最新的研究工作使用NMN用來(lái)存儲(chǔ)具有長(zhǎng)期依賴關(guān)系的代碼文本,取得了不錯(cuò)的效果[101].
觀點(diǎn)4.從文獻(xiàn)數(shù)量上來(lái)看,將文本挖掘與深度學(xué)習(xí)技術(shù)結(jié)合的方法相對(duì)較少,針對(duì)不同的分析對(duì)象、如何構(gòu)建合適的深度網(wǎng)絡(luò)模型提取代碼的上下文依賴關(guān)系和設(shè)計(jì)統(tǒng)一公開(kāi)的數(shù)據(jù)集等方面,基于文本特征表示的漏洞挖掘模型依然是一個(gè)值得研究的方向.
基于混合特征表示的漏洞挖掘模型[108-123]是指結(jié)合序列特征表示、抽象語(yǔ)法樹(shù)特征表示、圖特征表示和文本特征表示中至少2種特征表示方法,用于源代碼詞法和語(yǔ)義信息的有效提取.相比于單個(gè)特征表示的漏洞挖掘模型,基于混合特征表示的漏洞挖掘模型往往具有較高的性能.
使用單表征方式在一定程度上能夠抽象出代碼的語(yǔ)法和語(yǔ)義信息,但由于易受攻擊的代碼模式多種多樣,且代碼片段之間的上下文依賴關(guān)系錯(cuò)綜復(fù)雜,定義通用描述所有類(lèi)型的特征集是幾乎不可能的一項(xiàng)工作.文獻(xiàn)[108-112]采取多個(gè)表征形式盡可能完整地提取代碼片段特征信息,來(lái)進(jìn)一步彌補(bǔ)語(yǔ)義之間的差距.
早期的混合特征提取方法[50]需要安全研究人員手工進(jìn)行,無(wú)法自動(dòng)化地進(jìn)行特征提取.文獻(xiàn)[108]面向Android二進(jìn)制文件提取符號(hào)特征序列信息和AST語(yǔ)義特征共同構(gòu)建缺陷特征,采用DNN來(lái)進(jìn)行缺陷預(yù)測(cè),其受試者工作特征曲線(area under curve, AUC)在WPVP和CPVP中均取得了不錯(cuò)的實(shí)驗(yàn)性能.
文獻(xiàn)[109-112]使用AST和圖表示方法共同提取漏洞特征,提高了模型對(duì)程序代碼的表示能力.文獻(xiàn)[109]從函數(shù)級(jí)數(shù)據(jù)出發(fā),采用一種復(fù)合流動(dòng)挖掘模型,以AST為基礎(chǔ)骨架,增加CFG和DFG用于追蹤控制流和數(shù)據(jù)流的依賴關(guān)系.采用GNN對(duì)圖表征進(jìn)行建模,提升模型對(duì)程序代碼的理解能力.文獻(xiàn)[110]提出了基于語(yǔ)法、基于語(yǔ)義和向量表示的漏洞挖掘框架SySeVR,側(cè)重于抽象出與過(guò)程間與過(guò)程內(nèi)漏洞相關(guān)的語(yǔ)法和語(yǔ)義信息的程序表示,應(yīng)用于多種開(kāi)源軟件產(chǎn)品,檢測(cè)到了15個(gè)在NVD中未報(bào)告的漏洞,進(jìn)一步證明了該工作的有效性.文獻(xiàn)[111]在文獻(xiàn)[110]基礎(chǔ)之上,引入LLVM定位漏洞具體的位置,對(duì)比了不同的深度學(xué)習(xí)模型,表明BGRU取得了最佳的檢測(cè)效果.
一般從直觀上認(rèn)為,提取的特征越復(fù)雜,所得到的語(yǔ)法和語(yǔ)義信息越豐富,檢測(cè)效果會(huì)較優(yōu).但在文獻(xiàn)[112]中提出了一種基于簡(jiǎn)化代碼屬性圖表征的漏洞挖掘模型,從函數(shù)級(jí)數(shù)據(jù)出發(fā),以較少的表征信息最大程度上保留了漏洞的特征信息,選取GNN和MLP自動(dòng)學(xué)習(xí)表征,其實(shí)驗(yàn)結(jié)果發(fā)現(xiàn)該方法用于漏洞挖掘時(shí),具有良好的性能.
基于混合表征的漏洞挖掘模型采取多種特征表示方法,用于提取源代碼詞法和語(yǔ)義信息.本文從現(xiàn)有的基于混合表征的漏洞挖掘研究工作中,選擇其中5項(xiàng)具有代表性的研究工作進(jìn)行了總結(jié)和對(duì)比,具體情況如表5所示.表5分別從分析對(duì)象、模型構(gòu)造、檢測(cè)細(xì)粒度、是否跨項(xiàng)目、漏洞類(lèi)型以及性能多個(gè)角度進(jìn)行分析和討論.
Table 5 Comparisons of Some Reviewed Work Which Applied Mixed-based Feature Representation for Vulnerability Mining表5 基于混合表征的漏洞挖掘模型部分工作對(duì)比
討論5.本文從不同角度分析和歸納了基于混合表征方式的漏洞挖掘模型,從分析對(duì)象而言,目前大部分文獻(xiàn)主要集中于源代碼漏洞檢測(cè)[109-112],二進(jìn)制文件漏洞檢測(cè)[108]文獻(xiàn)相對(duì)較少.從模型構(gòu)造而言,BRNN[111]和BGRU[110]能夠取得比其他深度學(xué)習(xí)模型較優(yōu)的檢測(cè)性能.從檢測(cè)細(xì)粒度而言,文獻(xiàn)[110-111]面向過(guò)程內(nèi)和過(guò)程間進(jìn)行漏洞特征提取,能夠?qū)崿F(xiàn)比函數(shù)級(jí)別[109,112]和語(yǔ)句級(jí)別[108]更“細(xì)”的語(yǔ)法語(yǔ)義信息提取.文獻(xiàn)[108]雖能夠?qū)崿F(xiàn)跨項(xiàng)目漏洞挖掘,但僅限于二進(jìn)制文件.由于不同編程語(yǔ)言和應(yīng)用環(huán)境的差異性,基于混合特征表示的漏洞挖掘模型在跨項(xiàng)目漏洞挖掘這方面的研究仍然需要安全人員投入大量的時(shí)間進(jìn)行探索.
觀點(diǎn)5.相比于前4種單特征表示方法,基于混合表征的漏洞挖掘模型能夠綜合考慮程序源代碼的詞法、語(yǔ)法和結(jié)構(gòu)、語(yǔ)義信息,同時(shí)兼顧函數(shù)組件與函數(shù)控制流之間的依賴關(guān)系,與漏洞的特征具有較強(qiáng)的關(guān)聯(lián)性,檢測(cè)能力也更強(qiáng).因此,如何融合多種特征實(shí)現(xiàn)自動(dòng)化和細(xì)粒度漏洞挖掘,是一個(gè)值得探索的研究課題.
最大程度上完整保留程序數(shù)據(jù)的語(yǔ)法語(yǔ)義信息,抽象出代碼蘊(yùn)含的更深層信息,構(gòu)建合適的數(shù)據(jù)表征方式,將有助于深度神經(jīng)網(wǎng)絡(luò)在進(jìn)行漏洞挖掘時(shí)擁有更好的檢測(cè)性能.
本節(jié)分別從序列表征、AST表征、圖表征、文本表征和混合表征等方面分析了現(xiàn)有一系列基于深度學(xué)習(xí)的漏洞挖掘模型研究成果,同時(shí)指出了現(xiàn)有代表性研究工作的優(yōu)缺點(diǎn),并給出了一些研究思路.其工作發(fā)展歷程如圖7所示:
Fig. 7 The development of software vulnerability mining based on deep learning圖7 基于深度學(xué)習(xí)的軟件漏洞挖掘發(fā)展歷程
通過(guò)調(diào)研現(xiàn)有研究工作,本文發(fā)現(xiàn)在實(shí)際應(yīng)用場(chǎng)景中,基于深度學(xué)習(xí)的漏洞挖掘模型表現(xiàn)出來(lái)的差異有所不同.因此,本節(jié)從不同的的應(yīng)用場(chǎng)景出發(fā),給出基于深度學(xué)習(xí)的漏洞挖掘模型在物聯(lián)網(wǎng)、區(qū)塊鏈智能合約和其他領(lǐng)域(瀏覽器漏洞、文檔類(lèi)型漏洞和操作系統(tǒng)安全漏洞)漏洞挖掘的研究進(jìn)展.
本文選擇物聯(lián)網(wǎng)、區(qū)塊鏈智能合約這2個(gè)應(yīng)用領(lǐng)域進(jìn)行詳細(xì)分析和討論,有3個(gè)原因.1)通過(guò)梳理現(xiàn)有文獻(xiàn)發(fā)現(xiàn),現(xiàn)有結(jié)合深度學(xué)習(xí)進(jìn)行漏洞挖掘的研究成果數(shù)量主要集中于這2個(gè)領(lǐng)域,有必要分別進(jìn)行單獨(dú)調(diào)研和分析.2)物聯(lián)網(wǎng)設(shè)備底層的第三方庫(kù)/API源代碼往往存在大量的安全缺陷,一旦其漏洞被惡意的攻擊者進(jìn)行利用,會(huì)造成整個(gè)網(wǎng)絡(luò)空間安全的穩(wěn)定性.同時(shí),區(qū)塊鏈應(yīng)用場(chǎng)景的多樣化加劇了智能合約的復(fù)雜性,智能合約作為區(qū)塊鏈的核心部分,往往都是以公開(kāi)透明的方式存在于區(qū)塊鏈中,一旦出現(xiàn)安全漏洞,將會(huì)帶來(lái)不可估量的損失,危害系統(tǒng)的安全.3)將深度學(xué)習(xí)應(yīng)用于其他領(lǐng)域的研究成果在數(shù)量上相對(duì)較少,因此本文將其歸納到其他領(lǐng)域中進(jìn)行探討,以供讀者全方位了解深度學(xué)習(xí)在具體應(yīng)用場(chǎng)景的研究進(jìn)展.
物聯(lián)網(wǎng)是近幾年互聯(lián)網(wǎng)時(shí)代研究的熱潮之一,大量智能產(chǎn)品給人們帶來(lái)便捷的同時(shí),其安全事件也不斷攀升.因此,針對(duì)物聯(lián)網(wǎng)中智能產(chǎn)品中的安全漏洞問(wèn)題,如何利用深度學(xué)習(xí)技術(shù)實(shí)現(xiàn)智能化和自動(dòng)化漏洞挖掘迫在眉睫.
需要注意的是,本文主要側(cè)重于物聯(lián)網(wǎng)中基于第三方庫(kù)/API中存在的安全漏洞,對(duì)采用相似度檢測(cè)方法或者二進(jìn)制關(guān)聯(lián)算法實(shí)現(xiàn)跨平臺(tái)二進(jìn)制代碼安全漏洞檢測(cè)[124-129]進(jìn)行對(duì)比和分析.
文獻(xiàn)[124-126]以基本塊為檢測(cè)細(xì)粒度,對(duì)二進(jìn)制代碼構(gòu)建了不同的深度學(xué)習(xí)模型,用于漏洞檢測(cè).文獻(xiàn)[124]發(fā)現(xiàn)采用圖表征提取漏洞特征時(shí),采用圖嵌入神經(jīng)網(wǎng)絡(luò)(graph embedding neural network,GENN)增強(qiáng)了漏洞挖掘的效果.實(shí)驗(yàn)結(jié)果表明:該方法能夠應(yīng)用于不同的應(yīng)用場(chǎng)景,但依賴于手工提取漏洞特征,檢測(cè)速度相對(duì)較慢且準(zhǔn)確率較低.文獻(xiàn)[124]是利用GENN對(duì)二進(jìn)制代碼相似性檢測(cè)的一次次有效嘗試.文獻(xiàn)[125-126]將CFG和DFG相結(jié)合,形成標(biāo)記語(yǔ)義流圖(labeled semantic flow graph, LSFG),并且采用深度學(xué)習(xí)算法實(shí)現(xiàn)跨平臺(tái)二進(jìn)制相似性漏洞搜索工具.通過(guò)與現(xiàn)有研究工作[124]比較,體現(xiàn)出較好的函數(shù)語(yǔ)義和搜索精度.然而文獻(xiàn)[124-126]僅僅粗淺以代碼塊為檢測(cè)細(xì)粒度,并沒(méi)有考慮函數(shù)之間的依賴關(guān)系,降低了模型的檢測(cè)性能.
文獻(xiàn)[127]從函數(shù)級(jí)別出發(fā),兼顧函數(shù)之間的依賴關(guān)系,測(cè)試多種無(wú)監(jiān)督學(xué)習(xí)計(jì)算屬性控制流圖,自動(dòng)化提取跨平臺(tái)特征,能夠提升檢測(cè)的AUC性能.文獻(xiàn)[128]認(rèn)為Gemini[124]手工提取和壓縮特征的過(guò)程會(huì)損失語(yǔ)義信息,發(fā)現(xiàn)在不同平臺(tái)編譯出的二進(jìn)制代碼的控制流圖節(jié)點(diǎn)順序非常相似,采用BERT和CNN提取語(yǔ)義信息,取得了較好的效果.然而由于在檢測(cè)細(xì)粒度上仍以基本塊和函數(shù)級(jí)別為主,不同文獻(xiàn)所構(gòu)建的深度學(xué)習(xí)模型的檢測(cè)性能無(wú)法進(jìn)一步改善性能.為了更加細(xì)粒度的挖掘語(yǔ)法語(yǔ)義信息,文獻(xiàn)[129]分別從函數(shù)過(guò)程內(nèi)和過(guò)程間進(jìn)行特征提取,提出了新的跨平臺(tái)二進(jìn)制代碼相似性檢測(cè)方案αDiff,采用CNN實(shí)現(xiàn)跨平臺(tái)的漏洞挖掘,取得了不錯(cuò)的實(shí)驗(yàn)結(jié)果.
本文從現(xiàn)有的針對(duì)物聯(lián)網(wǎng)安全漏洞挖掘問(wèn)題的研究工作中,選擇其中6項(xiàng)具有代表性的研究工作進(jìn)行了總結(jié)和對(duì)比,具體情況如表6所示:
Table 6 Comparisons of Some Reviewed Works Based on Deep Learning for Vulnerability Mining in IoT表6 物聯(lián)網(wǎng)中基于深度學(xué)習(xí)的漏洞挖掘部分工作對(duì)比
表6分別從表征方式、模型構(gòu)造、檢測(cè)細(xì)粒度、是否跨項(xiàng)目以及性能多個(gè)角度進(jìn)行分析和討論,并且從召回率、準(zhǔn)確率、AUC和效率等方面進(jìn)行了簡(jiǎn)單的評(píng)估.
討論6.本文發(fā)現(xiàn)物聯(lián)網(wǎng)中基于第三方庫(kù)/API中存在的安全漏洞檢測(cè)主要采用圖表征方式提取特征,采用GENN[124-127]和CNN[128-129]等主流深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,文獻(xiàn)[129]從函數(shù)過(guò)程內(nèi)和過(guò)程間出發(fā),實(shí)現(xiàn)比函數(shù)級(jí)別[127-128]和基本塊屬性[124-126]更豐富的漏洞特征信息提取,取得了更好的檢測(cè)效果.
觀點(diǎn)6.目前,針對(duì)物聯(lián)網(wǎng)中第三方庫(kù)/API中存在的安全漏洞檢測(cè),主要采用圖表征方式進(jìn)行漏洞特征表示,雖然能取得一定的檢測(cè)效果,但檢測(cè)效果提升不是很明顯.由此看來(lái),改善現(xiàn)有圖表征方式,進(jìn)一步豐富漏洞特征信息或者構(gòu)建其他新的代碼表征方式,挖掘蘊(yùn)含在代碼中更深層面的信息,在未來(lái)的漏洞挖掘研究中值得探索.總體來(lái)說(shuō),利用深度學(xué)習(xí)進(jìn)行物聯(lián)網(wǎng)第三方庫(kù)/API中的安全漏洞檢測(cè)研究目前還在起步階段,是一個(gè)值得安全研究人員探討和實(shí)踐的方向.
智能合約是區(qū)塊鏈上可執(zhí)行合約條款的計(jì)算機(jī)交易協(xié)議,區(qū)塊鏈通過(guò)智能合約向鏈上用戶提供復(fù)雜多樣的業(yè)務(wù)功能,但智能合約的復(fù)雜性會(huì)隨著應(yīng)用場(chǎng)景的多樣化不斷增加,勢(shì)必會(huì)造成大量安全漏洞存在,給整個(gè)計(jì)算機(jī)系統(tǒng)帶來(lái)巨大的威脅.
智能合約安全漏洞檢測(cè)面臨一系列的安全挑戰(zhàn).一方面,由于區(qū)塊鏈中許多項(xiàng)目大都會(huì)公開(kāi)智能合約代碼,這就使得在提升用戶對(duì)部署合約信任度的同時(shí)也降低了黑客攻擊的成本.另一方面,區(qū)塊鏈技術(shù)起步相對(duì)較晚,發(fā)展時(shí)間短,在其開(kāi)發(fā)過(guò)程中自身存在嚴(yán)重的缺陷,嚴(yán)重阻礙了區(qū)塊鏈的技術(shù)進(jìn)步發(fā)展.因此,針對(duì)智能合約漏洞安全檢測(cè)問(wèn)題,需要安全研究人員采用相應(yīng)的安全技術(shù)充分分析潛在的安全威脅,盡可能規(guī)避漏洞.
為了解決以上問(wèn)題,目前不少安全研究人員嘗試將深度學(xué)習(xí)引入到智能合約漏洞檢測(cè)領(lǐng)域[130-135].文獻(xiàn)[130-133]均從字節(jié)碼層面出發(fā),采用不同的深度學(xué)習(xí)算法進(jìn)行漏洞挖掘.文獻(xiàn)[130]利用深度學(xué)習(xí)輔助智能合約漏洞檢測(cè),采用LSTM在字節(jié)碼層面分析智能合約的威脅,取得了不錯(cuò)的效果.文獻(xiàn)[131]同樣從字節(jié)碼出發(fā),將智能合約的字節(jié)碼轉(zhuǎn)化為RGB顏色,再轉(zhuǎn)化為圖像輸入到CNN自動(dòng)化提取豐富的特征信息,從而克服安全專家手動(dòng)定義規(guī)則的主觀性.該方法將圖像相似性識(shí)別領(lǐng)域的相關(guān)方法應(yīng)用于智能合約安全漏洞檢測(cè),給讀者提供了新的思考方向,具有一定的啟示作用.
文獻(xiàn)[132]采用DNN對(duì)易受攻擊的以太坊虛擬機(jī)字節(jié)碼進(jìn)行分析,提出了靜態(tài)分析工具Eth2Vec用于提取集成代碼和AST特征信息,取得了不錯(cuò)的實(shí)驗(yàn)結(jié)果.然而,該研究只針對(duì)部分字節(jié)碼進(jìn)行分析,模型的可擴(kuò)展性不強(qiáng).考慮到文獻(xiàn)[132]在挖掘模型在可擴(kuò)展性上的不足,文獻(xiàn)[133]首先將遷移學(xué)習(xí)應(yīng)用于智能合約安全漏洞檢測(cè),提出基于深度神經(jīng)網(wǎng)絡(luò)的以太坊智能合約安全漏洞檢測(cè)框架ESCORT,利用文本表征字節(jié)碼信息,采用RNN實(shí)現(xiàn)自動(dòng)化特征提取,取得了不錯(cuò)的檢測(cè)效果.
除此之外,文獻(xiàn)[134-135]從函數(shù)層次出發(fā),利用GNN構(gòu)建漏洞挖掘模型,取得了不錯(cuò)的檢測(cè)性能.文獻(xiàn)[134]構(gòu)造了智能合約函數(shù)的詞法和語(yǔ)義結(jié)構(gòu)圖,利用圖表征方式進(jìn)行漏洞檢測(cè),取得了不錯(cuò)的實(shí)驗(yàn)性能.文獻(xiàn)[135]將深度學(xué)習(xí)與模糊測(cè)試技術(shù)結(jié)合,從而生成智能合約中更好的測(cè)試用例和交易調(diào)用序列.使用符號(hào)執(zhí)行引擎產(chǎn)生覆蓋率較高的調(diào)用序列,并采用深度神經(jīng)網(wǎng)絡(luò)對(duì)序列特征進(jìn)行學(xué)習(xí)得到訓(xùn)練模型,取得了較高的代碼覆蓋率.
本文從現(xiàn)有針對(duì)智能合約安全漏洞挖掘問(wèn)題的研究工作中,選擇了其中6項(xiàng)具有代表性的研究工作進(jìn)行總結(jié)和對(duì)比,并給出了智能合約安全漏洞挖掘領(lǐng)域的一些觀點(diǎn).表7分別從表征方式、模型構(gòu)造、檢測(cè)細(xì)粒度、是否跨項(xiàng)目以及性能多個(gè)角度進(jìn)行討論.
Table 7 Comparisons of Some Reviewed Works Based on Deep Learning for Vulnerability Mining in Smart Contract表7 智能合約中基于深度學(xué)習(xí)的漏洞挖掘部分工作對(duì)比
討論7.從表征方式而言,將序列表征[130,135]、圖表征[134]、文本表征[133]或混合表征[132]等與深度學(xué)習(xí)技術(shù)結(jié)合,均取得了不錯(cuò)的檢測(cè)性能.從檢測(cè)細(xì)粒度而言,文獻(xiàn)[130-133]從字節(jié)碼級(jí)數(shù)據(jù)出發(fā),能夠?qū)崿F(xiàn)比從函數(shù)級(jí)數(shù)據(jù)[134-235]出發(fā)更深層次的語(yǔ)法語(yǔ)義信息提取,取得了相對(duì)較優(yōu)的性能.從是否能夠?qū)崿F(xiàn)跨項(xiàng)目漏洞挖掘而言,文獻(xiàn)[133]將遷移學(xué)習(xí)應(yīng)用于智能合約跨項(xiàng)目安全漏洞檢測(cè),取得了不錯(cuò)的檢測(cè)性能.
觀點(diǎn)7.將深度學(xué)習(xí)應(yīng)用于智能合約安全漏洞挖掘還處于研究初期,仍然還有很長(zhǎng)的路要走.通過(guò)對(duì)現(xiàn)有研究工作的對(duì)比和分析,本文認(rèn)為:1)相比于單表征方式的漏洞挖掘模型,基于混合表征的漏洞挖掘模型應(yīng)用于智能合約安全漏洞挖掘,能夠進(jìn)一步豐富漏洞的特征信息,提升漏洞挖掘的能力,但這方面的研究從文獻(xiàn)數(shù)量上來(lái)看相對(duì)較少,未來(lái)這方面的工作依然值得探索;2)在跨項(xiàng)目智能合約安全漏洞檢測(cè)中,遷移學(xué)習(xí)的能力未有明確的上限,需要進(jìn)一步進(jìn)行考量.
將深度學(xué)習(xí)應(yīng)用于除了3.1~3.2節(jié)物聯(lián)網(wǎng)以及智能合約安全漏洞挖掘領(lǐng)域之外,在瀏覽器安全漏洞、文檔類(lèi)型漏洞和操作系統(tǒng)安全漏洞挖掘等方面也存在著相關(guān)的研究.本節(jié)進(jìn)行集中介紹,以便讀者了解在具體應(yīng)用場(chǎng)景中,應(yīng)用深度學(xué)習(xí)進(jìn)行漏洞挖掘的現(xiàn)有研究工作.
為了緩解操作系統(tǒng)中x86程序出現(xiàn)的內(nèi)存崩潰漏洞,文獻(xiàn)[136]提出了一個(gè)輕量級(jí)的深度學(xué)習(xí)檢測(cè)系統(tǒng)VDiscover,具有良好的性能.文獻(xiàn)[137]提出了基于深度學(xué)習(xí)的通用模糊測(cè)試框架SmartSeed,用于生成有價(jià)值的文件作為模糊工具的測(cè)試用例,在檢測(cè)過(guò)程中發(fā)現(xiàn)了16個(gè)新的安全漏洞,表明該方法能夠有效提升模糊測(cè)試觸發(fā)漏洞的能力.此外,還有針對(duì)文檔類(lèi)型漏洞的智能化漏洞挖掘方法,文獻(xiàn)[138]采用LSTM深度學(xué)習(xí)模型挖掘PDF文件對(duì)象的復(fù)雜結(jié)構(gòu),通過(guò)引入畸形數(shù)據(jù)對(duì)原樣本域進(jìn)行隨機(jī)擾動(dòng),從而執(zhí)行錯(cuò)誤處理代碼.
就目前而言,將深度學(xué)習(xí)應(yīng)用于瀏覽器安全漏洞、文檔類(lèi)型漏洞和操作系統(tǒng)安全漏洞挖掘等方面的研究還在初期階段.針對(duì)具體的應(yīng)用場(chǎng)景設(shè)計(jì)針對(duì)性的漏洞挖掘模型,這方面的研究依然值得安全研究人員進(jìn)行探索.
通過(guò)梳理和歸納現(xiàn)有基于深度學(xué)習(xí)的軟件漏洞挖掘的研究成果,一方面,本文以每種代碼表征方式為出發(fā)點(diǎn),分別在2.1~2.5節(jié)分類(lèi)闡述和對(duì)比現(xiàn)有具有代表性的研究工作,并給出了詳盡的討論和觀點(diǎn)(討論&觀點(diǎn)1~5).另一方面,本文從不同的的應(yīng)用場(chǎng)景出發(fā),給出基于深度學(xué)習(xí)的漏洞挖掘模型在物聯(lián)網(wǎng)、區(qū)塊鏈智能合約和其他領(lǐng)域漏洞挖掘的研究進(jìn)展,具體如3.1~3.3節(jié)表述,指出目前深度學(xué)習(xí)應(yīng)用于具體應(yīng)用領(lǐng)域的一些想法(討論&觀點(diǎn)6~7).由于漏洞種類(lèi)繁多、漏洞產(chǎn)生原理復(fù)雜和現(xiàn)有漏洞挖掘技術(shù)發(fā)展不完備等原因,實(shí)現(xiàn)自動(dòng)化和智能化漏洞挖掘仍然還有很長(zhǎng)的路要走.將深度學(xué)習(xí)應(yīng)用于漏洞挖掘領(lǐng)域,雖已取得一定數(shù)量的代表性成果,但現(xiàn)階段的發(fā)展仍未成熟.
本節(jié)基于2~3節(jié)對(duì)現(xiàn)有研究成果的一些討論和觀點(diǎn)(討論&觀點(diǎn)1~7),嘗試總結(jié)基于深度學(xué)習(xí)的漏洞挖掘領(lǐng)域現(xiàn)階段面臨的主要挑戰(zhàn),并在已有綜述文獻(xiàn)[139-147]之上,對(duì)未來(lái)的重點(diǎn)研究方向主要從5個(gè)方向進(jìn)行展望.深度學(xué)習(xí)應(yīng)用于漏洞挖掘領(lǐng)域研究的九大挑戰(zhàn)和機(jī)遇如表8所示:
Table 8 Challenges and Opportunities in the Field of Vulnerability Mining based on Deep Learning表8 深度學(xué)習(xí)應(yīng)用于漏洞挖掘領(lǐng)域研究面臨的挑戰(zhàn)和機(jī)遇
將深度學(xué)習(xí)應(yīng)用于自動(dòng)化、智能化漏洞挖掘,首先面臨的挑戰(zhàn)是數(shù)據(jù)集的獲取(挑戰(zhàn)①),通過(guò)對(duì)現(xiàn)階段該領(lǐng)域文獻(xiàn)調(diào)研,發(fā)現(xiàn)現(xiàn)有各項(xiàng)研究在性能評(píng)估階段都幾乎依賴于各自收集和建立的數(shù)據(jù)集,尚未形成一個(gè)統(tǒng)一規(guī)范的數(shù)據(jù)集.同時(shí),在深度學(xué)習(xí)訓(xùn)練模型過(guò)程中,需要足夠準(zhǔn)確的標(biāo)記數(shù)據(jù)集,才能獲得高度有效的訓(xùn)練結(jié)果.因此,為了輔助深度學(xué)習(xí)訓(xùn)練模型,必須構(gòu)建一個(gè)公開(kāi)規(guī)范且可以作為基準(zhǔn)的數(shù)據(jù)集.
基于深度學(xué)習(xí)的漏洞挖掘模型,根據(jù)提取特征的方式,可以分為基于序列表征、基于抽象語(yǔ)法樹(shù)、基于圖表征、基于文本表征和基于混合表征的漏洞挖掘模型.最大程度上完整保留程序數(shù)據(jù)的語(yǔ)法語(yǔ)義信息,抽象出代碼蘊(yùn)含的更深層信息,構(gòu)建新的數(shù)據(jù)表征方式(挑戰(zhàn)②),將有助于構(gòu)建的神經(jīng)網(wǎng)絡(luò)訓(xùn)練模型擁有更好的檢測(cè)性能.基于單特征表示的漏洞挖掘模型雖然在一定程度上能夠抽象出程序數(shù)據(jù)的相關(guān)信息,但基于混合表征的漏洞挖掘模型在實(shí)際應(yīng)用中具有更高的性能效果.因此,融合多種特征進(jìn)行漏洞挖掘似乎是漏洞自動(dòng)化挖掘的有效方案.針對(duì)語(yǔ)義模型中的特征爆炸問(wèn)題(挑戰(zhàn)③),可以采用特征降維方法提升模型的性能.同時(shí),由于易受攻擊的代碼模式復(fù)雜,現(xiàn)有研究在特定類(lèi)型的漏洞挖掘上取得了較好的性能,但實(shí)現(xiàn)多種漏洞挖掘(挑戰(zhàn)④)仍待安全研究人員進(jìn)一步進(jìn)行探索.
將深度學(xué)習(xí)應(yīng)用于漏洞挖掘不需要安全專家手工定義漏洞特征,能夠?qū)崿F(xiàn)自動(dòng)化和智能化漏洞特征提取.然而目前基于深度學(xué)習(xí)的漏洞挖掘面臨的問(wèn)題是如何將抽象出的程序數(shù)據(jù)表征轉(zhuǎn)化為適合深度模型的向量表示形式.其次,程序數(shù)據(jù)具有豐富的層次結(jié)構(gòu)和語(yǔ)法語(yǔ)義信息,盡管現(xiàn)有研究已經(jīng)實(shí)現(xiàn)了從文件級(jí)別、函數(shù)級(jí)別到語(yǔ)句級(jí)別為粒度的漏洞檢測(cè),但仍然未提供與漏洞相關(guān)更全面的位置信息(挑戰(zhàn)⑤).最后,不同的深度學(xué)習(xí)算法在同一數(shù)據(jù)集上會(huì)產(chǎn)生不同的性能效果,如何構(gòu)建合適的深度學(xué)習(xí)模型(挑戰(zhàn)⑥),挖掘更深層次的代碼特征,實(shí)現(xiàn)細(xì)粒度的可解釋漏洞挖掘模型,也需要進(jìn)一步加以研究.
傳統(tǒng)的漏洞挖掘方法使用靜態(tài)分析、動(dòng)態(tài)分析等程序分析技術(shù),雖取得一定的進(jìn)展,卻面臨嚴(yán)重的高誤報(bào)和高漏報(bào)等問(wèn)題.同時(shí),基于深度學(xué)習(xí)的漏洞挖掘模型在一定程度上能夠提升基于機(jī)器學(xué)習(xí)的漏洞挖掘的性能.因此,將深度學(xué)習(xí)與靜、動(dòng)態(tài)分析技術(shù)相結(jié)合進(jìn)行漏洞挖掘能夠提升模型的準(zhǔn)確率,降低高誤報(bào)和高漏報(bào)等問(wèn)題(挑戰(zhàn)⑦).面對(duì)復(fù)雜的深度學(xué)習(xí)模型以及多層次的代碼表征方式,實(shí)現(xiàn)高效率的漏洞挖掘也是一大難題(挑戰(zhàn)⑧).雖然現(xiàn)有的一部分工作采用LLVM等方法實(shí)現(xiàn)高效率的漏洞挖掘,但尚未找到有效的代碼表征方式進(jìn)行漏洞挖掘,該方面的研究也是未來(lái)的一個(gè)研究難點(diǎn).
跨項(xiàng)目安全漏洞挖掘(挑戰(zhàn)⑨)是對(duì)不同項(xiàng)目的漏洞進(jìn)行檢測(cè),需要將一個(gè)項(xiàng)目上構(gòu)造的深度學(xué)習(xí)模型用于挖掘另外一個(gè)項(xiàng)目的漏洞.然而,由于不同項(xiàng)目的開(kāi)發(fā)流程、應(yīng)用領(lǐng)域、編程語(yǔ)言和開(kāi)發(fā)人員的經(jīng)驗(yàn)等差異,使得跨項(xiàng)目漏洞檢測(cè)的難度加大.雖然有部分研究嘗試采用遷移學(xué)習(xí)實(shí)現(xiàn)跨項(xiàng)目漏洞檢測(cè),但僅限于同種編程語(yǔ)言的不同項(xiàng)目之間,尚未實(shí)現(xiàn)跨語(yǔ)言的漏洞挖掘.由此看來(lái),跨語(yǔ)言和跨項(xiàng)目的漏洞挖掘在未來(lái)依舊是一個(gè)值得探索的研究熱點(diǎn).
隨著人工智能技術(shù)的不斷發(fā)展,將深度學(xué)習(xí)應(yīng)用于軟件漏洞檢測(cè)能夠?qū)崿F(xiàn)自動(dòng)化和智能化漏洞挖掘,緩解了高誤報(bào)率和高漏報(bào)率等問(wèn)題.本文通過(guò)梳理和總結(jié)現(xiàn)有基于深度學(xué)習(xí)的漏洞挖掘最新研究,歸納其整體工作流程和技術(shù)路線,并從其中核心的深度表征方式為切入點(diǎn),對(duì)現(xiàn)有研究成果進(jìn)行分類(lèi)闡述.同時(shí)也總結(jié)了不同應(yīng)用場(chǎng)景中基于深度學(xué)習(xí)的漏洞挖掘方法的研究進(jìn)展.最后,對(duì)該領(lǐng)域所面臨的挑戰(zhàn)和機(jī)遇進(jìn)行展望.
通過(guò)總結(jié)現(xiàn)有研究工作,本文認(rèn)為在未來(lái)的研究工作中:最大程度上抽象出漏洞特征的更深層信息,構(gòu)建新的代碼表征方式將有助于提升現(xiàn)有漏洞挖掘模型的性能.同時(shí),采用遷移學(xué)習(xí)和注意力機(jī)制等對(duì)跨項(xiàng)目檢測(cè)、漏洞位置定位等問(wèn)題進(jìn)一步分析,克服現(xiàn)有研究方法的局限性,將有助于提升漏洞挖掘的能力.