杜學繪,林楊東,孫奕
(解放軍戰略支援部隊信息工程大學河南省信息安全重點實驗室,河南 鄭州 450001)
PDF是由Systems[1]在1993年提出的,用于文件交換的一種文件格式,其優點在于跨平臺、能保留文件原有格式、開放標準等。PDF文件格式自被提出以來,就以其高效性、穩定性和交互性而被廣泛應用于政府、組織、企業等重要機構的日常辦公。
自2008年第一個基于惡意代碼的PDF漏洞[2]被提出后,針對PDF文件格式漏洞的利用技術迅速發展。近幾年來,隨著社會工程學和APT(advanced persistent treat)等攻擊手段的興起和發展,PDF格式的漏洞也不斷被挖掘出來,利用嵌入惡意PDF文檔的釣魚郵件,結合社會工程學對政府、組織、企業等進行攻擊的案例也屢見不鮮。
2016年9月,PaloAlto研究中心的安全研究人員首先發現了針對蘋果系統的新型釣魚郵件攻擊,其技術核心在于釣魚郵件中攜帶有木馬病毒的惡意PDF文檔。2017年5月12日,WannaCry勒索病毒軟件借助高危漏洞“永恒之藍”在全球范圍內爆發,攻擊范圍覆蓋醫療、教育、公安等多個行業,影響極其惡劣。相關人士表示,WannaCry勒索病毒主要通過釣魚郵件結合惡意附件進行傳播,然后嵌入文檔、感染文檔并對文檔進行加密。
種種案例表明,釣魚郵件是當前惡意文檔的主要傳播途徑,攻擊者通常將惡意文檔作為郵件附件,結合社會工程學等,誘使用戶打開惡意文檔,從而執行進一步的惡意操作。現有的針對惡意PDF文檔的反病毒系統大多是基于簽名的方法和基于啟發式規則的方法[3],其在應對多態攻擊方面存在一定的缺陷,且無法應對新型安全威脅。為了解決這些問題,近年來,研究工作主要分為以下2個方面:1)著重關注惡意 PDF文檔中的靜態特征,如結構特征、內容元數據特征等,來判別惡意PDF,而不關注其惡意內容及具體的行為操作;2)利用靜態分析和動態分析的方法,針對惡意PDF文檔中的JavaScript特征進行檢測。前一種方法的檢測效果和檢測效率均比后者更優,且可以檢測不包含JavaScript的惡意文檔,然而,這種方法由于選取特征的頑健性較弱,已被證明極易被攻擊者通過簡單的操作而繞過,因此,研究人員又重新關注惡意文檔中JavaScript特征的相關研究。
為了解決現有檢測方案特征頑健性較差、易被逃避檢測的問題,本文提出了一種基于混合特征的惡意PDF文檔檢測方案。該方案采用靜態分析技術從文檔中提取出其常規信息(版本號、大小等)以及其結構信息,采用動態分析技術從文檔中提取出文檔執行時的API(application programming interface)調用信息。對于常規信息,本文根據對文檔的分析結果進行過濾篩選;對于結構信息及API調用信息,本文采用K-means聚類算法對其進行聚類,從中聚合出最能表征文檔惡意性的關鍵結構特征及API調用特征,以此3種特征構成特征向量,利用隨機森林算法構建分類器并最終設計實驗進行驗證。結果表明,本文方法與現有已公開的3種最新檢測工具相比,檢測率和誤報率均有一定提高,且在應對基于特征加法的模擬攻擊上效果較好。
由于 PDF使用起來方便快捷并且支持各類功能,其在我國信息化進程中逐漸成為主流的文檔信息交換的主要格式,但與此同時也成為惡意代碼傳播的主要載體[4]。
一個典型的PDF文檔通常包含豐富的文本、圖像等信息,此外,在PDF中,往往還存在超鏈接、數據交換以及允許其他應用調用的接口等來為PDF文檔的各類功能提供支持。因此,PDF擁有十分復雜的結構特征。
PDF文檔由一組邏輯上相互連接的對象組成,其結構[5]主要包括文件頭(header)、文件主體(body)、交叉引用表(cross-reference table)、文件尾(trailer)和其他可選部分。文件頭主要記錄了該文件使用的PDF結構標準規范,文件主體包括了所有的對象內容,交叉引用表記錄了間接對象的地址索引表,文件尾主要記錄了交叉引用表的物理位置。
文件頭位于PDF文檔的最前端,指定了文件使用的PDF規范的版本,如“%PDF-1.7”表示該PDF文檔使用PDF 1.7版本的規范。需要注意的是,文件頭可以被放置在PDF文件的前1 024 B中的任意位置。
文體主體由文件頭和交叉引用表之間的所有對象組成,這些對象共同構成了PDF文件的具體內容,如頁面、文本、鏈接、圖像等。
交叉引用表為間接對象的隨機存取提供了索引地址表,它的一個重要作用是保證了在整個PDF文件被完整加載之前,可以將部分文檔先進行顯示。對于一個PDF文檔而言,其交叉引用表會隨著PDF文件的更新而更新,不斷添加新的內容。
文件尾位于文件的結尾,以“trailer”為起始標志,指定了交叉引用表以及一些特殊對象的物理地址,并以“%%EOF”為結束標志。
惡意 PDF文檔檢測技術已有一定的基礎。目前,對惡意PDF文檔檢測的分析方法主要有2種類型,即靜態分析和動態分析。靜態分析主要針對PDF文檔中的靜態特征,利用反編譯的手段從文檔中解析出結構、內容、JavaScript代碼等特征,并以此建立惡意PDF文檔檢測模型;動態分析則是利用虛擬機、硬件模擬等技術,通過API掛鉤等手段對惡意PDF文檔及其內嵌代碼的動態執行進行監控,并以此建立PDF文檔行為檢測模型。
早期的惡意文檔檢測,普遍使用靜態分析的方法。2007年,Li等[6]首次提出了利用機器學習結合n-gram分析對原始文檔進行字節級分析,然而這些方法主要針對word文檔、可執行文件(exe)等,并未在PDF文檔檢測方面進行嘗試,其主要原因在于受編碼、過濾和加密等技術的影響,無法定位到PDF文檔中的主要特征。隨著惡意PDF文檔的危害性不斷增強,后續的研究工作著重分析PDF文檔中的JavaScript代碼特征。
PDF文檔中的JavaScript代碼特征主要有2類,即動態行為特征和詞匯特征。針對JavaScript代碼的動態行為特征分析已經提出了許多解決方案,并設計出了 CWSandbox[7]、JSand[8]、Cujo[9]、Zozzle[10]、Prophiler[11]等多種 JavaScript代碼分析工具,被廣泛用于不同格式的文檔中嵌入式JavaScript代碼的檢測,在此基礎上形成了MalOffice[12]、ShellOS[13]、MDscan[14]等檢測系統。然而,利用虛擬環境對JavaScript進行分析的時間開銷和計算開銷都較高,且攻擊者可以利用不同的JavaScript引擎或不同的閱讀器版本等來繞過檢測。為了降低開銷,研究人員逐漸關注于對JavaScript代碼的靜態詞匯分析,通過解析器,對PDF文檔中的JavaScript進行定位和提取,隨后利用分類器進行學習,形成檢測模型,典型的代表有PJScan[15]等。
然而,在針對PDF文件中JavaScript代碼特征的分析過程中,由于存在壓縮、加密、混淆等技術手段,JavaScript代碼的定位、抽取及解析始終具有較大難度,因此,針對元數據[16-17]的分析方法應運而生。基于元數據特征檢測的特征抽取過程一般較為簡單,且不需要對JavaScript進行解析和執行,其關注的特征主要有內容特征和結構特征2類。內容特征主要關注PDF文檔中的重要關鍵字,如/JS、/JavaScrip以及字體對象、流對象長度等一系列特征,其主要不足在于無法抽取出流對象中的數據,而流對象數據又容易被攻擊者用來隱藏惡意內容,從而繞過此類檢測。另一類利用PDF文檔結構特征的檢測方法[18]在檢測率和應對新型威脅上均有進一步的提高,然而已被證明易被攻擊者通過在正常文檔中嵌入惡意內容來繞過[19]。
盡管通過對元數據的分析建立起來的檢測模型的檢測率及效率均較高,但其頑健性方面存在明顯的不足,因而研究又逐漸轉向PDF文檔中的惡意代碼。最新的進展主要有:通過在PDF文檔中嵌入環境監控代碼對PDF文檔的動態行為進行監控[20];根據PDF文檔運行過程中的API調用信息作為特征對PDF文檔進行分類檢測[21];利用沙箱來增強打開PDF文檔從而保護系統的安全性等[22]。此后,Maiorca等[23]提出了結合PDF文檔的結構和內容特征來對惡意 PDF文檔進行檢測,在一定程度上增強了純靜態的結構特征分析所帶來的頑健性弱的問題,但由于采用的仍是靜態分析,因此在對抗模擬攻擊方面依然存在頑健性不足的問題。
通過對現有技術的分析,本文發現近幾年對于PDF文檔檢測的研究大部分集中于檢測其中的JavaScript代碼以及相應的結構和內容元數據。
針對JavaScript代碼的檢測頑健性較強,但存在定位和解析JavaScript困難、分析代價較高、難以應對其他類型的安全威脅等問題;針對結構和內容元數據的分析檢測效率和檢測率較高,然而容易被攻擊者設計特定文檔而繞過,頑健性較差。
為了克服這些缺點,本文提出了一種基于混合特征的惡意PDF文檔檢測方法,在現有研究的基礎上,著重關注惡意PDF文檔的常規特征、結構特征及其API調用特征。方案框架如圖1所示。

