陸庭輝,饒茜霖,薛 質,施 勇
(1.廣東電網有限責任公司江門供電局,廣東 江門 5 290001;2.上海交通大學,上海 200240)
近年來,隨著勒索病毒的部分技術細節的公開,以及在暗網中代碼交易的出現,勒索病毒的制作和利用勒索病毒進行犯罪的成本不斷降低,勒索病毒攻擊方式也更加簡單,但其贖金收益依然非常可觀。隨著網絡犯罪的組織化、規模化,隱匿行為攻擊的復雜化和商業化,目前,隱匿高危勒索病毒呈蔓延之勢。已知的勒索病毒家族利用多態、代碼混淆等手段,可以快速產生大量新版本,使得勒索病毒數量激增。
隨著網絡規模的擴大和信息化水平的提高,電力企業對網絡的依賴程度不斷增強,也在不知不覺中受到隱匿高危行為的威脅。電力企業的敏感數據也容易受到勒索病毒的關注,這些風險影響著電力企業網絡安全和穩定。為了保證計算機網絡和計算機應用系統的正常運行,電力企業需要對隱匿高危勒索病毒的攻擊作出應對。
在過去幾年中,已經有許多針對勒索病毒的防御策略,每種策略都實施了幾種保護和檢測策略,例如,基于欺騙的保護方法(deception-based protection)[1-2]、控制安全隨機數發生器(controlling secure random number generator)[3]、應用程序的行為分析(behavioral analysis of applications)[4-6]、密鑰托管[7]、網絡級防御[8],以及利用機器學習算法的勒索軟件程序檢測[9]。
按照是否運行軟件樣本,勒索病毒的檢測可以分為靜態檢測與動態檢測兩種。其中靜態惡意軟件特征包括字節序列N-grams、操作碼和PE 報頭字段等。隨著開發技術的發展,惡意軟件的作者往往使用壓縮、加密、加殼等方法阻止靜態特征的提取,但許多反病毒技術和工具已經可以有效實現程序的解包。Wang 等人[10]針對惡意軟件通過加殼逃脫檢測的問題,提出了一種加殼檢測框架以檢測可執行文件是否加殼,以提升惡意代碼檢測效果。在動態檢測中,程序運行時調用的API 的序列經常被視作為主要特征,這是因為惡意軟件為了減小代碼的體積,往往通過調用API 函數來實現文件、注冊表、網絡、進程等操作行為。
現有的勒索病毒防御方法中,傳統的分類算法難以及時響應零日漏洞勒索病毒,而人工逆向分析的方法使得成本顯著提高,但是效果提升不明顯。隨著機器學習等算法的發展,一些啟發式檢測工具不斷出現,但是這些工具普遍存在局限性和滯后性,并且不利于迭代。與此同時,勒索病毒的開發也在不斷發展,加殼、代碼混淆、反沙盒、內存動態映射等策略的使用也為勒索病毒的防御帶來了很大難題。
本文從Virus Total 等開源網站上收集了勒索病毒等惡意軟件樣本,利用動態分析方法提取軟件的應用程序編程接口(Application Programming Interface,API)函數調用特征,在此基礎上訓練了勒索病毒檢測器和勒索病毒家族分類器。
勒索病毒,或稱勒索軟件,是一種特殊的惡意軟件,其主要通過鎖定受害者主機的操作系統或者使用密碼學加密受害者主機上的某些文件的方式,使得受害者無法獲得對其主機或主機上的文件的訪問控制權限,并威脅受害者向指定的賬戶支付贖金以解鎖文件。為了防止在感染受害者機器的初期就被察覺,隱匿勒索病毒往往在進行加密等核心操作前先模仿正常軟件活動一段時間。
隨著各種新型網絡攻擊的出現,企業信息安全形勢變得不容樂觀,特別是銀行、電力、大型國企等機構,正在成為受攻擊的主要對象。當前,隱匿高危行為是企業面臨的最嚴重的威脅之一,其中,高級持續性威脅(Advanced Persistent Threat,APT)是最主要的表現手段之一。所謂APT 攻擊就是針對特定的目標,進行長期持續性的網絡攻擊的攻擊方式,其對企業造成了非常嚴重的困擾,而結合了APT 的勒索病毒攻擊則更是為企業的數據安全帶來了極大的威脅。
對抗隱匿高危勒索病毒攻擊,保護用戶數據的關鍵措施在于預防,即在勒索軟件攻入受害者主機但尚未造成實質性破壞前及時檢測并攔截攻擊。目前,針對勒索病毒的防護主要采用分層次防護措施,即提倡同時部署多種獨立、領域互相重疊的安全措施以創建穩固的安全防護架構,并且各安全層被設計為和其他安全層互補,使得威脅不易穿透重重防護。
勒索病毒的家族分類指的是根據勒索病毒產生的變種來源對勒索病毒進行分類。同屬一個家族的勒索病毒往往會共享一些通用模塊,因此會有相似的勒索行為。近年來,家族內的勒索病毒的技術不斷更新迭代,可以更好地逃避現有工具的檢測。此外,可以對勒索病毒的結構進行轉換,從而迅速產生大量變種。
此外,近年來勒索軟件即服務(Ransomware as a Service,RaaS)的商業模型的規模化發展使得勒索病毒家族中的病毒變種出現得更加頻繁,Cerber家族的出現和發展就是其中的典型。據報道,惡意代碼工廠軟件生成使用代碼混淆技術且擁有獨特Hash 的惡意代碼變種所需時間僅僅只有15 s[11],而這些惡意軟件的變種可以繞過傳統的靜態簽名匹配的惡意軟件檢測技術的檢測。
Cuckoo 沙盒是一個開源的惡意軟件分析工具,用戶可以提交待分析樣本或待檢測統一資源定位符(Uniform Resource Locator,URL),快速獲得它的行為分析報告。Cuckoo 沙盒的主要組件可以分為主機和客戶機兩部分。其中主機是沙盒的核心控制部分,負責樣本的傳入、分析報告的生成、客戶機的啟動和恢復等,而客戶機可以有一個或多個,可以是在VirtualBox 等軟件上配置的虛擬機,也可以是真實的物理機器。
Cuckoo 沙盒記錄的待檢測樣本的行為信息主要有軟件執行期間調用的所有進程,創建、刪除、修改的文件及其信息,網絡連接與流量信息,客戶機運行期間的屏幕截圖,軟件運行期間的內存轉儲記錄。這些信息由客戶機內的監控腳本(agent.py)獲取,并將所有信息發回主機,樣本運行完成后,再由主機生成名為report.json 的行為分析日志。
決策樹算法的雛形最早由Hunt 等人[12]在1966年提出。該算法對整個決策空間進行劃分,認為位于同一塊空間內的樣本就屬于同一類別。決策樹的結構是一種樹形的有向圖結構,分為決策結點與葉子結點。在決策結點,決策樹會根據樣本特征做出決策;當到達葉子結點時,根據葉子結點被劃分的空間就完成了對樣本的分類。
隨機森林[13]是一種集成的、基本單元是決策樹的機器學習算法,使用了bagging 方法集成學習。隨機森林將訓練集分為多個子集,每個子集獨立訓練一個決策樹模型。在模型預測時,隨機森林會收集每個決策樹的模型結果,依據算法進行整合,得到最終的預測結果。
卷積神經網絡(Convolutional Neural Network,CNN)[14]是用卷積核代替參數的多層感知器(Multilayer Perceptron,MLP)的一種變體,屬于一種前饋神經網絡,其利用卷積核構建學習模型。卷積神經網絡的模型構成通常有多個卷積層、池化層和全連接層。
在自然語言處理方面,Kim[15]提出使用卷積神經網絡對句子的情感進行分類,如圖1 所示,其模型由卷積層、池化層和全連接層構成。

