?

人工智能技術在安全漏洞領域的應用

2018-09-12 02:09孫鴻宇何遠王基策董穎朱立鵬王鶴張玉清
通信學報 2018年8期
關鍵詞:安全漏洞度量漏洞

孫鴻宇,何遠,王基策,董穎,朱立鵬,王鶴,張玉清

?

人工智能技術在安全漏洞領域的應用

孫鴻宇1,2,何遠2,王基策2,董穎2,朱立鵬1,2,王鶴1,2,張玉清1,2

(1. 西安電子科技大學網絡與信息安全學院,陜西 西安 710071;2. 中國科學院大學國家計算機網絡入侵防范中心,北京 101408)

軟件數量的大規模增長以及復雜性的增強給軟件安全漏洞的研究帶來了嚴峻的挑戰,以人工的方式進行安全漏洞研究的效率較低,無法滿足網絡空間安全的需要。因此,如何將機器學習、自然語言處理等人工智能技術應用于安全漏洞的研究已成為新的熱點,人工智能技術能夠智能化地處理漏洞信息來輔助安全漏洞研究,同時提高安全漏洞挖掘的效率。首先分析了安全漏洞的自動化挖掘、自動化評估、自動化利用和自動化修補等關鍵技術,指出安全漏洞挖掘的自動化是人工智能在安全漏洞領域應用的重點,然后分析和歸納了近年來提出的將人工智能技術應用于安全漏洞研究的最新研究成果,指出了應用中的一些問題,給出了相應的解決方案,最后展望了安全漏洞智能研究的發展趨勢。

漏洞挖掘;機器學習;人工智能

1 引言

安全漏洞[1]是指信息技術、信息產品、信息系統在需求、設計、實現、配置運行等過程中,有意無意之間產生的缺陷。這些缺陷以各種各樣的形式存在于信息系統的各個層次、環節之中,對整個信息系統有著很重要的影響,且一旦被惡意主體利用,會影響構建在信息系統之上正常服務的運行,對信息系統的機密性、完整性以及可用性造成嚴重損害,因此對安全漏洞的研究是網絡空間安全研究的核心內容之一。

安全漏洞的研究主要分為漏洞挖掘、漏洞分析及利用、漏洞評估、漏洞修復等。漏洞挖掘是指安全研究人員利用各種工具對軟件、系統代碼進行審計,對軟件執行過程進行分析來查找缺陷的過程。漏洞的分析及利用是指對軟件或系統中挖掘到的缺陷進一步的分析,確認該缺陷是否為安全漏洞,若為安全漏洞則進一步判斷漏洞類型并開發概念驗證性的攻擊代碼(PoC, proof of concept)。漏洞評估是指對研究人員提交的安全漏洞進行評估,分析該漏洞的危害性、影響范圍等,并對漏洞修復提供指導意見。漏洞修復則會根據漏洞評估的危害等級來進行漏洞修復,優先修復危害等級高的漏洞。整個安全漏洞周期如圖1所示。

近年來,隨著軟件系統的大規模增長和復雜性的增強,安全漏洞報告提交數量呈現逐漸增長趨勢,美國國家漏洞數據庫(NVD,national vulnerability database)披露的歷年漏洞記錄數量如圖2所示。由圖2可知,2017年的漏洞記錄數量是2016年全年的2倍多。軟件的快速發展帶來漏洞數量的增多,增加了計算機用戶在使用網絡服務時面臨的安全風險,同時威脅性大的安全漏洞給網絡空間安全帶來了巨大的危害。例如,2017年出現的“WannaCry”勒索攻擊,WannaCry利用微軟服務器消息塊(SMB, server message block)協議的遠程溢出漏洞,并搭載美國國家安全局(NSA, national security agency)制造“永恒之藍(EternalBlue)”網絡武器,導致攻擊威力倍增,在短短數小時內就發動數萬次攻擊,受害國家超過150個,政府、企業、醫療、高校等各行業均有IT設備中招,波及大量公司,形成了全球性互聯網災難。面對安全漏洞帶來的這些嚴峻的挑戰,如何實現自動化漏洞挖掘、自動化漏洞利用生成以及自動化漏洞修補等都是當前急需解決的課題。

圖1 安全漏洞周期

圖2 美國國家漏洞數據庫(NVD)披露的歷年漏洞記錄數量

近年來,人工智能(AI, artificial intelligence)技術有了較大的發展,利用人工智能技術可以對漏洞報告以及程序代碼自動化處理并提取有效的信息,以此來實現安全漏洞的自動化研究。將人工智能技術應用于網絡安全領域主要是利用機器學習(ML, machine learning)技術以及自然語言處理(NLP, natural language processing)技術等來進行安全漏洞研究。

機器學習[2]是指研究計算機模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善計算機系統自身的性能,其根本目的是為了實現人工智能。近年來,機器學習的迅速發展,使各個行業開始考慮將機器學習算法應用到各個研究方向中,例如,機器學習應用于統計學習[3]、模式識別[4]、數據挖掘[5]等方面均取得了成功。

機器學習算法根據學習方法的不同,可以分為監督學習(supervised learning)、非監督學習(unsupervised learning)和半監督學習(semi-supervised learning)。監督學習是指通過已有的一部分輸入數據特征與輸出數據標簽之間的相應關系,生成一個函數,將輸入映射到相應的輸出,這種學習方式在多數條件下應用于分類計算。非監督學習是指直接對輸入數據進行建模,比如聚類算法。半監督學習是指綜合利用有標簽的數據和無標簽的數據來生成合適的分類函數。機器學習能夠讓研究人員脫離大量繁雜重復的工作,因此成為實現自動化的最佳選擇之一。

深度學習(DL, deep learning)[6]是由多個非線性特征變換構成處理層來對數據進行表征學習,是機器學習算法的最新研究成果,其目的是通過經驗和數據改進計算機系統,實現人工智能。深度學習算法能夠提高“淺層”機器學習算法的性能,同時擴大了機器學習的應用范圍,如將深度學習算法應用于計算機視覺[7-8]、自然語言處理[9]等方面均取得了巨大成功。

自然語言處理是研究人與計算機之間用自然語言進行有效通信的理論和方法,其最終目的是實現人機之間的自然語言通信,是人工智能技術的一部分。自然語言處理能夠自動化提取本文內容,比如自然語言處理能夠對漏洞報告、安全網站的相關信息進行提取,并進行實體識別以及提取實體之間的關系,同時也能夠根據訓練結果進行自然語言生成,自然語言處理提出的各種語義模型對文本數據進行處理具有很大的優勢。自然語言處理在語音合成與識別、機器翻譯、人機對話等方面產生了深遠的影響。