圖1 基于混合特征的惡意PDF文檔檢測方案框架
本文以PDFiD和PhoneyPDF這2款工具為基礎構建了文檔解析器,采用動靜態分析相結合的方法,從文檔中提取內容信息和結構信息,并將JavaScript特征轉化為對應的 API調用特征從而解決JavaScript代碼定位難、代碼混淆等問題,并通過聚類獲得最能表征惡意 PDF文檔的結構特征及API調用特征,去除了大量冗余信息,并將此特征集合與常規特征相結合作為混合特征向量用于分類器的訓練學習,最終得到檢測模型。
由于單一特征存在頑健性差等問題,因此本文設計了一種混合特征,用以表征 PDF文檔的惡意性,具體可分為常規特征、結構特征、API調用特征3類,下面進行詳細介紹。
3.1.1 常規特征
通過對 PDF文檔的分析,結合已有的在惡意PDF文檔檢測領域的相關經驗結果,本文選取了以下7個重要特征作為常規特征,包括文件大小、文件版本號、包含JavaScript代碼的對象數量、嵌入的文件數量、不完整對象的數量、交叉引用表的數量、特殊操作函數(如OpenAction、Launch等)數量。這些常規特征與PDF文檔的安全相關性如表1所示。

表1 常規特征與PDF文檔的安全相關性
這些單一特征并不足以用來標識 PDF文檔的惡意性,但它們結合起來可以作為PDF文檔的一個整體概述。例如,根據對大量文檔的分析,惡意PDF文檔的大小通常小于正常PDF文檔的大小,因為一般惡意 PDF文檔并不包含有用的文本、圖片等內容,且文件越小,其感染效率就越高;同樣,對象、交叉引用表通常用于隱藏文檔中的惡意內容,與文檔的惡意性存在一定的相關性;此外,JavaScript代碼及特殊操作函數等是絕大部分惡意 PDF文檔完成其惡意目的的必備內容,也能在一定程度上反映文檔的惡意性。因此,這些特征構成了PDF文檔的常規特征,其可以在一定程度上表征文檔的惡意性,但并非充分條件。
3.1.2 結構特征
利用結構特征來表征PDF文檔的惡意性,最早由?rndic等[18]提出,其方案以惡意PDF文檔在結構上與正常PDF文檔存在的差異性為基礎,設計了一種結構路徑用于表征PDF文檔的結構特征,其主要問題在于特征復雜,且不利于進一步分析。因此本文設計了一種更為簡便的且更具有可解釋性的結構特征。不同類別的文檔,其文檔結構上的關鍵字存在一定的差異,當一個關鍵字在正常樣本或惡意樣本中出現的頻率較大時,其可在一定程度上反映文檔的實際類別。因此,本文在對PDF文檔進行解析并獲取其結構關鍵字及其頻率的基礎上,設計了一種結構特征提取算法對所提取出的關鍵字進行聚類,從中篩選得到出現頻率較高的關鍵字作為結構特征,從而以盡可能小的特征數量來最大程度地表征PDF文檔。算法具體描述如下。