圖1 API 序列分類模型架構
用xi∈Rk表示API 序列中第i個API 函數的k維特征向量,API 序列的長度為n,則整個API 序列特征表示就可以用n個API 函數的特征向量拼接得到,即:

同樣的,可以用xi:i+j表示從xi到xi+j的特征向量的拼接。對拼接后得到的x1:n∈Rnk進行矩陣卷積操作,卷積核設置為w∈Rhk,即1 次對API 函數調用序列中的h個連續API 函數進行特征提取。如對xi:i+h-1卷積得到一個新特征ci,該過程可以表示為:

式中:b為偏移參數;f為非線性函數。對1 個長度為n的API 函數調用序列中間每一個大小為h的子序列{x1:h,x2:h+1,…,xn-h+1:n}進行卷積操作,就可以得到整個序列的特征映射為:

整個模型的卷積層有多個卷積核,每個卷積核經過卷積、池化后都可以得到一個特征。將這些特征一起傳入全連接層,就可以輸出一個類別的概率分布,其中概率最大的類別就作為輸入API 函數序列的類別。
在本節中,將介紹本文勒索病毒數據集的構建與軟件特征提取的過程和結果。
本文研究的軟件樣本類別是Windows 平臺上的可執行軟件樣本(exe),其可以分為惡意軟件樣本和良性樣本兩大類。在惡意軟件樣本的選擇上結合了電力系統的實際情況,包含了隱匿高危勒索病毒樣本。課題使用的惡意軟件樣本主要來自Virus Total 等惡意樣本開源網站。課題使用的良性軟件樣本來自360 應用商店,樣本均經過360 惡意軟件檢測確認。本課題總共收集到1 000 個惡意軟件樣本(不包括勒索病毒家族樣本)、100 個良性軟件樣本。
由于目前尚沒有根據勒索病毒家族分類的公開的數據集,因此勒索病毒樣本及其所屬家族只能通過其在Virus Total、VirusShare 等開源網站上的分析信息判斷,將反病毒廠商檢測引擎給出的占比最大的家族定為該病毒樣本的所屬家族。最終獲得的勒索病毒家族名稱與樣本數量分布如表1 所示。