在安全領域,研究人員將機器學習算法引入惡意軟件檢測[10]以及入侵檢測[11],獲得了巨大的成功。更多的研究人員考慮將機器學習應用于安全漏洞的研究中,實現漏洞挖掘等研究的智能化。將機器學習應用于漏洞挖掘一般采用監督學習方式,其過程可以分為數據預處理、建立機器學習算法模型、對機器學習模型進行訓練、測試以及評估等過程。利用文本挖掘技術對程序源代碼進行預處理,并采用機器學習進行漏洞挖掘的過程如圖3所示。具體而言,首先采用文本挖掘技術對源代碼的信息進行預處理,該步驟包括過濾注釋、提取源代碼的語義信息、將語義信息映射到向量空間等過程,然后采用諸如決策樹(DT, decision tree)、支持向量機(SVM, support vector machine)等機器學習算法來構造漏洞挖掘模型并進行訓練以及測試,最后對構建的模型進行評估,從而實現漏洞挖掘。

圖3 文本挖掘與機器學習結合應用于漏洞挖掘的過程

2 常見的漏洞研究方法

2.1 漏洞挖掘

對安全漏洞進行挖掘一直是網絡空間安全的重點內容。安全漏洞挖掘是指利用各種工具、技術,尋找計算機系統中存在的漏洞。根據是否運行程序代碼,漏洞挖掘技術可以分為靜態分析技術和動態分析技術。

2.1.1 靜態分析技術

靜態分析技術是指在不運行程序的情況下,對目標程序進行分析以及檢測,從而發現目標程序中可能包含的安全漏洞。靜態分析技術主要包括源代碼掃描、靜態污點分析、可達路徑分析、靜態符號執行等技術。

源代碼掃描通過檢測程序中不符合安全規則的文件結構、命名規則、堆棧指針等信息來發現可能隱含的安全缺陷,并需要預先定義出相應的漏洞模式,然后進行源代碼掃描,該方法僅能夠對某種漏洞進行檢測。靜態污點分析[12]通過分析源碼或字節碼中語句或指令之間的靜態依賴關系來判斷污點標記所有可能的傳播途徑,并以此進行來漏洞挖掘,其往往需要較大的空間開銷,誤報率高,自動化程度不夠高??蛇_路徑分析根據程序執行方向將代碼解析為一個有向圖,通過對圖連通性質的研究并結合約束求解實現對程序的分析,約束求解的困難性一直是可達路徑分析技術的一個關鍵問題。靜態符號執行[13]采用抽象符號代替程序變量,并模擬程序執行,它能夠在復雜的數據依賴關系中發現變量之間本質的約束關系,靜態符號執行面臨著路徑執行空間爆炸、很難處理循環或遞歸等問題,同時對硬件計算能力要求較高,這些問題制約著靜態分析技術的發展,無法進行大規模的自動化漏洞挖掘。

除此之外,靜態分析技術還包括二進制文件比對技術[14]、手工測試技術[15]等。

靜態分析技術能夠高效快速地完成對程序代碼的檢查,并且其代碼覆蓋率較高、漏報較少。然而,由于靜態分析缺乏運行時的數據,并且缺乏動態的測試過程和細粒度的安全評估,導致靜態分析技術準確率較低、誤報較多。

2.1.2 動態分析技術

動態分析技術通過觀察程序運行過程中的運行狀態、寄存器狀態的異常來發現漏洞。動態分析技術主要包括Fuzzing測試、動態污點分析技術、動態符號執行技術等。

Fuzzing測試[16]通過生成大量畸形測試數據來測試程序的頑健性和安全性,其核心是測試用例生成技術。Fuzzing測試是漏洞挖掘最有效、最多產的方法。動態污點分析技術[17]對程序的污點數據在系統程序中的傳播進行實時監控,設計有效的污點傳播邏輯來保證污點分析精確度。動態符號執行技術[18]通過執行相應的測試程序,對輸入有關的變量進行符號化,而對那些與輸入無關的變量只采取實際執行,動態符號執行具有代碼覆蓋率高、準確性高的特點,能夠分析更大規模的程序。

動態分析技術具有較高的漏洞挖掘準確率,但動態分析技術代碼覆蓋率相對較低,條件不滿足時代碼將無法執行,同時存在漏報問題??紤]到靜態測試可以覆蓋所有代碼,所以目前結合靜態和動態分析進行漏洞挖掘成為主流的安全漏洞研究方式。

2.2 漏洞利用

漏洞利用是獲得系統控制權限的重要途徑。具體而言,漏洞利用是通過一段帶有攻擊載荷(Payload)的程序觸發某個漏洞(或幾個漏洞),越過具有漏洞的程序限制,進而控制目標系統中代碼的運行過程,即執行攻擊者執行代碼的過程。對漏洞利用的研究就是尋找已確認漏洞的可利用點,然而大多數漏洞尚未找出相應的漏洞可利用點。

Exploit-DB對漏洞利用進行了收集。Exploit-DB是與公共漏洞和披露(CVE, common vulnerabilities and exposures)[19]兼容的包含已公開的部分軟件漏洞的漏洞利用的數據庫,Exploit-DB存儲了大量的漏洞利用程序,并且包含最新漏洞的相關信息,供滲透測試人員和漏洞研究人員使用。

2.3 漏洞評估

安全漏洞威脅嚴重性評估是漏洞研究的重要組成部分,它依據漏洞自身相關屬性通過綜合衡量相關漏洞威脅評估指標來獲得安全漏洞的威脅嚴重性程度,本文也稱這個過程為漏洞分級。漏洞分級方法分為定性和定量2種。常見的定性方式是將漏洞評估為高、中、低共3檔,也有如微軟安全公告評級系統將漏洞分為緊急、重要、中、低共4檔。常用的漏洞定量系統是通用漏洞評分系統(CVSS, common vulnerability scoring system)[20]。

CVSS是一個面向廣大安全廠商用于安全漏洞威脅嚴重等級評估的、公開免費的定量風險評估系統。CVSS評分過程包括3種評分項:基本指標、臨時指標、環境指標,每一種指標又包含了一組不同的度量以及評分標準。最后對相應的評分結果進行加權處理,從而獲取一個用來衡量安全漏洞威脅嚴重程度的分值。一般而言,CVSS評分在7~10表示嚴重漏洞,4~6.9表示中等漏洞,0~3.9表示低級漏洞,根據這些評分結果優先對嚴重性漏洞進行修復處理。

2.4 漏洞修補

對漏洞進行修復的過程是從收到漏洞報告的通知開始的,根據漏洞的可利用性、漏洞風險和可用的知識等信息進行漏洞修復,共產生了3種修復方案。

