樸楊鶴然 任俊玲



摘 要:針對目前主流惡意網頁檢測技術耗費資源多、檢測周期長和分類效果低等問題,提出一種基于Stacking的惡意網頁集成檢測方法,將異質分類器集成的方法應用在惡意網頁檢測識別領域。通過對網頁特征提取分析相關因素和分類集成學習來得到檢測模型,其中初級分類器分別使用K近鄰(KNN)算法、邏輯回歸算法和決策樹算法建立,而次級的元分類器由支持向量機(SVM)算法建立。與傳統惡意網頁檢測手段相比,此方法在資源消耗少、速度快的情況下使識別準確率提高了0.7%,獲得了98.12%的高準確率。實驗結果表明,所提方法構造的檢測模型可高效準確地對惡意網頁進行識別。
關鍵詞:惡意網頁;機器學習;分類器集成;Stacking
中圖分類號:TP309.2
文獻標志碼:A
文章編號:1001-9081(2019)04-1081-08
Abstract: Aiming at the problems of excessive cost of resource, long detection period and low classification effect of mainstream malicious webpage detection technology, a Stacking-based malicious webpage integrated detection method was proposed, with heterogeneous classifiers integration method applying to malicious webpage detection and recognition. By extracting and analyzing the relevant factors of webpage features, and performing classification and ensemble learning, the detection model was obtained. In the detection model, the primary classifiers were constructed based on K-Nearest Neighbors (KNN) algorithm, logistic regression algorithm and decision tree algorithm respectively, and Support Vector Machine (SVM) classifier was used for the construction of secondary classifier. Compared with the traditional malicious webpage detection methods, the proposed method improves the recognition accuracy by 0.7% and obtains a high accuracy of 98.12% in the condition of low resource consumption and high velocity. The experimental results show that the detection model constructed by the proposed method can recognize malicious webpages efficiently and accurately.
Key words: malicious webpage; machine learning; classifier ensemble; Stacking
0?引言
目前,各種釣魚網頁、掛馬網頁及其變種層出不窮,惡意網頁所采用的攻擊和欺騙手段也日趨復雜。用戶在瀏覽各類網頁時稍不留神就會處于危害之中,主機可能會無聲無息地被惡意網頁感染,不僅導致用戶本身信息數據和財產的損失,受害者還很可能會成為攻擊者的跳板,作為“肉雞”用于攻擊其他的用戶。由于惡意網頁有如此廣泛的傳播面同時能夠帶來相當可觀的黑色收入,因而非常受“黑產組織”的歡迎。而如今每天甚至每小時的網頁數量呈爆炸式增長,也為惡意網頁的隱蔽提供了極佳的條件。鑒于惡意網頁形式多樣、影響廣泛、隱蔽性強的特點,如何高效快速地識別惡意網頁已成為如今互聯網安全的一個重要研究課題。
惡意網頁檢測技術主要有針對行為的動態檢測和針對特征的靜態檢測兩大類別。動態網頁分析檢測是在蜜罐、虛擬機的環境下,通過將獲取到的超級文本標記語言(HyperText Markup Language,HTML)或JavaScript等網頁源代碼在虛擬的環境中運行并使用瀏覽器對網頁進行訪問,實時監測系統情況和網頁的動態行為,如系統中的注冊表、進程、文件等的狀態改變等,依此來判斷正在運行的網頁是否屬于惡意網頁類別[1]。該方法對未知數據的檢測正確率相對較高,但虛擬機引擎技術與蜜罐檢測技術的系統資源消耗十分巨大,其對時間和資源的消耗也很高,因此只有在一些大型檢測中心才會使用此類檢測識別方式。而多數惡意網頁檢測技術的研究集中在靜態特征檢測方面,本文也主要針對靜態檢測技術進行研究和探索。
靜態檢測為直接通過網頁的源代碼進行惡意網頁識別的技術,包括模式匹配、靜態代碼分析、啟發式規則和機器學習[2]等方法。具體為:1)模式匹配是惡意代碼檢測識別的基本辦法,主要通過檢測是否含有由已知的惡意網頁源代碼片段生成的特征碼來實現對網頁的識別。該方法需要一定長度的特征碼才可以保證識別的正確性,否則極易將正常網頁代碼錯誤識別成惡意的。
采取包含通配符的特征碼是對該技術的一種改進方式,可以識別相當一部分的惡意網頁代碼。文獻[3]中的網絡檢測系統Snort就是使用基于模式匹配的靜態檢測系統。
2)靜態代碼分析則通過將待檢測網頁源代碼與代表網頁語義特征的源碼結構模板進行比對,經由衡量其與模板的相對距離等來判定網頁是否為惡意的。黃建軍等[4]設計了基于植入特征的惡意網頁源代碼檢測手段,即采用識別網頁架構源碼特征的方法。
上述兩種方法中特征碼或結構模板都需要提前定義好,因此不能對未知類別的攻擊進行有效檢測識別。
3)啟發式規則就是基于某種技術或可以自主發現的某種特性來對數據進行識別的方法。該方法往往會為不同規則分配特定特征,通過設置每個規則的權重并對其進行綜合識別,判定其與預先設定的閾值的關系來判定是否為惡意網頁。張昊等[5]提出了基于判斷矩陣法的檢測技術,即通過對不同網頁統計特征賦權重來綜合判斷網頁中是否含有造成用戶損失的惡意代碼。啟發式規則的優點在于可以對未知的惡意網頁進行判定,但可能導致較高的誤判率。
4)機器學習方法通過對訓練樣本進行訓練得到分類模型,并通過分類模型對未知網頁進行分類。利用機器學習方法能夠從大量惡意網頁與正常網頁的數據集中訓練學習出有效的分類特征信息,并通過分類模型對其進行分類。
如Ma等[6]提出了一種基于統一資源定位符(Uniform Resource Locator,URL)特征和host信息的分類方法,并論證了多種機器學習算法對此類特征的表現與對比差異,但選取的特征數量不多。
Yoo等[7]提出了一種基于異常與誤用判斷模塊的檢測系統,其中含有兩個不同分類器模型:一個使用監督算法;另一個使用半監督算法,共同用于惡意網頁檢測。
李洋[8]則提出了一種基于混合型機器學習算法的惡意網頁源代碼識別系統,采用了三種不同的分類算法,根據三種不同分類模型的測試結果進行最終分類器選取。王正琦等[9]設計出了基于兩層分類器的惡意網頁檢測技術,分別使用樸素貝葉斯和支持向量機(Support Vector Machine, SVM)層次化地實現了檢測。
由上可見,基于機器學習的惡意網頁檢測多為從網頁特征的設置和分類方法的選取等方面進行探討,且逐步由基于單一機器學習算法向多種機器學習算法的組合轉變,相對于其他方法有較大的靈活性和較好的識別效果,以上文獻中提出的方法也在一定程度上促進了惡意網頁檢測技術的進步,但在特征的多樣性以及檢測速度和準確率上仍有一些不足。
本文在對上述各種研究成果進行分析與梳理的基礎上,選擇機器學習作為惡意網頁識別的方法,同時為了多維度提取惡意網頁特征,首先對惡意網頁進行分類后,針對不同類別進行特征提取,并將異質分類器集成的方法應用到惡意網頁檢測領域,提出了一種基于Stacking的惡意網頁集成識別方法,通過多個初級分類器和元分類器多層次結合的方法實現惡意網頁的判別,在檢測效率和準確性方面都有所提升。
1?相關知識
1.1?惡意網頁分類
目前對惡意網頁沒有非常廣泛通用的分類方法,本文通過對惡意網頁的針對目標、行為表現與特征進行分析,將惡意網頁分為兩類:一類為篡改被黑類網頁,即通過嵌入惡意代碼使惡意程序、木馬病毒等能夠通過其進行攻擊與感染的網頁;另一類為虛假釣魚類網頁,而通過虛假內容對用戶進行釣魚攻擊從而非法獲取用戶數據的網頁。篡改被黑類網頁原本是提供正常服務的合法網頁,因其后臺被黑客攻破或者存在一些可利用漏洞,導致正常網頁上代碼被修改,從而隱蔽地攻擊正在訪問的用戶;虛假釣魚類網頁則本身就是對正常網頁的模仿,通過URL和頁面內容混淆視聽,使訪問用戶誤以為是正常網頁,從而對用戶進行信息、資金盜取或者釣魚攻擊。因此,這兩類惡意網頁在進行檢測時提取特征的角度各不相同。
1.2?基本分類模型
1.2.1?支持向量機算法
SVM算法是一種有監督學習的算法,即將向量映射到更高維度的空間里,從而建立一個最優分類面即最大間隔超平面。SVM致力于得到一個可以滿足分類需求的最優分類面,同時使數據集中的各類點與分類面的距離盡可能遠,也就是使它兩側的區域(margin)最大。
本文使用的SVM算法采用的核函數是徑向基核函數(Radial Basis Function,RBF):
因其還可以使用如下形式描述,因此稱高斯核(Gaussian Kernel):
RBF核能夠把一個樣本映射到更高維度的空里間,與多項式核對比,RBF中需要確定參數的較少,而參數的數量會直接影響到使用函數的復雜度。SVM作為分類算法,最后可以得到空間距離最優解,即最公平的類別區分。相對于其他算法僅可以獲得局部的最優解,SVM性能相對較好。
1.2.2?K近鄰算法
K近鄰(K-Nearest Neighbors, KNN)算法為通過測定不相同特征間距離對不同樣本進行分類。若是某樣本位于特征空間里面的K個極為相似,
就是最鄰近樣本里的大部分均歸屬某同種類別,則此樣本也屬這一類別,K一般取小于或等于20的整數。在此種算法中,所選鄰近樣本均是已有分類結果的樣本。本文的K近鄰算法使用曼哈頓距離:
此方法僅依靠最靠近的一個或多個樣本的分類結果來對待檢測樣本的種類進行分類。
1.2.3?決策樹算法
決策樹(Decision Tree, DT)為樹形的結構,通過尋找最佳劃分特征進而實現樣本分類,本文采用C4.5算法。決策樹的內部節點表示為某個特征的閾值,而葉節點則表示一個類和其分布,決策樹的分類規則不僅易于理解而且準確率較優。C4.5的節點選擇標準為最大信息增益率,計算公式為:
C4.5使用貪心算法作為歸納算法,通過自頂向下遞歸的方法對樹進行構造,若所有訓練樣本都處于同一類別中,那么此節點就成為葉子節點,不然的話選擇一個最優分類特征當作內部節點且創建分支,分支過程通過計算信息增益來進行衡量,并運用剪枝技術消除噪聲和孤立點。對于所給樣本,從根節點處向下進行判斷就可以得到分類識別結果。
1.2.4?邏輯回歸算法
邏輯回歸(Logistic Regression,LR)通過擬合曲線或者學習超平面實現分類,回歸就是根據已知的自變量從而得到因變量,即通過獲取的特征數據得到預測分類。邏輯回歸算法通過逐漸縮減分類范圍,將預估值縮小在區間[0,1]內。常用Sigmoid函數δ(Z)=(1+e-Z)-1來展示。屬性x所屬類型為y1的可能性為:
邏輯回歸模型的優點是可發現特征之間聯系和將模型進行正則化。邏輯回歸和SVM二者的差異是使用不同損失函數(loss function),且邏輯回歸的分類速率比SVM對比有所升高。
1.2.5?簡單投票法
簡單投票法(Voting)就是將各個初級分類器的結果進行投票,占最多票數的結果作為最終結果,即遵循絕大多數原則。簡單投票法包括同等投票法和加權投票法,同等投票法如果出現票數相等的情況,可能就會進行隨機選擇來決定最終判別結果。為了避免這種情況和使最終結果更精確,就要為每個分類器進行加權,即加權投票法。而權值的計算是此種方法性能好壞關鍵。
1.3?其他相關知識
1.3.1?Stacking集成學習方法
集成學習法主要有兩類,即同質集成與異質集成[10]。當初級分類器由同一個機器學習算法產生時,如誤差反向傳播(Back Propagation, BP)神經網絡,此時集成中只包含同種類型的初級分類器,如“神經網絡集成”中全是神經網絡,此類的集成就稱為“同質”。集成亦可以由多種不同類型的初級分類器組成,例如同時含有樸素貝葉斯和SVM,這類集成即稱為“異質”。異質集成里面的初級分類器均通過各不相同的算法產生。
同質集成中頗具代表性的方法有套袋法(Bagging) 和提升法(Boosting),它們都是對使用相同機器學習算法的分類器進行集成。其中Bagging通過對原始訓練集樣本進行有放回、相同概率的抽樣方法來得到若干小訓練集,然后使用這些有差異的小訓練集對多個初級分類器進行訓練;Boosting在構建初級分類器時,會提升以前分錯類的訓練樣本的抽樣權重值使得每輪訓練均基于不同分布的數據,并在最后集成時對每個初級分類器進行加權平均。
本文采用的是異質集成的代表Stacking學習法,是通過將多種機器學習算法組合來提升分類器的泛化性能,其基本過程如圖1所示。其中,首先對訓練集分別訓練從而得到初級學習器,然后以初級學習器的分類結果作為元分類器的輸入,進行元學習訓練出元分類器。Stacking通過使用不同的機器學習算法來保證初級分類器擁有多樣性,并通過元分類器以最優方法對初級分類結果進行整合,相比同質集成的方法,分類的精度和準確率都會提高,同時導致過擬合的風險度則會降低。
1.3.2?K折交叉驗證
K折交叉驗證(K-fold cross-validation)是用來測試算法準確性的常用測試方法。首先將數據集分成k份,輪流將其中k-1份作為訓練數據,1份作為測試數據進行實驗。每次實驗都會得出相應的正確率(或差錯率)。k次的結果的正確率(或差錯率)的平均值作為對算法精度的估計,一般還需要進行多次k折交叉驗證再求其均值,作為對算法準確性的估計。
1.3.3?惡意代碼混淆
為了躲避一些檢測工具的檢測識別,攻擊者常對進行惡意攻擊的網頁代碼進行代碼混淆(Obfuscated code),即對代碼進行編碼或者在代碼中加入特殊符號或無用字符,從而使代碼變得難以檢測,據統計相當多的惡意代碼都運用了JavaScript混淆。JavaScript混淆包括使用統一碼(Unicode)、美國信息交換標準代碼(American Standard Code for Information Interchange, ASCII)編碼或使用異或運算(XOR)等替代已有的代碼字符串。
如果使用ASCII或Unicode編碼對惡意代碼進行混淆,瀏覽器在訪問頁面時會通過escape()和unescape()等函數將混淆字符重新轉換為惡意網頁代碼,因此這些函數與方法在混淆代碼中出現的次數會比在普通網頁源代碼中出現次數要較多。而使用邏輯異或對惡意代碼進行混淆的時候則需給邏輯運算設定一個鍵值,再將惡意代碼與鍵值進行異或運算,并最終被特殊符號所替代。
2?特征工程
一個分類器性能的好壞關鍵問題在于有效的特征選擇。首先對網頁源代碼進行處理,將其解析成文檔對象模型(Document Object Model, DOM)樹結構可根據HTML標簽對其內容進行分析。DOM樹即依據代碼結構所生成的節點集,由此可以在結構樹中尋找所需的節點或者參數。分析DOM樹的結構時要加載文檔并對其層次結構進行構建。DOM樹對HTML代碼進行各種操作的定義,由此可將HTML代碼以含有元素、屬性的DOM樹結構形式進行展現。
本文從惡意網頁目標、行為表現等角度將其分為篡改被黑類網頁和虛假釣魚類網頁兩類,通過分析,發現這兩類惡意網頁數據都有自己不同特征,因此首先從這兩類特征出發,并結合根據詞組或代碼在類別文檔中出現的頻率即基于數學統計的計算詞頻(Term Frequency,TF)和基于領域知識的人工選擇等方法分別進行特征統計,最終篩選出33維特征用于對分類器的訓練。
2.1?篡改被黑類網頁特征