黃 娜,何涇沙,吳亞飈
(1. 北京天融信科技有限公司 北京 海淀區(qū) 100085;2. 北京工業(yè)大學(xué)信息學(xué)部 北京 朝陽區(qū) 100124)
基于文件格式漏洞的攻擊行為是網(wǎng)絡(luò)安全的主要威脅之一。文件格式往往具有跨平臺(tái)的特點(diǎn),一旦漏洞被利用,各類目標(biāo)主機(jī)都可被輕易攻破。文檔類的文件格式,如doc、docx、xls、pdf,在日常工作與生活中傳播廣泛,是藏匿和傳播惡意行為的重要媒介,由此引起的安全事件不勝枚舉。據(jù)Cisco 發(fā)布的《2018 年度網(wǎng)絡(luò)安全報(bào)告》統(tǒng)計(jì),在2017 年間,惡意郵件附件中最普遍的3 種文件格式為Office 文檔(38%)、壓縮文件(37%)以及PDF文件(14%)。
PDF 文件格式是由Adobe 公司于1993 年制定的一種電子文檔分發(fā)開放式標(biāo)準(zhǔn),具有以下優(yōu)點(diǎn):1) 靈活的層次結(jié)構(gòu),可以封裝文字、圖像、字體格式、超鏈接、聲音、影像等眾多信息;2) 跨平臺(tái)的特性,在各類操作系統(tǒng)中通用。正是由于這些突出的特點(diǎn),使得PDF 文件在為我們帶來便利的同時(shí),也為黑客提供了可乘之機(jī)。從攻擊角度來看,惡意PDF 文件可分為兩種類型:1) 利用PDF文檔規(guī)范本身存在的漏洞,如字典中相同key 值對(duì)應(yīng)不同value、對(duì)象號(hào)錯(cuò)誤引起誤識(shí)別,以及利用ASCII 編碼隱藏關(guān)鍵節(jié)點(diǎn)等;2) PDF 文件中攜帶惡意內(nèi)容分為4 種具體情況,即嵌入惡意JavaScript代碼、嵌入惡意文檔、嵌入惡意遠(yuǎn)程鏈接以及嵌入惡意軟件。
PDF 文件數(shù)量十分龐大,且具有統(tǒng)一的文件格式規(guī)范,便于提取出結(jié)構(gòu)化特征,因此機(jī)器學(xué)習(xí)技術(shù)在惡意PDF 檢測(cè)中有良好的應(yīng)用條件及效果。本文首先回顧惡意PDF 檢測(cè)研究現(xiàn)狀,對(duì)其中存在的混淆和逃逸問題進(jìn)行闡述;然后針對(duì)混淆和逃逸設(shè)計(jì)完善的特征組合,包括內(nèi)容特征、結(jié)構(gòu)特征以及邏輯樹的間接結(jié)構(gòu)特征,提高檢測(cè)模型的性能。
從物理意義上看,PDF 文件由文件頭、對(duì)象集合、交叉引用表以及文件尾組成。文件頭中儲(chǔ)存該P(yáng)DF 遵循的規(guī)范版本。對(duì)象集合包括文檔包含的所有對(duì)象,每個(gè)對(duì)象都以obj 作為開頭標(biāo)志,endobj 作為結(jié)尾標(biāo)志,中間為對(duì)象所包含的字段、子對(duì)象、流內(nèi)容等。交叉引用表是PDF 文件內(nèi)部的重要組織方式,用戶可以直接訪問某對(duì)象,以xref 作為開頭標(biāo)志。文件尾以trailer 為開頭標(biāo)志,包含一些鍵值對(duì)形式的文檔描述信息,如所有對(duì)象的數(shù)量、文檔的作者、創(chuàng)建時(shí)間、ID 等。
從邏輯意義上看,PDF 文件為樹形結(jié)構(gòu),如圖1 所示,Catalog 為字典類型的根節(jié)點(diǎn),包含Outlines、Pages 等子對(duì)象節(jié)點(diǎn)。其中,Pages 本身為字典型數(shù)據(jù)結(jié)構(gòu),是所有頁面的集合入口,包括Count、Kids、Parent、Type 等字段,Kids 包含描述頁面信息的Page 對(duì)象或PagesTree 對(duì)象。除Pages 之 外,Catalog 字 典 中 還 有Type、Version、PageLabels、PageLayout、AA 等對(duì)象節(jié)點(diǎn),表1 描述了部分關(guān)鍵對(duì)象及其意義。
圖1 邏輯結(jié)構(gòu)示例
表1 Catalog 字典中常見的對(duì)象
文獻(xiàn)[1]結(jié)合使用動(dòng)態(tài)特征與靜態(tài)特征進(jìn)行惡意PDF 檢測(cè),提取動(dòng)態(tài)API 調(diào)用特征,在選擇靜態(tài)特征時(shí),對(duì)文檔結(jié)構(gòu)中的關(guān)鍵字出現(xiàn)頻次使用KMeans 聚類,選出正常樣本的關(guān)鍵字集合以及惡意樣本的關(guān)鍵字集合[1]。在基于機(jī)器學(xué)習(xí)的檢測(cè)方法中,所用的靜態(tài)特征可分為邏輯結(jié)構(gòu)特征和物理內(nèi)容特征兩類。物理內(nèi)容特征包括元數(shù)據(jù)特征和具體內(nèi)容特征等;邏輯結(jié)構(gòu)特征包括節(jié)點(diǎn)路徑特征、節(jié)點(diǎn)數(shù)量特征等。各類方法的歸納分類如圖2 所示。
圖2 現(xiàn)有方法分類
元數(shù)據(jù)包括版本、作者、創(chuàng)建時(shí)間、編碼方式等直接信息,以及文件大小、頁面數(shù)目等間接信息。文件具體內(nèi)容特征是指根據(jù)PDF 文件中具體內(nèi)容提取的特征,如流內(nèi)容的序列特征、熵、JavaScript 代碼的特征等。PDF 中的JavaScript 代碼容易成為惡意行為的載體,是一種比較廣泛的攻擊方式。文獻(xiàn)[2]通過分析PDF 文檔中的JavaScript對(duì)象來檢測(cè)惡意PDF。這種方法雖具有可靠的準(zhǔn)確性,但對(duì)于非嵌入JavaScript 類型的惡意PDF 檢測(cè)無效。
目前常用的邏輯結(jié)構(gòu)特征主要包括節(jié)點(diǎn)的路徑特征和數(shù)量。文獻(xiàn)[3-4]提出了Bag-of-Path 方法,即使用節(jié)點(diǎn)路徑作為特征,路徑葉子節(jié)點(diǎn)的值經(jīng)過數(shù)值化等處理作為相應(yīng)的特征值。該方法直接利用對(duì)象路徑反映PDF 文檔包含的對(duì)象特性及內(nèi)容,不容易受混淆影響,但提取過程較為復(fù)雜,使得檢測(cè)效率較低,難以適用于實(shí)時(shí)檢測(cè)環(huán)境。文獻(xiàn)[2]提出的PDFMS(PDF malware slayer),將PDF 中存在的對(duì)象節(jié)點(diǎn)的數(shù)量作為特征,提取過程簡(jiǎn)便,但沒有將正常PDF 文檔中一些常見的對(duì)象數(shù)量作為判別特征。
物理內(nèi)容特征和邏輯結(jié)構(gòu)特征能從不同的方面反映惡意PDF 和正常PDF 的區(qū)別,文獻(xiàn)[5-7]將兩者結(jié)合,常用的機(jī)器學(xué)習(xí)算法,如支持向量機(jī)(support vector machine, SVM)、決策樹(decision tree,DT)以及隨機(jī)森林(random forest, RF)等,都有相應(yīng)的研究及應(yīng)用。文獻(xiàn)[8]從VirusTotal 收集了2008 年?2019 年間的正常及惡意PDF 樣本,直接將原始的PDF 文件輸入卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)進(jìn)行分類檢測(cè),取得了94%的檢測(cè)準(zhǔn)確率。
隨著機(jī)器學(xué)習(xí)安全問題逐漸引起重視,惡意PDF 檢測(cè)領(lǐng)域也出現(xiàn)了關(guān)于防御對(duì)抗的研究[9],旨在增強(qiáng)檢測(cè)模型的魯棒性。文獻(xiàn)[10]為了防御惡意樣本逃逸SVM 模型的檢測(cè),分別提取正常和惡意PDF 樣本集合中的高頻節(jié)點(diǎn)作為特征,通過增加正常節(jié)點(diǎn)對(duì)惡意PDF 進(jìn)行偽裝,將生成的逃逸樣本加入SVM 分類器的訓(xùn)練,經(jīng)過3 次迭代后,分類器能夠完全檢測(cè)出這類逃逸樣本。文獻(xiàn)[11]提出了防御特征加法攻擊的集成決策樹方法,但沒有給出特征加法攻擊中的具體特征。
除了增加正常節(jié)點(diǎn)的逃逸方式外,在對(duì)大量惡意PDF 進(jìn)行分析之后,發(fā)現(xiàn)還存在利用PDF 規(guī)范漏洞的混淆和逃逸手段。利用這幾種方式,惡意PDF 文檔中的關(guān)鍵對(duì)象能逃逸現(xiàn)有檢測(cè)方法,但依然能夠在目前計(jì)算機(jī)中正常執(zhí)行。
1) 對(duì)象號(hào)重寫。對(duì)于對(duì)象號(hào)重復(fù)的情況,大部分解析器只讀取對(duì)象號(hào)相同的最后一個(gè)對(duì)象。
2) 對(duì)象隱藏。對(duì)象隱藏在文件尾(trailer)中,能逃避目前大部分的解析方法,但隱藏在trailer 中的對(duì)象依然能正常執(zhí)行。另外,在PDF 文檔body 內(nèi),ObjStm可以將對(duì)象壓縮或加密為流(stream),若不對(duì)ObjStm進(jìn)行解析,則不能讀取壓縮對(duì)象的內(nèi)容。
3) 關(guān)鍵節(jié)點(diǎn)混淆?,F(xiàn)有的一種主流靜態(tài)檢測(cè)方法,是以關(guān)鍵節(jié)點(diǎn)數(shù)量作為特征,但關(guān)鍵節(jié)點(diǎn)可以通過Ascii 編碼混淆,使檢測(cè)器提取出錯(cuò)誤的關(guān)鍵節(jié)點(diǎn)數(shù)量。另外,PDF 嵌入文件有兩種方式:“/Type/EmbeddedFile”與“/EmbeddedFiles”,但現(xiàn)有的相關(guān)方法通常只提取后者的數(shù)量作為關(guān)鍵節(jié)點(diǎn)數(shù)量特征。
4) 對(duì)象無結(jié)束標(biāo)志。正常來說,PDF 中每一個(gè)對(duì)象都是以“obj”作為開始標(biāo)志,以“endobj”作為結(jié)束標(biāo)志。但有些惡意PDF 在關(guān)鍵對(duì)象中刪除結(jié)束標(biāo)志,使得靜態(tài)檢測(cè)方法不能正常讀取該對(duì)象,也就無法提取該對(duì)象的特征。
本文提出了一種改進(jìn)的PDF 靜態(tài)解析方法,能夠更加準(zhǔn)確地提取出靜態(tài)特征,包括預(yù)處理和具體特征提取,對(duì)抗逃逸手段。先對(duì)PDF 文檔預(yù)處理:1) 讀取整個(gè)PDF 文檔的字節(jié)流,搜索ObjStm對(duì)象,其中/filter 節(jié)點(diǎn)中儲(chǔ)存了所采用的編碼算法,如“FlateDecode”,根據(jù)相應(yīng)的算法將對(duì)象解碼并替換原有內(nèi)容;2) 搜索標(biāo)識(shí)對(duì)象類型的節(jié)點(diǎn),檢查是否有Ascii 編碼,若有,對(duì)照Ascii 編碼將其還原;3) 匹配每一個(gè)對(duì)象的開始和結(jié)束標(biāo)志,若沒有結(jié)束標(biāo)志,則將“endobj”添加到該對(duì)象的結(jié)尾處。然后,分別提取PDF 文檔的內(nèi)容特征、結(jié)構(gòu)特征以及邏輯樹間接結(jié)構(gòu)特征。
2.2.1 內(nèi)容特征
本文設(shè)計(jì)及采用的內(nèi)容特征具體見表2。PDF規(guī)范版本號(hào)、文件尾標(biāo)志(“EOF”)數(shù)量、尾部所包含字節(jié)數(shù)是否經(jīng)過修改,根據(jù)這些特征能夠初步判斷一個(gè)PDF 文檔是否符合規(guī)范、是否為偽造PDF。其中,尾部所包含字節(jié)數(shù)能體現(xiàn)出是否有對(duì)象隱藏在尾部。
字節(jié)熵E的計(jì)算方法為:
式中,bi表 示一個(gè)字節(jié), num(bi)表 示字節(jié)bi的數(shù)量;T表示計(jì)算內(nèi)容的字節(jié)總數(shù)。
采用字節(jié)熵值、字節(jié)比例以及對(duì)象數(shù)與文件大小的比例作為特征,能夠分辨攻擊者向惡意PDF中添加的字節(jié)流、對(duì)象節(jié)點(diǎn)及其他無意義內(nèi)容,防止對(duì)檢測(cè)器產(chǎn)生誤導(dǎo)。與正常PDF 相比,惡意PDF 的字節(jié)熵值、流與非流字節(jié)比例、對(duì)象數(shù)與文件大小比例往往較低,因此將其作為判別正常PDF 和惡意PDF 的特征。經(jīng)過實(shí)驗(yàn)證明,關(guān)鍵節(jié)點(diǎn)(如OpenAction、URI 等)數(shù)量在節(jié)點(diǎn)總數(shù)中所占的比例,也是一個(gè)重要的判別特征。
2.2.2 結(jié)構(gòu)特征
惡意PDF 的主要攻擊方式是嵌入JavaScript 惡意代碼、嵌入惡意文件、嵌入惡意鏈接或交互式表單,因此,這4 類相關(guān)對(duì)象的數(shù)量能夠反映文檔是否具有潛在的惡意行為。現(xiàn)有相關(guān)方法通常以JavaScript、OpenAction、URI 等能夠反映出文檔具有潛在惡意屬性的對(duì)象為檢測(cè)重點(diǎn)。正常的PDF文檔通常儲(chǔ)存較多的文字、圖像等,因此包含較多的Encoding、Font、Resources 以及MediaBox 等正常屬性對(duì)象。
Bag-of-Path 方法是將邏輯結(jié)構(gòu)中所存在的葉子節(jié)點(diǎn)的路徑作為特征,能夠表征更加具體的節(jié)點(diǎn)信息以及節(jié)點(diǎn)嵌套關(guān)系,但是該方法的實(shí)現(xiàn)效率較低,且提取的特征維度高。本文基于該方法,將具有相同葉子節(jié)點(diǎn)的路徑合并,提取高頻次節(jié)點(diǎn)的數(shù)量作為結(jié)構(gòu)特征,實(shí)現(xiàn)更加簡(jiǎn)便,且能夠降低特征維度。
為了找出對(duì)惡意檢測(cè)意義較大的關(guān)鍵節(jié)點(diǎn),利用Bag-of-Path 方法提取了數(shù)據(jù)集中所有樣本的路徑,將其中的高頻節(jié)點(diǎn)作為候選特征,節(jié)點(diǎn)數(shù)量作為特征值。根據(jù)本文提出的靜態(tài)解析方法提取結(jié)構(gòu)特征,遇到具有重復(fù)對(duì)象號(hào)的對(duì)象、隱藏在trailer中的對(duì)象,它們所包含的節(jié)點(diǎn)數(shù)量也會(huì)被提取,避免逃逸;將“EmbeddedFile”與“EmbeddedFiles”兩類節(jié)點(diǎn)的數(shù)量合并,作為“EmbeddedFile”特征值。
2.2.3 邏輯樹間接結(jié)構(gòu)特征
完成以上預(yù)處理后,再解析PDF 文件的邏輯結(jié)構(gòu),如圖3 示例,通過解析一個(gè)PDF 文件的邏輯結(jié)構(gòu),生成邏輯結(jié)構(gòu)樹。從尾部入手,采用遞歸的方法遍歷,生成XML 格式的DOM 樹,算法詳細(xì)描述如下。
圖3 PDF 邏輯結(jié)構(gòu)示例
從生成的DOM 樹提取間接的結(jié)構(gòu)特征,具體包括樹的深度和廣度、特殊子樹的深度和廣度、子樹平均廣度、所有節(jié)點(diǎn)的類型數(shù)以及各類節(jié)點(diǎn)的熵。深度是從根節(jié)點(diǎn)到所有子節(jié)點(diǎn)的路徑中,最長(zhǎng)路徑的節(jié)點(diǎn)數(shù);廣度是在樹的所有層中,節(jié)點(diǎn)最多的一層所包含的節(jié)點(diǎn)數(shù)。經(jīng)過對(duì)大量樣本的分析,發(fā)現(xiàn)較多惡意PDF 會(huì)將關(guān)鍵節(jié)點(diǎn)藏匿在一個(gè)較深的分支中,如圖3 所示,因此DOM 樹的深度和廣度是區(qū)分PDF 文檔是否為惡意的一個(gè)有效特征。特殊子樹是根據(jù)正常PDF 和惡意PDF 所包含的節(jié)點(diǎn)對(duì)象的區(qū)別,或者節(jié)點(diǎn)對(duì)象梳理的區(qū)別,確定一個(gè)特殊節(jié)點(diǎn),取出DOM 樹中以該特殊節(jié)點(diǎn)為根節(jié)
使用決策樹算法中的信息增益率評(píng)價(jià)某個(gè)特征在分類任務(wù)中的重要性。將信息增益率表示為:
式中,D表示數(shù)據(jù)集;A表示某個(gè)特征;H(D)為數(shù)據(jù)集中樣本類別的信息熵;H(D|A)為加入特征A作為分類依據(jù)后類別的信息熵; InI(D,A)為特征A內(nèi)部的信息熵,其計(jì)算分別為:
式中,n為數(shù)據(jù)集中的樣本類別數(shù);m為特征A 的取值個(gè)數(shù);pi表 示隨機(jī)取出一個(gè)樣本屬于類別i的概率;p(i|A=a j)則 表示在特征A取值為aj的條件下,隨機(jī)取出一個(gè)樣本屬于類別i的概率。
集成學(xué)習(xí)是目前常用的一種防御對(duì)抗方法,通過融合多個(gè)弱學(xué)習(xí)器來降低攻擊風(fēng)險(xiǎn)。文獻(xiàn)[11]提出使用Adaboost 算法訓(xùn)練集成決策樹,提高惡意PDF 檢測(cè)魯棒性的方法。LightGBM 也是一種采用Boosting 方式的集成學(xué)習(xí)算法,以梯度提升決策樹(gradient boosting decision tree, GBDT)為核心,通過改進(jìn)的生長(zhǎng)策略、分割算法以及并行策略,提高GBDT 的訓(xùn)練效率,降低內(nèi)存占用率。與深度學(xué)習(xí)以及其他集成學(xué)習(xí)算法相比,LightGBM 在并行拓展與運(yùn)行效率上具有明顯的優(yōu)勢(shì),成為工業(yè)界主要應(yīng)用的機(jī)器學(xué)習(xí)算法之一[12]。本文使用LightGBM框架訓(xùn)練GBDT 模型,根據(jù)前面所提取的特征區(qū)分正常和惡意的PDF 文檔。
收集了網(wǎng)絡(luò)環(huán)境中近兩年的正常和惡意PDF樣本各6 000 個(gè),作為實(shí)驗(yàn)數(shù)據(jù)集,如表3 所示。在數(shù)據(jù)集上首先使用Bag-of-Path 方法提取至少出現(xiàn)于1 000 個(gè)樣本中的路徑,找出這些路徑的葉子節(jié)點(diǎn)對(duì)象;然后提取對(duì)象數(shù)量作為結(jié)構(gòu)特征。提取本文設(shè)計(jì)的其他特征,形成71 維特征。圖4 給出了正負(fù)樣本其中4 種特征的分布,可看出明顯差異:特征Ratio 表現(xiàn)為黑樣本的特征值較高,白樣本的特征值較低;特征Root_depth 表現(xiàn)為白樣本特征值較高,黑樣本的特征值較低;特征ObjCount_by_size 表現(xiàn)為黑樣本的特征值高于白樣本特征值;特征Stream_by_nonstream 表現(xiàn)為白樣本特征值高于黑樣本特征值。
圖4 黑白樣本的特征對(duì)比
表3 實(shí)驗(yàn)數(shù)據(jù)集
圖5 展示出所提取的71 維具體特征及它們各自的重要性。可以看出,本文提出的內(nèi)容特征以及DOM 樹結(jié)構(gòu)的間接特征,如關(guān)鍵節(jié)點(diǎn)數(shù)量、節(jié)點(diǎn)總數(shù)比例、根節(jié)點(diǎn)深度、字節(jié)熵、流內(nèi)容字節(jié)數(shù)、字節(jié)比例等的重要性較高;在結(jié)構(gòu)特征中,Resources、ToUnicode、BaseEncoding 等正常屬性的對(duì)象數(shù)量特征,與OpenAction、AA、EmbeddedFile、JavaScript 等具有惡意屬性的對(duì)象數(shù)量特征都具有較高重要性。結(jié)尾標(biāo)志“%EOF”、JBIG2Decode、colors 等13 維特征不具有重要性,因此,在后續(xù)的模型訓(xùn)練中刪除這13 維特征。
圖5 特征重要性
為了對(duì)比改進(jìn)的特征工程方法,按照文獻(xiàn)[4]和文獻(xiàn)[13]使用的特征工程分別提取實(shí)驗(yàn)數(shù)據(jù)集的特征,同樣使用LightGBM 算法訓(xùn)練模型。測(cè)試性能的對(duì)比如表4 所示,可以看出本方法比PDFMS具有更高的AUC 值,與Bag-of-Path 處于同一水平。對(duì)比表5,本方法仍然顯示出更高的準(zhǔn)確性,而且特征維度較低,有利于簡(jiǎn)化模型,在效率上得到提高。
表4 不同方法的AUC 值對(duì)比
表5 不同特征的性能對(duì)比
黑客在制造對(duì)抗機(jī)器學(xué)習(xí)檢測(cè)的惡意PDF時(shí),既要保留PDF 中所嵌入的惡意對(duì)象,又要誤導(dǎo)檢測(cè)模型,因此大多數(shù)的做法是向惡意PDF 中插入一些正常的節(jié)點(diǎn)對(duì)象、內(nèi)容流等,試圖使模型將其誤認(rèn)為正常PDF。如惡意PDF 中obj 數(shù)量少于正常PDF,于是黑客通過增加obj 對(duì)象的方式生成對(duì)抗樣本。在現(xiàn)有惡意樣本的基礎(chǔ)上,統(tǒng)計(jì)惡意PDF 和正常PDF 中各個(gè)對(duì)象的數(shù)量差異,通過增加正常對(duì)象的數(shù)量,生成對(duì)抗樣本測(cè)試集,用于測(cè)試、評(píng)估模型的魯棒性。表6 對(duì)比了模型檢測(cè)無對(duì)抗樣本和有對(duì)抗樣本的性能,精確率降低了0.1%,召回率提高了0.1%,整體準(zhǔn)確率無差別,可以證明該模型防御對(duì)抗手段的魯棒性較為可靠。
表6 對(duì)抗魯棒性測(cè)試結(jié)果
本文改進(jìn)并實(shí)現(xiàn)了PDF 靜態(tài)特征提取方法,能夠提取出更加準(zhǔn)確的靜態(tài)特征,防止混淆和逃逸。實(shí)驗(yàn)驗(yàn)證表明,與現(xiàn)有的其他特征工程相比,本文結(jié)合使用的結(jié)構(gòu)特征、內(nèi)容特征以及邏輯樹間接結(jié)構(gòu)特征,能夠使機(jī)器學(xué)習(xí)檢測(cè)模型實(shí)現(xiàn)較高的準(zhǔn)確性和魯棒性。