武強,苗彥濤,余尚仁
(1.中國電子科技集團公司第三十研究所,四川 成都 610041;2.中國電子科技網絡信息安全有限公司,四川 成都 610041)
隨著信息技術的發展,層出不窮的惡意軟件攻擊使得網絡安全形勢日趨嚴峻。惡意軟件的數量和種類每年呈爆炸式增長,給個人財產安全、企業數據安全乃至國家網絡安全造成了極大破壞。例如,2017 年的WannaCry 勒索病毒橫掃全球,超過150個國家和地區的30 萬名用戶和機器受到感染,造成的經濟損失高達80 億美元[1]。這些惡意軟件通過使用加殼[2]、混淆[2]、反沙箱[3]、對抗樣本攻擊[3]等偽裝技術來對抗檢測。因此,如何有效地對惡意軟件進行檢測,一直是網絡安全領域研究的重要課題之一。
傳統的惡意軟件檢測技術采用特征匹配的方式檢測惡意軟件[4],這類檢測方法可以對已知的惡意軟件進行有效的檢測,但是無法實現對未知惡意軟件的檢測,尤其是惡意軟件及其變種在數量和種類上呈現爆炸式增長的情況下[5],該類技術勢必會導致檢測效率下降。隨著人工智能技術的日益發展,研究者們將其應用在惡意軟件檢測領域。本文將借助人工智能進行惡意軟件檢測的技術,統稱為惡意軟件智能分析技術。
惡意軟件智能分析技術能夠有效緩解偽裝技術帶來的威脅,對惡意軟件的加殼、混淆、反沙箱和對抗樣本攻擊都有較強的普適性和泛化能力,且能有效減少人工分析的人力成本。因此,對惡意軟件開展智能分析技術的研究具有較高的應用價值。
本文對智能分析技術在惡意軟件檢測上的應用成果進行總結與概括,形成如圖1 所示的惡意軟件智能分析框架。該框架包括5 個主要步驟:數據集構建、安全特征提取、安全特征處理、分類器選擇、模型驗證和性能評估。本文根據這5 個步驟對惡意軟件的智能分析技術進行逐一闡述。最后從不同層面上分析應用人工智能技術在惡意軟件檢測上所面臨的一些挑戰,以及提出未來的研究方向和發展趨勢。另外,結合筆者的研究領域,本文僅針對Windows 系統進行惡意軟件智能分析技術相關的介紹工作。

圖1 惡意軟件智能分析框架
一些大型的組織和公司將其數據集進行了開源,即構建了一些公開數據集。但是出于對安全、隱私和版權的考慮,公開數據集都要進行相應的處理。比如,數據集只包含由可移植的可執行的(Portable Executable,PE)文件提取的特征向量、分類標簽和函數調用序列等。下面列舉幾個應用較多的公開數據集。
EMBER 數據集[6]是EndGame 公司在2018 年發布的大型公開數據集。該數據集包括EMBER2017的110 萬個樣本和EMBER2018 的100 萬個樣本。這兩個階段的樣本均由惡意樣本、良性樣本、未知樣本按照一定比例構成,樣本文件以PE 文件所提取的特征向量和它們的標簽組成。
BIG2015 數據集[7]由微軟公司構建并發布。出于對安全的考慮,BIG2015 數據集的頭部文件均被去掉。樣本數據由10 868 個帶惡意標簽的軟件和10 873 個未帶標簽的惡意軟件構成,且來源于9 個不同的惡意軟件家族。
SoReL-20M 數據集[8]由網絡安全公司Sophos和ReversingLabs 于2020 年12 月14 日聯合發布。該數據集由2 000 萬Windows PE 文件的元數據、標簽和特征構成。該數據集是目前研究惡意軟件檢測的最大規模的數據集。
kaggle 平臺惡意軟件分類數據集[9]由微軟在2015年發布。該數據集包含將近500 GB 大小的樣本數據,分為9 個惡意軟件家族,共10 868 個惡意軟件樣本。但出于安全方面的考慮,均去掉了PE 頭文件。
阿里安全云于2018 年發起了惡意軟件檢測挑戰賽[10],并發布了用于比賽的數據集。該數據集的數據均為經過脫敏處理的Windows 二進制可執行程序,數據量總計6 億條。
對于某些特殊的網絡環境、工作需求,如需要追蹤最新樣本的變化趨勢,往往還需要自行搜集惡意樣本,一般采用部署蜜罐的方式進行誘捕。對于蜜罐系統的部署方式,網絡上均有詳細的操作方法,本文不再進行相關的介紹。
高質量惡意樣本數據集的構建是保證智能分析模型具有良好表現的關鍵一環。總的來看,公開數據集的數據體量、家族種類和數據質量平衡性分布要優于自建數據集。但是出于某些特殊的研究和工作的目的,往往需要自行搜集和構建惡意軟件樣本,這也是實際工作應用場景中,惡意軟件數據樣本來源的主要方式。
靜態分析特征是指在不運行待測惡意軟件的情況下提取的安全特征,本節將從以下幾個方面展開對靜態分析特征的介紹。
2.1.1 字節序列特征
字節序列是一個程序字節級的組成單元,每個字節本身也包含了一定的信息,所以,對惡意軟件進行字節序列特征提取,可以作為惡意軟件的一種靜態特征。這種靜態特征就是按照一定的規則對待測程序進行字節級切分。
對待測程序提取字節序列最常用的方法是使用n-gram 模型。n-gram 模型將待測程序按照大小為n的滑動窗口進行切分,進而得到一系列長度為n的字節序列,提取方式如圖2 所示。Schultz 等人[5]在2000 年首度使用n-gram 模型提取惡意軟件的字節序列特征,并結合相關的機器學習算法檢測基于Windows 平臺的惡意軟件。該團隊將提取的字節序列特征放在不同的分類器中進行訓練,并和傳統的基于特征的方法進行對比,最后實驗表明該方法對惡意軟件的檢測效率提高了一倍。孫博文等人[11]在2017 年使用惡意軟件的字節序列特征、操作碼序列特征和PE 頭部信息進行靜態特征融合,融合后的特征輸入集成學習分類器,最終獲得了良好的分類泛化能力。