表1 數據集勒索病毒家族構成
本文搭建的Cuckoo Sandbox 環境中主機使用的是Ubuntu 18.04.1 LTS 操作系統,在主機上安裝了Cuckoo Sandbox 2.0.7、VirtualBox 5.2 等軟件。客戶機使用的操作系統是Windows 7 專業版并以虛擬機的形式通過VirtualBox 5.2 安裝在主機上。
為了便于主機對客戶機的控制和軟件樣本的運行,客戶機關閉了防火墻、系統自動更新、用戶賬戶控制,并安裝了Python、pip、pillow 等軟件用于運行agent.py 腳本。
軟件在與操作系統進行交互時通常使用API 函數。為了使文件大小更小、更加隱蔽、傳播更迅速,勒索病毒往往利用系統API 函數實現文件管理、網絡連接、注冊表訪問等行為。本小節在Cuckoo Sandbox 提供的分析報告的基礎上,提取了勒索病毒等軟件樣本的API 調用信息,并在提取的行為信息中分析了勒索病毒的部分典型行為。
從軟件行為分析報告中提取API 函數調用行為信息的流程如圖2 所示。提取的行為報告位置是[“behavior”][“process”]字段,該字段記錄軟件運行期間每個進程的API 函數調用情況。

圖2 API 函數調用信息提取流程
本節在2.3 節特征提取的基礎上,訓練了勒索病毒檢測器與家族分類器。
本節中,訓練勒索病毒家族分類器使用的特征是軟件樣本調用的API 函數名稱及相應的頻率。如果將全部出現過的API 函數名稱作為特征直接進行分類器的訓練,不僅會增加模型訓練的時間消耗,還會因為無效或者干擾特征的保留使模型的分類效果下降。
利用2.3 節獲得的軟件API 函數調用頻率信息,并利用R 語言的Boruta 算法包對API 函數進行特征選擇。由于分類任務分為勒索病毒檢測的二分類和勒索病毒家族分類的多分類,兩種分類數據集不同、數據標簽不同,因此需要分別進行特征篩選,保留與各自分類任務相關的API 函數特征。
第2 節獲得的API 函數的調用序列可以看作軟件的“句子”的文本分析和分類,但是序列長度基本在3 萬以上,這給后續的分析帶來了極大的數據讀取和存儲壓力,也會影響卷積神經網絡分類勒索病毒的效果,因此需要對API 序列進行去重處理。對軟件樣本的API 函數調用序列進行去重的算法結合軟件的API 函數調用的現實情況,設置重復序列的長度范圍為[1,15],遍歷一遍序列后刪去所有重復子序列。
利用全部樣本的API 函數調用序列構成了一個文檔輸入Word2vec 模型,獲得API 函數的特征表示。特征向量預訓練使用了Skip-gram 模型結構,設置API 函數的特征向量的維數為50 維,迭代次數為10 輪,模型訓練結束后將特征向量保存為“APIvec.bin”文件,用于后續的分類器訓練。
在本節中,分別使用傳統的機器學習算法決策樹、隨機森林模型和卷積神經網絡的方法訓練勒索病毒的檢測器與家族分類器。
3.3.1 決策樹模型
決策樹模型設定勒索病毒檢測與分類的訓練集與測試集的劃分比例為9 ∶1。使用決策樹算法訓練勒索病毒檢測器與勒索病毒分類器,其中勒索病毒檢測器的模型測試混淆矩陣如圖3 所示,勒索病毒檢測器的準確率為94.56%,分類精度為97.05%,召回率為89.18%。勒索病毒家族分類器的模型測試混淆矩陣如圖4 所示,勒索病毒檢測器的準確率為82.35%。