1) 如果已知并記錄了該漏洞的類型,開發人員將繼續分析與該漏洞相關的代碼,設計并實現一個解決方案,然后使用識別該漏洞的技術進行測試直至安全漏洞完成修復。

2) 如果漏洞類型是已知的并且由核心安全團隊記錄,但之前并沒有遇到這樣的安全漏洞,那么就由開發團隊和核心安全團隊合作分析識別該漏洞并設計相應的解決方案。

3) 如果是未知漏洞類型,那么核心安全團隊將與來自不同領域的專家和開發人員進行協作,以開發針對該漏洞的通用解決方案。

此外,一個通用的解決方案還需要考慮不同的產品領域、不同的使用技術和不同的編程語言。而且安全專家還會與框架設計專家協作,以實現開發人員可以使用的庫來避免一些安全漏洞。同時開發指導方針,使開發人員能夠使用這些指導方針來解決這類漏洞。就目前技術手段而言,大多數情況下依然采用人工的方式進行漏洞修復。

3 機器學習應用于漏洞研究

常見的安全漏洞研究方法往往要求安全研究人員具備足夠多的專業性知識,這種漏洞研究方法的效率很低。將人工智能技術應用于安全漏洞來實現安全漏洞的智能化研究,能夠提升安全防護的效率。自2007年以來,從IEEE、ACM、Springer等數據庫收錄的將人工智能技術應用于安全漏洞研究方面的文獻情況如圖4所示。由圖4可知,漏洞挖掘依然是安全研究人員關注的重點,而其他方面的研究尚少。因此本文重點側重于漏洞挖掘方面的研究。

圖4 機器學習用于漏洞研究方面文獻情況

3.1 自動化漏洞挖掘

將機器學習應用于漏洞挖掘一直受到安全研究人員的關注,其本質是將漏洞挖掘問題視為程序分類問題或聚類問題,將包含漏洞的程序從正常程序中區分出來或將包含漏洞的程序聚集在一起。近年來,安全研究人員通過對漏洞產生原理、漏洞產生條件等進行深入研究,采用各種學習算法構建了不同的漏洞挖掘模型進行漏洞挖掘。自2007年以來,將機器學習應用于漏洞挖掘方面的文獻變化情況如圖5所示。眾所周知,程序源代碼具有豐富的特征信息,比如,抽象語法樹(AST, abstract syntax trees)、應用程序接口(API, application programming interface)調用等信息,這些信息均用離散的符號進行表示,無法直接作為機器學習算法的輸入,因此還需要對程序代碼進行處理。根據處理方式的不同,所得到的特征信息也不同,由此本文將漏洞挖掘模型分為基于軟件度量的漏洞挖掘模型和基于語法語義特征的漏洞挖掘模型。除此之外,對漏洞挖掘模型進行評估又有2種評估方式:一種是能否在現實應用程序中挖掘到漏洞;另一種則是通過各種指標來評估漏洞模型,根據分類預測的結果,即真正的正樣本(TP, true positive)、誤報率(FP, false positive)、真正的負樣本(TN, true negative)以及漏報率(FN, false negative)來計算精確率(precision)、召回率(recall)、準確率(accuracy)等指標,計算方式如下。

圖5 機器學習應用于漏洞挖掘文獻變化情況

(2)

(3)

3.1.1 基于軟件度量的漏洞挖掘模型

軟件度量是對軟件開發項目、過程及其產品進行數據定義、收集以及分析的持續性定量化過程,目的在于對開發項目加以理解、預測、評估、控制和改善。軟件度量是對軟件特定實體屬性的量化表示,能夠提供軟件的各種信息,同時又可以通過軟件工具獲取,因此軟件度量成為安全研究人員進行漏洞挖掘的特征選擇之一。常用的軟件度量包括復雜度(complexity)度量、代碼變化(code churn)度量、耦合度(coupling)、內聚度(cohesion)、開發者活動(developer activity)度量等度量指標。文獻[21-81]在不同程度上構建了基于軟件度量的漏洞挖掘模型,本文則對其進行了分析與總結,具體如圖6所示。

早期的軟件度量是由文獻[21-22]提出的,其目的是用來檢測程序故障而并非進行漏洞挖掘。復雜度度量是安全研究人員的優先選擇,正是因為軟件的高復雜度阻礙了研究人員對程序的理解,因此越是復雜的軟件越晦澀難懂,越容易產生漏洞。本文對比了文獻[23-33]的漏洞挖掘模型性能,發現圍繞著Mozilla Firefox進行漏洞挖掘的模型性能均較差,并且復雜度度量產生的影響會因為項目的變化而變化,同時相關性分析表明安全漏洞與軟件復雜度之間的相關性較弱,這也印證了復雜度度量召回率低的實驗結果。代碼變化度量定義為軟件版本與版本之間代碼行數的變化情況。代碼的變化直接與軟件缺陷相關,從而很可能產生安全漏洞,因此研究人員采用該度量進行漏洞挖掘。文獻[23-24,31,35]均采用了代碼變化度量進行漏洞挖掘,研究結果表明,代碼變化度量幾乎和復雜度度量具有相似的實驗結果,相關性分析表明了代碼變化度量和漏洞之間的相關性并不強烈,然而文獻[37-39]進一步擴大了代碼變化度量的范圍,考慮了開發者經驗情況、每次更改花費時間等,利用代碼提交(VCC, vulnerability-contributing commit)挖掘可疑的漏洞,并取得了很好的實驗效果,然而這些軟件度量與安全漏洞之間的弱相關性依然制約著這些軟件度量的有效性。在計算機設計中,耦合度和內聚度是衡量模塊獨立程度的標準。耦合度是指在程序中,模塊與模塊之間信息或參數依賴的程度。內聚度是指功能相關的程序組合成一模塊的程度。一般而言,高內聚性與軟件的頑健性、可靠度等相關,而低內聚性也代表不易維護、不易測試。因此,將耦合度和內聚度相結合為挖掘漏洞提供了可能,文獻[29-30]將復雜度、耦合度以及內聚度結合進行漏洞挖掘,實驗結果表明,低耦合高內聚的文件往往不容易產生漏洞,相反,高耦合低內聚的文件更容易產生漏洞,這也表明了耦合度和內聚度在定義上的正確性。文獻[31-32]對開發者活動度量進行了分析,開發者活動度量關注核心人員是否對源代碼進行修改、單人負責還是多人共同負責等。他們的研究表明,多個不同的開發人員對源代碼文件更改比一個開發人員對源代碼文件更改更容易受到攻擊。文獻[34]研究了軟件度量與軟件漏洞之間的相關性。除此之外,文獻[36,41-44]從其他方面比如上下文信息、漏洞庫相關信息進行漏洞挖掘,文獻[43]利用上下文信息提高了XSS漏洞挖掘效率,文獻[44]則表明了難以利用漏洞庫的相關信息進行有效的漏洞挖掘。

