袁 梁,林金芳
1(無錫城市職業(yè)技術(shù)學(xué)院 師范學(xué)院,無錫 214153)
2(國防科技大學(xué) 系統(tǒng)工程學(xué)院,長沙 410073)
當(dāng)前,利用惡意網(wǎng)頁的攻擊非常普遍.360安全報(bào)告指出,2018年上半年,360互聯(lián)網(wǎng)安全中心共截獲各類新增惡意網(wǎng)頁1622.6萬個(gè),同比2017年上半年(201.5萬個(gè))上升了7倍[1].如何有效識(shí)別這些惡意網(wǎng)頁面臨多種挑戰(zhàn):首先檢測(cè)方法必須在用戶無感的情況下運(yùn)行;其次檢測(cè)方法必須能夠識(shí)別惡意網(wǎng)頁以躲避檢測(cè)為目的的各種代碼混淆技術(shù);最后檢測(cè)方法必須能夠在海量的Web網(wǎng)頁訪問中,快速找出嵌入在正常網(wǎng)頁中的惡意代碼片段[2].
為了應(yīng)對(duì)這些挑戰(zhàn),本文提出了一種基于深度學(xué)習(xí)的惡意網(wǎng)頁快速檢測(cè)方法,使用簡單的12個(gè)字符正則表達(dá)式標(biāo)記化Web內(nèi)容,然后在多個(gè)分層空間尺度上檢測(cè)這些內(nèi)容.分層空間尺度是指不是簡單地將整個(gè)HTML文件上的令牌(token)集合作為輸入,而是計(jì)算令牌集合在多個(gè)本地特定子區(qū)域上的表示:將HTML文件分成1/2、1/4、1/8和1/16,然后在這些層級(jí)上運(yùn)用兩個(gè)全連接層(fully connected layer)來提取這個(gè)HTML文件的表示.該方法基于簡單的令牌流輸入來學(xué)習(xí)Web內(nèi)容的高質(zhì)量表示,可以從任意長度的網(wǎng)頁中快速找到微小惡意代碼片段.
惡意網(wǎng)頁檢測(cè)研究工作的一個(gè)重點(diǎn)是僅使用URL字符串來檢測(cè)惡意Web內(nèi)容.文獻(xiàn)[3]基于黑名單的方法,首先對(duì)惡意URL進(jìn)行標(biāo)注,然后利用字符串匹配等技術(shù)實(shí)現(xiàn)惡意URL的識(shí)別;文獻(xiàn)[4]以URL詞匯特征和主機(jī)特征為基礎(chǔ)建立統(tǒng)一的分類模型,進(jìn)而根據(jù)已有標(biāo)注集合識(shí)別惡意URL,他們專注于人工標(biāo)注來最大化檢測(cè)精度;文獻(xiàn)[5]使用URL作為檢測(cè)依據(jù),但也包含其他信息,例如Web鏈接中的URL引用,將手工提取特征作為SVM和K-最鄰近分類器的輸入.但是這些方法只關(guān)注URL相關(guān)信息,因此無法利用Web內(nèi)容中的惡意語義.雖然基于URL的系統(tǒng)具有輕量級(jí)的優(yōu)勢(shì),并且可以在沒有完整Web內(nèi)容的環(huán)境中進(jìn)行部署,但本文的工作重點(diǎn)是HTML文件,因?yàn)樗鼈兡軝z測(cè)出更深層次的威脅.
文獻(xiàn)[6-8]嘗試從HTML和JavaScript中提取特征并將其提供給機(jī)器學(xué)習(xí)或啟發(fā)式檢測(cè)系統(tǒng)來檢測(cè)惡意Web內(nèi)容.文獻(xiàn)[6]提出一種基于機(jī)器學(xué)習(xí)分類器的網(wǎng)頁惡意代碼檢測(cè)方法,通過分析JavaScript腳本本身特征,來檢測(cè)網(wǎng)頁惡意JavaScript腳本;文獻(xiàn)[7]提出一個(gè)Web網(wǎng)頁抓取器,用于JavaScript反混淆和分析,再將全部抽取的JavaScript代碼用自定義的基本詞表示,然后利用3種機(jī)器學(xué)習(xí)算法通過異常檢測(cè)模型檢測(cè)惡意網(wǎng)頁;文獻(xiàn)[8]提出一種手動(dòng)定義的啟發(fā)式方法,使用靜態(tài)特征提取來檢測(cè)惡意HTML文檔.這些方法與本文的研究類似,不同之處在于,本文使用無解析器標(biāo)記化方法來計(jì)算HTML文件的表示,而不是顯式地解析HTML,JavaScript或CSS,甚至模擬JavaScript的執(zhí)行.Web內(nèi)容的無解析器表示允許對(duì)惡意文檔和良性文檔的語法和語義做出最少量的假設(shè),從而使深度學(xué)習(xí)模型在學(xué)習(xí)Web內(nèi)容的內(nèi)部表示方面具有最大的靈活性.
在Web內(nèi)容檢測(cè)之外,國內(nèi)外學(xué)者在基于深度學(xué)習(xí)的文本分類領(lǐng)域做出了廣泛的研究.例如,文獻(xiàn)[9]提出的單層卷積神經(jīng)網(wǎng)絡(luò)(CNN),使用無監(jiān)督(Word2Vec)序列和詞嵌入(word embedding)序列,在句子分類任務(wù)中,可以提供良好的性能;文獻(xiàn)[10]對(duì)使用單層CNN進(jìn)行文本分類所需要的超參數(shù)進(jìn)行調(diào)整,進(jìn)一步優(yōu)化模型性能;文獻(xiàn)[11]的模型則表明在文本分類問題上,直接從字符輸入中學(xué)習(xí)表示的CNN方法更具競(jìng)爭力.本文的工作涉及了這些方法,但不同之處,本文模型是運(yùn)行在HTML、JavaScript和CSS多種格式混搭的HTML網(wǎng)頁上,這些格式中可能包含任意源代碼、攻擊負(fù)載和自然語言.由于HTML文件內(nèi)容的不確定性使得定義離散詞匯變得相對(duì)困難,因此本文不使用詞嵌入作為模型輸入,相反使用簡單的、格式無關(guān)的標(biāo)記化方法對(duì)Web文檔分層表示.
本文模型是基于惡意網(wǎng)頁檢測(cè)的下述特殊性提出的:
(1)惡意內(nèi)容片段通常很小,但HTML文檔的長度差異非常大,這意味著惡意內(nèi)容在HTML文檔中的長度比例是可變的.因此需要模型在多個(gè)空間尺度上檢查文檔,以識(shí)別給定文檔是否是惡意的.
(2)HTML文檔的顯式解析實(shí)際上是HTML、JavaScript、CSS和數(shù)據(jù)的執(zhí)行,這是不可取的,因?yàn)檫@可能需要高計(jì)算開銷,并且在檢測(cè)器內(nèi)打開攻擊面,存在被攻擊者利用的可能.
(3)JavaScript的仿真執(zhí)行、靜態(tài)分析或符號(hào)執(zhí)行也不可取,因?yàn)橥瑯哟嬖谠黾佑?jì)算開銷和在檢測(cè)器內(nèi)打開攻擊面的可能.
基于上述問題,模型設(shè)計(jì)遵循了下述原則:
(1)模型不對(duì)HTML文檔執(zhí)行詳細(xì)解析、靜態(tài)分析、符號(hào)執(zhí)行或內(nèi)容模擬,而是對(duì)文檔組成格式做最小假設(shè),進(jìn)行簡單的詞袋樣式標(biāo)記,本文稱為令牌袋(Bag of Token,BoT).
(2)模型在代表不同區(qū)域和聚合層級(jí)的多個(gè)尺度空間上捕獲局部性表示,而不是簡單地將整個(gè)文檔以單層的令牌袋表示.
模型涉及一個(gè)特征提取器,負(fù)責(zé)從HTML文檔中解析出一系列令牌(token);一個(gè)神經(jīng)網(wǎng)絡(luò)模型,包括兩個(gè)邏輯組件.
(1)檢查員:在分層空間尺度上應(yīng)用共享權(quán)重(shared-weight),并將文檔的信息聚合成1024長度的向量.
(2)主網(wǎng)絡(luò):對(duì)檢查員的輸出做出最終的分類決策.
(3)特征提取器:首先,使用正則表達(dá)式([^x00-x7F]+|w+)+)對(duì)目標(biāo)文檔進(jìn)行標(biāo)記,它將文檔沿非字母數(shù)字字邊界進(jìn)行分割.然后將得到的令牌流劃分為16個(gè)相等長度的連續(xù)塊,其中長度定義為令牌數(shù),如果文檔的令牌數(shù)量不能被16整除,則最后一個(gè)塊中的令牌要少.標(biāo)記化和分塊功能系統(tǒng)實(shí)現(xiàn)的Python代碼函數(shù)TokenizeChunk如下.
接下來,使用函數(shù)TokenizeLengthHash,它利用一個(gè)修改過的hashing trick,使用1024個(gè)bin,為每個(gè)塊創(chuàng)建令牌袋.
整個(gè)流程的結(jié)果是,先將HTML文檔標(biāo)記,再將得到的令牌集合分成16個(gè)相等長度的塊,然后將每個(gè)塊散列到1024個(gè)bin中,得到一個(gè)16×1024 tensor,表示從HTML文檔中提取的令牌袋序列,其中序列中的每個(gè)元素表示輸入文檔的連續(xù)1/16上的聚合.
(4)檢查員組件:檢查員負(fù)責(zé)將提取的特征表示輸入到神經(jīng)網(wǎng)絡(luò)中.如圖1所示,第一步,創(chuàng)建一個(gè)層級(jí)表示令牌序列,在這個(gè)層級(jí)中,先將最初的16個(gè)令牌袋折疊成8個(gè)令牌袋,再將8個(gè)令牌袋折疊成4個(gè),4折疊成2,2折疊成1.這樣就在多個(gè)空間尺度上獲得了多個(gè)令牌袋,用于捕獲令牌的出現(xiàn).整個(gè)折疊過程的平均窗口長度為2,步長為2,直到遞歸得到一個(gè)令牌袋.采用平均而不是求和的方法,對(duì)于給定文檔保證了每個(gè)表示級(jí)別的范數(shù)相同.
圖1 檢查員組件邏輯
一旦檢查員創(chuàng)建了這種分層表示,它就會(huì)繼續(xù)訪問聚合樹中的每個(gè)節(jié)點(diǎn)并計(jì)算輸出向量.檢查員是一個(gè)前饋神經(jīng)網(wǎng)絡(luò),有兩個(gè)完全連接的層,每個(gè)層有1024個(gè)ReLU單元.本文使用layer normalization[12]來防止梯度彌散,使用dropout[13]規(guī)范化檢查員,dropout=0.2.
在檢查器訪問每個(gè)節(jié)點(diǎn)后,為了計(jì)算1024維向量輸出,模型從1024個(gè)神經(jīng)元中獲取最大激活,其結(jié)果是用最后一個(gè)層中的每個(gè)神經(jīng)元的最大輸出表示文檔的最終向量.簡單地說,這將增強(qiáng)輸出向量捕獲模式,因?yàn)檫@些模式最好地匹配了用于預(yù)測(cè)惡意內(nèi)容的已知模板特征,無論它們出現(xiàn)在文檔中的什么位置,或者整個(gè)文檔有多長.
(5)主網(wǎng)絡(luò)組件:一旦檢查員計(jì)算了目標(biāo)文檔的1024維輸出向量,向量就被輸入到模型的主網(wǎng)絡(luò)中.如圖2所示,主網(wǎng)絡(luò)也是一個(gè)前饋神經(jīng)網(wǎng)絡(luò),有兩個(gè)完全連接的層,在每個(gè)完全連接的層之前是layer normalization和dropout,與檢查員的一樣,dropout=0.2.
圖2 主網(wǎng)絡(luò)組件邏輯
模型的最后一層由26個(gè)Sigmoid單元組成,對(duì)應(yīng)于對(duì)文檔做出的26個(gè)檢測(cè)決策.其中一個(gè)Sigmoid用于確定目標(biāo)文檔是惡意的還是良性的,其余25個(gè)Sigmoid檢測(cè)各種信息標(biāo)簽,用于確定文檔的惡意軟件家族歸屬,例如確定文檔是網(wǎng)絡(luò)釣魚網(wǎng)頁還是漏洞利用工具包.為了訓(xùn)練模型,本文在每個(gè)Sigmoid輸出上使用binary-cross-entropy損失函數(shù),然后平均得到的梯度以計(jì)算參數(shù)更新.模型強(qiáng)調(diào)評(píng)估良好與不良Sigmoid輸出的準(zhǔn)確性,但也考慮了模型輸出的性能.
本文的目標(biāo)是創(chuàng)建一個(gè)可以運(yùn)行在端點(diǎn)、防火墻和Web代理上的快速Web內(nèi)容檢測(cè)模型.模型的準(zhǔn)確性和速度是主要考核指標(biāo).
本文以兩種方式測(cè)試了上述模型的準(zhǔn)確性.首先它與其他詞袋模型進(jìn)行了比較,這些基線模型代表了標(biāo)準(zhǔn)的文檔分類方法,其次以各種方式修改了模型,以測(cè)試模型設(shè)計(jì)的合理性.
本文沒有直接給出實(shí)驗(yàn)用例測(cè)試模型的速度.分層尺度空間模型涉及網(wǎng)頁內(nèi)容的解析,但同涉及Web內(nèi)容解析或仿真執(zhí)行的其他方法比較,40萬個(gè)網(wǎng)頁的檢測(cè)耗時(shí)僅為這類WAF產(chǎn)品的30%,速度優(yōu)勢(shì)明顯.
實(shí)驗(yàn)數(shù)據(jù)集來源于360公司的NGSOC和TIP平臺(tái).360公司全球化布控的探針每天接收數(shù)萬個(gè)新的HTML文件,使用60個(gè)Web威脅掃描程序掃描它們.實(shí)驗(yàn)數(shù)據(jù)集是平臺(tái)2018年前9個(gè)月推送的數(shù)據(jù),如圖3所示.
圖3 實(shí)驗(yàn)數(shù)據(jù)集
HTML文件基于SHA256進(jìn)行唯一標(biāo)識(shí).訓(xùn)練/測(cè)試集的拆分依據(jù)文件的首次推送時(shí)間來計(jì)算.這可以確保:一是訓(xùn)練和測(cè)試集是不同的(因?yàn)樯院筇峤坏南嗤琀TML文件將解釋為重新推送該文件,會(huì)選擇忽略);二是訓(xùn)練和測(cè)試實(shí)驗(yàn)更加接近實(shí)際部署場(chǎng)景.
標(biāo)記策略是將良性HTML文件定義為全部掃描器判斷為正常的文件,即0威脅,將惡意文件定義為3個(gè)或更多掃描器判定為威脅的文件.因此實(shí)驗(yàn)丟棄了1到2個(gè)掃描器判定為威脅的文件,因?yàn)檫@一小部分檢測(cè)意味著安全行業(yè)仍然無法確定它們是惡意的還是良性的.從圖2中可以看出,這些不確定的文件占整個(gè)文件集很小的一部分.
這種標(biāo)記方法存在風(fēng)險(xiǎn),即模型簡單地記住了360產(chǎn)品的知識(shí),而不是學(xué)習(xí)真正新穎的檢測(cè)功能,以檢測(cè)360可能錯(cuò)過的未知威脅.因此在實(shí)驗(yàn)中,本文使用了歷史模擬法(historical simulation),定義如下:
(1)在360首次推送的某個(gè)時(shí)間點(diǎn)t之前Web內(nèi)容文件上訓(xùn)練模型.
(2)在時(shí)間點(diǎn)t后兩個(gè)月內(nèi)首次出現(xiàn)的Web內(nèi)容文件上測(cè)試模型.
此方法彌補(bǔ)了模型檢測(cè)未知威脅能力不足的問題,這是因?yàn)闇y(cè)試的文件在訓(xùn)練中從沒有出現(xiàn)過,但是360有時(shí)間通過檢測(cè)規(guī)則和黑名單更新來檢測(cè)新的威脅.換句話說,只要模型能夠正確預(yù)測(cè)未來Web內(nèi)容的標(biāo)簽,360就有時(shí)間將黑名單或檢測(cè)規(guī)則更新,從而間接證明本文模型具備檢測(cè)0-day威脅的能力.
另外,本文還手工檢查了標(biāo)記為良性的,但模型卻顯示具有很高惡意概率的樣本,最終發(fā)現(xiàn)大多數(shù)誤報(bào)是垃圾內(nèi)容,后面會(huì)詳細(xì)討論.
為了評(píng)估分層尺度空間模型的性能,本文進(jìn)行了4個(gè)實(shí)驗(yàn).其中對(duì)比實(shí)驗(yàn)將本文模型與其他基線模型進(jìn)行了比較,對(duì)比實(shí)驗(yàn)中涉及的神經(jīng)網(wǎng)絡(luò)模型,模型訓(xùn)練采取Adam優(yōu)化算法、batch_size=64,以及基于驗(yàn)證集的早停法.2個(gè)對(duì)比實(shí)驗(yàn)設(shè)置如下:
FF-BoT:一種前饋架構(gòu),使用本文模型提取的令牌作為輸入,但是將其散列為16 284長度向量.因?yàn)樗c本文模型中使用的16×1024表示具有相同的維度,因此近似于逐個(gè)比較.FF-BoT提供了一個(gè)簡單的深度學(xué)習(xí)詞袋基線與本文模型進(jìn)行比較.
XGBoost-BoT:使用與FF-BoT相同的特征輸入的梯度提升決策樹(XG-Boost)模型.
另外本文還對(duì)分層尺度空間模型進(jìn)行了修改,以確定模型內(nèi)部流程的合理性.2個(gè)修改實(shí)驗(yàn)如下:
HIM-Flat1:模型的變體1,刪除了平均池化步驟,這樣檢查員只能看到樹的葉節(jié)點(diǎn).換句話說,在輸入冠軍模型的31個(gè)聚合表示中,該模型只能看到16個(gè)連續(xù)的塊,而沒有更大的聚合窗口.此實(shí)驗(yàn)用于對(duì)比在分層空間尺度上檢測(cè)HTML文檔的性能增益.
HIM-Flat2:模型的變體2,一個(gè)簡單的前饋神經(jīng)網(wǎng)絡(luò),它使用與分層尺度空間模型相同的特征表示.但是,它不是在每一步都應(yīng)用共享權(quán)重檢查,而是簡單地將16×1024連續(xù)的令牌向量光柵化為單個(gè)16 284長度的向量,并將其輸入到前饋神經(jīng)網(wǎng)絡(luò)中.該實(shí)驗(yàn)評(píng)估了模型相對(duì)于只在第一層密集使用共享權(quán)重檢查的性能增益.
圖4(a)和圖4(b)給出了實(shí)驗(yàn)結(jié)果的ROC曲線,y軸表示TPR真陽率,x軸表示FPR假陽率.圖4(a)將FF-BoT和XGBoost-BoT與本文模型進(jìn)行了比較,圖4(b)將修改模型與完整模型進(jìn)行了比較.
圖4 實(shí)驗(yàn)ROC曲線對(duì)比圖
圖4(a)的ROC曲線顯示本文模型要優(yōu)于其他基線模型.以0.1%的FPR比較這些模型的相對(duì)性能,本文模型、FF-BoT和XGBoost-BoT分別達(dá)到96.4%、94.5%和94.1%的檢測(cè)率.根據(jù)FPR,本文模型實(shí)現(xiàn)了3.6%的假陽率,而FF-BoT和XGBoost-BoT大約是5.5%和5.9%.總體來說,分層尺度空間模型的整體ROC曲線明顯優(yōu)于FF-BoT和XGBoost-BoT.
另外FF-BoT參數(shù)(約2000萬)遠(yuǎn)遠(yuǎn)超過本文模型(約400萬),相對(duì)于本文模型表現(xiàn)不佳.這表明本文模型捕獲了更有效的惡意HTML文檔特征表示,這要?dú)w功于檢查員在分層表示中檢查的每個(gè)空間上下文中使用相同的參數(shù).
圖4(b)的ROC曲線顯示在0.1%的FPR前提下,HIM-Flat1和HIM-Flat2變體的檢測(cè)率均達(dá)到93.5%.變體模型的ROC曲線明顯差于本文模型.與HIMFlat1的對(duì)比實(shí)驗(yàn)表明在多個(gè)空間尺度上檢查內(nèi)容對(duì)于獲得良好的準(zhǔn)確性至關(guān)重要.類似地,與HIM-Flat2的對(duì)比表明,檢查員在檢查每個(gè)空間上下文和尺度時(shí)使用相同的參數(shù)對(duì)于產(chǎn)生高檢測(cè)精度的重要性,因?yàn)镠IM-Flat2對(duì)每個(gè)空間上下文使用單獨(dú)的權(quán)重,從而得到更差的結(jié)果.
為了更好地理解分層尺度空間模型學(xué)到了什么,本文采用了惡意軟件家族標(biāo)簽來細(xì)分惡意樣本.基于0.1%的全局誤報(bào)率閾值,分層尺度空間模型的總體檢測(cè)率為96.4%,并根據(jù)預(yù)設(shè)的惡意軟件家族對(duì)檢出文件進(jìn)行了歸類.表1中的顯示表明,本文模型在代碼注入XSS,瀏覽器漏洞利用和iFrame劫持方面取得了理想的檢測(cè)效果,但在釣魚網(wǎng)站上的檢測(cè)率不高.由于一個(gè)惡意文件可能同時(shí)屬于多個(gè)家族,故表中的百分比總和要大于100%.
另外,本文還檢查了模型與360公司標(biāo)簽不一致的情況,證明模型實(shí)際上已經(jīng)檢測(cè)到360錯(cuò)過的未知惡意Web內(nèi)容.為進(jìn)行這項(xiàng)分析,本文檢查360公司標(biāo)記為良性驗(yàn)證集中排名前20的評(píng)分測(cè)試示例,發(fā)現(xiàn)20個(gè)中的11個(gè)實(shí)際上是惡意的或有潛在威脅的,9個(gè)是誤報(bào).惡意文件中的3個(gè)是來自網(wǎng)頁內(nèi)容攔截器的警報(bào)頁面,本身不是惡意但表示惡意警告;3個(gè)是惡意偽裝JQuery庫,1個(gè)是釋放svchost.exe木馬文件到磁盤的Javascript,1個(gè)是頁面點(diǎn)擊劫持,1個(gè)是包含下載者執(zhí)行代碼的頁面,2個(gè)是垃圾廣告郵件.該分析驗(yàn)證了模型能夠超越標(biāo)簽噪聲并識(shí)別未知的惡意內(nèi)容.
本文的工作與大多數(shù)基于深度學(xué)習(xí)的文檔分類(如情感分類)不同,本文設(shè)法捕獲試圖逃避檢測(cè)的惡意行為,而情感分類句子作者并不隱藏他們表達(dá)的情緒.此外,本文避免使用原始字符序列作為模型的輸入,因?yàn)镠TML文檔的長度使得涉及原始字符串的卷積神經(jīng)網(wǎng)絡(luò)在端點(diǎn)和防火墻上難以處理.本文模型采用純粹基于令牌的靜態(tài)檢測(cè)方法,避免了復(fù)雜解析或仿真系統(tǒng)的需求,能有效處理Web頁面的檢測(cè)問題,而不管Web頁面的大小如何變化,以0.1%的誤報(bào)率實(shí)現(xiàn)96.4%檢測(cè)性能,甚至可以識(shí)別以前未被安全產(chǎn)商捕獲的惡意Web內(nèi)容.模型良好的速度和準(zhǔn)確性使得其適合部署到端點(diǎn)、防火墻和Web代理中.