圖2 3-gram 字節序列
Raff 等人[12]將整個程序字節序列不進行切分,直接作為分類器的輸入。他們使用詞嵌入技術將整個程序字節轉換為固定長度的向量,并以此來構建字節之間的語義關系,進一步采用卷積神經網絡所提取的特征用于惡意軟件的檢測。
2.1.2 可閱讀字符串
對于某些惡意軟件而言,在其程序代碼中可能會含有一些不變的可閱讀字符串。如字符串“<html><script language=‘javascript’>window.open(‘readme.eml’)”常常會出現在Nimda 蠕蟲病毒中[13]。雖然惡意軟件可能會采取各種方法來改變自身的靜態特征以此規避查殺,但是惡意軟件本身所包含的可閱讀字符串不可能完全發生變化。因此,惡意軟件中包含的可閱讀字符串可以作為分類器的一個輸入特征。
可以使用strings 程序[5]對惡意軟件提取可閱讀字符串。程序中的可閱讀字符串通常是以ASCII或者Unicode 編碼格式進行存儲,并以NULL 結束符表示字符串的終結。Ye 等人[13]在2009 年采用string 程序對惡意軟件進行可閱讀字符串的提取,并以支持向量機(Suport Vector Machine,SVM)作為分類器對惡意軟件進行檢測。
2.1.3 PE 文件信息
在Windows 操作系統中,所有的可執行文件均為PE 格式文件。PE 文件由一系列結構和子組件構成,且包含了程序的一些重要屬性。PE 文件的某些字段在惡意軟件樣本和正常軟件樣本中存在較大的差異,因此PE 文件信息可以作為鑒別惡意軟件的一個關鍵特征。圖3 展示了PE 文件的結構。

