袁 梁,林金芳
1(無錫城市職業技術學院 師范學院,無錫 214153)
2(國防科技大學 系統工程學院,長沙 410073)
當前,利用惡意網頁的攻擊非常普遍.360安全報告指出,2018年上半年,360互聯網安全中心共截獲各類新增惡意網頁1622.6萬個,同比2017年上半年(201.5萬個)上升了7倍[1].如何有效識別這些惡意網頁面臨多種挑戰:首先檢測方法必須在用戶無感的情況下運行;其次檢測方法必須能夠識別惡意網頁以躲避檢測為目的的各種代碼混淆技術;最后檢測方法必須能夠在海量的Web網頁訪問中,快速找出嵌入在正常網頁中的惡意代碼片段[2].
為了應對這些挑戰,本文提出了一種基于深度學習的惡意網頁快速檢測方法,使用簡單的12個字符正則表達式標記化Web內容,然后在多個分層空間尺度上檢測這些內容.分層空間尺度是指不是簡單地將整個HTML文件上的令牌(token)集合作為輸入,而是計算令牌集合在多個本地特定子區域上的表示:將HTML文件分成1/2、1/4、1/8和1/16,然后在這些層級上運用兩個全連接層(fully connected layer)來提取這個HTML文件的表示.該方法基于簡單的令牌流輸入來學習Web內容的高質量表示,可以從任意長度的網頁中快速找到微小惡意代碼片段.
惡意網頁檢測研究工作的一個重點是僅使用URL字符串來檢測惡意Web內容.文獻[3]基于黑名單的方法,首先對惡意URL進行標注,然后利用字符串匹配等技術實現惡意URL的識別;文獻[4]以URL詞匯特征和主機特征為基礎建立統一的分類模型,進而根據已有標注集合識別惡意URL,他們專注于人工標注來最大化檢測精度;文獻[5]使用URL作為檢測依據,但也包含其他信息,例如Web鏈接中的URL引用,將手工提取特征作為SVM和K-最鄰近分類器的輸入.但是這些方法只關注URL相關信息,因此無法利用Web內容中的惡意語義.雖然基于URL的系統具有輕量級的優勢,并且可以在沒有完整Web內容的環境中進行部署,但本文的工作重點是HTML文件,因為它們能檢測出更深層次的威脅.
文獻[6-8]嘗試從HTML和JavaScript中提取特征并將其提供給機器學習或啟發式檢測系統來檢測惡意Web內容.文獻[6]提出一種基于機器學習分類器的網頁惡意代碼檢測方法,通過分析JavaScript腳本本身特征,來檢測網頁惡意JavaScript腳本;文獻[7]提出一個Web網頁抓取器,用于JavaScript反混淆和分析,再將全部抽取的JavaScript代碼用自定義的基本詞表示,然后利用3種機器學習算法通過異常檢測模型檢測惡意網頁;文獻[8]提出一種手動定義的啟發式方法,使用靜態特征提取來檢測惡意HTML文檔.這些方法與本文的研究類似,不同之處在于,本文使用無解析器標記化方法來計算HTML文件的表示,而不是顯式地解析HTML,JavaScript或CSS,甚至模擬JavaScript的執行.Web內容的無解析器表示允許對惡意文檔和良性文檔的語法和語義做出最少量的假設,從而使深度學習模型在學習Web內容的內部表示方面具有最大的靈活性.
在Web內容檢測之外,國內外學者在基于深度學習的文本分類領域做出了廣泛的研究.例如,文獻[9]提出的單層卷積神經網絡(CNN),使用無監督(Word2Vec)序列和詞嵌入(word embedding)序列,在句子分類任務中,可以提供良好的性能;文獻[10]對使用單層CNN進行文本分類所需要的超參數進行調整,進一步優化模型性能;文獻[11]的模型則表明在文本分類問題上,直接從字符輸入中學習表示的CNN方法更具競爭力.本文的工作涉及了這些方法,但不同之處,本文模型是運行在HTML、JavaScript和CSS多種格式混搭的HTML網頁上,這些格式中可能包含任意源代碼、攻擊負載和自然語言.由于HTML文件內容的不確定性使得定義離散詞匯變得相對困難,因此本文不使用詞嵌入作為模型輸入,相反使用簡單的、格式無關的標記化方法對Web文檔分層表示.
本文模型是基于惡意網頁檢測的下述特殊性提出的:
(1)惡意內容片段通常很小,但HTML文檔的長度差異非常大,這意味著惡意內容在HTML文檔中的長度比例是可變的.因此需要模型在多個空間尺度上檢查文檔,以識別給定文檔是否是惡意的.
(2)HTML文檔的顯式解析實際上是HTML、JavaScript、CSS和數據的執行,這是不可取的,因為這可能需要高計算開銷,并且在檢測器內打開攻擊面,存在被攻擊者利用的可能.
(3)JavaScript的仿真執行、靜態分析或符號執行也不可取,因為同樣存在增加計算開銷和在檢測器內打開攻擊面的可能.
基于上述問題,模型設計遵循了下述原則:
(1)模型不對HTML文檔執行詳細解析、靜態分析、符號執行或內容模擬,而是對文檔組成格式做最小假設,進行簡單的詞袋樣式標記,本文稱為令牌袋(Bag of Token,BoT).
(2)模型在代表不同區域和聚合層級的多個尺度空間上捕獲局部性表示,而不是簡單地將整個文檔以單層的令牌袋表示.
模型涉及一個特征提取器,負責從HTML文檔中解析出一系列令牌(token);一個神經網絡模型,包括兩個邏輯組件.
(1)檢查員:在分層空間尺度上應用共享權重(shared-weight),并將文檔的信息聚合成1024長度的向量.
(2)主網絡:對檢查員的輸出做出最終的分類決策.
(3)特征提取器:首先,使用正則表達式([^x00-x7F]+|w+)+)對目標文檔進行標記,它將文檔沿非字母數字字邊界進行分割.然后將得到的令牌流劃分為16個相等長度的連續塊,其中長度定義為令牌數,如果文檔的令牌數量不能被16整除,則最后一個塊中的令牌要少.標記化和分塊功能系統實現的Python代碼函數TokenizeChunk如下.