本文利用上述算法,分別對正常PDF集合和惡意PDF集合的特征關鍵字集合進行提取,最終得到正常樣本關鍵字子集合Kb和惡意樣本關鍵字子集合Km及其對應的出現頻次,分別用以表示正常樣本的結構特征和惡意樣本的結構特征。本算法主要包括 3個步驟,對應的復雜度分別為O(|K||D|)、O(2T|K|)、O(|K|),其中,T為K-means算法中的迭代次數,由于迭代次數遠小于樣本數量,因此算法復雜度為O(|K||D|)。
結構特征集合中的關鍵字數量主要取決于樣本集合和聚類結果。文檔的結構特征通常與文件執行的特征操作相關聯,并且主要通過關鍵字來執行對應操作,因此選擇特征關鍵字來表示文檔的結構特征是可行的。例如,/Font是正常樣本中的特征關鍵字,主要是因為此關鍵字與文檔中的字體相關聯,出現此關鍵字說明樣本內容中會顯示不同字體,對于正常樣本來說這是合理的,但惡意文檔一般不包含具體內容,以輕便簡單為主,因此一般不出現此關鍵字;又如,/OpenAction是惡意樣本中的特征關鍵字,其主要功能是執行對象中的打開操作,常用來執行JavaScript代碼,這與惡意樣本中有90%以上的樣本包含JavaScript相吻合[24]。
通過聚類,利用文檔結構中的關鍵字特征來表征其結構特征,極大地降低了特征向量的復雜度,并且由于排除了大量冗余關鍵字,從而加大了攻擊者在正常文檔結構基礎上構建惡意文檔從而繞過檢測的難度。
3.1.3 API調用特征
惡意 PDF文檔中所包含的惡意代碼往往都會經過復雜的混淆和隱藏,直接進行靜態分析難以解決代碼定位難與代碼混淆等問題,為此,本文基于API調用與惡意代碼執行過程的相關性,利用API調用特征來間接地表征 JavaScript代碼的執行特征。現有的針對惡意PDF文檔中JavaScript代碼的分析中,最常見的是采用SpiderMonkey等工具進行分析,這些工具最大的不足在于其識別的標準為JavaScript 通用標準,對于PDF文檔中特定JavaScript代碼(如 app.doc.getAnnots、app. plugIns.length等)無法有效識別。本文采用了PhoneyPDF這一分析框架對PDF的內嵌JavaScript執行過程進行分析,它是一種基于Adobe DOM仿真的分析框架,可以執行并分析PDF中所使用的各類JavaScript代碼。通過對其執行過程中的API調用進行抽取,設計了一種特征API調用提取算法對關鍵API調用進行了選擇。
記R為Acrobat PDF標準中所有可調用的API函數集合,N為其元素個數。本文的任務即從全集R中篩選出對 PDF文檔標簽具有表征價值的 API函數子集合。
對于任意的r∈R,定義θ=∑φi為其有效性權值,則有