圖6 基于軟件度量的漏洞挖掘模型歷程

總體來看,選擇軟件度量進行漏洞挖掘依然不能滿足研究需求,雖然如耦合度、內聚度、開發者活動等度量在一定程度上能夠反映哪些文件可能會包含漏洞,但其構建的漏洞挖掘模型的性能依然較低。這表明這些軟件度量并不適合用于漏洞挖掘,同時漏洞挖掘比故障檢測要復雜得多。軟件度量是對軟件性質及其規格的測量,能夠對軟件整體的性質進行量化,然而這些性質在本質上和安全漏洞本身并沒有很強的相關性。因此,利用軟件度量進行漏洞挖掘并不合適,必須從漏洞本身出發,開發結合安全漏洞的代碼特征,才能更好地將機器學習應用于漏洞挖掘。

代碼屬性不同于軟件度量,它是對軟件度量的進一步發展,但并不是對軟件整體信息的概括,而是需要結合具體的某類漏洞的知識,要求研究人員對該類漏洞的產生原理有著充分的了解,對該類型漏洞利用過程中的相關信息有深入的研究,并且能夠從代碼級別對這些信息進行統計,以這些信息為特征進行漏洞挖掘。代碼屬性是從安全漏洞的相關信息出發的,并且能夠在代碼層次上進行統計,將程序代碼與安全漏洞連接起來,從而能夠取得較好的檢測效果,但代碼屬性的確定涉及專業的知識領域,需要專家經驗來確定相應的特征選擇。

文獻[45-48]首先利用代碼屬性對Web漏洞進行研究,提出了一系列與漏洞相關的信息,比如采取Sanitization處理的節點數量等特征信息。這些信息能夠從代碼上進行統計,利用這些信息來挖掘漏洞,均取得了較好的實驗結果。文獻[49-53]利用代碼屬性對緩沖區溢出漏洞進行挖掘,從Sink分類、輸入分類、輸入驗證等方面定義了一系列與緩沖區溢出漏洞有關的屬性,并開發了能夠根據代碼自動化對這些信息進行統計的工具,他們的實驗也獲得不錯的檢測性能。這表明代碼屬性是漏洞挖掘的有效特征。但目前關于代碼屬性的研究主要集中在Web漏洞以及緩沖區溢出漏洞等方面,能否開發出新的代碼屬性來提高已有的漏洞挖掘模型性能還需要深入的探索。同時代碼屬性的應用范圍太窄,不同類型的漏洞對代碼屬性的要求也不盡相同,能否找出適合挖掘其他類型漏洞的代碼屬性還需要研究人員進行持續的研究。最后,代碼屬性均是根據專家經驗進行選擇的,這些特征往往會帶有一定的主觀性,這種主觀性會影響機器學習模型的效果。因此,本文可以通過讓多個專家來定義自己認為重要的特征,然后從這些特征中選取能夠有效提高效率的特征來緩解這種情況,然而這將帶來更加繁重的工作。事實上,本文是希望減少甚至盡可能消除對專家經驗的依賴性,因此需要客觀地、自動化地對特征進行選擇并實現漏洞挖掘,從而讓專家從手工定義漏洞探測特性的煩瑣工作中解脫出來。在軟件度量方面實現漏洞特征的自動化選擇是一個長期的過程,現階段還需要依賴專家經驗提升漏洞挖掘模型的性能。表1展示了部分基于軟件度量的漏洞挖掘模型的性能。

表1 部分基于軟件度量的漏洞挖掘模型的性能

3.1.2 基于語法語義特征的漏洞挖掘模型

基于語法語義特征的漏洞挖掘模型又可以具體分為基于語義的漏洞挖掘模型和基于語法的漏洞挖掘模型。文獻[54-87]表述了基于語法語義特征的漏洞挖掘模型的變化,其發展歷程如圖7所示。

基于語義的漏洞挖掘模型,主要是利用文本挖掘技術來獲取程序源代碼中的語義信息。文本挖掘是指從文本文件中提取有價值的知識,并且利用這些知識更好地組織信息的過程。將文本挖掘應用于漏洞挖掘的研究主要有2個方面。首先是通過對程序開發文檔或程序注釋進行分析并挖掘可能存在的漏洞。據本文統計,尚未有這方面的研究,文獻[54]利用自然語言技術,能夠有效地進行漏洞挖掘,能否利用自然語言處理技術來處理開發文檔或注釋并以此進行漏洞挖掘值得關注。其次是對源代碼進行文本挖掘,提取源代碼的有效信息來挖掘漏洞。表2給出了部分基于語法語義特征的挖掘模型的性能。

表2 部分基于語法語義特征的漏洞挖掘模型的性能

文獻[55-60]等采用文本挖掘與機器學習結合的方法來挖掘漏洞,采用-gram以及統計詞頻對源代碼進行表征,使這些模型均獲得了較高的檢測率。-gram語義模型能夠記錄上下文中相鄰詞間的搭配信息,可以通過個詞語出現的概率來推斷語句的結構。一般而言,越大,越能提供更好的語義效果,文獻[57]采用Bigram,比文獻[55,58]采用的Unigram(1-gram)取得了更好的模型效果。然而當>3時會引起特征爆炸,加重機器學習對數據處理的負擔,限制了漏洞挖掘模型的性能,因此,文獻[61]希望利用降維技術來提高基于軟件度量以及語義特征的漏洞模型的性能,其實驗結果表明項目內采取降維技術對模型并沒有太大的增益。然而他們僅采用統計詞頻作為語義特征進行降維處理,并沒有考慮語義的上下文信息,因此將-gram語義模型與降維處理相結合能否提高模型效果還需要繼續驗證。事實上,僅依賴詞頻統計及-gram語義模型漏洞挖掘模型僅對程序源代碼進行了粗略的語義信息提取,缺少對代碼語義信息進行深度提煉,同時引入了一些不必要的代碼元素,降低了模型的有效性。Word2Vec語義模型是近年來自然語言處理中常用的新型語義模型,該模型能夠將單詞映射到一個連續的實值向量,從而方便對自然語言進行數字化處理,能夠自動實現單詞語義相似性的對比,這為代碼相似性計算提供了新思路。但Word2Vec語義模型應用于漏洞挖掘的研究較少。同時,文獻[62-64]利用文本挖掘對隱藏的影響漏洞進行研究。

圖7 基于語法語義特征的漏洞挖掘模型歷程

