何清林,王麗宏,羅冰,楊黎斌
(1.國家計算機網(wǎng)絡應急技術處理協(xié)調中心,北京 100029; 2.北京航空航天大學 計算機學院,北京 100083;3.西北工業(yè)大學 網(wǎng)絡空間安全學院,西安 710072)
據(jù)世界經(jīng)濟論壇(WEF)發(fā)布的《2020年全球風險報告》[1],網(wǎng)絡攻擊將成為繼氣候災難、極端天氣、核危機等之后人類面臨的第七大威脅,另據(jù)統(tǒng)計機構Statista的預測報告[2],物聯(lián)網(wǎng)設備將成為網(wǎng)絡中的主流設備,2025年將超過750億臺,各類物聯(lián)網(wǎng)設備已經(jīng)成為網(wǎng)絡攻擊的重要目標。2016年9月,第一個出現(xiàn)的大型物聯(lián)網(wǎng)僵尸網(wǎng)絡Mirai,其惡意樣本的功能和結構相對簡單,之后各種各樣的物聯(lián)網(wǎng)惡意樣本不斷涌現(xiàn),它們的功能越來越多,攻擊手法越來越復雜,感染各類物聯(lián)網(wǎng)設備的能力也越來越強,已經(jīng)成為網(wǎng)絡空間中的重要威脅。物聯(lián)網(wǎng)惡意樣本含有攻擊模塊等漏洞利用相關的代碼,以及C&C服務器地址、代碼編寫風格等體現(xiàn)作者屬性的信息,對樣本進行分析、分類,可以獲得關鍵線索,支撐未知威脅發(fā)現(xiàn)、攻擊組織溯源等工作。
傳統(tǒng)惡意樣本一般使用家族標簽對其進行分類,但是對物聯(lián)網(wǎng)惡意樣本來說,家族標簽并不適用。首先,物聯(lián)網(wǎng)惡意程序現(xiàn)有的家族標簽信息并不準確,目前已知的2個最大物聯(lián)網(wǎng)惡意樣本家族是Mirai和Gafgyt,但是這兩者都開放了源代碼,后續(xù)的大部分物聯(lián)網(wǎng)惡意樣本都混合使用了其開源代碼,無法實際區(qū)分兩者。其次,物聯(lián)網(wǎng)惡意樣本的家族標簽信息不夠,無法精確刻畫惡意樣本的類別,以Mirai和Gafgyt為基礎延伸出多個分支的惡意樣本,僅使用家族標簽無法對其進行精確刻畫和分類。例如,廣泛傳播的Mozi系列樣本,就是一個融合了P2P、Mirai、Gafgyt等多種技術的系列樣本,但是并沒有明顯的家族標簽與之對應。因此,需要一種更精確的物聯(lián)網(wǎng)惡意樣本分類方法,對樣本的各個家族分支進行追蹤和分析。
為了解決該問題,本文開發(fā)了一套物聯(lián)網(wǎng)惡意樣本捕獲與分析系統(tǒng),在2019年5月至2020年5月在某運營商的網(wǎng)絡出入口節(jié)點上共捕獲到了157 911個在野傳播的物聯(lián)網(wǎng)惡意樣本。通過對樣本進行靜態(tài)逆向和多種維度的統(tǒng)計分析,結合分析結果和關聯(lián)的威脅情報數(shù)據(jù),標注了一套物聯(lián)網(wǎng)惡意樣本數(shù)據(jù)集,并提出了一種新的物聯(lián)網(wǎng)惡意樣本分類方法。該分類方法能夠實現(xiàn)跨平臺架構和高效的物聯(lián)網(wǎng)惡意樣本分類任務,并且在標記數(shù)據(jù)集上取得了優(yōu)異的分類效果,平均召回率達88.1%。
本文的主要貢獻如下:
1)對在野傳播的157 911個物聯(lián)網(wǎng)惡意程序進行了分類和梳理,對其CPU架構分布、加殼方式、樣本傳播方式等進行了分析,給出了物聯(lián)網(wǎng)惡意樣本的最新流行趨勢。
2)結合多維度情報數(shù)據(jù),對部分物聯(lián)網(wǎng)惡意樣本進行了標注,形成了一套物聯(lián)網(wǎng)惡意樣本數(shù)據(jù)集。該數(shù)據(jù)集包括 9 個家族分支,共計12 278個樣本,覆蓋X86、MIPS、ARM等3種CPU架構。
3)提出了一種新的物聯(lián)網(wǎng)惡意樣本的分類方法。該方法通過靜態(tài)逆向分析提取屬性函數(shù)調用圖(attributed functions call graph,AFCG)和字符文本等樣本信息,進一步使用圖表示學習和文本表示學習的無監(jiān)督學習算法,提取高維的向量特征,實現(xiàn)對跨CPU架構物聯(lián)網(wǎng)惡意樣本的統(tǒng)一表示。
4)對學習到的高維向量特征進行了分類實驗驗證,使用有監(jiān)督學習分類支持向量機(SVM)算法進行分類,在標注數(shù)據(jù)集上達到平均88.1%的召回率。實驗表明,從樣本提取出能表征樣本特征的信息越多,越能夠明顯提高分類的準確率。
2016年,Mirai事件的爆發(fā)讓物聯(lián)網(wǎng)惡意樣本進入人們的視野,Antonakakis[3]、de Donno[4]等對Mirai事件過程及樣本的機理進行了詳細描述。Mirai初期主要使用內(nèi)置密碼的密碼表,對大量具有弱口令的物聯(lián)網(wǎng)設備進行了密碼爆破攻擊,在高峰時期控制了多達60萬臺的物聯(lián)網(wǎng)設備。
物聯(lián)網(wǎng)惡意樣本主要是Linux平臺下的ELF文件,Cozzi等[5]對10 548個ELF惡意文件進行了系統(tǒng)性分析,結合使用靜態(tài)分析和動態(tài)分析的方法,分析了惡意樣本的ELF文件頭、持久化、加殼、信息收集、隱藏手法等9類行為特征,并指出同一家族的惡意代碼會具有明顯不同的行為特征。
Herwig等[6]分析了一個新的物聯(lián)網(wǎng)惡意程序家族Hajime,使用人工樣本逆向分析和流量分析的方法獲知Hajime的樣本行為,并估算僵尸網(wǎng)絡的規(guī)模,該僵尸網(wǎng)絡是披露的第一個大規(guī)模P2P物聯(lián)網(wǎng)僵尸網(wǎng)絡。文獻[7]分析了另外一個2020年新出現(xiàn)的大規(guī)模P2P僵尸網(wǎng)絡Mozi,病毒檢測引擎VirusTotal[8]目前把Mozi樣本識別為Mirai和Gafgyt,還沒有新的家族標簽。
文獻[9-10]提出了基于卷積神經(jīng)網(wǎng)絡(CNN)深度學習的惡意程序判定和分類方法,其中文獻[9]將物聯(lián)網(wǎng)樣本文件直接切割和轉換,變成灰度圖片后用CNN的模型進行惡意性判定,文獻[10]根據(jù)樣本文件構造熵灰度圖后使用CNN深度學習模型進行分類。這類方法都沒有對樣本文件本身進行深入的分析,沒有還原樣本的結構特征和語義特征,可解釋性不足。
物聯(lián)網(wǎng)惡意樣本是編譯鏈接好的二進制文件,與傳統(tǒng)的Windows PE樣本及Android APK樣本相比,有很多相似之處,其結構特征一般包括逆向還原的函數(shù)調用圖(functions call graph,F(xiàn)CG)、控制流圖(control flow graph,CFG)等,語義特征一般包括函數(shù)的反匯編代碼片段等。惡意樣本文件特征提取是一項繁雜的工作,涉及復雜的靜態(tài)逆向分析,IDA Pro是最常用的靜態(tài)分析工具,文獻[11]對如何用IDA Pro分析物聯(lián)網(wǎng)惡意樣本給出了總結。其他常用的逆向分析工具還有Angr[12]、Radare2[13]等。
文獻[14-15]提出使用FCG作為惡意樣本相似性比較的主要參數(shù),其中文獻[14]使用優(yōu)化的圖編輯距離算法計算2個FCG圖之間的距離,文獻[15]則使用更多維度的函數(shù)屬性值來作為FCG的節(jié)點屬性,并采用學習優(yōu)化的方法來計算FCG的距離矩陣。
可以看出,提取樣本文件本身的復雜結構特征和語義特征,并對其進行表征和學習,是惡意樣本研究的主流方向。物聯(lián)網(wǎng)惡意樣本出現(xiàn)時間不長,與傳統(tǒng)Window樣本和Android樣本相比又有很多新的特性,如支持的CPU架構平臺多樣等,目前專門針對物聯(lián)網(wǎng)惡意樣本的分類研究還較少。本文借鑒傳統(tǒng)的樣本特征提取方法,同時考慮到物聯(lián)網(wǎng)樣本多平臺問題,提出一種結合圖和文本特征,以及結合無監(jiān)督學習和有監(jiān)督學習的樣本分類方法。
2019年5月至2020年5月,在某運營商網(wǎng)絡中一共捕獲到157 911個傳播的物聯(lián)網(wǎng)惡意樣本。通過對這些惡意樣本進行大規(guī)模靜態(tài)逆向分析,包括其支持的CPU架構、加殼方式、漏洞利用傳播方式等,形成了一套物聯(lián)網(wǎng)惡意程序標注數(shù)據(jù)集。分析流程如圖1所示。
圖1 樣本分析處理示意圖Fig.1 Schematic diagram of sample analysis and processing
雖然物聯(lián)網(wǎng)設備的硬件形態(tài)及CPU架構多種多樣,但是惡意程序的主要攻擊目標是操作系統(tǒng)基于Linux內(nèi)核的設備,因此物聯(lián)網(wǎng)惡意樣本的形態(tài)主要為Linux下的ELF可執(zhí)行文件。黑客在制造惡意程序時,一般都會交叉編譯成多個版本的ELF文件同時發(fā)布,以支持不同的CPU架構。根據(jù)所有樣本的統(tǒng)計,其支持架構分布如表1所示。
表1 157 911個惡意樣本CPU架構分布Table 1 Distribution of CPU framework of 157 911 malwares
統(tǒng)計數(shù)據(jù)顯示,物聯(lián)網(wǎng)惡意樣本攻擊最多的為ARM和MIPS設備。可能因為在互聯(lián)網(wǎng)中暴露且經(jīng)常會出現(xiàn)漏洞的物聯(lián)網(wǎng)設備主要是路由器和攝像頭兩大類,其CPU架構主要也是這2種,容易被黑客所青睞。另外統(tǒng)計數(shù)據(jù)還顯示,大部分支持Sparc、PowerPC等架構的樣本,同時也有支持ARM、MIPS和X86等架構的樣本存在。這說明很多的物聯(lián)網(wǎng)惡意程序會同時發(fā)布7~8個版本。發(fā)現(xiàn)某個CPU架構的惡意樣本后,在惡意樣本庫中快速找到跨平臺的其他同源惡意程序,也是大規(guī)模樣本分析的一個基本目標。
通過對惡意樣本加殼進而隱藏相關信息,防止被安全人員逆向分析,是黑客常用的一種對抗手段。大規(guī)模樣本分析特別是靜態(tài)分析,需先解決樣本加殼問題,然而對惡意程序進行脫殼從來就不是一項容易的工作。Windows平臺下的PE樣本和Android平臺下的APK樣本,由于發(fā)展時間較長,存在各種各樣的加殼方式,脫殼對抗難度非常復雜。物聯(lián)網(wǎng)平臺下的ELF樣本,由于大規(guī)模出現(xiàn)的時間相對較晚,情況稍有不同,目前主要采用相對單一的UPX方式進行加殼。
UPX本身是一種開源的文件壓縮方式,惡意程序編寫者們會通過改寫UPX文件頭的各種參數(shù)來防止解壓。文獻[5]中對2017—2018年捕獲的10 548個ELF樣本進行統(tǒng)計,發(fā)現(xiàn)只有3.8%的惡意程序使用了UPX 加殼。本文對2019年5月至2020年5月捕獲的157 911個惡意樣本進行分析發(fā)現(xiàn),其中有超過37%的惡意樣本采用了UPX加殼,詳情如表2所示。
表2 物聯(lián)網(wǎng)惡意樣本加殼方式Table 2 Packers of IoT malware
因此從長期來看,黑客會采用更多樣、更復雜的方式對ELF文件加殼,這將是安全人員長期面臨的一項對抗與挑戰(zhàn)。
早期的物聯(lián)網(wǎng)惡意樣本,如2016年在美國爆發(fā)的Mirai,主要采用SSH密碼爆破的方式進行植入和傳播。隨著黑客技術的演進和攻防對抗的升級,越來越多的物聯(lián)網(wǎng)惡意程序開始利用設備的漏洞進行植入和傳播。2019年5月披露的Echobot系列樣本[16]使用了多達70個已知的漏洞利用進行傳播。2020年3月,筆者團隊發(fā)現(xiàn)有Fbot的惡意樣本開始利用0-day漏洞進行傳播。
針對所有捕獲的樣本進行漏洞利用分析,在其中的68 648個樣本中發(fā)現(xiàn)有已知漏洞利用行為,共計發(fā)現(xiàn)超過200種物聯(lián)網(wǎng)漏洞利用行為,其中最常用的物聯(lián)網(wǎng)漏洞有CVE-2017-17215等。統(tǒng)計前10個利用最多的漏洞,詳情如表3所示。
表3 樣本10大漏洞利用統(tǒng)計Table 3 Statistics of top 10 vulnerability exploited in malware
另外,筆者團隊發(fā)現(xiàn)物聯(lián)網(wǎng)惡意樣本在網(wǎng)絡中傳播時會使用特定的文件名,如Hajime家族[6]主要采用“.i”的文件名進行傳播,最新的Mozi系列樣本[7]使用了“Mozi.a”和“Mozi.m”的文件名。圖2顯示了2個典型Mozi樣本的邏輯結構,分別是“Mozi.a”和“Mozi.m”,具有不同的CPU架構,但是具有相似的邏輯結構。
圖2 兩個Mozi樣本的FCG示意圖Fig.2 Schematic diagram of FCG of two Mozi samples
樣本傳播方式包括傳播文件名和漏洞利用手法,是標注數(shù)據(jù)集時參考的一項主要參數(shù)。
在惡意樣本識別和分類研究中,目前使用最多的數(shù)據(jù)集是2015微軟惡意樣本分類挑戰(zhàn)賽數(shù)據(jù)集[17],其中的惡意程序主要是Windows平臺下的PE文件,包含9類共21 704個惡意程序。而針對物聯(lián)網(wǎng)惡意樣本的研究,目前并沒有一個公認的數(shù)據(jù)集。
根據(jù)捕獲到的惡意樣本文件,以及相關的傳播地址、C2地址等威脅情報信息,同時參考病毒檢測引擎平臺VirusTotal[8]的樣本檢測結果和部分人工分析結果,標注了一套物聯(lián)網(wǎng)惡意樣本數(shù)據(jù)集,作為后續(xù)進行大規(guī)模樣本分類研究的基礎。如此規(guī)模的數(shù)據(jù)集標注,無法依賴人工分析手動完成,須通過自動識別和關聯(lián),因此數(shù)據(jù)集的標注要求至少滿足以下2個條件:①樣本能夠通過程序自動脫殼并成功提取到靜態(tài)編譯信息,以滿足后續(xù)的特征處理要求;②樣本有相關的關聯(lián)威脅情報信息,如樣本使用的傳播文件名和傳播地址、樣本在VirusTotal[8]上有檢索結果等信息,用來確定該樣本是哪個具體的家族或者分支。但是在捕獲的所有樣本中,其中有大部分樣本或是無法進行自動脫殼,或是無法關聯(lián)到相關信息,因此無法對其進行標注并納入到標注數(shù)據(jù)集中。最終從157 911個物聯(lián)網(wǎng)惡意樣本中成功標注了12 278個樣本,作為標注數(shù)據(jù)集進行分類實驗。包括9個類別,覆蓋ARM、MIPS、X86三種CPU架構,如表4所示。數(shù)據(jù)集中的樣本都是已脫殼并能通過反編譯工具提取出靜態(tài)特征信息。
表4 物聯(lián)網(wǎng)惡意程序標注數(shù)據(jù)集Table 4 Labeled IoT malware dataset
數(shù)據(jù)集中的類別與惡意樣本的家族并不是一一對應關系,而是某一家族樣本的某類具體分支。即使同一個樣本,在VirusTotal上不同引擎也會給出不同的家族標簽,而目前物聯(lián)網(wǎng)惡意代碼的家族判定并沒有統(tǒng)一的標準。本文目標不是研究樣本的惡意性判定或者家族判定,而是研究如何對已發(fā)現(xiàn)的大量IoT惡意樣本進行更詳細的分類,找出具有同類行為的分支,并對其進行更深入的追蹤,從而溯源攻擊組織、發(fā)現(xiàn)具有高級威脅的未知樣本等。
惡意樣本分析,一般來說有靜態(tài)分析和動態(tài)分析2種方法。靜態(tài)分析主要通過反匯編反編譯,提取二進制文件的語義和語法信息;動態(tài)分析則是通過在虛擬環(huán)境下運行可執(zhí)行程序,獲得各類運行狀態(tài)行為信息。目前,物聯(lián)網(wǎng)惡意程序支持的設備種類眾多,缺乏成熟的動態(tài)執(zhí)行環(huán)境。本文主要采用靜態(tài)分析的方法提取函數(shù)調用關系圖、函數(shù)反匯編代碼、字符文本等特征,主要分析流程如圖3所示。
圖3 樣本特征提取與分類方法示意圖Fig.3 Schematic diagram of sample feature extraction and classification method
FCG是能夠從整體上直接反應惡意樣本邏輯結構的一種表示。它是一類典型的圖結構G(node,edge),node表示惡意樣本中的函數(shù),edge表示函數(shù)之間的調用關系,edge是有向邊。圖2顯示了2個同分支的樣本,分屬不同的CPU架構,但具有相似的FCG結構和函數(shù)結構。圖中:節(jié)點編號代表了函數(shù)的排列序號,樣本總計有400多個函數(shù)節(jié)點,為方便表示只標記了從起點函數(shù)開始的前3層調用節(jié)點。
能否成功從樣本中還原出FCG圖,取決于2個因素:①樣本沒有加殼或者能夠成功解殼;②樣本沒有使用外部動態(tài)鏈接庫。本文數(shù)據(jù)集都進行了脫殼處理,而且都僅使用靜態(tài)鏈接的樣本。另外,根據(jù)對物聯(lián)網(wǎng)樣本庫的統(tǒng)計,目前僅有3.2%的樣本使用了動態(tài)鏈接庫。
對惡意樣本直接進行靜態(tài)逆向得到的FCG圖,通常不是一個連通圖。例如,很多物聯(lián)網(wǎng)的惡意程序都有一個初始化函數(shù)init_func,其表示的節(jié)點在圖中是個獨立的節(jié)點。根據(jù)對樣本庫的統(tǒng)計數(shù)據(jù)顯示,最大連通子圖中的節(jié)點個數(shù)占整個圖的節(jié)點個數(shù)比率的分布區(qū)間為93.2% ~99.1%,平均值為96.7%。選取G(node,edge)的最大連通子圖作為惡意程序的函數(shù)調用圖近似表示Gfcg,可以認為Gfcg就是惡意程序的邏輯結構表示。
本文針對數(shù)據(jù)集中的12 278個不同的惡意程序文件進行分析提取,得到1 323個不同的Gfcg文件。這表明很多惡意樣本具有同樣的Gfcg,樣本的邏輯結構是完全一致的,惡意樣本的編寫者們只是進行了一點簡單修改,如修改C2地址或對某個函數(shù)的功能進行升級等,再重新編譯作為一個新的惡意程序發(fā)布。以數(shù)據(jù)集中的第4類Josho樣本為例,有2個MD5值不同的樣本,其樣本MD5值分別為:“aeb9d28e524694e5ef5eb6275 ef53b05”和“90e2ab9037c9b18cb2ea83c5f3862ee6”(VirusTotal[8]上均可以檢索到樣本相關信息),文件大小分別為56 584 Byte和58 180 Byte。通過靜態(tài)分析提取得到的這2個樣本的函數(shù)調用關系Gfcg完全一樣,而這樣的情況在同一類樣本中大量出現(xiàn)。由此可以看出,Gfcg圖是一種能夠快速識別和分類相似惡意樣本的方法。
進一步,如果加上節(jié)點屬性,也就是函數(shù)的屬性,就可以得到惡意程序的邏輯結構及語義表示,形成屬性函數(shù)調用圖,用Gafcg表示。
惡意樣本是一類可執(zhí)行的二進制文件,而函數(shù)是二進制文件的基本邏輯單元。針對二進制文件中的函數(shù)屬性提取和學習是逆向靜態(tài)分析的一個重要研究方向,尤其是漏洞挖掘樣本關聯(lián)分析等。很多安全分析人員直接根據(jù)函數(shù)的hash值進行分析[18];也有使用函數(shù)控制流圖信息來進行大規(guī)模二進制分析[19],如漏洞挖掘固件組件分析等;文獻[20]使用BERT深度學習框架學習函數(shù)的特征。
與以上方法不同,本文使用一種相對高效且跨平臺的方式來學習函數(shù)的向量化表示。先對惡意程序進行靜態(tài)逆向得到函數(shù)的一段反匯編碼。在反匯編代碼中,一般包含API調用(系統(tǒng)或外部調用)和本地匯編操作。一個典型的本地匯編操作包含操作指令和地址或變量。其中地址或變量是動態(tài)執(zhí)行相關的,通過靜態(tài)逆向分析得到的值參考意義有限,因此重點關注操作指令。把函數(shù)轉換成一段包含操作指令和API調用的序列。
不同CPU架構的指令集規(guī)模不一樣,統(tǒng)計157 911個物聯(lián)網(wǎng)惡意樣本用到的指令,按照CPU架構類別統(tǒng)計,如表5所示。更進一步,為了解決函數(shù)屬性跨平臺統(tǒng)一表示的問題,參考文獻[21-22]的方法,將操作指令統(tǒng)一為中間語言表示。定義20個不同的操作類型,根據(jù)指令類別和在樣本中出現(xiàn)的頻率,將不同CPU架構的指令映射到這20類中,將API調用映射為另外1類。目前,僅對物聯(lián)網(wǎng)惡意樣本中最常見的3種CPU架構,也是樣本集中涉及到的3種CPU架構,即ARM、MIPS、X86做了映射和統(tǒng)一表示。
表5 惡意樣本中常用的3種CPU架構指令集數(shù)量Table 5 Number of instruction set commonly used in malware with three CPU framewor ks
提取的函數(shù)屬性值是一段有序的數(shù)值序列A,序列中的數(shù)值為1~21的數(shù)。通過對序列A學習的向量作為函數(shù)的屬性值。進一步,將函數(shù)與Gafcg中的節(jié)點對應起來,并將函數(shù)屬性值作為節(jié)點的屬性值,得到樣本的Gafcg表示。從樣本中一共提取出了1 323個不同的Gafcg文件。
物聯(lián)網(wǎng)惡意程序在編譯連接生成ELF格式的可執(zhí)行文件時,會將很多字符串一起打包到可執(zhí)行文件中。這些字符串一般包括本地的操作命令、密碼表、遠程通信命令等信息。通過反匯編提取惡意程序可執(zhí)行文件的字符信息,從而來判斷惡意程序的行為,是逆向分析時的一個基本手段,如提取惡意程序外聯(lián)的C2地址、惡意程序傳播時利用的漏洞、使用的爆破密碼表等。字符串包含了豐富的信息,對其內(nèi)容進行表示學習和分類,可以更好地對惡意程序進行識別和分類。
從惡意程序提取出來的字符串是按行排列的,每一行代表一類操作或者一類命令,行與行之間是上下文無關的。對樣本提取原始的字符串,再進一步重排序處理,得到8 590個不同的字符串文本文件malware_string。
樣本集中的樣本個數(shù)是12 278個,提取出來的不同的Gafcg文件是1 323個,不同的字符串文本文件是8 590個。字符串文本文件和Gafcg文件的數(shù)目并不一致,多個樣本可能對應同一個Gafcg文件,卻對應不同的字符串文本文件。因為同一個樣本進行修改再編譯發(fā)布時可能不改變函數(shù)邏輯結構FCG,卻會修改字符串文本文件,所以樣本分類時,將主要參考FCG圖和AFCG圖等邏輯結構信息,字符串文本特征作為輔助。進一步對字符串文本進行映射和處理后,從樣本集中一共提取到1 323個不同的字符串文本文件。
從物聯(lián)網(wǎng)惡意樣本中提取出來的特征是包括圖和文本等信息的復雜結構特征,無法直接使用這些特征來進行惡意樣本的分類任務。因此,使用圖表示學習和文本表示學習的方法,將惡意樣本的特征轉換成統(tǒng)一的向量表示。
針對實際場景設計了9組分類方法實驗,驗證從惡意樣本中提取和學習到的特征的有效性。
文獻[14-15]用惡意樣本的FCG圖進行分類判定,兩兩計算2個圖之間的編輯距離,再以此為基礎構建和優(yōu)化相似性模型。本文做法與之前的方法不同,使用圖表示學習的方法,將FCG圖通過表示學習直接映射到一個向量空間中。
圖表示學習,目前主要有基于核函數(shù)的方法和圖神經(jīng)網(wǎng)絡方法兩大類。圖神經(jīng)網(wǎng)絡方法更適合學習節(jié)點的特征用于節(jié)點分類任務,而針對整個圖的分類任務,則使用圖核函數(shù)的方法更多。目前,常見的圖核函數(shù)有基于隨機游走的核函數(shù)、基于路徑的核函數(shù)、基于子樹結構的核函數(shù)等。
對圖的整體結構捕獲和表達能力最好的是基于子樹結構的WL_Subtree核函數(shù)[23],其是一種快速計算的子樹核,由多步迭代計算完成。
圖表示學習對象為:無節(jié)點屬性的FCG圖和包含節(jié)點屬性的AFCG圖。從樣本數(shù)據(jù)集中一共提取出1 323個不同的圖,圖的節(jié)點規(guī)模分布區(qū)間為212~3 226,均值為372。對FCG圖Gfcg和AFCG圖Gafcg分別進行圖表示學習,得到2組特征向量V1和特征向量V2,如式(1)、式(2)所示,其中kWL_SubTree表示W(wǎng)L_Subtree核函數(shù):
目前,文本學習方法主要有輕量級的TF-IDF、Word2vec[24]等簡單模型,也包括像BERT[20]深度學習框架等較為復雜的模型。TF-IDF實現(xiàn)相對簡單,較為容易理解,不足在于沒有考慮特征在樣本間分布情況,難以適用于惡意樣本分類場景。BERT深度學習框架能夠梳理出連續(xù)文本的內(nèi)在聯(lián)系和語言結構,但對數(shù)據(jù)規(guī)模及模型大小要求非??量?,一般適用于大規(guī)模海量的數(shù)據(jù)場景中。
學習對象為惡意樣本提取出來的字符串形式的文本標記為malware_string,其大小分布一般在5 KByte至50 KByte之間,樣本中需要用來進行下游分類任務的文本malware_string的數(shù)量為1 323個。綜合性能和效率考慮,同時能夠更好地利用隱藏在樣本序列中的語義和語法信息,引入Doc2vec[25]方法進行向量特征提取。Doc2vec方法是一種無監(jiān)督算法,可從變長的惡意樣本字符文本中學習得到固定長度的特征表示,既可克服詞袋模型中沒有語義的缺點,又能接受不同長度的惡意樣本做訓練,并表征為向量。利用Doc2vec方法進行向量特征學習過程,主要包括去噪、訓練及推斷等3個步驟,如圖4所示。在Doc2vec方法中,首先在去噪過程中通過預處理剔除了一些惡意文本中噪聲數(shù)據(jù),將惡意文本庫的格式修剪統(tǒng)一;其次在訓練過程中,主要期望在已知的惡意文本訓練數(shù)據(jù)中得到惡意字符串的詞向量、softmax的參數(shù)、惡意文本段落向量或句向量以進行后續(xù)推斷操作;最后在推斷過程中,主要利用已有信息,推斷后續(xù)新的段落向量表達形式,得到惡意文本的向量表達形式。最終通過Doc2vec方法學習到的惡意文本向量表達記為特征向量V3,如下:
圖4 基于文本表示學習的向量特征學習Fig.4 Vector characteristic learning based on text representation learning
設計的分類實驗是二分類學習,對應的實際場景是:如果已知某一物聯(lián)網(wǎng)惡意樣本家族分支的系列樣本后,能否通過學習的方法,快速地從樣本庫中或者新發(fā)現(xiàn)的樣本找出同類的樣本。將樣本集中的每一類樣本分別標記為正例樣本,樣本集中的其他樣本標記為負例樣本,做二分類學習和判定。分類算法使用SVM。
SVM是基于超平面分類線性可分的假設,通過學習和優(yōu)化得到一個超平面分類器。假設有N個訓練集{(x1,y1),(x2,y2),…,(xN,yN)},xi∈Rd,yi∈{-1,1}。假設空間為超平面(a,b),a為權重向量,b為偏差,對一個新輸入的數(shù)據(jù)x可以用如下分類:該分類問題是個不平衡分類問題,正例樣本的個數(shù)遠小于負例樣本的個數(shù),實際場景中也是如此。因此,更關注正例樣本是否被正確標記,把召回率R作為主要參考的評價指標,同時參考F1值,指標如式(5)和式(6)所示。其中TP表示被正確標記正例樣本,F(xiàn)P表示被錯誤標記的正例樣本,F(xiàn)N表示被錯誤標記的負例樣本。
選3種不同的樣本特征作為分類學習的算法輸入,分別使用從樣本FCG 圖學習到的向量V1(1)、從樣本AFCG圖向量學習到的向量V2(2)、V2和從樣本的惡意文本學習到的向量V3(3)相結合。不同的特征選擇,代表了不同的樣本表征能力。實驗中,將訓練集和測試集劃分為0.8和0.2,最終選取多次實驗的平均值作為最終指標。實驗結果如表6所示。
表6 不同特征和類別的分類召回率及F 1 值Table 6 Classification r ecall rate and F 1 value with different features and categories
實驗結果顯示,樣本分類平均召回率達到88.1%,說明從樣本中提取的特征是有效的,通過表示學習得到的向量,可以很好地從整體上表征惡意樣本。實驗結果還顯示,使用的特征越多,分類效果越好,說明如果能夠從樣本中提取出更多能表達樣本邏輯結構和語義信息的特征,更有助于提高分類的效果。
實驗中的9組分類實驗,分別對應數(shù)據(jù)集中9個不同的樣本家族分支類別。其中除了第2組Mozi分支以外,其他8個分支均由Mirai家族演化而來。其中第4組和第9組的樣本分類召回率較低,分別是JoSho家族分支的74%和Owari家族分支的73%。對這2個家族分支的部分樣本進行人工逆向分析,發(fā)現(xiàn)其樣本中大量借鑒了Mirai的開源源碼。例如,屬于JoSho家族分支的MD5值為“aeb9d28e524694e5ef5eb6275ef53 b05”的樣本,和屬于Owari家族分支的MD5值為“46a4cea56dafbfecd0981a7d411508c9” 的 樣 本(VirusTotal[8]上均可以檢索到樣本相關信息),通過對這2個樣本進行人工逆向分析發(fā)現(xiàn),其與Mirai源代碼的差異性不到10%。而這2個樣本在這2類家族分支具有典型性,在該家族分支中分別存在多個與這2個樣本相似的樣本。這說明這2個家族分支在樣本中自己進行編碼的部分并不多,也就是說沒有很明顯的樣本分支特征,從而導致分類效果不是很理想。
實驗結果顯示,其余7組家族分支的樣本檢出率均超過了0.8,其中1組的檢出率為1.0,說明本文樣本分類方法能夠對大部分的樣本家族分支進行正確地分類,實現(xiàn)對不同家族分支的樣本進行追蹤分析的目標。
目前,針對物聯(lián)網(wǎng)惡意樣本的大規(guī)模分類研究屬于剛剛起步階段,本文根據(jù)實際工作中捕獲到的物聯(lián)網(wǎng)惡意樣本,進行了大規(guī)模分析和分類的嘗試:
1)對所有樣本進行了分析和統(tǒng)計,并結合外部威脅情報特征和人工分析,標注了一套物聯(lián)網(wǎng)惡意樣本數(shù)據(jù)集。
2)通過靜態(tài)逆向分析提取特征和學習特征,在標注的樣本數(shù)據(jù)集上進行分類實現(xiàn),效果表現(xiàn)優(yōu)異,達到了平均88.1%的召回率。
3)該樣本分類方法在實際工作中取得了較好的效果,能夠持續(xù)地自動標注新的樣本。
在實際工作中,筆者一直在持續(xù)跟蹤Mozi系列的樣本[7],即標注數(shù)據(jù)集中的第2類,通過數(shù)據(jù)集訓練生成的分類器,從原來的樣本庫中識別出了數(shù)十個之前未曾被標記的Mozi系列樣本,并通過后續(xù)進一步的人工分析一一確認,通過分類器自動標記的Mozi樣本是有效的。進一步,該方法已經(jīng)用在后續(xù)的日常樣本分析中,將每天新發(fā)現(xiàn)的樣本進行自動分類和標注。
惡意樣本分析和分類與其他領域(如圖像識別分類等)不同,其研究對象惡意樣本是由黑客制造出來,對象的性質會由于黑客持續(xù)對抗而變化。對樣本的特征提取會由于加殼等技術的升級而變得日益困難,特征的表達能力可能也會由于使用代碼混淆等高級對抗手法而受到影響。筆者將深入挖掘樣本多個維度的特征,并結合安全專家知識,對物聯(lián)網(wǎng)惡意樣本分類問題進行持續(xù)研究。