孫鴻宇,何遠,王基策,董穎,朱立鵬,王鶴,張玉清
?
人工智能技術(shù)在安全漏洞領(lǐng)域的應(yīng)用
孫鴻宇1,2,何遠2,王基策2,董穎2,朱立鵬1,2,王鶴1,2,張玉清1,2
(1. 西安電子科技大學(xué)網(wǎng)絡(luò)與信息安全學(xué)院,陜西 西安 710071;2. 中國科學(xué)院大學(xué)國家計算機網(wǎng)絡(luò)入侵防范中心,北京 101408)
軟件數(shù)量的大規(guī)模增長以及復(fù)雜性的增強給軟件安全漏洞的研究帶來了嚴峻的挑戰(zhàn),以人工的方式進行安全漏洞研究的效率較低,無法滿足網(wǎng)絡(luò)空間安全的需要。因此,如何將機器學(xué)習、自然語言處理等人工智能技術(shù)應(yīng)用于安全漏洞的研究已成為新的熱點,人工智能技術(shù)能夠智能化地處理漏洞信息來輔助安全漏洞研究,同時提高安全漏洞挖掘的效率。首先分析了安全漏洞的自動化挖掘、自動化評估、自動化利用和自動化修補等關(guān)鍵技術(shù),指出安全漏洞挖掘的自動化是人工智能在安全漏洞領(lǐng)域應(yīng)用的重點,然后分析和歸納了近年來提出的將人工智能技術(shù)應(yīng)用于安全漏洞研究的最新研究成果,指出了應(yīng)用中的一些問題,給出了相應(yīng)的解決方案,最后展望了安全漏洞智能研究的發(fā)展趨勢。
漏洞挖掘;機器學(xué)習;人工智能
安全漏洞[1]是指信息技術(shù)、信息產(chǎn)品、信息系統(tǒng)在需求、設(shè)計、實現(xiàn)、配置運行等過程中,有意無意之間產(chǎn)生的缺陷。這些缺陷以各種各樣的形式存在于信息系統(tǒng)的各個層次、環(huán)節(jié)之中,對整個信息系統(tǒng)有著很重要的影響,且一旦被惡意主體利用,會影響構(gòu)建在信息系統(tǒng)之上正常服務(wù)的運行,對信息系統(tǒng)的機密性、完整性以及可用性造成嚴重損害,因此對安全漏洞的研究是網(wǎng)絡(luò)空間安全研究的核心內(nèi)容之一。
安全漏洞的研究主要分為漏洞挖掘、漏洞分析及利用、漏洞評估、漏洞修復(fù)等。漏洞挖掘是指安全研究人員利用各種工具對軟件、系統(tǒng)代碼進行審計,對軟件執(zhí)行過程進行分析來查找缺陷的過程。漏洞的分析及利用是指對軟件或系統(tǒng)中挖掘到的缺陷進一步的分析,確認該缺陷是否為安全漏洞,若為安全漏洞則進一步判斷漏洞類型并開發(fā)概念驗證性的攻擊代碼(PoC, proof of concept)。漏洞評估是指對研究人員提交的安全漏洞進行評估,分析該漏洞的危害性、影響范圍等,并對漏洞修復(fù)提供指導(dǎo)意見。漏洞修復(fù)則會根據(jù)漏洞評估的危害等級來進行漏洞修復(fù),優(yōu)先修復(fù)危害等級高的漏洞。整個安全漏洞周期如圖1所示。
近年來,隨著軟件系統(tǒng)的大規(guī)模增長和復(fù)雜性的增強,安全漏洞報告提交數(shù)量呈現(xiàn)逐漸增長趨勢,美國國家漏洞數(shù)據(jù)庫(NVD,national vulnerability database)披露的歷年漏洞記錄數(shù)量如圖2所示。由圖2可知,2017年的漏洞記錄數(shù)量是2016年全年的2倍多。軟件的快速發(fā)展帶來漏洞數(shù)量的增多,增加了計算機用戶在使用網(wǎng)絡(luò)服務(wù)時面臨的安全風險,同時威脅性大的安全漏洞給網(wǎng)絡(luò)空間安全帶來了巨大的危害。例如,2017年出現(xiàn)的“WannaCry”勒索攻擊,WannaCry利用微軟服務(wù)器消息塊(SMB, server message block)協(xié)議的遠程溢出漏洞,并搭載美國國家安全局(NSA, national security agency)制造“永恒之藍(EternalBlue)”網(wǎng)絡(luò)武器,導(dǎo)致攻擊威力倍增,在短短數(shù)小時內(nèi)就發(fā)動數(shù)萬次攻擊,受害國家超過150個,政府、企業(yè)、醫(yī)療、高校等各行業(yè)均有IT設(shè)備中招,波及大量公司,形成了全球性互聯(lián)網(wǎng)災(zāi)難。面對安全漏洞帶來的這些嚴峻的挑戰(zhàn),如何實現(xiàn)自動化漏洞挖掘、自動化漏洞利用生成以及自動化漏洞修補等都是當前急需解決的課題。
圖1 安全漏洞周期
圖2 美國國家漏洞數(shù)據(jù)庫(NVD)披露的歷年漏洞記錄數(shù)量
近年來,人工智能(AI, artificial intelligence)技術(shù)有了較大的發(fā)展,利用人工智能技術(shù)可以對漏洞報告以及程序代碼自動化處理并提取有效的信息,以此來實現(xiàn)安全漏洞的自動化研究。將人工智能技術(shù)應(yīng)用于網(wǎng)絡(luò)安全領(lǐng)域主要是利用機器學(xué)習(ML, machine learning)技術(shù)以及自然語言處理(NLP, natural language processing)技術(shù)等來進行安全漏洞研究。
機器學(xué)習[2]是指研究計算機模擬或?qū)崿F(xiàn)人類的學(xué)習行為,以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)使之不斷改善計算機系統(tǒng)自身的性能,其根本目的是為了實現(xiàn)人工智能。近年來,機器學(xué)習的迅速發(fā)展,使各個行業(yè)開始考慮將機器學(xué)習算法應(yīng)用到各個研究方向中,例如,機器學(xué)習應(yīng)用于統(tǒng)計學(xué)習[3]、模式識別[4]、數(shù)據(jù)挖掘[5]等方面均取得了成功。
機器學(xué)習算法根據(jù)學(xué)習方法的不同,可以分為監(jiān)督學(xué)習(supervised learning)、非監(jiān)督學(xué)習(unsupervised learning)和半監(jiān)督學(xué)習(semi-supervised learning)。監(jiān)督學(xué)習是指通過已有的一部分輸入數(shù)據(jù)特征與輸出數(shù)據(jù)標簽之間的相應(yīng)關(guān)系,生成一個函數(shù),將輸入映射到相應(yīng)的輸出,這種學(xué)習方式在多數(shù)條件下應(yīng)用于分類計算。非監(jiān)督學(xué)習是指直接對輸入數(shù)據(jù)進行建模,比如聚類算法。半監(jiān)督學(xué)習是指綜合利用有標簽的數(shù)據(jù)和無標簽的數(shù)據(jù)來生成合適的分類函數(shù)。機器學(xué)習能夠讓研究人員脫離大量繁雜重復(fù)的工作,因此成為實現(xiàn)自動化的最佳選擇之一。
深度學(xué)習(DL, deep learning)[6]是由多個非線性特征變換構(gòu)成處理層來對數(shù)據(jù)進行表征學(xué)習,是機器學(xué)習算法的最新研究成果,其目的是通過經(jīng)驗和數(shù)據(jù)改進計算機系統(tǒng),實現(xiàn)人工智能。深度學(xué)習算法能夠提高“淺層”機器學(xué)習算法的性能,同時擴大了機器學(xué)習的應(yīng)用范圍,如將深度學(xué)習算法應(yīng)用于計算機視覺[7-8]、自然語言處理[9]等方面均取得了巨大成功。
自然語言處理是研究人與計算機之間用自然語言進行有效通信的理論和方法,其最終目的是實現(xiàn)人機之間的自然語言通信,是人工智能技術(shù)的一部分。自然語言處理能夠自動化提取本文內(nèi)容,比如自然語言處理能夠?qū)β┒磮蟾?、安全網(wǎng)站的相關(guān)信息進行提取,并進行實體識別以及提取實體之間的關(guān)系,同時也能夠根據(jù)訓(xùn)練結(jié)果進行自然語言生成,自然語言處理提出的各種語義模型對文本數(shù)據(jù)進行處理具有很大的優(yōu)勢。自然語言處理在語音合成與識別、機器翻譯、人機對話等方面產(chǎn)生了深遠的影響。
在安全領(lǐng)域,研究人員將機器學(xué)習算法引入惡意軟件檢測[10]以及入侵檢測[11],獲得了巨大的成功。更多的研究人員考慮將機器學(xué)習應(yīng)用于安全漏洞的研究中,實現(xiàn)漏洞挖掘等研究的智能化。將機器學(xué)習應(yīng)用于漏洞挖掘一般采用監(jiān)督學(xué)習方式,其過程可以分為數(shù)據(jù)預(yù)處理、建立機器學(xué)習算法模型、對機器學(xué)習模型進行訓(xùn)練、測試以及評估等過程。利用文本挖掘技術(shù)對程序源代碼進行預(yù)處理,并采用機器學(xué)習進行漏洞挖掘的過程如圖3所示。具體而言,首先采用文本挖掘技術(shù)對源代碼的信息進行預(yù)處理,該步驟包括過濾注釋、提取源代碼的語義信息、將語義信息映射到向量空間等過程,然后采用諸如決策樹(DT, decision tree)、支持向量機(SVM, support vector machine)等機器學(xué)習算法來構(gòu)造漏洞挖掘模型并進行訓(xùn)練以及測試,最后對構(gòu)建的模型進行評估,從而實現(xiàn)漏洞挖掘。
圖3 文本挖掘與機器學(xué)習結(jié)合應(yīng)用于漏洞挖掘的過程
對安全漏洞進行挖掘一直是網(wǎng)絡(luò)空間安全的重點內(nèi)容。安全漏洞挖掘是指利用各種工具、技術(shù),尋找計算機系統(tǒng)中存在的漏洞。根據(jù)是否運行程序代碼,漏洞挖掘技術(shù)可以分為靜態(tài)分析技術(shù)和動態(tài)分析技術(shù)。
2.1.1 靜態(tài)分析技術(shù)
靜態(tài)分析技術(shù)是指在不運行程序的情況下,對目標程序進行分析以及檢測,從而發(fā)現(xiàn)目標程序中可能包含的安全漏洞。靜態(tài)分析技術(shù)主要包括源代碼掃描、靜態(tài)污點分析、可達路徑分析、靜態(tài)符號執(zhí)行等技術(shù)。
源代碼掃描通過檢測程序中不符合安全規(guī)則的文件結(jié)構(gòu)、命名規(guī)則、堆棧指針等信息來發(fā)現(xiàn)可能隱含的安全缺陷,并需要預(yù)先定義出相應(yīng)的漏洞模式,然后進行源代碼掃描,該方法僅能夠?qū)δ撤N漏洞進行檢測。靜態(tài)污點分析[12]通過分析源碼或字節(jié)碼中語句或指令之間的靜態(tài)依賴關(guān)系來判斷污點標記所有可能的傳播途徑,并以此進行來漏洞挖掘,其往往需要較大的空間開銷,誤報率高,自動化程度不夠高??蛇_路徑分析根據(jù)程序執(zhí)行方向?qū)⒋a解析為一個有向圖,通過對圖連通性質(zhì)的研究并結(jié)合約束求解實現(xiàn)對程序的分析,約束求解的困難性一直是可達路徑分析技術(shù)的一個關(guān)鍵問題。靜態(tài)符號執(zhí)行[13]采用抽象符號代替程序變量,并模擬程序執(zhí)行,它能夠在復(fù)雜的數(shù)據(jù)依賴關(guān)系中發(fā)現(xiàn)變量之間本質(zhì)的約束關(guān)系,靜態(tài)符號執(zhí)行面臨著路徑執(zhí)行空間爆炸、很難處理循環(huán)或遞歸等問題,同時對硬件計算能力要求較高,這些問題制約著靜態(tài)分析技術(shù)的發(fā)展,無法進行大規(guī)模的自動化漏洞挖掘。
除此之外,靜態(tài)分析技術(shù)還包括二進制文件比對技術(shù)[14]、手工測試技術(shù)[15]等。
靜態(tài)分析技術(shù)能夠高效快速地完成對程序代碼的檢查,并且其代碼覆蓋率較高、漏報較少。然而,由于靜態(tài)分析缺乏運行時的數(shù)據(jù),并且缺乏動態(tài)的測試過程和細粒度的安全評估,導(dǎo)致靜態(tài)分析技術(shù)準確率較低、誤報較多。
2.1.2 動態(tài)分析技術(shù)
動態(tài)分析技術(shù)通過觀察程序運行過程中的運行狀態(tài)、寄存器狀態(tài)的異常來發(fā)現(xiàn)漏洞。動態(tài)分析技術(shù)主要包括Fuzzing測試、動態(tài)污點分析技術(shù)、動態(tài)符號執(zhí)行技術(shù)等。
Fuzzing測試[16]通過生成大量畸形測試數(shù)據(jù)來測試程序的頑健性和安全性,其核心是測試用例生成技術(shù)。Fuzzing測試是漏洞挖掘最有效、最多產(chǎn)的方法。動態(tài)污點分析技術(shù)[17]對程序的污點數(shù)據(jù)在系統(tǒng)程序中的傳播進行實時監(jiān)控,設(shè)計有效的污點傳播邏輯來保證污點分析精確度。動態(tài)符號執(zhí)行技術(shù)[18]通過執(zhí)行相應(yīng)的測試程序,對輸入有關(guān)的變量進行符號化,而對那些與輸入無關(guān)的變量只采取實際執(zhí)行,動態(tài)符號執(zhí)行具有代碼覆蓋率高、準確性高的特點,能夠分析更大規(guī)模的程序。
動態(tài)分析技術(shù)具有較高的漏洞挖掘準確率,但動態(tài)分析技術(shù)代碼覆蓋率相對較低,條件不滿足時代碼將無法執(zhí)行,同時存在漏報問題??紤]到靜態(tài)測試可以覆蓋所有代碼,所以目前結(jié)合靜態(tài)和動態(tài)分析進行漏洞挖掘成為主流的安全漏洞研究方式。
漏洞利用是獲得系統(tǒng)控制權(quán)限的重要途徑。具體而言,漏洞利用是通過一段帶有攻擊載荷(Payload)的程序觸發(fā)某個漏洞(或幾個漏洞),越過具有漏洞的程序限制,進而控制目標系統(tǒng)中代碼的運行過程,即執(zhí)行攻擊者執(zhí)行代碼的過程。對漏洞利用的研究就是尋找已確認漏洞的可利用點,然而大多數(shù)漏洞尚未找出相應(yīng)的漏洞可利用點。
Exploit-DB對漏洞利用進行了收集。Exploit-DB是與公共漏洞和披露(CVE, common vulnerabilities and exposures)[19]兼容的包含已公開的部分軟件漏洞的漏洞利用的數(shù)據(jù)庫,Exploit-DB存儲了大量的漏洞利用程序,并且包含最新漏洞的相關(guān)信息,供滲透測試人員和漏洞研究人員使用。
安全漏洞威脅嚴重性評估是漏洞研究的重要組成部分,它依據(jù)漏洞自身相關(guān)屬性通過綜合衡量相關(guān)漏洞威脅評估指標來獲得安全漏洞的威脅嚴重性程度,本文也稱這個過程為漏洞分級。漏洞分級方法分為定性和定量2種。常見的定性方式是將漏洞評估為高、中、低共3檔,也有如微軟安全公告評級系統(tǒng)將漏洞分為緊急、重要、中、低共4檔。常用的漏洞定量系統(tǒng)是通用漏洞評分系統(tǒng)(CVSS, common vulnerability scoring system)[20]。
CVSS是一個面向廣大安全廠商用于安全漏洞威脅嚴重等級評估的、公開免費的定量風險評估系統(tǒng)。CVSS評分過程包括3種評分項:基本指標、臨時指標、環(huán)境指標,每一種指標又包含了一組不同的度量以及評分標準。最后對相應(yīng)的評分結(jié)果進行加權(quán)處理,從而獲取一個用來衡量安全漏洞威脅嚴重程度的分值。一般而言,CVSS評分在7~10表示嚴重漏洞,4~6.9表示中等漏洞,0~3.9表示低級漏洞,根據(jù)這些評分結(jié)果優(yōu)先對嚴重性漏洞進行修復(fù)處理。
對漏洞進行修復(fù)的過程是從收到漏洞報告的通知開始的,根據(jù)漏洞的可利用性、漏洞風險和可用的知識等信息進行漏洞修復(fù),共產(chǎn)生了3種修復(fù)方案。
1) 如果已知并記錄了該漏洞的類型,開發(fā)人員將繼續(xù)分析與該漏洞相關(guān)的代碼,設(shè)計并實現(xiàn)一個解決方案,然后使用識別該漏洞的技術(shù)進行測試直至安全漏洞完成修復(fù)。
2) 如果漏洞類型是已知的并且由核心安全團隊記錄,但之前并沒有遇到這樣的安全漏洞,那么就由開發(fā)團隊和核心安全團隊合作分析識別該漏洞并設(shè)計相應(yīng)的解決方案。
3) 如果是未知漏洞類型,那么核心安全團隊將與來自不同領(lǐng)域的專家和開發(fā)人員進行協(xié)作,以開發(fā)針對該漏洞的通用解決方案。
此外,一個通用的解決方案還需要考慮不同的產(chǎn)品領(lǐng)域、不同的使用技術(shù)和不同的編程語言。而且安全專家還會與框架設(shè)計專家協(xié)作,以實現(xiàn)開發(fā)人員可以使用的庫來避免一些安全漏洞。同時開發(fā)指導(dǎo)方針,使開發(fā)人員能夠使用這些指導(dǎo)方針來解決這類漏洞。就目前技術(shù)手段而言,大多數(shù)情況下依然采用人工的方式進行漏洞修復(fù)。
常見的安全漏洞研究方法往往要求安全研究人員具備足夠多的專業(yè)性知識,這種漏洞研究方法的效率很低。將人工智能技術(shù)應(yīng)用于安全漏洞來實現(xiàn)安全漏洞的智能化研究,能夠提升安全防護的效率。自2007年以來,從IEEE、ACM、Springer等數(shù)據(jù)庫收錄的將人工智能技術(shù)應(yīng)用于安全漏洞研究方面的文獻情況如圖4所示。由圖4可知,漏洞挖掘依然是安全研究人員關(guān)注的重點,而其他方面的研究尚少。因此本文重點側(cè)重于漏洞挖掘方面的研究。
圖4 機器學(xué)習用于漏洞研究方面文獻情況
將機器學(xué)習應(yīng)用于漏洞挖掘一直受到安全研究人員的關(guān)注,其本質(zhì)是將漏洞挖掘問題視為程序分類問題或聚類問題,將包含漏洞的程序從正常程序中區(qū)分出來或?qū)┒吹某绦蚓奂谝黄?。近年來,安全研究人員通過對漏洞產(chǎn)生原理、漏洞產(chǎn)生條件等進行深入研究,采用各種學(xué)習算法構(gòu)建了不同的漏洞挖掘模型進行漏洞挖掘。自2007年以來,將機器學(xué)習應(yīng)用于漏洞挖掘方面的文獻變化情況如圖5所示。眾所周知,程序源代碼具有豐富的特征信息,比如,抽象語法樹(AST, abstract syntax trees)、應(yīng)用程序接口(API, application programming interface)調(diào)用等信息,這些信息均用離散的符號進行表示,無法直接作為機器學(xué)習算法的輸入,因此還需要對程序代碼進行處理。根據(jù)處理方式的不同,所得到的特征信息也不同,由此本文將漏洞挖掘模型分為基于軟件度量的漏洞挖掘模型和基于語法語義特征的漏洞挖掘模型。除此之外,對漏洞挖掘模型進行評估又有2種評估方式:一種是能否在現(xiàn)實應(yīng)用程序中挖掘到漏洞;另一種則是通過各種指標來評估漏洞模型,根據(jù)分類預(yù)測的結(jié)果,即真正的正樣本(TP, true positive)、誤報率(FP, false positive)、真正的負樣本(TN, true negative)以及漏報率(FN, false negative)來計算精確率(precision)、召回率(recall)、準確率(accuracy)等指標,計算方式如下。
圖5 機器學(xué)習應(yīng)用于漏洞挖掘文獻變化情況
(2)
(3)
3.1.1 基于軟件度量的漏洞挖掘模型
軟件度量是對軟件開發(fā)項目、過程及其產(chǎn)品進行數(shù)據(jù)定義、收集以及分析的持續(xù)性定量化過程,目的在于對開發(fā)項目加以理解、預(yù)測、評估、控制和改善。軟件度量是對軟件特定實體屬性的量化表示,能夠提供軟件的各種信息,同時又可以通過軟件工具獲取,因此軟件度量成為安全研究人員進行漏洞挖掘的特征選擇之一。常用的軟件度量包括復(fù)雜度(complexity)度量、代碼變化(code churn)度量、耦合度(coupling)、內(nèi)聚度(cohesion)、開發(fā)者活動(developer activity)度量等度量指標。文獻[21-81]在不同程度上構(gòu)建了基于軟件度量的漏洞挖掘模型,本文則對其進行了分析與總結(jié),具體如圖6所示。
早期的軟件度量是由文獻[21-22]提出的,其目的是用來檢測程序故障而并非進行漏洞挖掘。復(fù)雜度度量是安全研究人員的優(yōu)先選擇,正是因為軟件的高復(fù)雜度阻礙了研究人員對程序的理解,因此越是復(fù)雜的軟件越晦澀難懂,越容易產(chǎn)生漏洞。本文對比了文獻[23-33]的漏洞挖掘模型性能,發(fā)現(xiàn)圍繞著Mozilla Firefox進行漏洞挖掘的模型性能均較差,并且復(fù)雜度度量產(chǎn)生的影響會因為項目的變化而變化,同時相關(guān)性分析表明安全漏洞與軟件復(fù)雜度之間的相關(guān)性較弱,這也印證了復(fù)雜度度量召回率低的實驗結(jié)果。代碼變化度量定義為軟件版本與版本之間代碼行數(shù)的變化情況。代碼的變化直接與軟件缺陷相關(guān),從而很可能產(chǎn)生安全漏洞,因此研究人員采用該度量進行漏洞挖掘。文獻[23-24,31,35]均采用了代碼變化度量進行漏洞挖掘,研究結(jié)果表明,代碼變化度量幾乎和復(fù)雜度度量具有相似的實驗結(jié)果,相關(guān)性分析表明了代碼變化度量和漏洞之間的相關(guān)性并不強烈,然而文獻[37-39]進一步擴大了代碼變化度量的范圍,考慮了開發(fā)者經(jīng)驗情況、每次更改花費時間等,利用代碼提交(VCC, vulnerability-contributing commit)挖掘可疑的漏洞,并取得了很好的實驗效果,然而這些軟件度量與安全漏洞之間的弱相關(guān)性依然制約著這些軟件度量的有效性。在計算機設(shè)計中,耦合度和內(nèi)聚度是衡量模塊獨立程度的標準。耦合度是指在程序中,模塊與模塊之間信息或參數(shù)依賴的程度。內(nèi)聚度是指功能相關(guān)的程序組合成一模塊的程度。一般而言,高內(nèi)聚性與軟件的頑健性、可靠度等相關(guān),而低內(nèi)聚性也代表不易維護、不易測試。因此,將耦合度和內(nèi)聚度相結(jié)合為挖掘漏洞提供了可能,文獻[29-30]將復(fù)雜度、耦合度以及內(nèi)聚度結(jié)合進行漏洞挖掘,實驗結(jié)果表明,低耦合高內(nèi)聚的文件往往不容易產(chǎn)生漏洞,相反,高耦合低內(nèi)聚的文件更容易產(chǎn)生漏洞,這也表明了耦合度和內(nèi)聚度在定義上的正確性。文獻[31-32]對開發(fā)者活動度量進行了分析,開發(fā)者活動度量關(guān)注核心人員是否對源代碼進行修改、單人負責還是多人共同負責等。他們的研究表明,多個不同的開發(fā)人員對源代碼文件更改比一個開發(fā)人員對源代碼文件更改更容易受到攻擊。文獻[34]研究了軟件度量與軟件漏洞之間的相關(guān)性。除此之外,文獻[36,41-44]從其他方面比如上下文信息、漏洞庫相關(guān)信息進行漏洞挖掘,文獻[43]利用上下文信息提高了XSS漏洞挖掘效率,文獻[44]則表明了難以利用漏洞庫的相關(guān)信息進行有效的漏洞挖掘。
圖6 基于軟件度量的漏洞挖掘模型歷程
總體來看,選擇軟件度量進行漏洞挖掘依然不能滿足研究需求,雖然如耦合度、內(nèi)聚度、開發(fā)者活動等度量在一定程度上能夠反映哪些文件可能會包含漏洞,但其構(gòu)建的漏洞挖掘模型的性能依然較低。這表明這些軟件度量并不適合用于漏洞挖掘,同時漏洞挖掘比故障檢測要復(fù)雜得多。軟件度量是對軟件性質(zhì)及其規(guī)格的測量,能夠?qū)浖w的性質(zhì)進行量化,然而這些性質(zhì)在本質(zhì)上和安全漏洞本身并沒有很強的相關(guān)性。因此,利用軟件度量進行漏洞挖掘并不合適,必須從漏洞本身出發(fā),開發(fā)結(jié)合安全漏洞的代碼特征,才能更好地將機器學(xué)習應(yīng)用于漏洞挖掘。
代碼屬性不同于軟件度量,它是對軟件度量的進一步發(fā)展,但并不是對軟件整體信息的概括,而是需要結(jié)合具體的某類漏洞的知識,要求研究人員對該類漏洞的產(chǎn)生原理有著充分的了解,對該類型漏洞利用過程中的相關(guān)信息有深入的研究,并且能夠從代碼級別對這些信息進行統(tǒng)計,以這些信息為特征進行漏洞挖掘。代碼屬性是從安全漏洞的相關(guān)信息出發(fā)的,并且能夠在代碼層次上進行統(tǒng)計,將程序代碼與安全漏洞連接起來,從而能夠取得較好的檢測效果,但代碼屬性的確定涉及專業(yè)的知識領(lǐng)域,需要專家經(jīng)驗來確定相應(yīng)的特征選擇。
文獻[45-48]首先利用代碼屬性對Web漏洞進行研究,提出了一系列與漏洞相關(guān)的信息,比如采取Sanitization處理的節(jié)點數(shù)量等特征信息。這些信息能夠從代碼上進行統(tǒng)計,利用這些信息來挖掘漏洞,均取得了較好的實驗結(jié)果。文獻[49-53]利用代碼屬性對緩沖區(qū)溢出漏洞進行挖掘,從Sink分類、輸入分類、輸入驗證等方面定義了一系列與緩沖區(qū)溢出漏洞有關(guān)的屬性,并開發(fā)了能夠根據(jù)代碼自動化對這些信息進行統(tǒng)計的工具,他們的實驗也獲得不錯的檢測性能。這表明代碼屬性是漏洞挖掘的有效特征。但目前關(guān)于代碼屬性的研究主要集中在Web漏洞以及緩沖區(qū)溢出漏洞等方面,能否開發(fā)出新的代碼屬性來提高已有的漏洞挖掘模型性能還需要深入的探索。同時代碼屬性的應(yīng)用范圍太窄,不同類型的漏洞對代碼屬性的要求也不盡相同,能否找出適合挖掘其他類型漏洞的代碼屬性還需要研究人員進行持續(xù)的研究。最后,代碼屬性均是根據(jù)專家經(jīng)驗進行選擇的,這些特征往往會帶有一定的主觀性,這種主觀性會影響機器學(xué)習模型的效果。因此,本文可以通過讓多個專家來定義自己認為重要的特征,然后從這些特征中選取能夠有效提高效率的特征來緩解這種情況,然而這將帶來更加繁重的工作。事實上,本文是希望減少甚至盡可能消除對專家經(jīng)驗的依賴性,因此需要客觀地、自動化地對特征進行選擇并實現(xiàn)漏洞挖掘,從而讓專家從手工定義漏洞探測特性的煩瑣工作中解脫出來。在軟件度量方面實現(xiàn)漏洞特征的自動化選擇是一個長期的過程,現(xiàn)階段還需要依賴專家經(jīng)驗提升漏洞挖掘模型的性能。表1展示了部分基于軟件度量的漏洞挖掘模型的性能。
表1 部分基于軟件度量的漏洞挖掘模型的性能
3.1.2 基于語法語義特征的漏洞挖掘模型
基于語法語義特征的漏洞挖掘模型又可以具體分為基于語義的漏洞挖掘模型和基于語法的漏洞挖掘模型。文獻[54-87]表述了基于語法語義特征的漏洞挖掘模型的變化,其發(fā)展歷程如圖7所示。
基于語義的漏洞挖掘模型,主要是利用文本挖掘技術(shù)來獲取程序源代碼中的語義信息。文本挖掘是指從文本文件中提取有價值的知識,并且利用這些知識更好地組織信息的過程。將文本挖掘應(yīng)用于漏洞挖掘的研究主要有2個方面。首先是通過對程序開發(fā)文檔或程序注釋進行分析并挖掘可能存在的漏洞。據(jù)本文統(tǒng)計,尚未有這方面的研究,文獻[54]利用自然語言技術(shù),能夠有效地進行漏洞挖掘,能否利用自然語言處理技術(shù)來處理開發(fā)文檔或注釋并以此進行漏洞挖掘值得關(guān)注。其次是對源代碼進行文本挖掘,提取源代碼的有效信息來挖掘漏洞。表2給出了部分基于語法語義特征的挖掘模型的性能。
表2 部分基于語法語義特征的漏洞挖掘模型的性能
文獻[55-60]等采用文本挖掘與機器學(xué)習結(jié)合的方法來挖掘漏洞,采用-gram以及統(tǒng)計詞頻對源代碼進行表征,使這些模型均獲得了較高的檢測率。-gram語義模型能夠記錄上下文中相鄰詞間的搭配信息,可以通過個詞語出現(xiàn)的概率來推斷語句的結(jié)構(gòu)。一般而言,越大,越能提供更好的語義效果,文獻[57]采用Bigram,比文獻[55,58]采用的Unigram(1-gram)取得了更好的模型效果。然而當>3時會引起特征爆炸,加重機器學(xué)習對數(shù)據(jù)處理的負擔,限制了漏洞挖掘模型的性能,因此,文獻[61]希望利用降維技術(shù)來提高基于軟件度量以及語義特征的漏洞模型的性能,其實驗結(jié)果表明項目內(nèi)采取降維技術(shù)對模型并沒有太大的增益。然而他們僅采用統(tǒng)計詞頻作為語義特征進行降維處理,并沒有考慮語義的上下文信息,因此將-gram語義模型與降維處理相結(jié)合能否提高模型效果還需要繼續(xù)驗證。事實上,僅依賴詞頻統(tǒng)計及-gram語義模型漏洞挖掘模型僅對程序源代碼進行了粗略的語義信息提取,缺少對代碼語義信息進行深度提煉,同時引入了一些不必要的代碼元素,降低了模型的有效性。Word2Vec語義模型是近年來自然語言處理中常用的新型語義模型,該模型能夠?qū)卧~映射到一個連續(xù)的實值向量,從而方便對自然語言進行數(shù)字化處理,能夠自動實現(xiàn)單詞語義相似性的對比,這為代碼相似性計算提供了新思路。但Word2Vec語義模型應(yīng)用于漏洞挖掘的研究較少。同時,文獻[62-64]利用文本挖掘?qū)﹄[藏的影響漏洞進行研究。
圖7 基于語法語義特征的漏洞挖掘模型歷程
基于語法的漏洞挖掘模型主要是利用AST來表征程序語法進行安全漏洞挖掘,AST是源代碼的抽象語法結(jié)構(gòu)的樹狀表現(xiàn)形式,樹上的每個節(jié)點都表示源代碼中的一種結(jié)構(gòu)。文獻[65-71]均從程序的AST相關(guān)信息進行安全漏洞挖掘的研究。文獻[65]研究了AST的結(jié)構(gòu)模式信息,結(jié)合機器學(xué)習算法對函數(shù)進行安全漏洞挖掘,并發(fā)現(xiàn)了一些漏洞。文獻[66]研究了AST的一些相關(guān)信息(如變量、條件等信息)輔助代碼審計,也發(fā)現(xiàn)了一些安全漏洞。文獻[68-69]將AST與程序分析技術(shù)相結(jié)合進行漏洞挖掘,提高了漏洞挖掘準確率。文獻[67]將程序的抽象語法樹、控制流圖、數(shù)據(jù)依賴圖相結(jié)合,形成的代碼屬性圖能更好地表征程序的結(jié)構(gòu)信息。對代碼屬性圖按規(guī)則遍歷實現(xiàn)了漏洞的自動化挖掘,并取得了較好的效果,但規(guī)則的編寫對安全專家有較高的依賴,能否將機器學(xué)習與代碼屬性圖相結(jié)合進行漏洞挖掘是值得探討的課題。文獻[70-71]則從AST的相關(guān)屬性進行漏洞挖掘,能夠在一定程度上取得不錯的成果。
除此之外,本文發(fā)現(xiàn)文獻[65-66,68,72-73]等利用漏洞外推的概念進行漏洞挖掘。漏洞外推是指從已知漏洞的使用模式出發(fā),利用這些模式來指導(dǎo)代碼審計并識別具有類似模式的程序。這些文獻從API的調(diào)用模式、AST的結(jié)構(gòu)模式、數(shù)據(jù)的傳播模式等出發(fā),結(jié)合機器學(xué)習來進行漏洞挖掘,均發(fā)現(xiàn)了一些未知的漏洞,這表明了他們方法的有效性。然而利用漏洞外推進行漏洞挖掘往往需要專業(yè)安全人員對已知漏洞進行深入研究,確定使用模型往往需要對某類型的漏洞進行深入分析,同時每種漏洞外推方式僅適合某一種模式,并不能檢測到其他的漏洞,有較大的局限性。
近年來基于軟件度量的挖掘模型以及基于語法語義特征的漏洞挖掘模型的文獻的變化情況如圖8所示。不少安全研究人員對二者的性能優(yōu)劣進行了研究。Walden等[74]和Tang等[75]在一個包含223個漏洞的手工數(shù)據(jù)集上進行研究并比較2種模型的性能。Walden的實驗結(jié)果表明基于語義特征的模型有更高的召回率和精確度。然而Tang認為Walden做得不夠全面,且沒有考慮單個組件的大小。Tang的實驗結(jié)果表明,基于軟件度量的模型可以與基于語義特征模型相媲美。對于研究人員而言,軟件度量是漏洞挖掘的實際選擇,因為這些軟件度量體系更完善,同時通過軟件工具更容易獲取、成本更低。本文認為無論是語法語義特征還是軟件度量,均是對源代碼信息的一種表征方式,將語法語義模型和軟件度量模型結(jié)合起來進行漏洞挖掘能夠更好地提高漏洞挖掘效果。事實上,Zhang等[76]提出了一種兩層的復(fù)合漏洞挖掘模型,結(jié)合軟件度量以及語義特征在相同的數(shù)據(jù)集上進行漏洞挖掘,其實驗結(jié)果明顯優(yōu)于Walden的模型性能。這表明了語義模型和軟件度量模型相結(jié)合的確能夠提高模型的挖掘效果。但他們的方法是分散地進行語義特征以及軟件度量的漏洞挖掘的,并沒有將軟件度量以及語義特征相融合進行漏洞挖掘。如何融合2種特征行漏洞挖掘依然是一個研究難點。
圖8 軟件度量模型與語義特征模型文獻對比
3.1.3 機器學(xué)習與程序分析技術(shù)相結(jié)合
文獻[77-81]將漏洞挖掘模型與程序分析技術(shù)相結(jié)合來提高程序分析技術(shù)的性能。靜態(tài)分析技術(shù)和動態(tài)分析技術(shù)在常見的漏洞挖掘方式中起到了非常大的作用,然而無論是靜態(tài)分析還是動態(tài)分析技術(shù)均存在著相應(yīng)的缺陷。利用機器學(xué)習來減緩或消除這些缺陷、提高程序分析技術(shù)的性能則是一個非常好的研究方向。
靜態(tài)污點分析技術(shù)往往需要較大的空間開銷,誤報率高,機器學(xué)習能夠快速處理大量的樣本,結(jié)合機器學(xué)習來減低誤報率則是一種可行的方法。符號執(zhí)行的一個關(guān)鍵問題是路徑執(zhí)行空間爆炸問題,本文通過機器學(xué)習確定可疑函數(shù)集合,利用可疑函數(shù)集合來指導(dǎo)符號執(zhí)行能夠有效減少路徑數(shù)量,減緩路徑執(zhí)行空間爆炸問題,提高了符號執(zhí)行的性能。Fuzzing測試需生成更有效的測試樣例才能有效地觸發(fā)漏洞,結(jié)合機器學(xué)習能夠提高Fuzzing測試的效果。同時利用人工智能技術(shù)能夠有效地提升代碼覆蓋率,進而有效地進行漏洞挖掘。由此可見,機器學(xué)習不僅能夠用于挖掘漏洞,而且其分類結(jié)果也可以用來指導(dǎo)程序分析技術(shù)進行漏洞挖掘,提升漏洞挖掘效率。將機器學(xué)習同程序分析技術(shù)結(jié)合來解決靜態(tài)分析高誤報、低準確率、高動態(tài)分析漏報率、低代碼覆蓋率等問題,這為緩解空間開銷大、約束求解難、路徑執(zhí)行空間爆炸等問題提供了新的思路,將機器學(xué)習同靜態(tài)分析技術(shù)、動態(tài)分析技術(shù)結(jié)合進行漏洞挖掘也是一個可探討的方向。
3.1.4 采用算法比較
在自動化漏洞挖掘過程中,機器學(xué)習算法在構(gòu)建漏洞挖掘模型過程起到很重要的作用,漏洞挖掘文獻中采用的機器學(xué)習算法對比情況,如圖9所示。由圖9可知,樸素貝葉斯(NB, na?ve Bayes)、支持向量機(SVM, support vector machine)、邏輯回歸(LR, logistic regression)、決策樹(DT, decision tree)、隨機森林(RF, random forests)是主要的漏洞挖掘算法。事實上,不同機器學(xué)習算法的性能是否存在顯著性差異是一個爭議性問題,文獻[82-83]發(fā)現(xiàn)在PROMISE庫的10個開源項目數(shù)據(jù)集上,不同的分類算法之間的確存在明顯的差異,而文獻[84]進一步分析了分類方法中參數(shù)的優(yōu)化對缺陷預(yù)測性能的影響,結(jié)果表明這種影響不可忽略。將機器學(xué)習應(yīng)用于漏洞挖掘,無法直接將源代碼作為機器學(xué)習的輸入,因此對源代碼處理方式不同會產(chǎn)生不同的效果,同時不同的機器學(xué)習算法對數(shù)據(jù)特征信息的利用程度是不同的,也會產(chǎn)生不同的效果。因此必須采用多種機器學(xué)習算法對數(shù)據(jù)特征進行評估。在本文統(tǒng)計過程中發(fā)現(xiàn),除了文獻[69,78]采用了10種機器學(xué)習算法對選擇的特征進行了性能對比之外,其他的文獻僅僅采用了3~4種機器學(xué)習算法進行研究。我們認為先前的研究或許并沒有取得特征數(shù)據(jù)的最佳檢測效果,本文建議在未來的研究中,盡可能選擇多種機器學(xué)習算法對數(shù)據(jù)特征進行建模并進行性能對比。
圖9 漏洞挖掘模型的機器學(xué)習算法對比
3.1.5 深度學(xué)習應(yīng)用于漏洞挖掘
基于深度學(xué)習在圖像識別、惡意軟件檢測等方面比其他“淺層”機器學(xué)習算法均能夠獲得更好的性能的經(jīng)驗性的證明,不少研究人員嘗試著將深度學(xué)習引入漏洞挖掘領(lǐng)域。將深度學(xué)習應(yīng)用于漏洞挖掘有2個方面的應(yīng)用,一方面是利用深度學(xué)習模型進行漏洞特征的自動化選擇,這方面應(yīng)用可以將深度學(xué)習與語法語義特征結(jié)合進行漏洞挖掘,另一方面是利用深度學(xué)習進行漏洞挖掘,這方面需要考慮:1) 如何將程序表征為適合深度學(xué)習模型的向量表示。應(yīng)用程序具有豐富的特征,比如AST、函數(shù)調(diào)用等,這些特征無法直接作為深度學(xué)習模型的輸入,因此需要將這些特征轉(zhuǎn)化為適合深度學(xué)習模型的向量表現(xiàn)形式;2) 漏洞挖掘的粒度。不同的特征信息具有不同的粒度,同時漏洞挖掘的粒度與漏洞定位有關(guān),細粒度的漏洞挖掘能夠更好地定位漏洞;3) 能否挖掘多種類型的漏洞。不同種類的安全漏洞對安全研究人員的要求也不相同,專業(yè)的安全研究人員往往針對某類安全漏洞進行深度挖掘,采用深度學(xué)習算法能否同時挖掘多種漏洞是一個非常有趣的問題;4) 如何選擇深度學(xué)習模型?,F(xiàn)有的深度學(xué)習模型有很多種,如何構(gòu)建合適的深度學(xué)習模型來獲取最佳的漏洞挖掘性能也是一個問題。
文獻[85]將深度學(xué)習應(yīng)用于程序分析,證實了深度學(xué)習應(yīng)用于分析程序的可行性。而文獻[59]利用深度學(xué)習輔助漏洞挖掘,采用長短期記憶(LSTM, long short-term memory)網(wǎng)絡(luò)對文本特征進行自動化特征選擇,以克服專家經(jīng)驗的主觀性,獲得了不錯的性能。文獻[86]從API調(diào)用以及庫調(diào)用出發(fā),提出了“Code Gadget”,這是一組語義上相互關(guān)聯(lián),但不一定連續(xù)的代碼行。這種表征方式能夠同時兼顧語義相關(guān)性并從細粒度上進行漏洞挖掘。細粒度的漏洞挖掘能夠識別漏洞位置,以前的研究中很少對漏洞進行定位。文獻[60]從Token級數(shù)據(jù)入手,采用文本挖掘與深度學(xué)習相結(jié)合的方式對軟件組件進行漏洞挖掘,獲得了比其他文本挖掘與機器學(xué)習結(jié)合更好的性能(性能比較如表2所示)。文獻[87]從函數(shù)級數(shù)據(jù)出發(fā),以函數(shù)調(diào)用序列為特征對比了不同的深度學(xué)習模型以及多層感知器(MLP, multi-layer perceptron)的性能,其實驗結(jié)果發(fā)現(xiàn)采用深度學(xué)習模型的實驗結(jié)果比同一數(shù)據(jù)集上采用MLP的實驗結(jié)果要好得多。
就目前而言,將深度學(xué)習應(yīng)用于漏洞挖掘還處于初步階段。首先,文獻[60,87]均表明了深度模型能夠獲得比“淺層”更好的研究性能,將軟件度量或語法語義特征等與深度學(xué)習相結(jié)合,能否提高挖掘效果的研究還很少,這方面的研究依然有待探索。其次,細粒度的漏洞挖掘能夠識別漏洞位置,這無疑擴展了漏洞挖掘的能力。在保證漏洞挖掘效果的前提下進行漏洞定位也是未來的一個研究方向。另外,文獻[86]采用深度學(xué)習模型對2種漏洞進行挖掘,實驗結(jié)果表明了深度學(xué)習能夠?qū)?種漏洞同時進行挖掘,但這種能力是否存在上限并沒有給出明確的答案。最后,需要對不同的深度學(xué)習模型進行對比。相同的數(shù)據(jù)集上采用不同的神經(jīng)網(wǎng)絡(luò)會產(chǎn)生不同的挖掘效果,這可能和選取特征的類型有關(guān),而在這方面的研究依然很少。由此來看,深度學(xué)習在一定程度上能夠提升“淺層”學(xué)習算法的效果,依靠深度學(xué)習模型的強大能力進行漏洞挖掘或許成為未來的主要漏洞挖掘方式。
3.1.6 跨項目漏洞挖掘
目前,大多數(shù)研究工作都集中在項目內(nèi)漏洞挖掘(WPVP, within-project vulnerability prediction)中,跨項目漏洞挖掘(CPVP, cross-project vulnerability prediction)研究較少,同時研究的模型性能不夠高??珥椖柯┒赐诰蛐枰獙崿F(xiàn)在一個項目上構(gòu)造的漏洞挖掘模型用于挖掘另一個項目上的漏洞。在實際軟件開發(fā)場景中,需要進行漏洞挖掘的項目可能是新啟動的項目或這類項目的訓(xùn)練數(shù)據(jù)較為稀缺,這就需要對其進行跨項目漏洞挖掘。然而由于不同項目采用的開發(fā)流程、應(yīng)用的領(lǐng)域、采用的編程語言、開發(fā)人員的經(jīng)驗等不同構(gòu)成了跨項目漏洞挖掘的最大障礙。文獻[32-33,59,61]僅僅粗淺地使用某個項目的軟件度量、語義特征進行另一個項目的漏洞挖掘,并沒有考慮編程語言、項目應(yīng)用的差異性。
隨著機器學(xué)習的發(fā)展,遷移學(xué)習被提出,用于將已經(jīng)學(xué)到的模型參數(shù)通過某種方式來分享給新模型,從而加快并優(yōu)化模型的學(xué)習效率,而不用像大多數(shù)神經(jīng)網(wǎng)絡(luò)那樣從零學(xué)習,這為跨項目漏洞挖掘提供了較好的應(yīng)用基礎(chǔ)。Ma等[88]對這方面進行了研究,提出了遷移樸素貝葉斯(TNB, transfer naive Bayes)模型,來對不同數(shù)據(jù)集進行缺陷檢測訓(xùn)練,他們的結(jié)果證實了遷移學(xué)習能夠取得不錯的效果。文獻[89]首次將遷移學(xué)習應(yīng)用于漏洞挖掘,他們利用序列化的AST表征代碼信息,采用雙向LSTM實現(xiàn)跨項目的漏洞挖掘,并取得了不錯的檢測效果。文獻[61]發(fā)現(xiàn)利用降維技術(shù)在跨項目漏洞挖掘中能夠明顯增強基于軟件度量的模型效果,而在語義特征的模型中則沒有太大變化。我們推測,在軟件度量方面的跨項目漏洞檢測中,降維技術(shù)保留了項目間的公共特性,提高了軟件度量的跨項目檢測性能;而在語義特征方面,采用Unigram以及統(tǒng)計詞頻技術(shù),這些語義模型本身就統(tǒng)計了項目中的一些公共屬性,因此無法提高性能。
除此之外,跨項目漏洞挖掘局限于同種編程語言的不同項目之間進行漏洞挖掘,并沒有實現(xiàn)跨語言漏洞挖掘,本文認為,跨語言漏洞挖掘需要對不同的編程語言進行映射,比如對函數(shù)定義、變量申請等代碼語句進行轉(zhuǎn)換,由此來實現(xiàn)跨語言漏洞挖掘。其次,還要考慮到不同的項目應(yīng)用,比如一般項目中采用的加密算法和銀行相關(guān)項目采用的加密算法在等級上的差異也會影響跨項目漏洞挖掘。綜上,跨項目漏洞挖掘的研究目前處于初期階段,對不同的語言、不同的應(yīng)用環(huán)境,跨項目漏洞挖掘要具備不同的研究性能,這方面研究依然比較少。
實現(xiàn)漏洞利用的自動化生成是一個復(fù)雜的過程,首先要定位漏洞的位置,利用符號執(zhí)行技術(shù)快速找到輸入漏洞可利用點的路徑,其次通過動態(tài)監(jiān)控程序運行過程,能夠獲取程序?qū)嶋H運行時的棧布局信息,最后利用上述信息生成漏洞利用并進行驗證。文獻[90-98]研究了自動化漏洞利用生成(AEG, automatic exploit generation)。這些研究均取得一定的成果,能夠自動化生成漏洞利用,然而這些技術(shù)能夠處理的漏洞種類有限,同時它們并沒有使用人工智能技術(shù)。You等[99]提出了SemFuzz,該框架首次利用NLP 技術(shù)從CVE和Git日志中提取相關(guān)語義信息比如關(guān)鍵函數(shù)、變量來指導(dǎo)PoC的自動生成,同時擴大了處理漏洞的種類。他們的研究表明,將NLP應(yīng)用到漏洞利用的自動化生成是可行的。除此之外,文獻[100-102]采用機器學(xué)習算法從代碼特征等方面對漏洞的可利用性進行了預(yù)測。
將人工智能技術(shù)引入漏洞利用的自動化生成領(lǐng)域,首先提取安全漏洞報告中包含與漏洞相關(guān)的軟件名、版本號、涉及的函數(shù)以及漏洞類型等信息。這些信息能夠初步安裝軟件并對漏洞進行粗略定位。其次利用人工智能技術(shù)與程序技術(shù)相結(jié)合能夠加快分析過程。事實上,自動化漏洞利用生成依然存在漏洞信息不全面、信息利用率低、漏洞利用生成成功率低等問題。各大安全網(wǎng)站及安全論壇提供了相關(guān)的配置、軟件依賴項等信息,這些信息也可以輔助漏洞利用的自動化生成。本文認為,利用NLP技術(shù)綜合處理與漏洞相關(guān)的信息源,從而實現(xiàn)漏洞利用的自動化生成,這將成為漏洞利用自動化生成的新方法。通過對漏洞利用的自動化生成進行研究,對促進漏洞挖掘分析等均具有重大意義。
對安全漏洞進行評估能夠幫助人們建立衡量漏洞嚴重程度的標準、確定漏洞修補的優(yōu)先級。CVSS將漏洞的嚴重程度分為3種等級,這為實現(xiàn)漏洞評估的自動化提供了基礎(chǔ)。同時CVE漏洞庫也能夠為機器學(xué)習應(yīng)用漏洞評估提供更多的特征選擇,比如數(shù)據(jù)集、漏洞關(guān)鍵字、漏洞描述等信息。
Yamamoto等[103]提出了將自然語言處理和機器學(xué)習算法結(jié)合的方法來自動化評估CVE文檔的CVSS基準度量。而Spanos等[104]則通過對漏洞報告中關(guān)于漏洞的自然語言描述,從訪問向量、訪問復(fù)雜性、身份驗證、識別性影響、完整性影響和可用性影響這6個方面進行文本挖掘,并以此來構(gòu)建機器學(xué)習模型,實驗結(jié)果均能夠以78%以上的準確度對漏洞進行評估。Han等[105]將深度學(xué)習引入漏洞評估中,并提取CVE漏洞庫中漏洞描述的相關(guān)文本特征來預(yù)測軟件漏洞的嚴重程度。
研究人員從漏洞報告中提煉有效信息進行漏洞評估,取得了一定的效果,然而這些研究僅僅關(guān)注漏洞報告的信息,并沒有考慮各大安全網(wǎng)站統(tǒng)計的信息。事實上,各大安全網(wǎng)站提供了有關(guān)安全漏洞的統(tǒng)計信息,比如SecurityFocus詳細地統(tǒng)計了受影響的軟件及其版本號。本文認為,除了上述有關(guān)漏洞報告的因素外,還要考慮到軟件的應(yīng)用范圍,軟件的應(yīng)用范圍越廣,所產(chǎn)生的影響越大。其次,需要考慮軟件的復(fù)雜度,越是復(fù)雜的軟件越難以維護,漏洞持續(xù)的周期越長,造成的危害越大。因此CVSS提供了一種用于安全漏洞威脅嚴重等級評估的、公開免費的風險評估系統(tǒng),然而其中的指標往往很復(fù)雜,難以快速實現(xiàn)漏洞評估。將自然語言處理與機器學(xué)習相結(jié)合對漏洞報告以及其他的漏洞信息源進行處理能夠快速實現(xiàn)對安全漏洞的智能評估。
安全漏洞的修復(fù)是減少因安全漏洞暴露引起財產(chǎn)損失的最佳方法。從近幾年的安全攻擊時間來看,由于廠商更新速度趕不上漏洞PoC的傳播速度,未能及時對漏洞進行修復(fù),因此對計算機用戶造成了較大的損失。實現(xiàn)漏洞的自動化修復(fù),有助于快速彌補漏洞缺陷,減少用戶財產(chǎn)損失,對促進計算機生態(tài)安全有重大作用。
Zhang等[106]對整數(shù)溢出到緩沖區(qū)溢出(IO2BO, integer overflow to buffer overflow)漏洞進行修補。Le等[107]提出了GenProg,使用遺傳編程算法來生成新的程序變種,選擇能夠通過所有被考慮的測試用例的程序變種作為修補方案。White等[108]對GenProg進行了擴展,提出了DeepRepair,采用深度學(xué)習模型進行程序修補。Zhang等[109]提出了一種自動補片技術(shù)AppSealer,修復(fù)Android平臺組件劫持漏洞。
將機器學(xué)習應(yīng)用于漏洞自動化修補依然存在較大的困難。首先,漏洞準確定位是一個急需解決的難點,文獻[23,31]研究了復(fù)雜性度量指標和其他指標,如過程度量能否進行漏洞定位。其次,漏洞的修補方式更復(fù)雜,既要確定觸發(fā)漏洞的類型,又要對程序進行相應(yīng)的修改,還要保證修補后的程序能夠正常運行并且保證不會產(chǎn)生其他漏洞。最后,由于目前程序分析技術(shù)無法對軟件進行全面的分析,還需要人工進行漏洞修復(fù)。Ben等[110]的研究確定了8類共65個影響漏洞修復(fù)時間的因素。他們的工作能夠改進漏洞修復(fù)過程,更合理地配置漏洞修復(fù)資源,提高漏洞修復(fù)效率。部分漏洞如整數(shù)溢出漏洞以及格式化字符串漏洞能夠采用故障修補方式進行修補。由此可見,人工進行漏洞修補方式依然是漏洞修補的主流方式,實現(xiàn)漏洞修補的自動化還需要研究人員投入大量的研究。
安全漏洞的自動化研究始終是網(wǎng)絡(luò)空間安全研究的重點,將人工智能技術(shù)引入安全漏洞研究,有利于促進安全漏洞研究的自動化發(fā)展。本節(jié)通過將人工智能技術(shù)應(yīng)用到安全漏洞研究過程,分析了自動化漏洞挖掘、自動化漏洞利用、自動化漏洞評估、自動化漏洞修復(fù)等一系列新的研究成果,同時指出了現(xiàn)有的研究存在的問題,并給出了一些建議以及解決方法。
將人工智能技術(shù)應(yīng)用于安全漏洞研究一直是網(wǎng)絡(luò)空間安全研究的重要方向之一,這對計算機系統(tǒng)安全和網(wǎng)絡(luò)空間安全有著非常重要的意義。然而,由于漏洞種類繁多,漏洞產(chǎn)生原理、觸發(fā)條件彼此不一致,因此對安全漏洞無法進行統(tǒng)一有效的挖掘。由此可見,實現(xiàn)漏洞自動化挖掘等研究過程還有很長的路要走。將人工智能技術(shù)應(yīng)用于安全漏洞研究的一些問題以及可能的解決方法如表3所示。
表3 人工智能技術(shù)應(yīng)用于安全漏洞研究面臨的問題與機遇
1) 特征選擇
在漏洞挖掘方面,本文根據(jù)選擇特征的不同將其分為基于軟件度量的漏洞挖掘模型以及基于語法語義特征的漏洞挖掘模型。對于機器學(xué)習算法而言,選取的特征越能代表數(shù)據(jù)集的特性,那么構(gòu)造的模型越能擁有更好的性能。因此,基于軟件度量的漏洞挖掘模型需要開發(fā)新的代碼屬性特征來更好地進行漏洞挖掘。代碼屬性作為一種有前景的特征需要研究人員繼續(xù)進行深入研究,同時語義特征可以考慮采用新型的語義模型表征程序進行漏洞挖掘,或利用NLP技術(shù)、深度學(xué)習等技術(shù)提取程序的有效信息進行漏洞挖掘。同時,對語義模型中的特征爆炸問題,可以采用降維方法對數(shù)據(jù)處理來提高模型的性能。無論是軟件度量還是語義特征,它們均屬于漏洞挖掘的不同方面,能否將二者進行融合進行漏洞挖掘也是一個難點。而在漏洞評估方面,目前尚未找到有效的特征進行漏洞評估,因此還需要開發(fā)有效的軟件特征進行相應(yīng)的預(yù)測。
2) 深度學(xué)習模型
深度學(xué)習模型是近年來提出的新的機器學(xué)習模型,將深度學(xué)習應(yīng)用于漏洞研究目前還處于起步階段,借助深度學(xué)習模型強大的性能,將深度學(xué)習模型應(yīng)用于漏洞挖掘、漏洞利用、漏洞評估與漏洞修復(fù)等均屬于難點問題。而深度模型應(yīng)用于漏洞挖掘面臨的首要問題是如何將程序表征轉(zhuǎn)化為適合深度模型的向量表達;其次在于檢測粒度,細粒度的漏洞挖掘模型能夠識別漏洞位置,這擴展了安全漏洞的研究;最后在于深度學(xué)習算法,目前深度學(xué)習算法也有很多種,不同的算法對不同的特征會產(chǎn)生不同的結(jié)果,如何選擇特征與深度學(xué)習模型也是一個研究難點,而目前這些方面研究很少。
3) 跨項目檢測
跨項目漏洞挖掘是對不同項目的漏洞進行檢測,由于編程語言、應(yīng)用領(lǐng)域等差異,導(dǎo)致跨項目漏洞挖掘的難度很大。目前,實現(xiàn)跨項目漏洞挖掘的研究較少,其模型性能較低。遷移學(xué)習作為解決跨項目漏洞挖掘的有效手段依然存在一些研究難點,比如如何利用遷移學(xué)習來實現(xiàn)跨語言漏洞挖掘以及不同領(lǐng)域的跨項目漏洞挖掘等。
4) 數(shù)據(jù)集
將機器學(xué)習應(yīng)用于漏洞挖掘,首要考慮的是數(shù)據(jù)集。在本文調(diào)研過程中發(fā)現(xiàn),現(xiàn)有的研究數(shù)據(jù)集可以分為組件級數(shù)據(jù)集、函數(shù)級數(shù)據(jù)集以及代碼級數(shù)據(jù)集。函數(shù)級數(shù)據(jù)集以及組件級數(shù)據(jù)集常用于基于語義語法特征的漏洞挖掘模型,而代碼級數(shù)據(jù)集則傾向于基于軟件度量的漏洞挖掘模型。事實上,不同的數(shù)據(jù)集對漏洞挖掘模型的性能也會產(chǎn)生不同的影響,細粒度的數(shù)據(jù)集更有益于漏洞位置的識別,同時也加大了計算處理的難度。目前并沒有一個公開的可以作為基準的漏洞數(shù)據(jù)集。因此本文認為將機器學(xué)習引入漏洞挖掘,必須建立一個公開的、能夠作為測試基準的數(shù)據(jù)集。
5) 高漏報或者高誤報
常見的程序分析技術(shù)如靜態(tài)分析、動態(tài)分析等技術(shù)在漏洞挖掘過程中起到了很大的作用,然而這些技術(shù)往往面臨著高漏報率或高誤報率等問題。同時,符號執(zhí)行、污點分析等技術(shù)也存在著各自的缺點。機器學(xué)習通過對大量的樣本進行訓(xùn)練能夠從中抽象出相應(yīng)的特征,并能夠篩選出可能存在問題函數(shù)或者代碼片段。因此,將機器學(xué)習同靜態(tài)分析、動態(tài)分析等分析技術(shù)相結(jié)合進行漏洞挖掘來降低模型的誤報率或漏報率,提高漏洞模型的準確率。同時,將機器學(xué)習同程序分析技術(shù)相結(jié)合為解決約束求解難、路徑執(zhí)行空間爆炸等問題提供了新的思路。將機器學(xué)習同靜態(tài)分析技術(shù)、動態(tài)分析技術(shù)結(jié)合進行漏洞挖掘也是一個可探討的研究方向。
隨著人工智能技術(shù)的不斷發(fā)展,利用人工智能技術(shù)對軟件進行分析,實現(xiàn)軟件的安全漏洞研究成為安全研究的重要方向之一。本文總結(jié)了人工智能技術(shù)應(yīng)用于安全漏洞研究方面最新的應(yīng)用,歸納了其存在的問題并進行了相應(yīng)的探討。本文認為,在未來將人工智能技術(shù)應(yīng)用于漏洞的研究中,深度學(xué)習模型能夠促進安全漏洞的研究,開發(fā)新的漏洞特征則能夠提高現(xiàn)有漏洞挖掘模型的準確度,同時對漏洞定位、漏洞挖掘中的漏報誤報等問題進一步分析,提高人工智能技術(shù)在漏洞研究方面起到的作用,這對促進智能化漏洞研究均有重大影響。
[1] 張玉清, 宮亞峰,王宏, 等.安全漏洞標識與描述規(guī)范[S]. GB/T28458-2012, 全國信息安全標準化技術(shù)委員會(SAC/TC 260).ZHANG Y Q,GONG Y F,WANG H, et al. Vulnerability identification and description specification[S]. GB/T28458-2012, National Information Security Standardization Technical Committee.
[2] WITTEN I H, FRANK E, HALL M A, et al. Data mining: practical machine learning tools and techniques[M]. Morgan Kaufmann, 2016.
[3] VAPNIK V N. An overview of statistical learning theory[J]. IEEE transactions on neural networks, 1999, 10(5): 988-999.
[4] NASRABADI N M. Pattern recognition and machine learning[J]. Journal of Electronic Imaging, 2007, 16(4): 049901.
[5] MITCHELL T M. Machine learning and data mining[J]. Communications of the ACM, 1999, 42(11): 30-36.
[6] LECUN Y, BENGIO Y, HINTON G. Deep learning[J]. Nature, 2015, 521(7553): 436.
[7] KRIZHEVSKY A, SUTSKEVER I, HINTON G E. ImageNet classification with deep convolutional neural networks[J]. Communications of the ACM, 2012, 60(2): 2012-2025.
[8] TAIGMAN Y, YANG M, RANZATO M A, et al. Deepface: closing the gap to human-level performance in face verification[C]//The 29th IEEE Conference on Computer Vision and Pattern Recognition. 2014: 1701-1708.
[9] COLLOBERT R, WESTON J. A unified architecture for natural language processing: deep neural networks with multitask learning[C]//The 25th International Conference on Machine Learning. 2008: 160-167.
[10] HUANG W Y, STOKES J W. MtNet: a multi-task neural network for dynamic malware classification[C]//The 5th 25th International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. 2016:399-418.
[11] DEBAR H, BECKER M, SIBONI D. A neural network component for an intrusion detection system[C]//The 23rd Computer Society Symp on Research in Security and Privacy. 1992: 240-250.
[12] CEARA D, POTET M L, ENSIMAG G I N P, et al. Detecting software vulnerabilities-static taint analysis[J]. Polytechnic University of Bucharest, 2009.
[13] KING J C. Symbolic execution and program testing[J]. Communications of the ACM, 1976, 19(7): 385-394.
[14] GAO D, REITER M K, SONG D. Binhunt: automatically finding semantic differences in binary programs[C]//International Conference on Information and Communications Security. 2008: 238-255.
[15] DUKES L S, YUAN X, AKOWUAH F. A case study on web application security testing with tools and manual testing[C]//2013 Proceedings of IEEE. 2013: 1-6.
[16] SUTTON M, GREENE A, AMINI P. Fuzzing: brute force vulnerability discovery[M]. Pearson Education, 2007.
[17] NEWSOME J, SONG D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software[J]. 2005.
[18] XIE T, TILLMANN N, DE H J, et al. Fitness-guided path exploration in dynamic symbolic execution[C]//IEEE/IFIP International Conference on Dependable Systems & Networks. 2009: 359-368.
[19] SURHONE L M, TENNOE M T, HENSSONOW S F, et al. Common vulnerabilities and exposures[M]. Betascript Publishing, 2010.
[20] MELL P, SCARFONE K, ROMANOSKY S. Common vulnerability scoring system[J]. IEEE Security & Privacy, 2006, 4(6).
[21] MCCABE T J. A complexity measure[J]. IEEE Transactions on software Engineering, 1976 (4): 308-320.
[22] HALSTEAD M H. Elements of software science (operating and programming systems series)[M]. Elsevier Science Inc, 1977.
[23] ZIMMERMANN T, NAGAPPAN N, WILLIAMS L. Searching for a needle in a haystack: predicting security vulnerabilities for windows vista[C]// 2010 Third International Conference on Software Testing, Verification and Validation (ICST). 2010: 421-428.
[24] SHIN Y, WILLIAMS L. Can traditional fault prediction models be used for vulnerability prediction?[J]. Empirical Software Engineering, 2013, 18(1): 25-59.
[25] SHIN Y, WILLIAMS L. An empirical model to predict security vulnerabilities using code complexity metrics[C]//The Second ACM-IEEE International Symposium on Empirical Software Engineering and Measurement. 2008: 315-317.
[26] SHIN Y, WILLIAMS L. Is complexity really the enemy of software security?[C]//The 4th ACM Workshop on Quality of Protection. 2008: 47-50.
[27] SHIN Y, WILLIAMS L. An initial study on the use of execution complexity metrics as indicators of software vulnerabilities[C]//The 7th International Workshop on Software Engineering for Secure Systems. 2011: 1-7.
[28] DOYLE M, WALDEN J. An empirical study of the evolution of PHP web application security[C]//2011 Third International Workshop on Security Measurements and Metrics (Metrisec). 2011: 11-20.
[29] CHOWDHURY I, ZULKERNINE M. Using complexity, coupling, and cohesion metrics as early indicators of vulnerabilities[J]. Journal of Systems Architecture, 2011, 57(3): 294-313.
[30] CHOWDHURY I, ZULKERNINE M. Can complexity, coupling, and cohesion metrics be used as early indicators of vulnerabilities?[C]//The 2010 ACM Symposium on Applied Computing. 2010: 1963-1969.
[31] SHIN Y, MENEELY A, WILLIAMS L, et al. Evaluating complexity, code churn, and developer activity metrics as indicators of software vulnerabilities[J]. IEEE Transactions on Software Engineering, 2011, 37(6): 772-787.
[32] MENEELY A, WILLIAMS L. Strengthening the empirical analysis of the relationship between Linus’ Law and software security[C]//The 2010 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement. 2010: 9.
[33] MOSHTARI S, SAMI A, AZIMI M. Using complexity metrics to improve software security[J]. Computer Fraud & Security, 2013, 2013(5): 8-17.
[34] ALVES H, FONSECA B, ANTUNES N. Software metrics and security vulnerabilities: dataset and exploratory study[C]//Dependable Computing Conference (EDCC). 2016: 37-44.
[35] MORRISON P, HERZIG K, MURPHY B, et al. Challenges with applying vulnerability prediction models[C]//The 2015 Symposium and Bootcamp on the Science of Security. 2015: 4.
[36] SCANDARIATO R, WALDEN J. Predicting vulnerable classes in an Android application[C]//The 4th International Workshop on Security Measurements and Metrics. 2012: 11-16.
[37] MENEELY A, SRINIVASAN H, MUSA A, et al. When a patch goes bad: Exploring the properties of vulnerability-contributing commits[C]//2013 ACM/IEEE International Symposium on Empirical Software Engineering and Measurement. 2013: 65-74.
[38] PERL H, DECHAND S, SMITH M, et al. Vccfinder: finding potential vulnerabilities in open-source projects to assist code audits[C]//The 22nd ACM SIGSAC Conference on Computer and Communications Security. 2015: 426-437.
[39] YANG L, LI X, YU Y. VulDigger: a just-in-time and cost-aware tool for digging vulnerability-contributing changes[C]//2017 IEEE Global Communications Conference. 2017: 1-7.
[40] GEGICK M, WILLIAMS L, OSBORNE J, et al. Prioritizing software security fortification throughcode-level metrics[C]//The 4th ACM workshop on Quality of Protection. 2008: 31-38.
[41] NGUYEN V H, TRAN L M S. Predicting vulnerable software components with dependency graphs[C]//The 6th International Workshop on Security Measurements and Metrics. 2010: 3.
[42] YAN H, SUI Y, CHEN S, et al. Machine-learning-guided typestate analysis for static use-after-free detection[C]//The 33rd Annual Computer Security Applications Conference. 2017: 42-54.
[43] GUPTA M K, GOVIL M C, SINGH G. Predicting cross-site scripting (XSS) security vulnerabilities in web applications[C]//2015 12th International Joint Conference on Computer Science and Software Engineering (JCSSE). 2015: 162-167.
[44] ZHANG S, CARAGEA D, OU X. An empirical study on using the national vulnerability database to predict software vulnerabilities[C]//International Conference on Database and Expert Systems Applications. 2011: 217-231.
[45] SHAR L K, TAN H B K. Predicting common web application vulnerabilities from input validation and sanitization code patterns[C]//The 27th IEEE/ACM International Conference on Automated Software Engineering (ASE). 2012: 310-313.
[46] SHAR L K, TAN H B K. Predicting SQL injection and cross site scripting vulnerabilities through mining input sanitization patterns[J]. Information and Software Technology, 2013, 55(10): 1767-1780.
[47] SHAR L K, TAN H B K, BRIAND L C. Mining SQL injection and cross site scripting vulnerabilities using hybrid program analysis[C]//The 2013 International Conference on Software Engineering. 2013: 642-651.
[48] SHAR L K, BRIAND L C, TAN H B K. Web application vulnerability prediction using hybrid program analysis and machine learning[J]. IEEE Transactions on Dependable and Secure Computing, 2015, 12(6): 688-707.
[49] PADMANABHUNI B M, TAN H B K. buffer overflow vulnerability prediction from x86 executables using static analysis and machine learning[C]//Computer Software and Applications Conference (COMPSAC). 2015: 450-459.
[50] PADMANABHUNI B M, TAN H B K. Predicting buffer overflow vulnerabilities through mining light-weight static code attributes[C]// 2014 IEEE International Symposium on Software Reliability Engineering Workshops (ISSREW). 2014: 317-322.
[51] PADMANABHUNI B M, TAN H B K. Auditing buffer overflow vulnerabilities using hybrid static-dynamic analysis[J]. IET Software, 2016, 10(2): 54-61.
[52] MENG Q, ZHANG B, FENG C, et al. Detecting buffer boundary violations based on SVM[C]//2016 3rd International Conference on Information Science and Control Engineering (ICISCE). 2016: 313-316.
[53] MENG Q, WEN S, FENG C, et al. Predicting integer overflow through static integer operation attributes[C]//International Conference on Computer Science and Network Technology. 2017:177-181.
[54] WANG D, LIN M, ZHANG H, et al. Detect related bugs from source code using bug information[C]//Computer Software and Applications Conference (COMPSAC). 2010: 228-237.
[55] HOVSEPYAN A, SCANDARIATO R, JOOSEN W, et al. Software vulnerability prediction using text analysis techniques[C]//The 4th International Workshop on Security Measurements and Metrics. 2012: 7-10.
[56] SCANDARIATO R, WALDEN J, HOVSEPYAN A, et al. Predicting vulnerable software components via text mining[J]. IEEE Transactions on Software Engineering, 2014, 40(10): 993-1006.
[57] PANG Y, XUE X, NAMIN A S. Early identification of vulnerable software components via ensemble learning[C]//2016 15th IEEE International Conference on Machine Learning and Applications (ICMLA). 2016: 476-481.
[58] DAM H K, TRAN T, PHAM T, et al. Automatic feature learning for vulnerability prediction[J]. arXiv preprint, arXiv:1708.02368, 2017.
[59] PANG Y, XUE X, NAMIN A S. Predicting vulnerable software components through n-gram analysis and statistical feature selection[C]// 2015 IEEE 14th International Conference on Machine Learning and Applications (ICMLA). 2015: 543-548.
[60] PANG Y, XUE X, WANG H. Predicting vulnerable software components through deep neural network[C]//The 2017 International Conference on Deep Learning Technologies. 2017: 6-10.
[61] STUCKMAN J, WALDEN J, SCANDARIATO R. The effect of dimensionality reduction on software vulnerability prediction models[J]. IEEE Transactions on Reliability, 2017, 66(1): 17-37.
[62] WIJAYASEKARA D, MANIC M, WRIGHT J L, et al. Mining bug databases for unidentified software vulnerabilities[C]// 2012 5th International Conference on Human System Interactions (HSI). 2012: 89-96.
[63] WIJAYASEKARA D, MANIC M, MCQUEEN M. Information gain based dimensionality selection for classifying text documents[C]// 2013 IEEE Congress on Evolutionary Computation (CEC). 2013: 440-445.
[64] WIJAYASEKARA D, MANIC M, MCQUEEN M. Vulnerability identification and classification via text mining bug databases[C]//Industrial Electronics Society, IECON 2014-40th Annual Conference of the IEEE. 2014: 3612-3618.
[65] YAMAGUCHI F, LOTTMANN M, RIECK K. Generalized vulnerability extrapolation using abstract syntax trees[C]//The 28th Annual Computer Security Applications Conference. 2012: 359-368.
[66] YAMAGUCHI F, WRESSNEGGER C, GASCON H, et al. Chucky: exposing missing checks in source code for vulnerability discovery[C]//The 2013 ACM SIGSAC Conference on Computer & Communications Security. 2013: 499-510.
[67] YAMAGUCHI F, MAIER A, GASCON H, et al. Automatic inference of search patterns for taint-style vulnerabilities[C]// 2015 IEEE Symposium on Security and Privacy (SP). 2015: 797-812.
[68] MENG Q, WEN S, ZHANG B, et al. Automatically discover vulnerability through similar functions[C]//Progress in Electromagnetic Research Symposium (PIERS). 2016: 3657-3661.
[69] MEDEIROS I, NEVES N, CORREIA M. Detecting and removing web application vulnerabilities with static analysis and data mining[J]. IEEE Transactions on Reliability, 2016, 65(1): 54-69.
[70] MENG Q, SHAMENG W, CHAO F, et al. Predicting buffer overflow using semi-supervised learning[C]// International Congress on Image and Signal Processing, BioMedical Engineering and Informatics (CISP-BMEI), 2016: 1959-1963.
[71] ALOHALY M, TAKABI H. When do changes induce software vulnerabilities?[C]//2017 IEEE 3rd International Conference on Collaboration and Internet Computing (CIC). 2017: 59-66.
[72] NEUHAUS S, ZIMMERMANN T, HOLLER C, et al. Predicting vulnerable software components[C]//The 14th ACM Conference on Computer and Communications Security. 2007: 529-540.
[73] YAMAGUCHI F, LINDNER F, RIECK K. Vulnerability extrapolation: assisted discovery of vulnerabilities using machine learning[C]//The 5th USENIX Conference on Offensive Technologies. 2011: 13.
[74] WALDEN J, STUCKMAN J, SCANDARIATO R. Predicting vulnerable components: software metrics vs text mining[C]//2014 IEEE 25th International Symposium on Software Reliability Engineering (ISSRE). 2014: 23-33.
[75] TANG Y, ZHAO F, YANG Y, et al. Predicting vulnerable components via text mining or software metrics? an effort-aware perspective[C]// 2015 IEEE International Conference on Software Quality, Reliability and Security (QRS). 2015: 27-36.
[76] ZHANG Y, LO D, XIA X, et al. Combining software metrics and text features for vulnerable file prediction[C]//2015 20th International Conference on Engineering of Complex Computer Systems (ICECCS). 2015: 40-49.
[77] MENG Q, ZHANG B, FENG C, et al. Detecting buffer boundary violations based on SVM[C]// 2016 3rd International Conference on Information Science and Control Engineering (ICISCE). 2016: 313-316.
[78] MEDEIROS I, NEVES N F, CORREIA M. Automatic detection and correction of web application vulnerabilities using data mining to predict false positives[C]//The 23rd International Conference on World Wide Web. 2014: 63-74.
[79] HEO K, OH H, YI K. Machine-learning-guided selectively unsound static analysis[C]//The 39th International Conference on Software Engineering. 2017: 519-529.
[80] GRIECO G, GRINBLAT G L, UZAL L, et al. Toward large-scale vulnerability discovery using machine learning[C]//The Sixth ACM Conference on Data and Application Security and Privacy. 2016: 85-96.
[81] GODEFROID P, PELEG H, SINGH R. Learn&fuzz: machine learning for input fuzzing[C]//The 32nd IEEE/ACM International Conference on Automated Software Engineering. 2017: 50-59.
[82] LESSMANN S, BAESENS B, MUES C, et al. Benchmarking classification models for software defect prediction: a proposed framework and novel findings[J]. IEEE Transactions on Software Engineering, 2008, 34(4): 485-496.
[83] GHOTRA B, MCINTOSH S, HASSAN A E. Revisiting the impact of classification techniques on the performance of defect prediction models[C]//The 37th International Conference on Software Engineering. 2015: 789-800.
[84] TANTITHAMTHAVORN C, MCINTOSH S, HASSAN A E, et al. Automated parameter optimization of classification techniques for defect prediction models[C]//2016 IEEE/ACM 38th International Conference on Software Engineering (ICSE). 2016: 321-332.
[85] MOU L, LI G, LIU Y, et al. Building program vector representations for deep learning[J]. arXiv preprint, arXiv:1409.3358, 2014.
[86] LI Z, ZOU D, XU S, et al. VulDeePecker: a deep learning-based system for vulnerability detection[J]. arXiv preprint, arXiv:1801.01681, 2018.
[87] WU F, WANG J, LIU J, et al. Vulnerability detection with deep learning[C]//2017 3rd IEEE International Conference on Computer and Communications (ICCC). 2017: 1298-1302.
[88] MA Y, LUO G, ZENG X, et al. Transfer learning for cross-company software defect prediction[J]. Information and Software Technology, 2012, 54(3): 248-256.
[89] LIN G, ZHANG J, LUO W, et al. Cross-project transfer representation learning for vulnerable function discovery[J]. IEEE Transactions on Industrial Informatics, 2018.
[90] BRUMLEY D, POOSANKAM P, SONG D, et al. Automatic patch-based exploit generation is possible: techniques and implications[C]//IEEE Symposium on Security and Privacy. 2008: 143-157.
[91] CHA S K, AVGERINOS T, REBERT A, et al. Unleashing mayhem on binary code[C]//2012 IEEE Symposium on Security and Privacy (SP). 2012: 380-394.
[92] WANG M, SU P, LI Q, et al. Automatic polymorphic exploit generation for software vulnerabilities[C]//International Conference on Security and Privacy in Communication Systems. 2013: 216-233.
[93] HU H, CHUA Z L, ADRIAN S, et al. Automatic generation of data- oriented exploits[C]//USENIX Security Symposium. 2015: 177-192.
[94] BAO T, WANG R, SHOSHITAISHVILI Y, et al. Your exploit is mine: automatic shellcode transplant for remote exploits[C]//2017 IEEE Symposium on Security and Privacy (SP). 2017: 824-839.
[95] ALHUZALI A, ESHETE B, GJOMEMO R, et al. Chainsaw: chained automated workflow-based exploit generation[C]// ACM Sigsac Conference on Computer and Communications Security. 2016:641-652.
[96] HUANG S K, LU H L, LEONG W M, et al. CRAXweb: automatic web application testing and attack generation[C]//IEEE, International Conference on Software Security and Reliability. 2013:208-217.
[97] FELMETSGER V, CAVEDON L, KRUEGEl C, et al. Toward automated detection of logic vulnerabilities in Web applications[C]// Usenix Security Symposium. 2010:143-160.
[98] LUO L, ZENG Q, CAO C, et al. System service call-oriented symbolic execution of android framework with applications to vulnerability discovery and exploit generation[C]//The 15th Annual International Conference on Mobile Systems, Applications, and Services. 2017: 225-238.
[99] YOU W, ZONG P, CHEN K, et al. SemFuzz: semantics-based automatic generation of proof-of-concept exploits[C]//The 2017 ACM SIGSAC Conference on Computer and Communications Security. 2017: 2139-2154.
[100] YOUNIS A, MALAIYA Y, ANDERSON C, et al. To fear or not to fear that is the question: code characteristics of a vulnerable functionwith an existing exploit[C]//The Sixth ACM Conference on Data and Application Security and Privacy. 2016: 97-104.
[101] BOZORGI M, SAUL L K, SAVAGE S, et al. Beyond heuristics: learning to classify vulnerabilities and predict exploits[C]//The 16th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 2010: 105-114..
[102] ALLODI L, MASSACCI F. A preliminary analysis of vulnerability scores for attacks in wild: the ekits and sym datasets[C]//The 2012 ACM Workshop on Building analysis datasets and gathering experience returns for security. 2012: 17-24.
[103] YAMAMOTO Y, MIYAMOTO D, NAKAYAMA M. Text-mining approach for estimating vulnerability score[C]// International Workshop on Building Analysis Datasets and Gathering Experience Returns for Security. 2017:67-73.
[104] SPANOS G, ANGELIS L, TOLOUDIS D. Assessment of vulnerability severity using text mining[C]// Pan-Hellenic Conference on Informatics. 2017:1-6.
[105] HAN Z, LI X, XING Z, et al. Learning to predict severity of software vulnerability using only vulnerability description[C]// 2017 IEEE International Conference on Software Maintenance and Evolution (ICSME). 2017: 125-136.
[106] ZHANG C, WANG T, WEI T, et al. IntPatch: automatically fix integer-overflow-to-buffer-overflow vulnerability at compile-time[C]// European Symposium on Research in Computer Security. 2010: 71-86.
[107] LE G C, NGUYEN T V, FORREST S, et al. Genprog: a generic method for automatic software repair[J]. IEEE Transactions On Software Engineering, 2012, 38(1): 54-72.
[108] WHITE M, TUFANO M, MARTINEZ M, et al. Sorting and transforming program repair ingredients via deep learning code similarities[J]. arXiv preprint, arXiv:1707.04742, 2017.
[109] ZHANG M, YIN H. AppSealer: automatic generation of vulnerability-specific patches for preventing component hijacking attacks in android applications[C]//NDSS. 2014.
[110] BEN O L, CHEHRAZI G, BODDEN E, et al. Factors impacting the effort required to fix security vulnerabilities[C]//International Information Security Conference. 2015: 102-119.
Application of artificial intelligence technology in the field of security vulnerability
SUN Hongyu1,2, HE Yuan2, WANG Jice2, DONG Ying2, ZHU Lipeng1,2, WANG He1,2, ZHANG Yuqing1,2
1. School of Cyber Engineering, Xidian University, Xi’an 710071, China 2. National Computer Network Intrusion Protection Center, University of Chinese Academy of Sciences, Beijing 101408, China
The large number of software and the enhancement of complexity have brought severe challenges to the research of software security vulnerabilities. The efficiency of manual research on security vulnerabilities is low and cannot meet the needs of cyberspace security. Therefore, how to apply artificial intelligence techniques such as machine learning and natural language processing to the study of security vulnerabilities has become a new hot spot. Artificial intelligence technology can intelligently process vulnerability information, which can assist in the research of security vulnerabilities and improve the efficiency of research on security vulnerabilities such as vulnerability mining. Firstly, the key technologies of automatic mining, automatic assessment, automatic exploitation and automatic repair of security vulnerabilities were analyzed, which pointed out that the automation of security vulnerability mining was the key of the application of artificial intelligence in the field of security vulnerability. Then, the latest research results of applying artificial intelligence technology to the research on security vulnerabilities was analyzed and summarized in recent years, which pointed out some problems in the application and gave corresponding solutions. Finally, the development trend of intelligent research on security vulnerabilities was prospected.
vulnerability mining, machine learning, artificial intelligence
TP18
A
10.11959/j.issn.1000?436x.2018137
孫鴻宇(1993?),男,陜西渭南人,西安電子科技大學(xué)博士生,主要研究方向為信息安全與機器學(xué)習。
何遠(1977?),男,云南大理人,中國科學(xué)院大學(xué)博士生,主要研究方向為計算機信息安全與漏洞挖掘。
王基策(1992?),男,河南襄城人,中國科學(xué)院大學(xué)博士生,主要研究方向為移動安全、軟件安全等。
董穎(1991?),女,陜西渭南人,中國科學(xué)院大學(xué)博士生,主要研究方向為網(wǎng)絡(luò)安全和機器學(xué)習。
朱立鵬(1994?),男,河北秦皇島人,西安電子科技大學(xué)碩士生,主要研究方向為物聯(lián)網(wǎng)安全和漏洞挖掘。
王鶴(1987?),女,河南安陽人,博士,西安電子科技大學(xué)講師,主要研究方向為量子密碼協(xié)議。
張玉清(1966?),男,陜西寶雞人,博士,中國科學(xué)院大學(xué)教授、博士生導(dǎo)師,主要研究方向為網(wǎng)路與信息系統(tǒng)安全。
2018?06?19;
2018?07?20
國家重點研發(fā)計劃基金資助項目(No.2016YFB0800700);國家自然科學(xué)基金資助項目(No.61572460, No.61272481);信息安全國家重點實驗室開放課題基金資助項目(No.2017-ZD-01);國家發(fā)改委信息安全專項基金資助項目(No.(2012)1424)
The National Key Research and Development Program of China (No.2016YFB0800700), The National Natural Science Foundation of China (No.61572460, No.61272481), The Open Project Program of the State Key Laboratory of Information Security (No.2017-ZD-01), The National Information Security Special Project of National Development and Reform Commission of China (No.(2012)1424)