圖3 Windows 系統下PE 文件的結構
Shafiq 等人[14]對惡意軟件的PE 文件信息做了細致化的提取工作,提取出來的特征高達189 項,然后通過特征篩選進行惡意軟件的檢測。白金榮等人[15]使用PE 文件的依賴項來檢測惡意軟件,包括應用DLL 的總數、導出表中符號的總數、應用程序編程接口(Application Programming Interface,API)的總數等,并在提取出特征后,使用隨機森林對特征進行選擇。Saxe 等人[16]基于卷積神經網絡(Convolutional Neural Network,CNN)算法,通過靜態分析PE 文件信息、可閱讀字符串、字節序列等特征,檢測惡意軟件。
2.1.4 信息熵
在信息論中,信息的不確定性采用信息熵進行度量。對于通過加密和加殼方式形成的惡意軟件及其變種而言,它們的程序數據隨機性往往比較高,即該類惡意軟件的信息熵相較于正常軟件比較高。因此,信息熵對于惡意軟件的檢測來說,是重要的特征之一[17]。
Saxe 等人[16]從惡意軟件的二進制文件中提取字節信息熵和PE 頭文件等靜態特征,在惡意軟件的檢測中取得了不錯的效果。王埡[18]通過信息熵和深度學習算法的應用,實現了對惡意軟件檢測中初始特征的篩查和深層特征的學習,并取得了良好的檢測效果。Qu 等人[19]采用信息熵特征、操作碼特征、API 調用特征等多特征融合,并使用XGBoost、SVM 等機器學習分類算法識別惡意軟件。
2.1.5 DDL 相關信息
基于Windows 系統的惡意軟件在發揮其破壞力的時候,往往會與系統文件、網絡以及注冊表等進行交互。在交互的過程中,惡意軟件需要通過API從動態鏈接庫(Dynamic Link Library,DLL)相關文件中導出交互過程所需要的功能函數。因此,在對惡意軟件進行靜態解析時,可以檢查惡意軟件所依賴的DDL 相關信息,進一步了解其功能以及推測其可能執行的惡意行為。
Schultz 等人[5]利用DLL 相關信息、字符串和字節序列特征這3 種靜態特征生成布爾規則,對惡意軟件進行分類。Baldangombo 等人[20]提出了一種基于多種特征融合的惡意軟件檢測系統,其中,特征包含惡意軟件的DDL 相關信息、PE 文件信息和應用程序接口函數的信息,再通過多種機器學習的分類器實現惡意軟件的檢測分析。Bai 等人[21]提取了惡意軟件的所有DDL 相關信息,并對這些DDL信息進行篩選,保留其中最優的30 個DDL 信息作為輸入特征。
動態分析特征是指在運行待測惡意軟件的情況下提取的安全特征。常用的做法是在安全可控的虛擬環境(如沙箱)中,運行惡意程序,在運行的過程中,惡意軟件會產生大量的惡意動態行為特征,這些動態特征主要包括系統運行狀態信息、系統操作信息和網絡活動特征。
2.2.1 系統運行狀態信息
惡意軟件在實施惡意行為的過程中,運行環境的系統運行狀態往往會表現出一些異常,如系統中央處理器(Central Processing Unit,CPU)情況、寄存器、內存使用率、進程運行數、磁盤使用情況等出現異常。比如,惡意代碼在攻擊或者傳播的過程中,可能會在系統進程上嵌入新的進程,因此,可以將系統的進程變化信息作為惡意軟件的一個分析特征。Burnap 等人[22]把惡意軟件在運行時形成的系統CPU 使用率、內存使用率、進程運行數和進程名、網絡收發包數量等作為分類器的輸入特征。
2.2.2 系統操作信息
操作系統的注冊表包含了系統軟件和應用軟件的配置信息。惡意軟件可以通過創建、修改、刪除注冊表以達到惡意攻擊的目的。大部分的惡意軟件在運行時會與運行環境中的文件產生交互行為,比如文件的添加、修改和刪除等,可以通過捕獲文件的狀態變化來判斷惡意軟件的攻擊意圖。因此,注冊表和系統文件的狀態變化可以作為惡意軟件檢測的安全特征之一。Mohaisen 等人[23]將注冊表和文件系統相關的修改操作作為惡意軟件識別的特征。
2.2.3 網絡行為特征
木馬、蠕蟲及僵尸網絡這類惡意軟件在傳播的過程中會通過網絡與控制端進行通信,包括文件下載、訪問特定統一資源定位符(Uniform Resource Locator,URL)、發送搜集信息等惡意行為。因此,網絡行為特征也是檢測惡意軟件的一個重要手段。Zhang 等人[24]通過提取目標機器的網絡流量特征,來檢測是否存在惡意軟件。
動靜混合分析特征是指既可以在靜態條件下獲取,又可以在動態條件下獲取的安全特征。這類安全特征包括操作碼特征和API 系統調用特征。
2.3.1 操作碼特征
操作碼是計算機程序的指令序列號,表示該程序需要進行的操作,這從本質上反映了程序的行為特征。對于同一家族的惡意軟件而言,它們會共享同一個引擎,從操作碼層面上來看,它們對被攻擊者會有相似的惡意操作。因此,操作碼可以作為惡意軟件檢測的一個安全特征。
在提取操作碼特征之前,需要先獲取待測程序的反匯編指令。操作碼特征既可以提取操作碼的頻率,又可以提取操作碼的序列。
針對操作碼的頻率的提取,Ye 等人[25]提取了操作碼的頻率作為惡意軟件檢測的安全特征,并以此作為基礎,對操作碼頻率做了進一步的處理。Santos 等人[26]提出了用于檢測未知病毒的基于操作碼頻率和操作碼序列的檢測方法,并使用不同的分類器來檢測和分類惡意軟件。
針對操作碼的序列的提取,Ding 等人[27]使用操作碼序列作為樣本特征,并使用深度信任網絡作為分類器對惡意軟件進行檢測。陸中州[28]使用操作碼序列作為特征,并采用Grdient Boosting 進行分類。
2.3.2 API 系統調用特征
惡意軟件在實施其攻擊活動時,往往會調用一些敏感的系統API。比如有的惡意軟件在對受控主機進行攻擊時,需要進行提權操作,這時就需要系統的提權函數相關的API,如AdjustTokenPrivileges。因此,惡意軟件在運行過程中的系統API 調用信息,可以作為檢測惡意軟件的安全特征之一。
Eskandari 等人[29]在靜態條件下,通過惡意軟件的程序控制流圖(Control Flow Graph,CFG)提取了API 系統調用特征用以檢測惡意軟件。Zhang等人[30]使用2 個神經網絡對提取的惡意軟件操作碼特征和API 系統調用特征進行訓練,得到一個高階特征,最后將高階特征輸入到一個新的分類器中,實驗結果顯示,高階特征比單獨使用操作碼特征和API 調用特征的檢測效率更高。Rieck 等人[31]在動態條件下,利用惡意軟件的API 系統調用頻率構建安全特征。
目前大多數惡意軟件的變種是通過自動生成工具或者重用一些重要模塊形成的。因此,這些惡意軟件家族的二進制代碼具有一定的相似性。一個程序字節的取值范圍和圖像像素值的取值范圍是一致的,都是0~255。對于惡意軟件變種檢測來說,類似于圖像識別問題,前者基于軟件相似性,而后者基于圖像相似性。圖4 為3 組惡意軟件家族的灰度圖像,從圖像上看,同一家族的惡意軟件的灰度圖像的紋理具有很高的相似性,而不同家族惡意軟件的灰度圖像的紋理有比較大的差別。因此,通過惡意軟件的圖像紋理特征,可以實現變種惡意軟件的分類檢測。