接下來,使用函數TokenizeLengthHash,它利用一個修改過的hashing trick,使用1024個bin,為每個塊創建令牌袋.


整個流程的結果是,先將HTML文檔標記,再將得到的令牌集合分成16個相等長度的塊,然后將每個塊散列到1024個bin中,得到一個16×1024 tensor,表示從HTML文檔中提取的令牌袋序列,其中序列中的每個元素表示輸入文檔的連續1/16上的聚合.
(4)檢查員組件:檢查員負責將提取的特征表示輸入到神經網絡中.如圖1所示,第一步,創建一個層級表示令牌序列,在這個層級中,先將最初的16個令牌袋折疊成8個令牌袋,再將8個令牌袋折疊成4個,4折疊成2,2折疊成1.這樣就在多個空間尺度上獲得了多個令牌袋,用于捕獲令牌的出現.整個折疊過程的平均窗口長度為2,步長為2,直到遞歸得到一個令牌袋.采用平均而不是求和的方法,對于給定文檔保證了每個表示級別的范數相同.

圖1 檢查員組件邏輯
一旦檢查員創建了這種分層表示,它就會繼續訪問聚合樹中的每個節點并計算輸出向量.檢查員是一個前饋神經網絡,有兩個完全連接的層,每個層有1024個ReLU單元.本文使用layer normalization[12]來防止梯度彌散,使用dropout[13]規范化檢查員,dropout=0.2.
在檢查器訪問每個節點后,為了計算1024維向量輸出,模型從1024個神經元中獲取最大激活,其結果是用最后一個層中的每個神經元的最大輸出表示文檔的最終向量.簡單地說,這將增強輸出向量捕獲模式,因為這些模式最好地匹配了用于預測惡意內容的已知模板特征,無論它們出現在文檔中的什么位置,或者整個文檔有多長.
(5)主網絡組件:一旦檢查員計算了目標文檔的1024維輸出向量,向量就被輸入到模型的主網絡中.如圖2所示,主網絡也是一個前饋神經網絡,有兩個完全連接的層,在每個完全連接的層之前是layer normalization和dropout,與檢查員的一樣,dropout=0.2.

