李 睿,楊淑群,張新宇
(上海工程技術大學電子電氣工程學院,上海 201620)
在網絡信息傳遞過程中,便攜式文檔格式(Portable Document Format,PDF)文檔作為一種十分方便的跨平臺文檔交換文件格式,成為當今最通用的文檔格式之一,這也使得PDF 文檔成為攻擊者的重點對象[1]。惡意PDF 文檔在針對性攻擊傳播中,經常和高級持續性威脅(Advanced Persistent Threat,APT)攻擊相結合[2],普遍采用惡意郵件的形式,通過在郵件中添加惡意附件或鏈接,選取特定的企業或機構組織,利用漏洞對目標系統進行攻擊,以竊取商業機密等有價值的信息[3]。而針對PDF 文檔的惡意性檢測往往基于理想的均衡數據集進行研究?,F實世界中,惡意PDF 文檔數量遠少于良性文檔。因此,研究樣本分類不均衡下的惡意PDF 文檔惡意性檢測具有現實意義。
惡意PDF 文檔檢測早期采用靜態的分析方法[4]。Laskow 等[5]提出PJScan 檢測模型,通過提取惡意文檔樣本中的JavaScript 代碼進行詞法分析,利用單一類別支持向量機OCSVM 對未知文檔樣本進行分類,但該方法無法對代碼本身做具體分析;Dabral 等[6]通過靜態解析提取文檔結構特征和JavaScript 特征,并對分類器進行組合來提高分類器的健壯性;李濤[7]通過靜態分析提取JavaScript 特征,并利用OCSVM 算法對文檔進行檢測。動態分析檢測中較經典的有Willems 等[8]提出的CWsandbox 動態分析方法,它是在沙盒環境中加載Adobe Reader 并執行PDF 文檔,通過觀察其系統調用和系統狀態等行為信息來判斷該文檔是否為惡意文檔;Snow 等[9]提出的ShellOS 系統則是基于ShellCode 進行檢測,通過直接執行來檢測緩沖區的Shell-Code。動靜結合分析的檢測模式利用了靜態分析的高效率和動態分析的高準確度。杜學繪等[10]結合動靜態分析提取常規信息、結構信息及API 調用信息對文檔進行分類檢測;李國等[11]結合文檔結構和JavaScript 特征,在提取特征前加入信息熵差異檢測步驟篩選可疑文檔,對檢測時間進行優化。
對近年的技術發展進行分析發現[12],基于機器學習的靜態分析,無法檢測經過混淆等技術手段處理過的文檔,容易被繞過[13],從而使檢測率降低;動態分析[14]的檢測方法需要執行文件,檢測開銷大,會占用更多資源;動靜結合分析[15]技術容易忽略元數據等特征,更關注PDF 文檔的JavaScript 代碼特征[16],對于沒有內嵌JavaScript 代碼的PDF 文檔存在漏檢問題。現有的檢測技術主要集中在平衡數據集上[17],但這樣的數據集不能代表真實世界的數據,且現有檢測技術健壯性較差。因此,本文對不均衡樣本數據集進行處理,改進BSMOTE 算法,利用近鄰樣本合成過渡間接樣本,再利用過渡樣本和原始樣本合成新的數據樣本,利用K-Means 聚類算法,對良性PDF 樣本進行聚類欠采樣操作,將過采樣和欠采樣進行結合,利用雙向采樣法對樣本進行預處理,使樣本數據集趨于平衡。通過靜態分析提取內容及結構特征,并動態提取文檔執行應用程序接口(Application Programming Interface,API)特征,最后采用隨機森林方法進行檢測分類。實驗表明本文采用的方法檢測效果較好,各評價指標都有提升。
針對PDF 文件分類數量不均衡問題,采用過采樣和欠采樣相結合的方法,對PDF 文件樣本數據進行預處理,使樣本數目處于相對均衡的理想狀態,進而訓練分類模型。
人工合成少數類別過采樣技術SMOTE(Synthetic Minority Oversampling Technique),是在樣本輸入空間中利用少數類別的樣本去尋找近鄰樣本,并利用信息人工合成新樣本[18]。
對于給定的數據集{(x1,y1),(x2,y2),...,(xn,yn)},yi∈{+1,-1},i=1,2,…,n,假設數據集中少數類別樣本集記為Xa,在輸入的樣本空間中,對于任意一個少數類別樣本xai尋找其k 近鄰樣本點。假設樣本xai擁有的所有屬性為rij,j=1,2,…,s,在其k 個近鄰樣本里,對每個屬性j 都隨機擇取一個樣本針對初始樣本xai和擇取的樣本在屬性j 上的差,利用[0,1]的隨機數進行權重配比,再加上初始樣本xai在屬性j 上的值,即合成為新樣本在屬性j 上的值,如公式(1)所示。
SMOTE 算法線性生成新樣本的插值示意圖見圖1。在生成新樣本時,SMOTE 方法很容易導致生成的新少數類別樣本包圍在多數類別樣本中,容易形成噪聲樣本點,不利于分類邊界確定,造成干擾,如圖2 所示。圖2 中,虛線表示分類界面,黑色圓點代表少數類別樣本點,白色圓點代表多數類別樣本點。在進行SMOTE 方法合成新樣本點時,多數類別樣本點包圍個別少數類別樣本點,生成的新樣本即圖中的黑三角點,仍位于多數類別樣本點的包圍中,這樣就會對分類造成干擾。
BSMOTE(Borderline SMOTE)算法[19]對SMOTE 算法進一步改進,通過靠近分類邊界的少數類別樣本進行新樣本合成。
Fig.1 SMOTE algorithm interpolation generates new sample圖1 SMOTE算法插值生成新樣本
Fig.2 SMOTE algorithm generates interference samples圖2 SMOTE算法生成干擾樣本
設給定的樣本訓練集為X,其中,少數類別樣本集記為Xa,樣本數量為a,多數類別樣本集記為Xb,樣本數量為b。
首先,針對少數類樣本集Xa中的每一個樣本點Xai,i=1,2,…,a,在整個訓練集X 中尋找k 近鄰樣本點。在k 近鄰樣本點中,多數類別的樣本點集標記為Xk′,數量記為k′個,0 ≤k≤k′。
然后,對k′的大小進行分析,確定樣本點Xai的情況。若k′=k,即樣本點Xai的k 近鄰樣本全都是多數類別樣本點,則該樣本點為噪聲點,可以忽略;若,即k 近鄰樣本點中多數類樣本點大于少數類樣本點,則樣本點Xai容易被誤分,屬于預定的危險樣本集;若,即k 近鄰樣本點中的多數類樣本點小于少數類樣本點,則Xai屬于預定的安全樣本集,可忽略。
接著,得出危險樣本集樣本點,即是少數類別樣本集Xa中處于分類邊界的樣本點。對于危險樣本集中的每個樣本,隨機選擇某個樣本點計算其k 近鄰樣本點,按照SMOTE 方法即式(1)合成新樣本點,根據危險樣本集不斷重復合成新樣本點,直到樣本數量滿足為止。
BSMOTE 方法生成新樣本時,在危險樣本集中隨機挑選任意少數類別樣本點,在該樣本點及其近鄰的樣本點之間進行取值。新樣本點處于兩點連線上,這樣容易造成新樣本點的位置隨機性很大,呈不均勻分布。
針對上述問題,改進BSMOTE 方法。為了使新樣本點能更均勻地分布,引入間接新樣本進行二次樣本生成,得到帶有間接新樣本的BSMOTE 方法(BSMOTE With Transition New Samples,TBSMOTE)。對危險樣本集中的任一少數類別樣本,設其k 近鄰樣本點集為Xdi,s,s=1,2,...,k。在對k 近鄰樣本進行隨機挑選生成新樣本時,引入間接新樣本,根據k 近鄰樣本中任意兩樣本合成為間接新樣本,進而對間接新樣本和原始樣本點進行合成操作,從而達到理想的合成新樣本均勻分布的效果。如圖3 所示,圖中圓點代表少數類別樣本,方塊點代表生成的間接新樣本,三角點代表最終生成的新樣本點。引入間接新樣本的方法如下:
假設選取k 近鄰樣本點中的兩個樣本點xdi,1、xdi,2,計算二者生成的間接新樣本x1,2′,計算過程與SMOTE 方法同理。隨后,通過間接新樣本x1,2′和危險樣本集中的原始樣本點xdan,ai進行新樣本合成,最終得到對應新樣本點xdan,ai′。
Fig.3 TBSMOTE algorithm generates a new sample圖3 TBSMOTE生成新樣本點
PDF 文檔樣本數據集的正負類別數量相差懸殊,針對樣本訓練集單純采取過采樣來增加少數類別樣本,能夠使樣本數目達到均衡狀態,但是對于分類器的性能改善效果不顯著,容易形成過擬合問題。對數據集過采樣的同時進行欠采樣操作,能夠改善上述問題,兩種采樣方法進行結合比單純使用過采樣或欠采樣更能在分類上提升訓練模型性能。
在過采樣操作上結合欠采樣操作。在欠采樣中,隨機欠采樣是最為常見的方式,然而隨機欠采樣由于太過隨機,難以顧及到樣本的分布。受采樣率影響,更易關注樣本集中的高密度部分,導致關鍵點被刪除而丟失關鍵信息。本文對多數類別的樣本先進行聚類操作,再根據采樣率對聚類后的每一個聚類簇樣本進行欠采樣,從而解決上述分布不均勻問題。
K-means 聚類算法原理簡單,便于理解和操作,擁有良好的延伸性。基于K-means 聚類方法,對PDF 樣本采取聚類欠采樣操作。先對PDF 樣本數據采取聚類操作,隨后按比例對每個聚類簇中的樣本采取欠采樣,具體步驟如下:
輸入:原始多數類別PDF 樣本數據集Xb,欠采樣率N
輸出:欠采樣后的新的多數類別PDF 文檔樣本數據集
(1)對原始多數類別PDF 樣本數據集進行K-means 聚類,劃分成K 個聚類簇。
(2)對每個聚類簇Ck,樣本數量為s,根據欠采樣率N計算每個聚類簇Ck的欠采樣數量s×N,欠采樣數量采取向上取整。
(3)根據每個聚類簇計算出的欠采樣數目,對每個聚類簇分別隨機抽取相應數目的樣本,直到所有聚類簇完成欠采樣。
根據上述過采樣和欠采樣方法,本文改進BSMOTE 過采樣,融合K-means 欠采樣,提出一種KM-TBSMOTE 雙向采樣方法,流程如圖4 所示。首先采用TBSMOTE 算法對少數類別PDF 樣本過采樣,增加少數類別樣本數量;然后基于K-means 算法,對多數類別PDF 樣本欠采樣,剔除部分多數類別樣本,最終達到樣本分類數目均衡的狀態。
Fig.4 Flow of KM-TBSMOTE bi-directional sampling method圖4 KM-TBSMOTE雙向采樣法流程
本文使用開源PdfParser 解析工具對PDF 文檔樣本進行解析,該工具可查看PDF 文檔的所有對象和數據流的詳細信息。
利用解析工具解析PDF 文檔,對PDF 文檔作兼容性分析,剔除不兼容的PDF 文檔,保證樣本的可用性。通過對PDF 文檔結構的研究,對PDF 文檔進行解析處理,結合現有的惡意PDF 文檔的特征研究,選取靜態解析的基本特征,提取的部分特征和代表的含義如表1 所示。其中,“/ObjStm”可包含“/URI”等調用,一般常出現在惡意文檔中;“/Submit Form”“/URI”關鍵字,惡意文檔通過此類Action 轉入惡意執行入口。除此之外,還要考慮文件的大小和版本,以及文檔中Object 的數量,這些特征和文檔惡意性有不同程度的關聯,特征間組合起來能對一個文檔的整體情況作出大概的描述。通過對大量文檔進行解析,可以得出惡意PDF 文件大小與良性文件相比普遍較小的結論,這是因為惡意的PDF 文檔通常不包含有意義的文本和圖像等信息,而不同版本的漏洞存在區別,且攻擊者會在版本號字段做手腳,利用閱讀器漏洞攻擊用戶。攻擊者通常在對象和交叉引用表里對惡意內容進行隱藏,而JavaScript 代碼和一些特殊函數常進行混淆等惡意操作。
Table 1 Some features and details表1 部分特征及詳情
上述特征單獨使用并不能完整地描述一個文件的惡意性,但是組合成特征向量能對文件進行概括。惡意PDF文件往往內嵌代碼并采用混淆和隱藏等手段,而單獨進行靜態分析提取特征并檢測容易導致惡意文件繞過檢測,在惡意代碼的定位和反混淆處理上存在局限性。因此,本文采取動態分析方法,在PDF 文件運行過程中提取API 調用特征進行分析,以此來完善特征的多樣性和頑健性。針對內嵌JavaScript 代碼的文檔,利用GoogleV8 引擎對文檔中的JavaScript 代碼進行動態執行和分析。GoogleV8 可以獨立運行,在執行JavaScript 代碼前將其編譯成原生機器碼,且采用了內聯緩存方法,性能更好。通過提取JavaScript代碼在執行過程中的API 調用信息來刻畫惡意PDF 文件的動態分析特征,如“getAnnots()”“getIcon()”“newPlayer()”“customDictionaryOpen()”等典型API 函數在解析過程中通常觸發緩沖區溢出,從而執行任意代碼。
對于檢測問題,在挑選合適的機器學習分類算法時,選擇不同的分類算法預測出的結果是不穩定的,會存在一定程度上的誤差。而使用集成學習方法,則可以將分類器進行組合,得到更好的效果。因此,本文采用隨機森林(Random Forest,RF)算法[20]對雙向采樣后的數據集進行檢測模型訓練,RF 算法利用集成學習的思想,在單獨決策樹基礎上,通過構建Bagging(Bootstrap Aggregating)集成進而擴展,是一種基于隨機向量的組合分類算法。RF 算法以決策樹作為基分類器,利用Bagging 方法進行集成,并在構造單個決策樹的過程中引入隨機屬性篩選進行節點屬性分割。
本文實驗環境如下:硬件環境采用英特爾C621 服務器專用芯片組CPU,內存為64G,操作系統為Windows10,編譯環境為python3.7。實驗通過Contagio 公共數據庫中收集到的訓練樣本,共計10 900 個,其中惡意PDF 文件樣本1 090 個,正常良性PDF 文件樣本9 810 個,正常良性文件樣本與惡意樣本數量比例為9:1。將得到的特征數據進行標準化處理,轉化為47 維特征向量,對于KNN 算法進行參數調優,選取KNN 近鄰樣本點個數參數為5。
對于分類不均衡的數據集,用準確率評價分類器性能意義不大,因為少數類別樣本和多數類別樣本在樣本空間中占比相差懸殊。當正常樣本占98%,異常樣本占2%時,假設所有樣本都預測為正常樣本,預測結果準確率也可達到98%,而實際上,對于異常樣本,預測結果完全誤分類,所以將準確率作為衡量分類器好壞的標準明顯不合適。對于預測結果,更應分析分類器對少數類別樣本的分類表現。因此,研究分類樣本不均衡的PDF 文檔惡意性檢測時,將查準率、查全率、F1 和G-Mean 作為評價指標。查準率代表分類器的決策結果為正樣本時其中真正類所占的比例,查全率代表樣本數據中實際為正類樣本時分類器模型的預測結果也正好為正類樣本所占的比重。
設置基分類器決策樹個數,對檢測方法精確度進行比較,實驗結果如表2 所示?;诸惼鱾€數從5 增加到10,精確度提升1.03%,基分類器數量k從10開始逐漸增加,分類效果并沒有呈正比上升。當決策樹數目不斷增加時,檢測模型的計算開銷也不斷增加,時間開銷增加,內存消耗更多,而檢測模型的泛化性能卻無明顯提升。綜合考慮檢測模型的計算開銷和檢測效果,取決策樹數量為10個。
Table 2 Comparison of classification effects of different numbers of base learners表2 不同數量基學習器的分類效果比較
對本文的KM-TBSMOTE雙向采樣方法、傳統BSMOTE過采樣算法、K-Means聚類欠采樣方法、BSMOTE+K-Means 采樣方法進行比較實驗,分類器采用隨機森林算法。其中,各過采樣方法中過采樣率等于不均衡比率的0.5 倍并向上取整。為使檢測結果不受隨機因素影響,對各采樣方法進行十折交叉驗證,求出平均值作為最后的預測結果。實驗結果如表3所示。
Table 3 Comparison of different sampling methods表3 不同采樣方法比較(%)
實驗結果表明,本文方法的查準率P、查全率R、F1、G-Mean 指標值最高。與其他方法相比,均有一定程度上的上升,誤報率FPR 有所下降。與K-Means 欠采樣方法進行比較,查準率提升了1.05%;本文方法較BSMOTE 過采樣方法的查全率指標提升了1.96%;K-Means 欠采樣方法的F 值最低,本文的F1 指標值提高了1.81%;BSMOTE 過采樣方法的G-Mean 評價指標值最低,本文的G-Mean 指標比BSMOTE 過采樣提高了5.61%;BSMOTE 過采樣方法的誤報率最高,達0.074%,本文的雙向采樣方法將誤報率降低到了0.026%。僅采用K-Means 欠采樣方法進行處理會把樣本中的重要特征信息丟失,導致K-Means 欠采樣方法的F1 評價指標值最低,而在BSMOTE 方法過采樣操作中,樣本點的不均勻分布會在一定程度上影響到分類邊界的確定,所以誤報率高。G-Mean 評價指標中K-Means 欠采樣方法雖然不是最差的,但是相比較而言,G-Mean 指標衡量的是正樣本和負樣本分布被正確分類出的數目,針對樣本分類不均衡的數據集,檢測模型的評價指標中F1 比GMean 更能展現檢測模型對于不同類別數據的檢測效果。而本文提出的雙向采樣方法中,對BSMOTE 過采樣方法進行了改進,改善了樣本分布均勻問題,緩解了對分類邊界造成的影響。同時結合欠采樣操作效果更好,在減少噪聲樣本的同時不會丟失過多的重要特征信息。綜合5 個評價指標可知,本文提出的基于雙向采樣的檢測方法能有效解決樣本不均衡的惡意PDF 檢測問題。
本文從樣本數據層面對樣本不均衡的PDF 文檔惡意性檢測進行研究,改進了BSMOTE 過采樣方法。采用KMeans 方法欠采樣,將兩種采樣方法結合,有效緩解了單向采樣造成的噪聲樣本過多和重要特征信息丟失問題。采用隨機森林方法對雙向采樣后的樣本進行模型訓練和檢測,實驗表明檢測模型性能在各方面均有不同程度改進,能有效解決PDF 文檔惡意性檢測中樣本分類數量不均衡問題。后續研究將深入探討PDF 文檔特征的選取和優化組合,從根本上對分類決策效果進行提升??紤]特征之間的關聯性,利用算法尋找更優的特征向量是今后研究的方向。