圖4 不同惡意軟件家族的灰度圖像
Nataraj 等人[32]在2011 年首次提出惡意軟件圖像的概念,該團隊將惡意軟件的二進制文件轉換成對應的灰度圖,并提取圖像的通用搜索樹(Generalized Search Tree,GIST)紋理特征,最后使用K-近鄰(K-Nearest Neighbor,KNN)算法對該特征進行分類。Su 等人[33]將惡意代碼的二進制文件轉換成灰度圖像,并使用CNN 算法對惡意軟件進行檢測分類。陸中州[28]將惡意軟件的可執行文件轉化為灰度圖像,并采用CNN 方法對提取的圖像特征進行分類處理,最終取得了良好的分類檢測效果。
是否能對惡意軟件的安全特征進行有效的提取,在很大程度上決定了惡意軟件分類檢測模型性能的優劣,因為這些關鍵特征是惡意軟件的本質體現。不同惡意軟件所表現出的安全特征各有不同,比如在動態特征方面,不同惡意軟件的運行機制是不一樣的,如勒索病毒在運行時,往往會調用大量的文件讀寫類函數和加密類函數的API;挖礦病毒在運行時,往往會開啟大量的線程。因此,在針對不同惡意軟件進行安全特征提取時,需要結合不同惡意軟件的特點。此外,不同的安全特征各有利弊,在進行惡意軟件智能分析時,往往需要融合多種特征,以達到最佳的分類檢測效果。
信息增益表示在某種條件下,信息不確定性減少的程度。對于惡意軟件檢測來說,信息增益可以用來表征某個安全特征對于分類的關鍵程度,更進一步地講,即是根據它可以確定在什么層次上選擇什么樣的特征來分類。
Zhao 等人[34]利用惡意軟件的系統運行狀態信息和API 系統調用等行為特征來分類惡意軟件,并采用信息增益法對采集的安全特征進行特征篩選。韓蘭勝等人[35]將API 系統調用信息作為分類器的輸入特征,并采用信息增益法對這些特征進行篩選。
主成分分析(Principal Component Analysis,PCA)方法是使用最為廣泛的數據降維算法之一。該算法在保證原始信息不丟失的情況下,使用較少的數據維度來表征特征空間。對于惡意軟件檢測而言,PCA 方法可以對初始特征進行特征降維、消除數據噪聲和去除冗余特征。
Baldangombo 等人[20]提出的靜態惡意軟件檢測系統中,將PE 文件信息、DDL 相關信息和API系統調用信息作為安全特征,并使用信息增益法和PCA 方法進行特征篩選和特征降維,最終采用多個機器學習的分類器實現惡意軟件的分類檢測。Siddiqui 等人[36]采用PCA 方法對用于惡意軟件檢測的安全特征進行降維,把特征從877 降到了146,降維效果非常明顯。張吉昕[37]采用PCA 分析法對操作碼特征和字節序列特征進行特征降維和特征優化,并采用CNN 算法對惡意軟件進行分類。
分類器不僅可以用于惡意軟件的檢測,還可以對安全特征進行特征篩選和特征降維。例如,在對安全特征進行篩選時,可以通過分類器準確率或基尼系數的下降程度來篩選出分類效果最好的安全特征。常用的分類器有隨機森林算法、層疊降噪自編碼器的深度學習算法等。
Siddiqui 等人[36]對提取的安全特征采用隨機森林模型進行特征篩選,在保證分類效果的前提下,將原始的特征數量從877 降至84。白金榮等人[15]使用PE 文件信息、DDL 相關信息和API 系統調用信息來檢測惡意軟件,并使用隨機森林對這些特征進行特征篩選。王埡[18]采用層疊降噪自編碼器的深度學習算法對提取的高維特征進行降維處理,在惡意軟件檢測的過程中,較大程度上降低了特征處理成本,并獲得了較好的泛化能力。
嵌入(embedding)技術能夠將離散變量轉換為連續向量。embedding 向量的一個重要性質是能夠使距離相近的向量對應的物體有相近的含義。embedding 技術的這一特性也可以應用于惡意軟件的智能分析中。由于在直接使用程序字節作為惡意軟件檢測的安全特征時,無法利用字節值來衡量字節之間的語義關系;因此,可以利用embedding 技術對程序字節進行特征處理。處理后的數據不僅維數較低,還可以體現出不同實體間的語義關系。目前embedding 技術中應用得最為廣泛的是google 推出的word2vec 技術,word2vec 是一種基于訓練淺層的前饋神經網絡。
Popov[38]將word2vec 技術用于機器碼指令的向量嵌入,并采用CNN 算法對惡意軟件進行分類檢測。Kang 等人[39]針對提取的惡意軟件操作碼序列和API 系統調用特征采用word2vec 技術進行特征處理,最后采用長短期記憶網絡(Long Short-Term Memory,LSTM)算法對惡意軟件進行分類檢測。陸中州[28]對惡意軟件進行操作碼特征的提取,并采用word2vec 技術進行特征處理,最后使用Gradient Boosting 算法進行分類檢測。
安全特征處理的本質都是對特征進行精簡,即在能夠有效表征惡意軟件的前提下,使特征的體量變小,從而降低后續的分類處理成本,進而使分類器達到最佳的分類效果。
4.1.1 K 近鄰算法
K 近鄰算法(K-Nearest Neighbor,KNN)是一種有監督的機器學習算法,該算法的核心思想是給定一個訓練數據集,對新的輸入樣本,基于某種距離度量找到該訓練集中與其最近的k個訓練樣本,然后基于這k個鄰居信息進行測試集的預測。由于K 近鄰算法被提出的時間較早,將該算法應用于惡意軟件檢測的相關工作也開始得較早。此外,該算法對于小規模的惡意軟件數據集的檢測效果表現良好,但是該算法在存取樣本實例時需要占用巨大的內存空間,難以適用于大規模的數據集場景。
Abou-Assaleh[40]等人從惡意軟件的可執行文件中提取特定的字節序列特征,并將該特征輸入K 近鄰算法中進行分類檢測。Nataraj[32]等人將惡意軟件的二進制文件轉換成對應的灰度圖,并提取圖像的GIST 紋理特征,最后使用K 近鄰算法對該特征進行分類。
4.1.2 K-means 算法
K-means 算法是一種無監督學習的聚類算法,該算法的核心思想是基于相似性將數據對象分為K個簇,進而進行分塊聚類。K-means 算法原理簡單,收斂速度快,可解釋性強,其中對K值的選取對聚類結果有很大的影響。因此在應用該算法進行惡意軟件檢測時,要選取合適的K值進行聚類。
Ye 等人[25]提取了操作碼的頻率作為惡意軟件檢測的安全特征,并以此作為基礎,采用K-means算法對惡意軟件進行聚類。張瑩[41]使用K-means算法的變體PSO-K-means 算法對惡意軟件進行分類檢測。
4.1.3 SVM
SVM 是一種用于二分類的有監督機器學習算法,該算法的核心思想是建立一個最優決策超平面,使得該平面兩側距平面最近的兩類樣本之間的距離最大化,從而對分類問題提供良好的泛化能力。在惡意軟件檢測的應用上,該算法對數據量較少的數據集,可發揮出良好的分類效果,但是難以適用于大規模的數據場景。
Ye 等人[13]對惡意軟件進行可閱讀字符串的提取,并以SVM 作為分類器對惡意軟件進行檢測。Qu 等人[19]對惡意軟件進行信息熵特征、操作碼特征、API 調用特征等多特征提取,并進一步進行特征融合,最后采用XGBoost、SVM 等機器學習算法識別惡意軟件。Kancherla 等人[42]提取惡意軟件的灰度圖像紋理特征,并使用SVM算法進行分類檢測,分類準確率可達95%。
4.1.4 決策樹
決策樹是一種非參數的監督機器學習算法,該算法的核心思想是構建一種模型,使之能夠從樣本數據的特征屬性中,通過簡單的決策規則,預測目標變量的值。在惡意軟件檢測的應用方面,該算法相比于其他機器學習算法,計算開銷相對較小且可解釋性強,但是容易形成過擬合且難以適用于大規模的數據場景。
Ravi 等人[43]對惡意軟件提取操作碼特征,并對其進行n-gram 處理,最后使用決策樹、K 近鄰算法和SVM 算法進行分類檢測。修揚等人[44]將通過靜態方式獲取的操作碼頻率特征和通過動態方式獲取的注冊表行為、網絡行為、文件操作等行為特征進行特征融合,并使用決策樹、KNN 和SVM 算法對惡意軟件進行分類檢測。
4.2.1 CNN
CNN 是一種在計算機視覺領域有著廣泛應用的神經網絡模型。由于惡意軟件家族的二進制代碼具有一定的相似性,這種程序上的相似性可以與圖像的相似性相類比和關聯,這使得CNN 算法可以應用于惡意軟件的智能分析。此外,對于惡意軟件所提取的安全特征,也可以直接作為CNN 模型的輸入數據。
Su 等人[33]將惡意代碼的二進制文件轉換成灰度圖像,并使用CNN算法對惡意軟件進行檢測分類。陸中州[28]將惡意軟件的可執行文件轉化為灰度圖像,并采用CNN 方法對提取的圖像特征進行分類處理,最終取得了良好的分類檢測效果。Saxe[16]等人對惡意軟件提取PE 文件信息、可閱讀字符串、字節序列特征等安全特征,并采用CNN 算法對惡意軟件進行檢測。
4.2.2 循環神經網絡
循環神經網絡(Recurrent Neural Network,RNN)是一種在語言建模和語音識別等領域有著廣泛應用的神經網絡模型,該算法的核心思想是通過建立信息記憶存儲功能,實現信息的自循環。對于計算機程序而言,程序代碼與自然語言有一定的相似性,因此,RNN 網絡可以用于惡意軟件的智能分析。
Pascanu 等人[45]對惡意軟件提取API 系統調用特征,并以此作為RNN 模型的輸入。Wang 等人[46]提出了結合自編碼器和RNN 網絡的惡意軟件檢測模型。Mathew 等人[47]對惡意軟件提取API 系統調用特征,并采用RNN 的變體LSTM 進行分類檢測。
4.2.3 BP 神經網絡
反向傳播(Back Propagation,BP)神經網絡是一種應用廣泛的多層前饋型神經網絡模型,其核心原理是信號為前向傳遞,而誤差會反向傳播[48]。BP神經網絡在自學習、自適應、泛化和容錯上擁有良好的表現。因此,將BP 神經網絡應用于惡意軟件的檢測領域,具有顯著的優勢。
張一弛等人[49]對惡意軟件提取系統運行信息和系統操作信息等動態行為特征,并使用BP 神經網絡對惡意程序進行分類判定。張吉昕[37]對惡意軟件樣本提取全局圖特征,并采用BP 神經網絡對其進行分類檢測。李倩倩[48]利用n-gram 模型對惡意軟件提取操作碼特征,再采用BP 神經網絡進行分類,準確率達到90%以上。
4.2.4 圖卷積神經網絡
圖卷積神經網絡(Graph Convolutional Network,GCN)是卷積神經網絡在圖域上進行自然推廣的一種深度學習算法,該算法能夠直接對圖數據進行卷積運算。GCN 相較于其他人工智能算法,在惡意軟件的檢測應用上還相對較少。目前,GCN算法主要結合所提取的惡意軟件API 調用特征進行惡意軟件檢測。
Chai 等人[50]先通過CNN 算法提取惡意軟件的API 序列特征,并據此構建API 之間的行為圖,然后將其輸入到GCN模型中,進行分類檢測。李煳樺[51]將惡意軟件的系統調用行為特征圖結構作為GCN模型的輸入,以此對惡意軟件進行分類檢測。
集成學習分類器本身并不是一個單獨的分類器,而是通過某種結合策略將多個同質或者異質的基分類器構建成一個強學習器。由于集成學習分類器綜合考慮了多個基學習器的特點,因此,能夠實現較好的分類效果。
4.3.1 隨機森林
隨機森林是一種基于bagging 的集成學習分類器,并以決策樹為基分類器,以投票法為結合策略。
Liu 等人[52]對惡意軟件提取匯編指令,并對其進行降維處理,最后采用隨機森林進行分類檢測。Eskandari 等人[29]同時使用決策樹和隨機森林兩種分類器對惡意軟件進行分類檢測。劉宇強[53]提取惡意軟件的圖像紋理特征,并采用隨機森林、K-means 算法和CNN 算法進行對比分類檢測。
4.3.2 GBDT、XGBoost 和LightGBM
梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)是一種基于boosting 的集成學習算法。極端梯度提升樹(Extreme Gradient Boosting,XGBoost)是GBDT 算法的一種變種和工程實現。輕量級梯度提升機(Light Gradient Boosting Machine,LightGBM)是XGBoost 的一種改進模型。因為這3種集成學習算法在分類問題和回歸問題上均表現出色,所以被廣泛應用于各種數據科學競賽和工業實踐中。
張銀杰等人[54]采用隨機森林和LightGBM 算法對惡意軟件進行了二分類預測,其預測效果明顯好于傳統的決策樹算法。徐國天等人[55]采用XGBoost和LightGBM 雙層模型對惡意軟件進行分類檢測。楊寒[56]通過提取惡意軟件的融合特征,采用LightGBM 算法進行惡意軟件的二分類檢測。
在惡意軟件的分類檢測中,往往會采用多種分類器進行對比,并不斷地通過模型調優,選擇最優的分類器進行分類。每種算法模型都有其優勢和劣勢,需要根據數據樣本集的大小、類型、特征提取的方法等具體場景進行擇優選擇,才能達到理想的分類效果。
為了充分利用所獲取的數據集,得到泛化能力良好的惡意軟件分類器,在數據集樣本量較大時,需要將樣本數據隨機分成3 份,一份為訓練集,一份為驗證集,最后一份為測試集,根據實踐經驗,一般比例為6 ∶2 ∶2。首先用訓練集來訓練模型,得出模型的參數;其次用驗證集來優化模型,尋找最優的超參數;最后把最終得到的模型再用于測試集,決定使用哪種模型,并評估模型的泛化性能。
在數據集樣本量不是很充足時,如果采用上述的數據劃分策略,可能會出現在訓練集上訓練得到的模型表現良好,但是在測試集上的預測分類效果不盡如人意的情況,說明訓練出的模型出現了過擬合,在未知數據上的泛化能力較差。為了從有限的數據集中獲取盡可能多的信息,以及在一定程度上減小過擬合,可以對數據集采用交叉驗證來訓練優化模型。關于該方法的具體實現,本文不做詳細的介紹。
對分類器的分類效果和泛化能力進行評估,也是整個惡意軟件智能分析過程中的重要一環。選擇恰當的性能評估指標,研究者可以從評估結果中發現模型選擇和訓練過程潛在問題和缺陷,進而對模型的結構和參數進行優化。
對于惡意軟件二分類模型而言,其性能評估指標一般采用準確率、對數損失函數logloss 和曲線下面積(Area Under Curve,AUC)。對于惡意軟件多分類模型而言,其性能評估指標一般采用準確率、對數損失函數logloss、精確率、召回率和F1 分數(F1-Score)。每一個性能評估指標的具體含義和使用方法在本文不做詳細的介紹。
構建分類器的目的在于得到泛化能力強的模型,即在未知數據樣本上表現出良好的分類效果的模型。為了對泛化能力進行衡量,需要對數據樣本進行訓練集、驗證集和測試集的劃分,進而進行模型驗證,并采用恰當的性能評估指標對分類器的分類效果進行評估。
隨著智能分析技術在惡意軟件檢測上的廣泛應用,其面臨的問題和挑戰也值得進行進一步的探究。
6.1.1 數據樣本現狀問題
對于Windows 平臺而言,網絡安全方面的數據從來都不缺乏,但是由于數據大多會涉及個人隱私、法律法規以及數據安全等問題,因此公開數據集往往都要進行相應的處理。比如,某些數據集只包含由PE 文件提取的特征向量、分類標簽和函數調用序列等。所以,網絡安全領域一直缺乏合適的公開數據集。并且,對于公開數據集來說,也存在很大的風險問題。比如,如果公開的數據集被黑客利用,他們對訓練樣本進行篡改,并不斷調整其惡意代碼功能,最終將導致識別模型的檢測效果欠佳。此外,對于某些特殊的網絡環境、工作需求,需要追蹤最新樣本的變化趨勢,往往還需要自行收集和構建惡意軟件樣本,這也是實際工作應用場景中,惡意軟件數據樣本來源的主要方式。
6.1.2 樣本收集相關問題
對于惡意軟件樣本的收集,一些常見的惡意軟件樣本,可以從相關的網站或者論壇上下載,或者采用蜜罐的方式進行收集。但是,有些惡意軟件在檢測到蜜罐存在時,會設法規避。此外,很多惡意軟件是需要在特定環境下才會暴露其惡意行徑,這就要求蜜罐系統具備相應的誘捕環境,這無疑提高了惡意樣本收集的難度。
目前,很多惡意軟件為了規避檢測,往往會對其進行加殼處理,而很多良性軟件為了阻止商業對手的惡意破解,也會對其軟件程序進行加殼。這樣一來,如果分類器將加殼與否作為判定軟件的一個特征,可能會造成最終結果的誤判。
6.1.3 數據樣本標注問題
大部分的惡意軟件智能分析都是基于監督學習的,因此需要對樣本數據進行標注,對于自建數據集來說,這是一件非常耗時的工作。目前采取的辦法是將數據樣本上傳至打標簽平臺,比如VirusTotal,進行標簽標注。一方面,VirusTotal 包含很多反病毒引擎,不同的反病毒引擎都有各自的命名規則,這樣會導致諸如惡意軟件家族這類軟件的標注信息各不相同;另一方面,該軟件采取設置投票閾值的方式進行樣本標注,對處于閾值邊緣的待測程序的標注往往不準確。基于以上原因,會導致不恰當地數據樣本標注,從而帶來檢測結果的誤報和漏報。
6.1.4 新型威脅樣本問題
目前還存在一些新型的威脅樣本,比如廣告嵌入類和約會詐騙類等軟件。現階段的惡意軟件檢測技術對這類軟件的檢測難以發揮作用。廣告嵌入類軟件,主要指軟件本身功能為良性,但是該類軟件內部與網絡關聯的鏈接中的相關內容可能存在惡意行為。約會欺詐類軟件,與廣告嵌入類軟件類似,本身不具備惡意行為,在欺詐過程中,僅僅充當載體而已,但是該類軟件會通過某種方式誘惑用戶進行繳費聊天或者實施進一步的詐騙行為。
6.2.1 靜態分析局限性
對惡意軟件進行靜態分析檢測,其核心方法是對惡意軟件進行反匯編和逆向工程,并進一步提取相應的靜態分析特征。但是,很多惡意軟件會使用偽裝技術以此躲避靜態分析檢測。偽裝技術一般包括對惡意軟件進行加殼,資源混淆,采用動態加載數據方式等。以加殼偽裝技術為例,對于加殼后的惡意軟件,很難獲得其反匯編代碼,從而很難獲得與靜態分析檢測相關的安全特征。
6.2.2 動態分析局限性
對惡意軟件進行動態分析檢測時,有些惡意軟件會感知到運行環境中存在沙箱,便會隱藏其惡意行徑。此外,對于需要回連遠程服務器并等待發出命令的惡意軟件,即使該類軟件不做任何的抵抗嘗試,如果回連服務器不發送任何命令,或者不再運行,那么該惡意軟件的行為也將不會顯現。其次,惡意軟件的動態分析檢測,需要消耗大量的計算資源,這也是其受限運用的一個因素。
6.2.3 圖像分析局限性
對惡意軟件進行圖像分析檢測,也存在一定的局限性。雖然程序上的相似性可以與圖像的相似性相類比和關聯,但是在程序轉換為圖片的過程中,存在信息冗余或信息丟失問題。由于輸入分類器的圖片需要大小固定,這必然要求程序在轉換為對應的圖片時,需要填充或者丟棄某些字節。這樣一來,轉換得到的圖片相對于原程序而言,存在信息冗余或信息丟失的問題。此外,圖像分析檢測對于惡意軟件的變種有著良好的檢測效果,但是對于第一次出現的惡意軟件檢測效果欠佳,原因在于圖像分析檢測之所以能夠實現,是基于同家族的軟件樣本具有相似特征。
一方面,雖然對高維的安全特征進行降維處理是必要的,但是特征降維可能會導致信息丟失問題,比如降維后數據方差減小。另一方面,采用圖像分析技術對惡意軟件進行檢測,同樣存在信息丟失的問題。
大部分的智能分析方法僅僅根據輸入的待測樣本判定是否為惡意軟件,但是,判定結果無法提供足夠有效的信息去解釋該判定結果的決策依據。盡管很多智能分析方法能夠取得良好的檢測效率,但是在真正的實際場景中應用較少,其中一個原因就在于結果可解釋性差。對于安全分析人員而言,在缺乏決策依據的前提條件下,是否信任通過分類器得到的決策結果,也是值得思考的。
雖然基于深度學習的惡意軟件檢測模型有著良好的檢測效果,但是模型本身容易遭到對抗樣本攻擊[57]。惡意軟件開發者利用深度學習模型的弱點,對數據樣本注入噪聲,即通過修改部分特征,生成欺騙分類器的對抗樣本,進而誘使分類器被訓練成無法正確識別惡意軟件的分類器,使得惡意樣本被檢測為良性樣本,從而繞過分類器的檢測[58]。
本節主要介紹了惡意軟件智能分析所面臨的挑戰和問題。對于這些存在的問題,目前已經有一些措施進行緩解,但仍無法徹底解決。
(1)對于數據樣本所面臨的問題,在實際的應用場景中,數據樣本的來源應以自建數據集為主,并將數據樣本的收集作為一項長期的工作,以此完善和豐富用于訓練的數據源,以增強分類器的泛化能力;在樣本標注方面,出現難以判定的情況時,可以輔以專家經驗進行判定;在新型威脅樣本方面,這類軟件的檢測核心在于人與人之間的較量,可以輔以異常行為分析技術識別詐騙行為,在用戶被欺騙前,及時進行提醒。
(2)對于分析方法所面臨的問題,由于靜態分析檢測和動態分析檢測均存在相應的局限性,在實際的應用場景中,專業的安全分析人員應將兩種分析方法結合應用,并輔以專業的人工分析,以達到可能的最佳效果。
(3)對于信息丟失所面臨的問題,在進行安全特征處理的過程中,尤其是進行特征降維時,難免造成信息丟失問題,因此在實際的應用中,降維程度和信息丟失需要達到一個平衡。
(4)對于可解釋性差所面臨的問題,近兩年,有不少的可解釋性模型被提出,Ji 等人[59]在自己的綜述論文中對相關的可解釋性模型進行了總結。這些模型算法在圖像識別和文本分類等領域應用較多,但是在惡意軟件檢測上能否發揮良好的效果還需要進一步的探索。
(5)對于對抗樣本攻擊所面臨的問題,已經普遍在現有的深度學習模型研究中有所涉及。目前針對對抗樣本的檢測方法有模型蒸餾技術和重訓練技術[60],但是這兩種方法只能對有限的對抗樣本進行有效的檢測。至于在惡意軟件的智能分析領域,還沒有相關的研究工作。
本文對人工智能技術在惡意軟件檢測上的研究進展和面臨的挑戰進行了相應的回顧和綜述。惡意軟件的智能分析大體上圍繞著數據集構建、安全特征提取、安全特征處理、分類器選擇、模型驗證和性能評估這5 方面進行。另外,對于惡意軟件檢測所面臨的挑戰和問題,也做了相應的梳理,在此,針對所面臨的挑戰,對一些潛在的研究方向進行展望,具體如下:
(1)數據集方面。目前可以用于實際應用場景的數據集較少,在未來的工作中,將構建更有價值的數據集納入到惡意軟件智能分析的整個工作環節中是非常必要的。
(2)圖像分析檢測方面。可以將惡意軟件的動態特征也轉化為圖像特征,具體而言,提取內存原始數據,將其轉化為圖片,并采用深度學習算法進行分類器構建。這種方法可以彌補圖像分析方法的不足。
(3)結果可解釋方面。如何有效地提高惡意軟件智能分析模型的可解釋性,并解決安全分析人員和決策結果的信任問題,是未來惡意軟件檢測領域中值得深入探究的方向之一。
(4)對抗樣本攻擊方面。對抗樣本攻擊的出現使得基于深度學習的惡意檢測模型本身存在安全隱患,因此在未來的研究工作中,提出有效的防御方法來提高模型的魯棒性是很有必要的。
總體而言,人工智能技術在惡意軟件檢測上的應用取得了一些令人矚目的研究成果,但是這些研究成果在實際場景中的應用還存在一定的局限性。因此,如何充分利用人工智能技術在惡意軟件檢測上的優勢,迫切需要相關技術研究人員和安全分析人員一起進行深入探究。