有效性權值θ表示對應的API函數在惡意樣本和正常樣本中出現的比率,θ越大,說明其在惡意文檔中出現的可能性越大,可作為表征惡意文檔的特征;反之,θ越小,則可將其作為正常文檔的特征。
本文利用K-means算法,根據有效性權值θ,計算對應的歐氏距離,對訓練樣本的API調用進行聚類,找到閾值t2并將其分為2個簇(k=2),對應的子集Rt={rj||θj|> t2}則為對應的特征 API集合。算法具體描述如下。


在特征API調用提取算法中,K-means算法的迭代輪數遠小于本文的樣本集合大小,因此本文算法復雜度為O(|R||D|)。為了提升算法的效率,本文使用樣本中出現的所有 API調用集合來代替AcrobatPDF標準中可調用API集合R,從而在一定程度上降低了算法的復雜度。
為了對訓練集中的良性和惡意樣本進行學習,建立模型并利用測試集進一步優化和調整模型,本文采用半監督學習來建立檢測模型。由于本文所設計的混合特征在數據結構上存在差異,因此需要選擇一種能適應多種不同數據結構的分類算法。決策樹算法可以較好地解決此問題,然而決策樹存在容易導致過擬合、泛化效果較差等問題,因此,本文采用隨機森林算法。隨機森林算法是對決策樹算法的一個集成和改進,它在以決策樹為基學習器構建Bagging集成的基礎上,進一步在決策樹的訓練過程中引入了隨機屬性選擇,能較好地應對本文所設計混合特征存在的異構性,且計算開銷小、集成的泛化性較好。最終,選擇了10棵樹的隨機森林算法進行分類器的構建,并采用十折交叉驗證過程。
評價本文方法的功能指標主要是對惡意 PDF文檔的檢測效果進行評價,惡意文檔分類結果混淆矩陣定義如表2所示。