圖2 主網絡組件邏輯
模型的最后一層由26個Sigmoid單元組成,對應于對文檔做出的26個檢測決策.其中一個Sigmoid用于確定目標文檔是惡意的還是良性的,其余25個Sigmoid檢測各種信息標簽,用于確定文檔的惡意軟件家族歸屬,例如確定文檔是網絡釣魚網頁還是漏洞利用工具包.為了訓練模型,本文在每個Sigmoid輸出上使用binary-cross-entropy損失函數,然后平均得到的梯度以計算參數更新.模型強調評估良好與不良Sigmoid輸出的準確性,但也考慮了模型輸出的性能.
本文的目標是創建一個可以運行在端點、防火墻和Web代理上的快速Web內容檢測模型.模型的準確性和速度是主要考核指標.
本文以兩種方式測試了上述模型的準確性.首先它與其他詞袋模型進行了比較,這些基線模型代表了標準的文檔分類方法,其次以各種方式修改了模型,以測試模型設計的合理性.
本文沒有直接給出實驗用例測試模型的速度.分層尺度空間模型涉及網頁內容的解析,但同涉及Web內容解析或仿真執行的其他方法比較,40萬個網頁的檢測耗時僅為這類WAF產品的30%,速度優勢明顯.
實驗數據集來源于360公司的NGSOC和TIP平臺.360公司全球化布控的探針每天接收數萬個新的HTML文件,使用60個Web威脅掃描程序掃描它們.實驗數據集是平臺2018年前9個月推送的數據,如圖3所示.

圖3 實驗數據集
HTML文件基于SHA256進行唯一標識.訓練/測試集的拆分依據文件的首次推送時間來計算.這可以確保:一是訓練和測試集是不同的(因為稍后提交的相同HTML文件將解釋為重新推送該文件,會選擇忽略);二是訓練和測試實驗更加接近實際部署場景.
標記策略是將良性HTML文件定義為全部掃描器判斷為正常的文件,即0威脅,將惡意文件定義為3個或更多掃描器判定為威脅的文件.因此實驗丟棄了1到2個掃描器判定為威脅的文件,因為這一小部分檢測意味著安全行業仍然無法確定它們是惡意的還是良性的.從圖2中可以看出,這些不確定的文件占整個文件集很小的一部分.
這種標記方法存在風險,即模型簡單地記住了360產品的知識,而不是學習真正新穎的檢測功能,以檢測360可能錯過的未知威脅.因此在實驗中,本文使用了歷史模擬法(historical simulation),定義如下:
(1)在360首次推送的某個時間點t之前Web內容文件上訓練模型.
(2)在時間點t后兩個月內首次出現的Web內容文件上測試模型.
此方法彌補了模型檢測未知威脅能力不足的問題,這是因為測試的文件在訓練中從沒有出現過,但是360有時間通過檢測規則和黑名單更新來檢測新的威脅.換句話說,只要模型能夠正確預測未來Web內容的標簽,360就有時間將黑名單或檢測規則更新,從而間接證明本文模型具備檢測0-day威脅的能力.
另外,本文還手工檢查了標記為良性的,但模型卻顯示具有很高惡意概率的樣本,最終發現大多數誤報是垃圾內容,后面會詳細討論.
為了評估分層尺度空間模型的性能,本文進行了4個實驗.其中對比實驗將本文模型與其他基線模型進行了比較,對比實驗中涉及的神經網絡模型,模型訓練采取Adam優化算法、batch_size=64,以及基于驗證集的早停法.2個對比實驗設置如下:
FF-BoT:一種前饋架構,使用本文模型提取的令牌作為輸入,但是將其散列為16 284長度向量.因為它與本文模型中使用的16×1024表示具有相同的維度,因此近似于逐個比較.FF-BoT提供了一個簡單的深度學習詞袋基線與本文模型進行比較.
XGBoost-BoT:使用與FF-BoT相同的特征輸入的梯度提升決策樹(XG-Boost)模型.
另外本文還對分層尺度空間模型進行了修改,以確定模型內部流程的合理性.2個修改實驗如下:
HIM-Flat1:模型的變體1,刪除了平均池化步驟,這樣檢查員只能看到樹的葉節點.換句話說,在輸入冠軍模型的31個聚合表示中,該模型只能看到16個連續的塊,而沒有更大的聚合窗口.此實驗用于對比在分層空間尺度上檢測HTML文檔的性能增益.
HIM-Flat2:模型的變體2,一個簡單的前饋神經網絡,它使用與分層尺度空間模型相同的特征表示.但是,它不是在每一步都應用共享權重檢查,而是簡單地將16×1024連續的令牌向量光柵化為單個16 284長度的向量,并將其輸入到前饋神經網絡中.該實驗評估了模型相對于只在第一層密集使用共享權重檢查的性能增益.
圖4(a)和圖4(b)給出了實驗結果的ROC曲線,y軸表示TPR真陽率,x軸表示FPR假陽率.圖4(a)將FF-BoT和XGBoost-BoT與本文模型進行了比較,圖4(b)將修改模型與完整模型進行了比較.

