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