表2 惡意文檔分類結果混淆矩陣
表2中,DMM'表示惡意PDF文檔被正確檢測為惡意的樣本數量;DMB'表示惡意PDF文檔被錯誤檢測為良性的樣本數量;DBM'表示良性PDF文檔被錯誤檢測為惡意的樣本數量,DBB'表示良性PDF文檔被正確檢測為良性的樣本數量。對應的幾項評價指標如下。
1)真正類率(TPR, true positive rate),又稱為檢測率,表示被正確檢測為惡意的惡意PDF文檔數占惡意PDF文檔總數的比率,計算式為

2)假正類率(FPR, false positive rate),又叫誤報率,表示被錯誤檢測為良性的惡意PDF文檔數占惡意PDF文檔總數的比率,計算式為

3)準確率(accuracy),表示檢測結果是正確的樣本數占樣本總數的比率,計算式為

在測試實驗中,本文構建了5 928個惡意PDF文檔以及5 881個良性PDF文檔的實驗樣本集合。其中,惡意樣本主要在VirusTotal上收集而來,類別如表 3所示,包括近幾年來 Adobe Reader及Acrobat的高危漏洞以及2004—2011年用戶提交到VirusTotal的未經過鑒別分類的惡意PDF文檔樣本。這部分未鑒別的樣本涵蓋了常見的利用惡意 PDF文檔進行攻擊的多種類型,如內嵌代碼、內嵌其他惡意文件等。

表3 惡意PDF文檔樣本類別
正常樣本主要通過在Google、Yahoo上下載得到,包括論文、銷售廣告、報告等PDF文檔,并通過卡巴斯基殺毒軟件檢測為正常樣本。在此需要強調的是,本文對正常樣本集合進行了控制,著重增加了包含3D圖像、flash、視頻、JavaScript等內容的正常PDF樣本,保證了正常樣本集合的全面性,降低了由于樣本不平衡性所導致的結果誤差。正常PDF樣本類別如表4所示。

表4 正常PDF文檔樣本類別
本文隨機地將這些數據分為訓練樣本以及測試樣本,其中,訓練樣本共包括3 949個惡意PDF文檔和3 916個良性PDF文檔;測試樣本包括1 979個惡意樣本和1 965個良性樣本。實驗的軟硬件環境配置如表5所示。

表5 實驗環境配置
為對本文所設計方案的檢測性能進行驗證,在訓練集(3 949個惡意PDF文檔和3 916個良性PDF文檔)的基礎上,對本文的模型進行了訓練,從而建立檢測模型,并對測試集(1 979個惡意樣本和1 965個良性樣本)進行測試。最終將測試結果與現有的 3種最新公開的惡意 PDF檢測工具(PJScan、PDFRate、Wepawet)相比較。由于 PJScan使用的是單分類SVM算法,其訓練數據不包括正常樣本,因此本文僅使用訓練集以及測試集中的惡意樣本作為PJScan的訓練集和測試集,從而進行對比實驗。而另外2款公開的工具均為在線服務,其中,PDFRate使用了5 000個惡意PDF樣本(收集于 Contagio)和 5 000個正常樣本進行訓練,而Wepawet的訓練數據集及大小均未知,因此,想要設計實驗對這2款系統進行相同的準確訓練并不可行。但通過比較這3類系統與本文方法對測試樣本的檢測結果,可以在一定程度上反映本系統的檢測性能。
4種方法對測試集最終的檢測結果如表6所示。本文主要從檢測率(真正類率)、誤報率(假正類率)和準確率這3個方面對模型的檢測性能進行比較,表6中括號內為標準差。