基于語法的漏洞挖掘模型主要是利用AST來表征程序語法進行安全漏洞挖掘,AST是源代碼的抽象語法結構的樹狀表現形式,樹上的每個節點都表示源代碼中的一種結構。文獻[65-71]均從程序的AST相關信息進行安全漏洞挖掘的研究。文獻[65]研究了AST的結構模式信息,結合機器學習算法對函數進行安全漏洞挖掘,并發現了一些漏洞。文獻[66]研究了AST的一些相關信息(如變量、條件等信息)輔助代碼審計,也發現了一些安全漏洞。文獻[68-69]將AST與程序分析技術相結合進行漏洞挖掘,提高了漏洞挖掘準確率。文獻[67]將程序的抽象語法樹、控制流圖、數據依賴圖相結合,形成的代碼屬性圖能更好地表征程序的結構信息。對代碼屬性圖按規則遍歷實現了漏洞的自動化挖掘,并取得了較好的效果,但規則的編寫對安全專家有較高的依賴,能否將機器學習與代碼屬性圖相結合進行漏洞挖掘是值得探討的課題。文獻[70-71]則從AST的相關屬性進行漏洞挖掘,能夠在一定程度上取得不錯的成果。

除此之外,本文發現文獻[65-66,68,72-73]等利用漏洞外推的概念進行漏洞挖掘。漏洞外推是指從已知漏洞的使用模式出發,利用這些模式來指導代碼審計并識別具有類似模式的程序。這些文獻從API的調用模式、AST的結構模式、數據的傳播模式等出發,結合機器學習來進行漏洞挖掘,均發現了一些未知的漏洞,這表明了他們方法的有效性。然而利用漏洞外推進行漏洞挖掘往往需要專業安全人員對已知漏洞進行深入研究,確定使用模型往往需要對某類型的漏洞進行深入分析,同時每種漏洞外推方式僅適合某一種模式,并不能檢測到其他的漏洞,有較大的局限性。

近年來基于軟件度量的挖掘模型以及基于語法語義特征的漏洞挖掘模型的文獻的變化情況如圖8所示。不少安全研究人員對二者的性能優劣進行了研究。Walden等[74]和Tang等[75]在一個包含223個漏洞的手工數據集上進行研究并比較2種模型的性能。Walden的實驗結果表明基于語義特征的模型有更高的召回率和精確度。然而Tang認為Walden做得不夠全面,且沒有考慮單個組件的大小。Tang的實驗結果表明,基于軟件度量的模型可以與基于語義特征模型相媲美。對于研究人員而言,軟件度量是漏洞挖掘的實際選擇,因為這些軟件度量體系更完善,同時通過軟件工具更容易獲取、成本更低。本文認為無論是語法語義特征還是軟件度量,均是對源代碼信息的一種表征方式,將語法語義模型和軟件度量模型結合起來進行漏洞挖掘能夠更好地提高漏洞挖掘效果。事實上,Zhang等[76]提出了一種兩層的復合漏洞挖掘模型,結合軟件度量以及語義特征在相同的數據集上進行漏洞挖掘,其實驗結果明顯優于Walden的模型性能。這表明了語義模型和軟件度量模型相結合的確能夠提高模型的挖掘效果。但他們的方法是分散地進行語義特征以及軟件度量的漏洞挖掘的,并沒有將軟件度量以及語義特征相融合進行漏洞挖掘。如何融合2種特征行漏洞挖掘依然是一個研究難點。

圖8 軟件度量模型與語義特征模型文獻對比

3.1.3 機器學習與程序分析技術相結合

文獻[77-81]將漏洞挖掘模型與程序分析技術相結合來提高程序分析技術的性能。靜態分析技術和動態分析技術在常見的漏洞挖掘方式中起到了非常大的作用,然而無論是靜態分析還是動態分析技術均存在著相應的缺陷。利用機器學習來減緩或消除這些缺陷、提高程序分析技術的性能則是一個非常好的研究方向。

靜態污點分析技術往往需要較大的空間開銷,誤報率高,機器學習能夠快速處理大量的樣本,結合機器學習來減低誤報率則是一種可行的方法。符號執行的一個關鍵問題是路徑執行空間爆炸問題,本文通過機器學習確定可疑函數集合,利用可疑函數集合來指導符號執行能夠有效減少路徑數量,減緩路徑執行空間爆炸問題,提高了符號執行的性能。Fuzzing測試需生成更有效的測試樣例才能有效地觸發漏洞,結合機器學習能夠提高Fuzzing測試的效果。同時利用人工智能技術能夠有效地提升代碼覆蓋率,進而有效地進行漏洞挖掘。由此可見,機器學習不僅能夠用于挖掘漏洞,而且其分類結果也可以用來指導程序分析技術進行漏洞挖掘,提升漏洞挖掘效率。將機器學習同程序分析技術結合來解決靜態分析高誤報、低準確率、高動態分析漏報率、低代碼覆蓋率等問題,這為緩解空間開銷大、約束求解難、路徑執行空間爆炸等問題提供了新的思路,將機器學習同靜態分析技術、動態分析技術結合進行漏洞挖掘也是一個可探討的方向。

3.1.4 采用算法比較

在自動化漏洞挖掘過程中,機器學習算法在構建漏洞挖掘模型過程起到很重要的作用,漏洞挖掘文獻中采用的機器學習算法對比情況,如圖9所示。由圖9可知,樸素貝葉斯(NB, na?ve Bayes)、支持向量機(SVM, support vector machine)、邏輯回歸(LR, logistic regression)、決策樹(DT, decision tree)、隨機森林(RF, random forests)是主要的漏洞挖掘算法。事實上,不同機器學習算法的性能是否存在顯著性差異是一個爭議性問題,文獻[82-83]發現在PROMISE庫的10個開源項目數據集上,不同的分類算法之間的確存在明顯的差異,而文獻[84]進一步分析了分類方法中參數的優化對缺陷預測性能的影響,結果表明這種影響不可忽略。將機器學習應用于漏洞挖掘,無法直接將源代碼作為機器學習的輸入,因此對源代碼處理方式不同會產生不同的效果,同時不同的機器學習算法對數據特征信息的利用程度是不同的,也會產生不同的效果。因此必須采用多種機器學習算法對數據特征進行評估。在本文統計過程中發現,除了文獻[69,78]采用了10種機器學習算法對選擇的特征進行了性能對比之外,其他的文獻僅僅采用了3~4種機器學習算法進行研究。我們認為先前的研究或許并沒有取得特征數據的最佳檢測效果,本文建議在未來的研究中,盡可能選擇多種機器學習算法對數據特征進行建模并進行性能對比。