圖3 決策樹算法檢測器測試混淆矩陣

圖4 決策樹算法家族分類器測試混淆矩陣
3.3.2 隨機森林算法
隨機森林算法設定勒索病毒檢測與分類的訓練集與測試集的劃分比例為9 ∶1,設置隨機森林中的決策樹數量為150,訓練勒索病毒檢測器與勒索病毒分類器。其中勒索病毒檢測器的模型測試混淆矩陣如圖5 所示,勒索病毒檢測器的準確率為96.73%,分類精度為94.72%,召回率為97.29%。勒索病毒家族分類器的模型測試混淆矩陣如圖6 所示,勒索病毒檢測器的準確率為90.19%。

圖5 隨機森林算法檢測器測試混淆矩陣

圖6 隨機森林算法家族分類器測試混淆矩陣
3.3.3 卷積神經網絡模型
設置卷積神經網絡模型訓練集與測試集的比例劃分為8 ∶2。模型訓練時設定平均序列長度為5 000,batchsize 為10,丟棄概率為0.5,學習率為0.001。設置序列的最大長度為5 000。預訓練得到的API函數名稱特征向量維度為50 維,結合軟件的API函數調用的現實情況設置卷積核大小為2×50,3×50,4×50,5×50。
勒索病毒檢測器的模型測試混淆矩陣如圖7 所示,勒索病毒檢測器的準確率為97%,分類精度為95.62%,召回率為95.09%,F1-score 為96.03%。勒索病毒家族分類器的模型測試混淆矩陣如圖8 所示,勒索病毒檢測器的準確率為94%,分類精度為89.1%,召回率為82.04%,F1-score 為76.42%。

圖7 卷積神經網絡檢測器測試混淆矩陣

圖8 卷積神經網絡家族分類器測試混淆矩陣
綜上,無論是使用決策樹算法還是隨機森林算法,都可以有效實現對勒索病毒的檢測與家族分類。其中,隨機森林模型的勒索病毒檢測和家族分類測試效果都明顯優于決策樹算法。使用卷積神經網絡的方法對勒索病毒的檢測和家族分類效果都有提升,其中檢測準確率高達97%。在家族分類方面,卷積神經網絡的提升更加明顯,模型測試準確率為94%。
此外,可以發現勒索病毒的檢測效果明顯優于勒索病毒家族分類效果。雖然使用卷積神經網絡方法的分類器模型準確率較高,但是部分家族的分類精度、召回率不高。勒索病毒家族分類效果不佳可能是因為家族數據集的不完善,數據集內有的家族的樣本較少,這使得模型不能充分學習該家族的特征,導致模型對部分勒索病毒家族的分類效果不好。
近年來,勒索病毒攻擊給企業和個人帶來了很大困擾,隱匿高危勒索病毒的肆虐也為勒索病毒的防御帶來了新的挑戰。本文從電力系統的實際情況出發,以Windows 平臺的可執行文件格式的勒索病毒為研究對象,研究其及其所屬各勒索病毒家族的行為特征,并利用Cuckoo Sandbox 軟件獲取勒索病毒軟件的行為分析報告,從中提取中樣本的行為特征。針對獲得的勒索病毒行為特征,分別采用了決策樹、隨機森林的方法和基于卷積神經網絡的深度學習算法訓練了分類器實現了勒索病毒的檢測與家族分類。本文的勒索病毒檢測與家族分類直接對API 函數調用序列進行分析,對勒索病毒的應急防護有積極意義,能夠幫助企業或個人在受到勒索病毒威脅時快速反應,即針對勒索病毒所屬家族做出針對性防御,也可以與動態行為分析結合用于除勒索病毒外其他種類惡意軟件的分析。
本文的勒索病毒檢測器準確率達到了97%,勒索病毒家族分類準確率達到94%。
本文主要的貢獻有3 項:
(1)收集了13 個勒索病毒家族共507 個樣本,并對其進行了動態行為分析,從中總結出其典型的API 函數特征;
(2)搭建了卷積神經網絡模型,結合文本分類思路訓練了勒索病毒分類器;
(3)訓練了勒索病毒檢測器與勒索病毒家族分類器,準確率超過90%。