表6 4種方法檢測效果對比
在實驗過程中發現,所有不包含JavaScript代碼的文檔均會被PJScan系統分類為正常文檔,這是由于PJScan系統僅針對文檔中的惡意JavaScript代碼進行檢測,但這顯然是不合理的。此外,Wepawet系統在解析結構不完整的PDF樣本時,會出現分析出錯的情況,這是由于其沒有實現全部Adobe的規范,而僅是模擬嵌入式JavaScript代碼和可執行文件的運行結果。
實驗結果表明,本文方法在檢測性能上明顯優于 PJScan和 Wepawet,PJScan的誤報率最低,但其檢測率相較于本文方法而言差距較大;Wepawet的檢測率及誤報率均弱于本文方法;PDFRate在檢測率方面與本文方法較為接近,而在誤報率方面則存在一定的弱勢。總地來說,本文方法在檢測性能上要優于其他3類工具。
為對本文檢測模型的檢測效率進行進一步的分析,將本文方法的單個文件的平均檢測時間與其他已公開該項數據的方案進行對比,結果如表7所示,其中,本文方法以及PJScan的數據為實驗得出,其他方案的數值均為從文獻[13-14,22]中獲得。此外,由于Wepawet以及PDFRate為在線服務,本文無法得到其準確檢測時間,并且在公開文獻中也無法找到相關描述,因此本文并未對其進行分析。

表7 幾種不同方法檢測效率對比
本文方法針對正常文檔的平均檢測耗時為650 ms,針對惡意文檔的平均檢測耗時為1 200 ms,可以滿足終端機器上的實時檢測需求。在實驗過程中發現,正常文檔的檢測耗時主要取決于文檔的解析過程,這是由于正常文檔往往包含豐富的內容(文本、圖片、表格),而僅小部分文檔包含JavaScript代碼,其文檔解析過程耗時較長;惡意文檔一般只包含執行漏洞或惡意代碼的對象,其具體頁面內容較少,因此文檔解析過程較快,其檢測耗時主要取決于執行JavaScript的時間。
可以看到,檢測效率主要與采用的分析類型有關,總體趨勢為純靜態分析<動靜態混合分析<純動態分析。PJScan和基于結構路徑的方法在檢測耗時上比本文方法更優,但本文方法使用了模擬Adobe DOM,可以對PDF文檔進行更全面的分析。此外,與同類型的MDScan相比,本文方法的檢測耗時更少,主要原因在于本文方法間接地使用特征API調用來表征JavaScript代碼特征,而MDScan則是對Shellcode進行進一步的執行與分析。
通過對本文設計的方案進行分析不難發現,攻擊者要想攻擊本文提出的檢測系統,主要可從3個方面進行:1)徹底研究本文系統的檢測框架,設計出本文系統無法提取到的惡意特征;2)使用惡意樣本破壞本文的數據集,干擾模型的建立過程;3)分析本文選取的檢測特征,進而操控樣本對應的特征,最終找到可繞過檢測的惡意樣本。這3種方法均可實現對本文系統進行攻擊,但很明顯,前兩種方法十分復雜,且需要操控本文系統的數據集,因而不易實現;而第三種方法則僅需要攻擊者不斷修改并提交自制惡意樣本到本系統進行檢測,直至被誤報為正常樣本,即攻擊成功。
為測試本文系統對上述第三種攻擊手段的防御能力,本文選擇了基于特征加法的模擬攻擊作為對抗模型。模擬攻擊是指通過微弱地改變文件的整體結構,從而將惡意內容嵌入正常PDF文檔中,形成相應的惡意PDF文檔,這種攻擊模型已經被證明能十分簡便有效地逃避基于結構路徑檢測系統。為簡化實驗過程,本文在其思想的基礎上,通過直接對已抽取出的惡意PDF文檔特征向量進行調整,在其特征向量中加入正常PDF文檔的相關特征,從而模擬攻擊過程。此過程可以簡單地理解為,通過不斷增加惡意文檔的正常性,來引起檢測模型的誤報,從而達到逃避檢測的目的。
嵌入的良性特征主要從正常樣本特征集合Kb和Rb中選取。Kb和Rb為利用本文的特征提取算法對樣本集合進行特征提取得到的集合。由于一般情況下,正常樣本不包含JavaScript代碼,嵌入對應的API調用特征,可能導致文檔惡意性的增加,因此,本文僅選擇正常樣本的關鍵字特征進行嵌入。定義特征關鍵字在樣本集合中出現的概率p,平均每個樣本中出現的次數為c,則特征關鍵字在樣本集合中出現的期望值e可表示為

特征關鍵字的良性表征度γ為

其中,eb、em分別表示特征關鍵字在正常樣本和惡意樣本中出現的期望值。
為最大限度地考量模型應對模擬攻擊的能力,本文根據特征關鍵字的良性表征度,選取了最能表征良性PDF文檔的20個特征,具體描述如表8所示。