圖9 漏洞挖掘模型的機器學習算法對比

3.1.5 深度學習應用于漏洞挖掘

基于深度學習在圖像識別、惡意軟件檢測等方面比其他“淺層”機器學習算法均能夠獲得更好的性能的經驗性的證明,不少研究人員嘗試著將深度學習引入漏洞挖掘領域。將深度學習應用于漏洞挖掘有2個方面的應用,一方面是利用深度學習模型進行漏洞特征的自動化選擇,這方面應用可以將深度學習與語法語義特征結合進行漏洞挖掘,另一方面是利用深度學習進行漏洞挖掘,這方面需要考慮:1) 如何將程序表征為適合深度學習模型的向量表示。應用程序具有豐富的特征,比如AST、函數調用等,這些特征無法直接作為深度學習模型的輸入,因此需要將這些特征轉化為適合深度學習模型的向量表現形式;2) 漏洞挖掘的粒度。不同的特征信息具有不同的粒度,同時漏洞挖掘的粒度與漏洞定位有關,細粒度的漏洞挖掘能夠更好地定位漏洞;3) 能否挖掘多種類型的漏洞。不同種類的安全漏洞對安全研究人員的要求也不相同,專業的安全研究人員往往針對某類安全漏洞進行深度挖掘,采用深度學習算法能否同時挖掘多種漏洞是一個非常有趣的問題;4) 如何選擇深度學習模型?,F有的深度學習模型有很多種,如何構建合適的深度學習模型來獲取最佳的漏洞挖掘性能也是一個問題。

文獻[85]將深度學習應用于程序分析,證實了深度學習應用于分析程序的可行性。而文獻[59]利用深度學習輔助漏洞挖掘,采用長短期記憶(LSTM, long short-term memory)網絡對文本特征進行自動化特征選擇,以克服專家經驗的主觀性,獲得了不錯的性能。文獻[86]從API調用以及庫調用出發,提出了“Code Gadget”,這是一組語義上相互關聯,但不一定連續的代碼行。這種表征方式能夠同時兼顧語義相關性并從細粒度上進行漏洞挖掘。細粒度的漏洞挖掘能夠識別漏洞位置,以前的研究中很少對漏洞進行定位。文獻[60]從Token級數據入手,采用文本挖掘與深度學習相結合的方式對軟件組件進行漏洞挖掘,獲得了比其他文本挖掘與機器學習結合更好的性能(性能比較如表2所示)。文獻[87]從函數級數據出發,以函數調用序列為特征對比了不同的深度學習模型以及多層感知器(MLP, multi-layer perceptron)的性能,其實驗結果發現采用深度學習模型的實驗結果比同一數據集上采用MLP的實驗結果要好得多。

就目前而言,將深度學習應用于漏洞挖掘還處于初步階段。首先,文獻[60,87]均表明了深度模型能夠獲得比“淺層”更好的研究性能,將軟件度量或語法語義特征等與深度學習相結合,能否提高挖掘效果的研究還很少,這方面的研究依然有待探索。其次,細粒度的漏洞挖掘能夠識別漏洞位置,這無疑擴展了漏洞挖掘的能力。在保證漏洞挖掘效果的前提下進行漏洞定位也是未來的一個研究方向。另外,文獻[86]采用深度學習模型對2種漏洞進行挖掘,實驗結果表明了深度學習能夠對2種漏洞同時進行挖掘,但這種能力是否存在上限并沒有給出明確的答案。最后,需要對不同的深度學習模型進行對比。相同的數據集上采用不同的神經網絡會產生不同的挖掘效果,這可能和選取特征的類型有關,而在這方面的研究依然很少。由此來看,深度學習在一定程度上能夠提升“淺層”學習算法的效果,依靠深度學習模型的強大能力進行漏洞挖掘或許成為未來的主要漏洞挖掘方式。

3.1.6 跨項目漏洞挖掘

目前,大多數研究工作都集中在項目內漏洞挖掘(WPVP, within-project vulnerability prediction)中,跨項目漏洞挖掘(CPVP, cross-project vulnerability prediction)研究較少,同時研究的模型性能不夠高??珥椖柯┒赐诰蛐枰獙崿F在一個項目上構造的漏洞挖掘模型用于挖掘另一個項目上的漏洞。在實際軟件開發場景中,需要進行漏洞挖掘的項目可能是新啟動的項目或這類項目的訓練數據較為稀缺,這就需要對其進行跨項目漏洞挖掘。然而由于不同項目采用的開發流程、應用的領域、采用的編程語言、開發人員的經驗等不同構成了跨項目漏洞挖掘的最大障礙。文獻[32-33,59,61]僅僅粗淺地使用某個項目的軟件度量、語義特征進行另一個項目的漏洞挖掘,并沒有考慮編程語言、項目應用的差異性。

隨著機器學習的發展,遷移學習被提出,用于將已經學到的模型參數通過某種方式來分享給新模型,從而加快并優化模型的學習效率,而不用像大多數神經網絡那樣從零學習,這為跨項目漏洞挖掘提供了較好的應用基礎。Ma等[88]對這方面進行了研究,提出了遷移樸素貝葉斯(TNB, transfer naive Bayes)模型,來對不同數據集進行缺陷檢測訓練,他們的結果證實了遷移學習能夠取得不錯的效果。文獻[89]首次將遷移學習應用于漏洞挖掘,他們利用序列化的AST表征代碼信息,采用雙向LSTM實現跨項目的漏洞挖掘,并取得了不錯的檢測效果。文獻[61]發現利用降維技術在跨項目漏洞挖掘中能夠明顯增強基于軟件度量的模型效果,而在語義特征的模型中則沒有太大變化。我們推測,在軟件度量方面的跨項目漏洞檢測中,降維技術保留了項目間的公共特性,提高了軟件度量的跨項目檢測性能;而在語義特征方面,采用Unigram以及統計詞頻技術,這些語義模型本身就統計了項目中的一些公共屬性,因此無法提高性能。

除此之外,跨項目漏洞挖掘局限于同種編程語言的不同項目之間進行漏洞挖掘,并沒有實現跨語言漏洞挖掘,本文認為,跨語言漏洞挖掘需要對不同的編程語言進行映射,比如對函數定義、變量申請等代碼語句進行轉換,由此來實現跨語言漏洞挖掘。其次,還要考慮到不同的項目應用,比如一般項目中采用的加密算法和銀行相關項目采用的加密算法在等級上的差異也會影響跨項目漏洞挖掘。綜上,跨項目漏洞挖掘的研究目前處于初期階段,對不同的語言、不同的應用環境,跨項目漏洞挖掘要具備不同的研究性能,這方面研究依然比較少。