圖4 實驗ROC曲線對比圖
圖4(a)的ROC曲線顯示本文模型要優于其他基線模型.以0.1%的FPR比較這些模型的相對性能,本文模型、FF-BoT和XGBoost-BoT分別達到96.4%、94.5%和94.1%的檢測率.根據FPR,本文模型實現了3.6%的假陽率,而FF-BoT和XGBoost-BoT大約是5.5%和5.9%.總體來說,分層尺度空間模型的整體ROC曲線明顯優于FF-BoT和XGBoost-BoT.
另外FF-BoT參數(約2000萬)遠遠超過本文模型(約400萬),相對于本文模型表現不佳.這表明本文模型捕獲了更有效的惡意HTML文檔特征表示,這要歸功于檢查員在分層表示中檢查的每個空間上下文中使用相同的參數.
圖4(b)的ROC曲線顯示在0.1%的FPR前提下,HIM-Flat1和HIM-Flat2變體的檢測率均達到93.5%.變體模型的ROC曲線明顯差于本文模型.與HIMFlat1的對比實驗表明在多個空間尺度上檢查內容對于獲得良好的準確性至關重要.類似地,與HIM-Flat2的對比表明,檢查員在檢查每個空間上下文和尺度時使用相同的參數對于產生高檢測精度的重要性,因為HIM-Flat2對每個空間上下文使用單獨的權重,從而得到更差的結果.
為了更好地理解分層尺度空間模型學到了什么,本文采用了惡意軟件家族標簽來細分惡意樣本.基于0.1%的全局誤報率閾值,分層尺度空間模型的總體檢測率為96.4%,并根據預設的惡意軟件家族對檢出文件進行了歸類.表1中的顯示表明,本文模型在代碼注入XSS,瀏覽器漏洞利用和iFrame劫持方面取得了理想的檢測效果,但在釣魚網站上的檢測率不高.由于一個惡意文件可能同時屬于多個家族,故表中的百分比總和要大于100%.
另外,本文還檢查了模型與360公司標簽不一致的情況,證明模型實際上已經檢測到360錯過的未知惡意Web內容.為進行這項分析,本文檢查360公司標記為良性驗證集中排名前20的評分測試示例,發現20個中的11個實際上是惡意的或有潛在威脅的,9個是誤報.惡意文件中的3個是來自網頁內容攔截器的警報頁面,本身不是惡意但表示惡意警告;3個是惡意偽裝JQuery庫,1個是釋放svchost.exe木馬文件到磁盤的Javascript,1個是頁面點擊劫持,1個是包含下載者執行代碼的頁面,2個是垃圾廣告郵件.該分析驗證了模型能夠超越標簽噪聲并識別未知的惡意內容.
本文的工作與大多數基于深度學習的文檔分類(如情感分類)不同,本文設法捕獲試圖逃避檢測的惡意行為,而情感分類句子作者并不隱藏他們表達的情緒.此外,本文避免使用原始字符序列作為模型的輸入,因為HTML文檔的長度使得涉及原始字符串的卷積神經網絡在端點和防火墻上難以處理.本文模型采用純粹基于令牌的靜態檢測方法,避免了復雜解析或仿真系統的需求,能有效處理Web頁面的檢測問題,而不管Web頁面的大小如何變化,以0.1%的誤報率實現96.4%檢測性能,甚至可以識別以前未被安全產商捕獲的惡意Web內容.模型良好的速度和準確性使得其適合部署到端點、防火墻和Web代理中.