表8 嵌入的良性特征關鍵字
從表8可以看到,根據本文的選取原則,得到的特征關鍵字大部分與 PDF文檔中具體內容的展示、存儲相關,如提綱、顏色、字體、過濾器等,這與正常PDF文檔往往比惡意PDF文檔包含更多的實質性內容(如文字、圖片、表格等)是一致的。
本文以嵌入的特征數量為變量,在已被本文系統正確檢測為惡意的PDF文檔中,根據嵌入良性特征的數量,將惡意PDF文檔特征向量中對應值修改為正常樣本中出現的取整期望值。例如,在惡意PDF文檔原特征向量中,上述20項特征的值所組成的向量為(0,0,0,0,1,1,0,1,0,1,0,0,0,0,2,0,0,1,3,0),則本文的操作為當嵌入正常樣本數量為 20時,惡意 PDF文檔特征中上述 20項特征值將被修改為(3,4,5,1,15,15,2,14,1,15,6,27,4,4,32,5,22,24,41,12)。
通過這種方式,近似地模擬攻擊者修改后的惡意PDF文檔的特征向量,并對所構建的惡意特征向量進行檢測。實驗重復此過程5次,統計其每次攻擊成功的樣本數量并計算其繞過本文檢測系統的平均成功率,實驗結果如圖2所示。

圖2 基于特征加法模擬攻擊的成功率曲線
從圖2可以看到,隨著添加良性特征數量的增多,攻擊成功的樣本數量呈上升趨勢,并最后趨于平穩,其中,成功率峰值為1.29%,并在添加的良性特征數量超過 16個后趨于平緩。一般地,特征向量中增加良性特征的數量越多,基于特征加法的模擬攻擊成功率就會越高;所添加的良性特征越有代表性,則其攻擊成功率越高。而即便選擇了 20個最具有代表性的良性特征進行嵌入時,本文系統在應對基于特征加法的模擬攻擊的檢測率仍能高達98.71%,這充分證明了所提取的混合特征的頑健性。
事實上,在現實攻擊中,攻擊者并不清楚本文的訓練數據集以及所選取的特征,因此,其攻擊過程遠比上述模擬攻擊復雜。攻擊者需要對系統內部參數進行逆向工程,例如,通過設計梯度下降攻擊來計算逃避模式,構建系統的代理副本等。為此,攻擊者需要收集數據集,并且復制本文的提取特征過程,最終構建一個模擬的代理分類器。這種攻擊雖然可行,但其攻擊過程較復雜,且攻擊代價較高。
實驗證明,本文方法與近幾年提出的3類公開的檢測系統相比,檢測率、誤報率均有一定的提升,且在檢測效率上能滿足終端用戶實時檢測的需求。此外,通過設計基于特征加法的模擬攻擊實驗,證明了本方案所提取混合特征的頑健性。但是本文的實驗仍然存在一定的不足,主要是在驗證和研究良性特征數量與混合特征的頑健性、系統的檢測率之間的聯系缺乏實驗證明。理論上,增加混合特征向量中良性特征的數量,可以有效提高檢測準確率;但另一方面,良性特征的增多會導致逃避攻擊的成功率增高,原因在于攻擊者通過在惡意文檔中添加良性特征可能會提高分類器錯誤分類的概率。此外,由于本文采用了聚類算法對特征進行篩選,進而構建了特征向量,特征數量取決于聚類過程,因此未設計實驗對特征數量與檢測準確率和頑健性之間的關系進行分析,而只是進行了定性分析,但特征數量是否最優、是否會導致過擬合,仍需要進一步的研究與討論。
本文提出了一種基于混合特征的惡意 PDF文檔檢測方法,通過對文檔進行動靜態分析,對文檔基本信息、結構信息和API調用信息進行聚合,抽取出表征文檔安全性的混合特征,并利用隨機森林算法構建檢測模型,在一定程度上解決了現有檢測模型易被逃避檢測的缺陷,提高了模型的頑健性。但本文方法還存在一些有待改進的地方:1)所選取的3類特征相互之間無權重關系,而實際上API調用特征往往更能反映文檔的安全性,其權重還需通過實驗進一步研究與討論;2)抗攻擊實驗中未對特征數量與檢測模型的準確性、頑健性之間的相互關系進行分析,無法確定模型選取的特征數量是否最優、是否會導致過擬合;3)模型的檢測效果對訓練數據的質量較為敏感,且存在部分無法解析的文檔,需設計額外的操作進行篩選和剔除,還需進一步對解析器進行改進和優化。