3.2 自動化漏洞利用

實現漏洞利用的自動化生成是一個復雜的過程,首先要定位漏洞的位置,利用符號執行技術快速找到輸入漏洞可利用點的路徑,其次通過動態監控程序運行過程,能夠獲取程序實際運行時的棧布局信息,最后利用上述信息生成漏洞利用并進行驗證。文獻[90-98]研究了自動化漏洞利用生成(AEG, automatic exploit generation)。這些研究均取得一定的成果,能夠自動化生成漏洞利用,然而這些技術能夠處理的漏洞種類有限,同時它們并沒有使用人工智能技術。You等[99]提出了SemFuzz,該框架首次利用NLP 技術從CVE和Git日志中提取相關語義信息比如關鍵函數、變量來指導PoC的自動生成,同時擴大了處理漏洞的種類。他們的研究表明,將NLP應用到漏洞利用的自動化生成是可行的。除此之外,文獻[100-102]采用機器學習算法從代碼特征等方面對漏洞的可利用性進行了預測。

將人工智能技術引入漏洞利用的自動化生成領域,首先提取安全漏洞報告中包含與漏洞相關的軟件名、版本號、涉及的函數以及漏洞類型等信息。這些信息能夠初步安裝軟件并對漏洞進行粗略定位。其次利用人工智能技術與程序技術相結合能夠加快分析過程。事實上,自動化漏洞利用生成依然存在漏洞信息不全面、信息利用率低、漏洞利用生成成功率低等問題。各大安全網站及安全論壇提供了相關的配置、軟件依賴項等信息,這些信息也可以輔助漏洞利用的自動化生成。本文認為,利用NLP技術綜合處理與漏洞相關的信息源,從而實現漏洞利用的自動化生成,這將成為漏洞利用自動化生成的新方法。通過對漏洞利用的自動化生成進行研究,對促進漏洞挖掘分析等均具有重大意義。

3.3 自動化漏洞評估

對安全漏洞進行評估能夠幫助人們建立衡量漏洞嚴重程度的標準、確定漏洞修補的優先級。CVSS將漏洞的嚴重程度分為3種等級,這為實現漏洞評估的自動化提供了基礎。同時CVE漏洞庫也能夠為機器學習應用漏洞評估提供更多的特征選擇,比如數據集、漏洞關鍵字、漏洞描述等信息。

Yamamoto等[103]提出了將自然語言處理和機器學習算法結合的方法來自動化評估CVE文檔的CVSS基準度量。而Spanos等[104]則通過對漏洞報告中關于漏洞的自然語言描述,從訪問向量、訪問復雜性、身份驗證、識別性影響、完整性影響和可用性影響這6個方面進行文本挖掘,并以此來構建機器學習模型,實驗結果均能夠以78%以上的準確度對漏洞進行評估。Han等[105]將深度學習引入漏洞評估中,并提取CVE漏洞庫中漏洞描述的相關文本特征來預測軟件漏洞的嚴重程度。

研究人員從漏洞報告中提煉有效信息進行漏洞評估,取得了一定的效果,然而這些研究僅僅關注漏洞報告的信息,并沒有考慮各大安全網站統計的信息。事實上,各大安全網站提供了有關安全漏洞的統計信息,比如SecurityFocus詳細地統計了受影響的軟件及其版本號。本文認為,除了上述有關漏洞報告的因素外,還要考慮到軟件的應用范圍,軟件的應用范圍越廣,所產生的影響越大。其次,需要考慮軟件的復雜度,越是復雜的軟件越難以維護,漏洞持續的周期越長,造成的危害越大。因此CVSS提供了一種用于安全漏洞威脅嚴重等級評估的、公開免費的風險評估系統,然而其中的指標往往很復雜,難以快速實現漏洞評估。將自然語言處理與機器學習相結合對漏洞報告以及其他的漏洞信息源進行處理能夠快速實現對安全漏洞的智能評估。

3.4 自動化漏洞修復

安全漏洞的修復是減少因安全漏洞暴露引起財產損失的最佳方法。從近幾年的安全攻擊時間來看,由于廠商更新速度趕不上漏洞PoC的傳播速度,未能及時對漏洞進行修復,因此對計算機用戶造成了較大的損失。實現漏洞的自動化修復,有助于快速彌補漏洞缺陷,減少用戶財產損失,對促進計算機生態安全有重大作用。

Zhang等[106]對整數溢出到緩沖區溢出(IO2BO, integer overflow to buffer overflow)漏洞進行修補。Le等[107]提出了GenProg,使用遺傳編程算法來生成新的程序變種,選擇能夠通過所有被考慮的測試用例的程序變種作為修補方案。White等[108]對GenProg進行了擴展,提出了DeepRepair,采用深度學習模型進行程序修補。Zhang等[109]提出了一種自動補片技術AppSealer,修復Android平臺組件劫持漏洞。

將機器學習應用于漏洞自動化修補依然存在較大的困難。首先,漏洞準確定位是一個急需解決的難點,文獻[23,31]研究了復雜性度量指標和其他指標,如過程度量能否進行漏洞定位。其次,漏洞的修補方式更復雜,既要確定觸發漏洞的類型,又要對程序進行相應的修改,還要保證修補后的程序能夠正常運行并且保證不會產生其他漏洞。最后,由于目前程序分析技術無法對軟件進行全面的分析,還需要人工進行漏洞修復。Ben等[110]的研究確定了8類共65個影響漏洞修復時間的因素。他們的工作能夠改進漏洞修復過程,更合理地配置漏洞修復資源,提高漏洞修復效率。部分漏洞如整數溢出漏洞以及格式化字符串漏洞能夠采用故障修補方式進行修補。由此可見,人工進行漏洞修補方式依然是漏洞修補的主流方式,實現漏洞修補的自動化還需要研究人員投入大量的研究。

3.5 小結

安全漏洞的自動化研究始終是網絡空間安全研究的重點,將人工智能技術引入安全漏洞研究,有利于促進安全漏洞研究的自動化發展。本節通過將人工智能技術應用到安全漏洞研究過程,分析了自動化漏洞挖掘、自動化漏洞利用、自動化漏洞評估、自動化漏洞修復等一系列新的研究成果,同時指出了現有的研究存在的問題,并給出了一些建議以及解決方法。

4 未來研究展望

將人工智能技術應用于安全漏洞研究一直是網絡空間安全研究的重要方向之一,這對計算機系統安全和網絡空間安全有著非常重要的意義。然而,由于漏洞種類繁多,漏洞產生原理、觸發條件彼此不一致,因此對安全漏洞無法進行統一有效的挖掘。由此可見,實現漏洞自動化挖掘等研究過程還有很長的路要走。將人工智能技術應用于安全漏洞研究的一些問題以及可能的解決方法如表3所示。

表3 人工智能技術應用于安全漏洞研究面臨的問題與機遇

1) 特征選擇

在漏洞挖掘方面,本文根據選擇特征的不同將其分為基于軟件度量的漏洞挖掘模型以及基于語法語義特征的漏洞挖掘模型。對于機器學習算法而言,選取的特征越能代表數據集的特性,那么構造的模型越能擁有更好的性能。因此,基于軟件度量的漏洞挖掘模型需要開發新的代碼屬性特征來更好地進行漏洞挖掘。代碼屬性作為一種有前景的特征需要研究人員繼續進行深入研究,同時語義特征可以考慮采用新型的語義模型表征程序進行漏洞挖掘,或利用NLP技術、深度學習等技術提取程序的有效信息進行漏洞挖掘。同時,對語義模型中的特征爆炸問題,可以采用降維方法對數據處理來提高模型的性能。無論是軟件度量還是語義特征,它們均屬于漏洞挖掘的不同方面,能否將二者進行融合進行漏洞挖掘也是一個難點。而在漏洞評估方面,目前尚未找到有效的特征進行漏洞評估,因此還需要開發有效的軟件特征進行相應的預測。

2) 深度學習模型

深度學習模型是近年來提出的新的機器學習模型,將深度學習應用于漏洞研究目前還處于起步階段,借助深度學習模型強大的性能,將深度學習模型應用于漏洞挖掘、漏洞利用、漏洞評估與漏洞修復等均屬于難點問題。而深度模型應用于漏洞挖掘面臨的首要問題是如何將程序表征轉化為適合深度模型的向量表達;其次在于檢測粒度,細粒度的漏洞挖掘模型能夠識別漏洞位置,這擴展了安全漏洞的研究;最后在于深度學習算法,目前深度學習算法也有很多種,不同的算法對不同的特征會產生不同的結果,如何選擇特征與深度學習模型也是一個研究難點,而目前這些方面研究很少。

3) 跨項目檢測

跨項目漏洞挖掘是對不同項目的漏洞進行檢測,由于編程語言、應用領域等差異,導致跨項目漏洞挖掘的難度很大。目前,實現跨項目漏洞挖掘的研究較少,其模型性能較低。遷移學習作為解決跨項目漏洞挖掘的有效手段依然存在一些研究難點,比如如何利用遷移學習來實現跨語言漏洞挖掘以及不同領域的跨項目漏洞挖掘等。

4) 數據集

將機器學習應用于漏洞挖掘,首要考慮的是數據集。在本文調研過程中發現,現有的研究數據集可以分為組件級數據集、函數級數據集以及代碼級數據集。函數級數據集以及組件級數據集常用于基于語義語法特征的漏洞挖掘模型,而代碼級數據集則傾向于基于軟件度量的漏洞挖掘模型。事實上,不同的數據集對漏洞挖掘模型的性能也會產生不同的影響,細粒度的數據集更有益于漏洞位置的識別,同時也加大了計算處理的難度。目前并沒有一個公開的可以作為基準的漏洞數據集。因此本文認為將機器學習引入漏洞挖掘,必須建立一個公開的、能夠作為測試基準的數據集。

5) 高漏報或者高誤報

常見的程序分析技術如靜態分析、動態分析等技術在漏洞挖掘過程中起到了很大的作用,然而這些技術往往面臨著高漏報率或高誤報率等問題。同時,符號執行、污點分析等技術也存在著各自的缺點。機器學習通過對大量的樣本進行訓練能夠從中抽象出相應的特征,并能夠篩選出可能存在問題函數或者代碼片段。因此,將機器學習同靜態分析、動態分析等分析技術相結合進行漏洞挖掘來降低模型的誤報率或漏報率,提高漏洞模型的準確率。同時,將機器學習同程序分析技術相結合為解決約束求解難、路徑執行空間爆炸等問題提供了新的思路。將機器學習同靜態分析技術、動態分析技術結合進行漏洞挖掘也是一個可探討的研究方向。

5 結束語

隨著人工智能技術的不斷發展,利用人工智能技術對軟件進行分析,實現軟件的安全漏洞研究成為安全研究的重要方向之一。本文總結了人工智能技術應用于安全漏洞研究方面最新的應用,歸納了其存在的問題并進行了相應的探討。本文認為,在未來將人工智能技術應用于漏洞的研究中,深度學習模型能夠促進安全漏洞的研究,開發新的漏洞特征則能夠提高現有漏洞挖掘模型的準確度,同時對漏洞定位、漏洞挖掘中的漏報誤報等問題進一步分析,提高人工智能技術在漏洞研究方面起到的作用,這對促進智能化漏洞研究均有重大影響。

[1] 張玉清, 宮亞峰,王宏, 等.安全漏洞標識與描述規范[S]. GB/T28458-2012, 全國信息安全標準化技術委員會(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?),男,陜西渭南人,西安電子科技大學博士生,主要研究方向為信息安全與機器學習。

何遠(1977?),男,云南大理人,中國科學院大學博士生,主要研究方向為計算機信息安全與漏洞挖掘。

王基策(1992?),男,河南襄城人,中國科學院大學博士生,主要研究方向為移動安全、軟件安全等。

董穎(1991?),女,陜西渭南人,中國科學院大學博士生,主要研究方向為網絡安全和機器學習。

朱立鵬(1994?),男,河北秦皇島人,西安電子科技大學碩士生,主要研究方向為物聯網安全和漏洞挖掘。

王鶴(1987?),女,河南安陽人,博士,西安電子科技大學講師,主要研究方向為量子密碼協議。

張玉清(1966?),男,陜西寶雞人,博士,中國科學院大學教授、博士生導師,主要研究方向為網路與信息系統安全。

2018?06?19;

2018?07?20

國家重點研發計劃基金資助項目(No.2016YFB0800700);國家自然科學基金資助項目(No.61572460, No.61272481);信息安全國家重點實驗室開放課題基金資助項目(No.2017-ZD-01);國家發改委信息安全專項基金資助項目(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)

猜你喜歡
安全漏洞度量漏洞
漏洞
鮑文慧《度量空間之一》
基于模糊測試技術的軟件安全漏洞挖掘方法研究
探析計算機安全漏洞檢測技術
代數群上由模糊(擬)偽度量誘導的拓撲
突出知識本質 關注知識結構提升思維能力
試論安全漏洞檢測技術在軟件工程中的應用
智能設備安全漏洞知多少
度 量
三明:“兩票制”堵住加價漏洞
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合