吳森焱,羅 熹,王偉平,覃 巖
1(中南大學 計算機學院,湖南 長沙 41008 3)
2(湖南警察學院 信息技術系,湖南 長沙 41 0083)
隨著互聯網的快速普及,用戶在生活和工作中享受到了互聯網帶來的便利服務,同時也面臨著惡意網頁的安全威脅.惡意URL 指所對應的網頁中,含有對用戶造成危害的惡意代碼.這些惡意代碼在用戶訪問網頁的過程中,利用用戶的瀏覽器或插件中存在的漏洞攻擊用戶,自動下載惡意軟件.根據賽門鐵克發布統計報告,2018年發現的新增惡意URL 達到近3 億個,惡意URL 已經成為互聯網安全中最主要的威脅之一[1].
攻擊者利用惡意URL 進行攻擊的整體流程通常包括:首先,攻擊者入侵正常網站取得管理權限,并在頁面中插入自動重定向代碼;這些代碼會將用戶引導到惡意URL,一旦用戶訪問這個被篡改網站的URL,用戶會在不知情的情況下被強制性自動跳轉到惡意網站;惡意網站根據用戶的請求信息判斷用戶的客戶端環境,對于符合攻擊條件的用戶,則直接返回包含惡意代碼的惡意頁面;當用戶的瀏覽器在解析和執行這些惡意頁面的過程中,惡意代碼就會自動執行,利用瀏覽器或插件的漏洞取得高級的系統權限,自動將惡意軟件下載到用戶客戶端,對用戶造成持續性的危害.惡意URL 的整個攻擊流程不需要用戶參與交互,攻擊方式非常隱蔽.
目前,針對惡意網站的檢測方法多是對頁面代碼進行靜態分析或者采用動態執行的方式來進行檢測.其中,基于頁面代碼靜態分析的方法通過對頁面代碼進行靜態匹配與分析,然后基于啟發式規則和機器學習進行檢測,常見的頁面特征包括隱藏標簽的數量、字符串的最大長度和頁面中URL 的數量等.基于頁面代碼靜態分析的方法檢測速度較快,通常用于初步的篩選和過濾.基于動態執行的方法是在受控環境(如客戶端蜜罐)中執行源代碼,監控觸發的行為與系統狀態變化,但只有在特定的環境下才會觸發惡意URL 的攻擊行為.
盡管研究人員提出了多種檢測方法,惡意URL 會采用多種逃避檢測的方法,例如用代碼混淆來逃避靜態分析中的特征提取,從而使得基于靜態特征的方法失效;用客戶端環境探測來識別用戶客戶端類型,逃避基于行為的動態執行檢測;以及用頁面重定向跳轉將用戶逐步引向真正的惡意站點,從而逃避靜態特征提取.這些逃避手段給惡意URL 的檢測帶來了挑戰.面對上述問題,我們從3 個方面擴展了惡意URL 的檢測特征,將重定向跳轉、客戶端環境探測等特點補充為檢測依據,提出了融合多種特征的惡意URL檢測方法.本文的主要貢獻包括:
(1)在特征選擇方面,融合了頁面內容、JavaScript 函數參數和Web 會話流程這3 個方面的25 個特征,提出了惡意URL 的檢測方法——HADMW,其中包含了重定向跳轉、客戶端探測、HTML5 新出現標簽和事件函數等新的頁面特征,從JavaScript 函數的參數長度和參數內容中提取的函數參數特征,以及從會話流程中的協議、響應碼和響應資源類型等方面提取的Web 會話流程特征;
(2)通過HpHosts 和ZeusTracker 等公開網站收集了1 萬多的惡意URL 數據集,并對提出的檢測方法進行了測試,結果表明:HADMW 與部分特征組合方法相比具有更好的精確性和召回率,分別達到了96.2%和94.6%,說明特征融合有效提高了分類器的準確性;
(3)將HADMW 與現有開源項目以及免費版本的安全軟件進行對比測試,結果表明:相比于現有檢測工具,HADMW 取得了更好的檢測效果.
本文第1 節介紹相關工作.第2 節詳細介紹選取的特征與原因.第3 節介紹本文檢測方法的基本思想.第4節介紹特征提取的過程與特征處理方法.第5 節介紹實驗測試的數據集、實驗設計和實驗結果.最后,第6 節是對本文工作的總結.
目前,國內外安全廠商和科研人員針對惡意URL 的檢測方法展開多方面研究,并提出了多種檢測方法,主要包括采用基于黑名單過濾和簽名匹配的方法,以及基于特征的檢測方法.
基于黑名單過濾是一種常見的方法,該方法通過維護黑名單列表來檢測惡意URL[2].著名的Google Safe Browsing 就是Google 公司基于該方法提供的工具,用于保護瀏覽器用戶的安全[3].基于簽名匹配的方法通過將頁面源代碼與簽名進行匹配來檢測惡意URL,由于頁面中惡意代碼變化非???因此,基于簽名匹配的方法很難全面地檢測惡意URL.基于特征的檢測方法依據安全專家的相關經驗和知識來選取具有區分性的特征,不同類型的特征適用于不同的檢測場景.相關研究包括以下類型.
(1)基于靜態頁面特征的方法
基于靜態頁面特征的方法是一種從頁面源代碼中選取特征、基于啟發式規則和機器學習進行分類的檢測方法,常見的頁面特征包括隱藏標簽的數量、字符串的最大長度和頁面中URL 的數量等.文獻[4]提出從頁面中的HTML,JavaScript 以及URL 這3 個方面分別選取特征進行檢測.文獻[5]提出根據長字符串和編碼函數的數量等特征結合機器學習算法進行分類.文獻[6]使用字符串最大熵值和字符串的長度等作為特征,并訓練多個分類器來檢測惡意代碼.基于靜態頁面特征的方法檢測速度較快,適合于快速篩選可疑的頁面,但存在誤判率較高的問題.文獻[7]認為網頁中單詞語義包含了釣魚網頁行為和內容的線索,提出了一種基于上下文內容和關鍵詞密度的釣魚網頁檢測方法,從HTML 中判斷網頁中關鍵詞集合是否存在,并提取關鍵詞集合的頻率和密度等特征,使用機器學習對網頁進行分類但該方法不適用于惡意頁面的檢測.
(2)基于會話交互特征的方法
基于會話交互特征的方法從網絡流量中提取會話交互過程,關注正常網站和惡意URL 在會話交互模式中的區別.文獻[8]提出使用客戶端蜜罐捕獲會話過程的數據,提取會話中重定向跳轉和逃避檢測行為等特征.文獻[9]提出使用會話流量中的字節總數、平均每個包字節數等特征構建模型進行檢測.文獻[10]提出通過收集網絡流量用于構建用戶訪問鏈,并提取短時間段中域名的數量等特征,使用決策樹來識別惡意重定向鏈.文獻[11]提出通過記錄瀏覽器與網站間的交互,將整個過程抽象為圖表示,聚合重定向鏈得到重定向圖,并從圖中提取特征.文獻[12]提出基于重定向行為進行檢測的方法,側重于會話訪問的數據,包括訪問時間、Referer 引用等特征.但是使用單一會話交互特征的方法檢測準確性較弱.文獻[13]直接根據網絡代理獲取的惡意網站訪問流程包含的URL 序列進行分類,提取其中的URL 字符串、域名、文件名和路徑長度以及域名注冊國家等特征,使用卷積神經網絡CNN 來檢測惡意URL.該方法本質上也是利用了URL 重定向特征,但由于代理獲取的訪問序列中包含頁面加載資源、外部腳本等噪聲,導致該方法檢測率較低.
(3)基于動態行為特征的方法
動態行為特征指源代碼在瀏覽器的執行過程中觸發的行為以及系統底層API 調用等特征,如注冊表修改和進程創建等.現有的檢測方法通過執行源代碼,監控觸發的行為與系統狀態變化,提取行為特征進行檢測.文獻[14]提出使用高交互蜜罐模擬客戶端,記錄與服務器間的交互信息,同時監控系統狀態的改變,從而發現存在的威脅.文獻[15]提出基于動態行為的網頁木馬檢測方法,針對惡意腳本的可疑操作提取行為,監控動態執行函數,根據定義的規則提取行為特征,該方法可對抗代碼混淆的干擾,但采用動態分析檢測效率較低.文獻[16]專注于惡意攻擊的事后取證與分析,提出一個取證引擎JSgraph,記錄瀏覽器中JavaScript 程序執行的細粒度細節,重點關注于JavaScript 對DOM 的修改,實現對用戶遭受的基于JavaScript 的惡意網站攻擊過程進行事后取證分析.該方法沒有檢測惡意頁面,而是用于提取惡意頁面攻擊行為的細粒度行為.基于動態行為特征的方法對惡意URL 的檢測準確率較高,但是這種方法檢測過程中需要加載和運行源代碼,當惡意頁面代碼具有環境檢測能力來逃避檢測時,可能無法捕獲到惡意動態行為特征.
近年來出現了結合靜態分析和動態檢測的方案.文獻[17]中的方案先采用靜態特征分類,從HTML 和JavaScript 代碼以及URL 這3 個方面提取特征進行分類.對于靜態分類為可疑的對象采用動態分析,即通過動態執行監控應用程序接口的調用信息來進一步判定.文獻[18]分析了惡意URL 與客戶端的交互模式,從3 個方面提取了特定內容特征、特定交互特征和特定連接特征,提出根據會話交互模式構建分類模型的方法,使用決策樹對惡意URL 進行分類.但是選取的特征對檢測效果的影響很關鍵.
綜上所述,現有的檢測方法中,單一依靠靜態頁面特征或會話交互特征檢測準確性較弱.而動態行為特征方法面臨的問題是:惡意代碼可能通過探測用戶客戶端的環境來識別檢測引擎,從而終止惡意行為以逃避檢測的問題.不同于疊加使用的方法,我們的方法無需對系統底層API 調用行為進行捕獲,而直接將頁面特征和會話特征進行了結合,面向逃避檢測問題,在頁面特征方面,我們提出了包含重定向跳轉、客戶端探測、HTML5 新出現標簽和事件函數以及惡意VBScript 腳本代碼的新特征.同時,為了更加準確地檢測,選取關鍵JavaScript 函數的參數長度和參數內容作為檢測特征.
隨著針對惡意URL檢測方法的不斷改進,目前惡意URL 的逃避檢測手段也變得越來越多樣化,惡意URL采用的主要逃避檢測手段包括頁面代碼混淆、頁面代碼注入、客戶端環境探測和頁面重定向跳轉,而且惡意URL 通常會將多種手段結合來進行逃避檢測.
頁面代碼混淆通常用于開發者對頁面代碼進行保護和壓縮,而攻擊者采用代碼混淆手段則是用于隱藏惡意代碼,從而逃避安全軟件檢測.惡意URL 利用JavaScript 腳本代碼中的字符串操作函數對惡意代碼進行加密混淆和模糊處理,然后使用動態執行函數執行惡意代碼.其中最常見的代碼混淆方式是對頁面中的字符串進行的操作,如對字符串進行拆分、拼接和編碼等.混淆后的惡意代碼與原來的惡意代碼完全不相同,給很多頁面內容分析方法造成了較大困難.如圖1所示是一段混淆前的惡意代碼,攻擊者在頁面上插入一個將寬度和高度設置為0.1、目的地址設置為惡意URL 的隱藏的iframe 標簽.

Fig.1 Sample of unobfuscated malicious JS code圖1 未混淆的JS 惡意代碼樣本
而經過混淆后的惡意代碼如圖2所示,攻擊者首先將要傳輸的字段信息利用encodeURIComponent 函數進行編碼,然后將多次使用“+”將惡意 URL 的真實地址進行字符串拼接,實現混淆惡意 URL 地址,再通過appendChild 函數對頁面的DOM 結構進行操作.惡意代碼在執行的過程中,將拼接的惡意iframe 標簽插入到頁面中.基于以上對惡意代碼的分析可以看出:代碼混淆的特點主要體現在頁面源代碼中,攻擊者在源代碼中進行混淆操作.

Fig.2 The malicious JS code after obfuscation圖2 進行混淆后后的惡意代碼JS 樣本
攻擊者通常并不會直接將惡意代碼插入頁面中,而是利用頁面代碼注入的方式引入外部的惡意代碼,其中,將惡意代碼注入網頁中的方式包括使用HTML 標簽注入外部惡意代碼和使用JavaScript 腳本動態注入惡意代碼.相比于直接將惡意代碼寫在頁面中,攻擊者使用HTML 標簽注入外部惡意代碼的方式更加隱蔽,如圖3所示是一段利用iframe 標簽來注入外部惡意代碼的示例,使用iframe 標簽來加載外部惡意代碼,并將標簽的屬性設置為不可見狀態,在用戶不知情的情況下注入外部惡意代碼.這些惡意標簽直接在頁面文件中,因此,通過分析頁面文件比較容易找到注入惡意代碼的源標簽.

Fig.3 Sample of JS forinjected external code injection by iframe tag圖3 利用iframe 標簽來注入外部代碼樣本
除了使用iframe 標簽進行代碼注入外,攻擊者還會利用JavaScript 腳本代碼的動態特性,實現動態地注入惡意代碼,例如JavaScript 語言中自帶的eval 函數可以動態執行腳本代碼,以及使用document.write 函數修改頁面的DOM 結構實現外部惡意代碼注入.如圖4所示是一段利用document.write 函數動態創建一個指向惡意URL的iframe 標簽,實現注入外部惡意代碼.基于以上對惡意代碼分析可以看出:頁面代碼注入的特點主要體現在頁面源代碼中,攻擊者通過動態執行將惡意標簽注入到頁面中.

Fig.4 JS for A sample of dynamica HTML taglly creatgenerationed HTML tag圖4 動態寫入創建HTML 標簽生成JS 代碼示例樣本
針對不同客戶端環境之間存在的差異性,攻擊者通常精心編寫JavaScript 腳本代碼對客戶端環境進行探測,實現更加精準地攻擊特定用戶群體,而且針對客戶端環境的探測也可以有效地識別檢測引擎.如圖5 中是一段對客戶端環境進行探測的惡意JavaScript 代碼,其中,第2 行~第6 行JavaScript 腳本代碼實現判斷客戶端是否為真實瀏覽器的功能.因為模擬瀏覽器不會造成ActiveXObject 異常,但是惡意代碼故意拋出ActiveXObject 異常,因此只有支持處理異常的真實瀏覽器才會繼續執行后續的操作.
惡意代碼通過客戶端的UserAgent 字段獲取瀏覽器指紋信息,并將其存儲在變量ua 中,使用條件分支語句進行判斷.如果變量ua 包含“msie 6”或“msie 8”字符串,則分別執行不同的重定向代碼,即客戶端瀏覽器為IE6 的用戶會被重定向跳轉到“http://exploit.com/IE6/”的網址,而客戶端瀏覽器為IE8 的用戶被重定向到“http://exploit.com/IE8/”的網址,其他不符合瀏覽器版本的用戶則不會發生重定向跳轉.只有瀏覽器是IE6 和IE8 版本的用戶才會被跳轉到真正的惡意URL.基于以上分析可以看出:客戶端環境探測的特點主要體現在頁面源代碼和會話流程中,攻擊者通過客戶端環境探測代碼識別用戶的客戶端,并針對不同客戶端環境的用戶,分別重定向到不同的惡意網站.

Fig.5 Fig.5 A sample ofJS for client environment recognitiondetection圖5 客戶端環境識別樣本
為了使檢測引擎難以跟蹤和發現惡意URL 的真實地址,攻擊者還會在頁面中插入進行自動重定向跳轉的惡意代碼,以此來逃避安全軟件的檢測.其中,惡意網頁最常使用Meta 標簽設置頁面進行刷新重定向,如圖6所示的惡意代碼是在頁面中設置Meta 標簽中的http-equiv,content 和url 屬性值,從而實現在等待0.1s 后進行自動刷新,然后重定向跳轉到惡意URLexploit.com.

Fig.6 A sample JS forof automatically redirected malicious codeion圖6 自動重定向跳轉的惡意代碼JS 樣本
基于以上分析可以看出:頁面重定向跳轉的特點主要體現在頁面源代碼和會話流程中,攻擊者通過重定向代碼將用戶導向惡意網站,以此來逃避檢測引擎的跟蹤.
特征選擇的過程,即根據正常網站和惡意網站各方面的差異性選擇具有明顯區別度的特征.在本節中,我們根據對真實存活的惡意URL 的會話流程進行統計與分析.我們發現:在惡意URL 的攻擊流程中,存在客戶端環境識別、多次重定向跳轉、典型的逃避檢測行為以及發送有效攻擊執行載荷等典型特點,因此,我們主要從3個方面設計特征,包括頁面內容特征、JavaScript 函數參數特征和Web 會話流程特征.
在選取頁面特征之前,我們首先從惡意樣本公布網站VirusShare(https://virusshare.com/)收集了近期公布的真實惡意頁面樣本,而正常頁面來源于Alexa 中受歡迎的正常網站.我們借助于人工分析,發現這些惡意頁面與正常頁面在HTML 和JavaScript 方面存在的差異.
正常頁面在通常情況下頁面整體HTML 結構比較規范,頁面中不會包含很多的特殊字符和敏感字符串;而惡意頁面在HTML 結構上與正常頁面相比存在較多的差異,例如,惡意頁面中通常包含某些可利用的HTML 標簽和存在風險的JavaScript 函數,并且為了防止被檢測引擎分析,惡意頁面還會結合包括代碼混淆、代碼注入和客戶端環境識別等方式來逃避檢測.攻擊者通過混淆惡意代碼來隱藏真正目的,從而逃避檢測引擎,其中最常見的混淆方式是對字符串做操作,如字符串的拆分替換和編碼轉義,以及加密等操作.
除了以上的差異,我們還發現:最新的惡意頁面更多地結合了HTML5 新出現標簽和事件函數,以及惡意VBScript 腳本代碼進行攻擊.此外,惡意URL 還通過精心編寫的惡意代碼進行自動的重定向跳轉,從而逃避檢測引擎的跟蹤.同時,為了實現精準化地攻擊特定用戶人群,惡意URL 在對用戶進行攻擊之前,還會通過多種方式探測用戶的客戶端環境,判斷用戶客戶端是否滿足攻擊條件.我們在收集的樣本中分別隨機選取了1 000 個正常頁面和惡意頁面進行了統計,圖7 顯示了樣本統計中新提出頁面特征的累積分布圖.

Fig.7 Cumulative distribution diagram of the new page features圖7 新頁面特征的累積分布圖
從圖中可以看出:在客戶端重定向總次數上,約40%的惡意頁面大于1,而只有20%左右的正常頁面跳轉總數大于1;而在客戶端環境探測總數上,大約73%的正常頁面都沒有進行客戶端環境探測,而50%以上的惡意頁面都會進行環境探測.除此之外,相比于正常頁面,惡意頁面中還會包含較多的控件標簽、觸發事件函數和VBScript 敏感字符串.
因此,我們共選取了12 個頁面特征,這些頁面內容特征中包含了相關研究的已有特征和擴充的新特征,見表1,其中,以*標注的為HADMW 擴充的新特征.

Table 1 ESxtractedelected page features表1 選取的頁面特征
下面將對這些新特征進行重點解釋.
(1)客戶端重定向總數
為了防止被安全軟件檢測和分析,攻擊者通常會在頁面中插入重定向跳轉的代碼,而且利用中轉網站多次的重定向跳轉,從而實現隱藏最終的惡意服務器.我們對存活惡意URL 的頁面代碼進行人工分析發現,惡意URL 采用3 種方式自動重定向跳轉,包括惡意代碼通過Meta 標簽設置自動刷新refresh 屬性的時間進行自動重定向、將惡意URL 的地址賦值給location 對象的href 屬性以及利用window.open 函數打開一個新的瀏覽器窗口的方式跳轉到惡意URL.這些方式都可以實現自動d2 將客戶端重定向跳轉惡意URL,因此,我們選取客戶端重定向跳轉代碼使用的總數量作為特征.
(2)客戶端環境探測總數
為了實現精準化攻擊特定客戶端環境的用戶,攻擊者會精心構造惡意代碼,利用JavaScript 腳本自帶的“navigator.userAgent”對象和自定義的控件函數來判斷用戶的環境是否滿足攻擊條件.惡意代碼獲取用戶的客戶端瀏覽器版本信息,然后通過多次條件匹配進行判斷,只將滿足攻擊條件的用戶強制重定向跳轉到真實的惡意URL.而對于不滿足攻擊條件的用戶,惡意代碼則重定向跳轉到其他正常的網站.同時,越來越多的攻擊者利用現有的檢測瀏覽器版本的JavaScript 庫PluginDetect 對用戶的客戶端環境進行探測.攻擊者利用現有的JavaScript 庫來檢測瀏覽器版本等信息,可以使惡意代碼更加容易逃避檢測.因此,我們將頁面源代碼中客戶端環境探測代碼使用的總數量作為特征.
(3)控件標簽總數
控件標簽是一類用于引入外部控件資源的標簽,惡意頁面利用控件標簽引入包含漏洞的外部控件資源,從而獲取系統的高級權限.我們選取了控件標簽的數量作為特征,關注的控件標簽包括Object 標簽和Embed 標簽.
(4)觸發事件函數總數
觸發事件是一類用于在進行某個操作后自動觸發執行后續動作的標簽屬性.攻擊者將要執行的惡意代碼與觸發事件進行綁定,從而在事件觸發后自動的執行惡意代碼.其中最常使用的觸發事件包括onload 和onclick事件,我們發現,最新的惡意頁面結合了HTML5 中增加的onerror 和onscroll 事件來自動地觸發執行惡意代碼.
(5)VBScript 敏感字符串總數
由于IE 瀏覽器使用范圍廣且存在較多的安全問題,惡意頁面越來越多地使用惡意VBScript 腳本對IE 瀏覽器進行攻擊.因此,我們不只局限于對JavaScript 代碼的分析,還關注頁面中VBScript 代碼.為了執行執行惡意操作,惡意 VBScript 代碼中通常會包含敏感的字符串,我們將在頁面 VBScript 代碼中包含的“CreateObject”“WriteData”“svchost.exe”和“cmd.exe”字符串的總數量作為特征.
在對符合攻擊條件的用戶實施攻擊的過程中,惡意URL 會將包含惡意代碼的頁面發送給用戶.我們發現:這些惡意代碼在執行的過程中,JavaScript 關鍵函數的參數在長度和與內容方面與正常代碼存在較大的區別,惡意代碼的關鍵函數的參數中含有更多敏感字符串,而在靜態頁面內容分析的過程中難以獲得準確的參數值.
因此,我們通過動態代碼執行的方式獲取JavaScript 關鍵函數的參數,并對關鍵函數的參數長度和參數內容進行更加細粒度的檢測,共選取了6 個JavaScript 函數參數特征,見表2.

Table 2 Extracted JavaScript function parameter features表2 選取的JavaScript 函數參數特征
下面將對選取的JavaScript 函數參數特征進行詳細解釋.
(1)動態執行函數參數特征
動態執行函數是 JavaScript 中可以將傳入函數的參數字符串作為代碼執行的一類函數,包括 eval,setTimeout 和setInterval 函數.為了逃避靜態分析檢測,攻擊者通常將惡意代碼作為字符串傳入eval 等動態執行函數參數中,然后在頁面代碼解析過程中,動態地執行這些惡意代碼來實施攻擊.惡意代碼中,傳入動態執行函數的參數的長度普遍較長,而且參數內容中經常包含“iframe”“frame”“script”和“link”等敏感字符串,因此,選取動態執行函數參數的平均長度和含敏感字符串的總數量作為特征.
(2)動態生成函數參數特征
動態生成函數是JavaScript 中可以實現插入標簽和修改頁面DOM 結構的一類函數,包括document.write和document.writeln 函數.惡意頁面為了逃避簽名匹配檢測,通常在頁面解析的過程中利用document.write 等函數動態的創建惡意標簽.惡意代碼中,傳入動態生成函數的字符串參數的長度普遍較長,在參數內容中通常會包含“iframe”“frame”“script”和“link”等敏感字符串,用于動態地創建這些標簽,因此,選取動態生成函數參數的平均長度和含敏感字符串的總數量作為特征.
(3)escape 和unescape 函數參數特征
除了利用動態執行函數和動態生成函數外,惡意頁面還經常利用escape 函數對惡意代碼進行編碼,然后在執行的過程中,再通過unescape 函數進行解碼還原得到初始的惡意代碼,通過一系列的編碼和解碼操作,可以混淆惡意代碼.惡意代碼中,傳入escape 和unescape 函數的字符串參數的通常較長,而且參數內容中包含敏感字符串,用于后續創建惡意標簽.
除了以上提出的頁面特征和JavaScript 函數參數特征,我們通過對大量的樣本進行分析,發現了惡意URL與正常網站在會話過程中存在的差異,主要體現在會話過程中的重定向、會話協議、響應碼和響應資源類型等方面.
(1)會話樣本分析
我們從惡意流量公布網站Malware-traffic-analysis 下載了200 個惡意URL 會話流量包進行統計與分析,這些流量包中包含了惡意URL 整個攻擊過程的全部會話流量.同時作為對比,我們在虛擬機環境中收集了200個訪問正常網站的會話流量包,模擬了一系列用戶訪問正常網站的行為,包括訪問社交網站、搜索引擎以及使用郵箱和點擊分享鏈接等.
我們關注用戶客戶端與網站服務器之間的交互過程,因此提取流量包中網站服務器的響應頭信息和響應內容.表3 是從會話流量中提取的整個會話過程中網站服務器數量和重定向次數的統計結果.我們將同一會話過程中不同的IP 對應為不同的網站服務器,從表中可以看出:在一個會話過程中,服務器數量最小值始終為1 個,即最簡單的會話只涉及客戶端和一臺服務器的交互過程;而在惡意URL 會話過程中,服務器數量最大值為58個,平均值為7.8 個,這些值都明顯大于正常網站會話過程中服務器數量的最大值和平均值.同時,在惡意URL 會話過程中平均會發生4.8 次的重定向跳轉,而正常網站會話過程重定向平均值為0.45 次.

Table 3 Comparison of the number of servers and number of redirects in the session表3 會話中服務器數量和重定向數量的對比
除了會話過程中,服務器數量和重定向次數方面的差異,我們又從會話流量包中提取了服務器的響應頭信息,包括協議信息、響應碼和響應資源類型等內容.我們對正常網站和惡意URL 會話流量中響應頭信息進行統計,如圖8所示.從圖中可以看出:與正常網站的會話過程相比,惡意URL 會話過程中,相關響應頭信息的統計分布明顯不同.其中,惡意URL 返回的以3 開頭的服務器端重定向響應碼的數量明顯高于正常網站會話過程中的數量.我們分析原因是,惡意URL 通常會通過多次服務器端重定向跳轉來逃避安全軟件的檢測.

Fig.8 Comparison of the number of HTTP response types圖8 HTTP 響應類型數目比較
同時,從圖中可以看出:以4 開頭的客戶端錯誤的響應碼和以5 開頭的服務器端錯誤的響應碼數量也明顯高于正常網站會話過程中的數量.我們分析,這是因為惡意URL 為了避免被用戶察覺到異常,對于不滿足攻擊條件的用戶通常會直接返回請求錯誤,所以會話請求錯誤的響應碼數量更多.而在正常網站的訪問過程中,對于大部分的用戶請求,正常網站都能夠正常響應,很少發生請求錯誤的情況.
而且,正常網站中使用HTTPS 進行通信的數量明顯大于惡意URL.我們分析正常網站通常會向認證組織申請認證證書,并在訪問過程中更多地使用安全的HTTPS 協議進行會話通信,而惡意URL 很少能夠取得認證組織的證書,因此在會話過程中很少使用HTTPS 協議進行通信.
此外,惡意服務器通常利用瀏覽器中存在漏洞的控件進行攻擊,因此在會話過程中,惡意服務器會針對不同的控件響應特殊類型的資源文件.惡意URL 經常利用存在漏洞的控件類型包括Java 和Adobe Fla sh Player 等.表4 為經常被惡意URL 利用的5 種資源類型文件類型與Content-Type 字段的對應表.我們在惡意URL 會話的HTTP 響應頭中發現較多響應的特殊資源文件,雖然在正常網站的訪問過程中也會響應這些類型的資源文件,但是與正常網站相比,惡意URL 在整個會話過程中響應特殊資源文件的數量更多,而且這些特殊資源文件的大小更大.

Table 4 Mapping of resource type and Content-Type表4 資源類型與Content-Type 字段對應表
惡意URL 在接收到用戶的請求后,通常會對用戶的客戶端環境進行判斷,只有符合攻擊條件的用戶才會被導向漏洞利用服務器.在這個過程中,還會進行多次的重定向跳轉,導致整個會話過程中重定向鏈的長度變得較長;而在正常網站的會話過程中,較少發生多次的重定向跳轉.因此我們認為,使用會話重定向鏈的最大長度能夠體現出惡意URL 這方面的差異.
我們發現,在惡意URL 的會話過程中請求的URL 平均長度相比正常網站會話過程中請求URL 的平均長度更長.為了逃避安全廠商的黑名單檢測,惡意URL 的URL 地址通常存活時間較短,而且經常更改和變換,攻擊者通常注冊較長的臨時域名地址來逃避黑名單的匹配檢測.
(2)Web 會話流程特征
根據以上對正常網站和惡意URL 會話過程的統計與分析,針對正常網站和惡意URL 在會話過程中的重定向、會話協議、響應碼和響應資源類型等方面存在的差異,共選取相應的7 個Web 會話流程特征,見表5.

Table 5 Extracted Web session flow features表5 Web 會話流程特征
根據上述提出的12 個頁面特征、6 個JavaScript 函數參數特征和7 個Web 會話特征,結合機器學習,我們提出了融合多種特征的惡意URL檢測方法.惡意URL檢測方法的整體示意圖如圖9所示:首先,通過數據采集器模擬客戶端環境,自動化地對存活的待檢測網站發起會話通信,記錄整個會話過程中關鍵函數代碼的執行和頁面重定向跳轉過程等信息,將其保存在本地會話日志記錄中;根據待檢測網站的頁面源代碼和會話日志記錄,分別提取頁面特征、JavaScript 函數參數特征和Web 會話流程特征,并對待檢測網站的特征進行標準化處理,得到待檢測網站的特征組合序列;然后將其輸入到已經經過訓練的分類器模型中進行檢測,得到待檢測網站的分類結果.

Fig.9 Diagram of detection approach圖9 整體檢測方法示意圖
為了盡最大化地觸發惡意URL的攻擊,誘導惡意URL 發送包含惡意代碼的頁面,我們配置客戶端請求的用戶代理字段,模擬了10 種經常被攻擊的客戶端環境,包括Windows XP 、Windows7 操作系統搭配Internet Explorer 6.0,7.0,8.0 版本瀏覽器、Chrome 45.0.2623.87 版本瀏覽器、MacOSX 10_6_8 操作系統搭配Safari 5.1.1版本瀏覽器和Linux 系統搭配Chrome 45.0.2623.87 版本瀏覽器.這些模擬客戶端環境覆蓋了大多數正常用戶的常用客戶端環境.相比于使用真實客戶端環境進行動態檢測,我們使用模擬的瀏覽器環境解析和執行頁面代碼.我們將提取的頁面特征、JavaScript 函數參數特征和Web 會話特征組成待檢測網站的特征組合序列.如果惡意URL 針對不同類型的客戶端環境響應不同的代碼,則在不同環境下會得到不同的特征組合序列.因此,每個待檢測網站在10 種模擬客戶端環境下共生成10 條特征組合序列.我們認為:有任一種客戶端環境的特征組合序列被分類器判斷為惡意URL,就將待檢測網站分類到惡意URL 集合.
為了準確地提取到本方法提出的頁面特征、JavaScript 函數參數特征和Web 會話流程特征,我們使用了開源客戶端框架Thug[19].Thug 是一款低交互式客戶端采集器,旨在模擬瀏覽器的行為以檢測惡意內容,可以對頁面重定向跳轉行為進行跟蹤,同時對會話過程中的服務器響應頭等內容進行記錄.
(1)改寫擴展Thug
我們關注在代碼動態執行過程中JavaScript 關鍵函數的參數值,因此我們在Thug 提供的開放接口的基礎上,分別對動態執行函數、動態生成函數、escape 和unescape 函數進行定制化改寫,實現在動態調用JavaScript函數的過程中記錄和匹配函數的參數.如圖10所示是改寫動態執行函數eval 的代碼:首先,根據規則重新定義eval 函數,獲取傳入eval 函數的參數值,并將參數值賦給一個臨時變量;然后獲取變量的的字符串長度,通過多個條件語句匹配參數中是否包含敏感字符串,統計包含敏感字符串的總數量.

Fig.10 Rewrited dynamic execution function of eval圖10 改寫動態執行函數eval
(2)特征提取
同時,我們從獲取的頁面源代碼和日志記錄中分別提取頁面特征和Web 會話特征.改寫后的Thug 模擬客戶端瀏覽器向待檢測網站發起會話請求,并將所有響應的頁面源代碼保存到本地.我們使用正則表達式匹配頁面源代碼,提取12 個頁面特征.在與待檢測網站的會話過程中,Thug 記錄網站服務器發送給客戶端的響應頭信息和響應體內容.我們根據定義的規則,從日志中分別提取會話協議、響應碼和響應資源類型等內容,統計Web 會話流程特征.如圖11所示的代碼是從日志記錄中提取會話過程中,服務器響應特殊資源文件數量與會話請求錯誤數量的特征.我們根據資源文件類型與Content-Type 字段的對應表,匹配服務器返回的文件類型是否為關注的5 種特殊資源文件.同時根據服務器返回的響應狀態碼,匹配客戶端請求錯誤和服務器端錯誤響應碼的數量.

Fig.11 Extraction features of response resources and request error圖11 提取響應資源與請求錯誤特征
在使用多種特征進行分類的過程中,由于不同類型的特征性質不同,這些特征通常具有不同的數量級和量綱.為了盡可能地減少特征在數值分布上所造成的影響,需要對原始的特征數據進行標準化處理.數據標準化是通過對數據進行按比例縮放,落入一個較小的特定區間中,消除數據的單位限制,轉化為無量綱的純數值,使得不同量級的特征可以進行加權.其中最典型的數據標準化方法是Min-Max 標準化[20],即對原始數據進行線性區間變換,計算方式如公式(1)所示:

其中,x表示原始值,max 表示樣本最大值,min 表示樣本的最小值,x*表示經過標準化處理后的值.
我們使用Min-Max 標準化方法將特征值轉換為無量綱數據,每個樣本的特征組合序列由25 個經標準化處理后的特征值和分類值組成.我們將經過標準化處理后的特征組合序列輸入到分類器中進行訓練,得到相應的分類器模型.對于分類器算法的選擇,分別選取了常用的5 種機器學習算法,在實驗部分通過對比不同分類器的檢測效果,最終確定選取的分類器.
我們的方法在動態執行的過程中提取JavaScript 參數特征和Web 會話特征,需要網站保持可訪問狀態.因此我們從多個來源重新建立了正常網站和惡意URL 數據集,分別包括:
①正常網站數據集:正常網站來源于Alexa(https://www.alexa.com/topsites),將Alexa 公布的受歡迎的網站的主頁作為初始URL,使用爬蟲請求網頁來獲取頁面中的鏈接.為了確保正常網站數據集的可信性,從正常網站的主頁和主頁中鏈接隨機選擇組成正常網站數據集,共收集了8 69 7 個有效存活的正常網站的URL;
②惡意URL 數據集1:為了盡可能的增加惡意URL 的樣本數量,分別從著名的惡意URL發布網站HpHosts(https://hosts-file.net/)和ZeusTracker(https://www.abuse.ch)收集了自2016年1月~2019年2月期間內公布的仍存活的惡意URL,共收集了6 928 個有效存活惡意URL 的URL;
③惡意URL 數據集2:從安全研究網站Malwaredomainlist(https://www.malwaredomainlist.com/mdl.php),UrlQuery(https://urlquery.net/)和Malc0de(http://malc0de.com/bl/)網站獲取自2016年1月~2019年2月期間內公布的存活的惡意URL,并與惡意URL 數據集1 中的惡意URL 匹配,剔除已有的惡意URL,共收集了2000 個有效存活惡意URL 的URL.
融合多種特征的檢測方法采用機器學習進行分類檢測,因此,我們將收集的正常網站和惡意URL 數據集劃分數據集1 和數據集2,見表6.

Table 6 The Dataset表6 數據集
評價分類器模型的效果通常會使用不同的指標來進行綜合評估,其中,True Positive(TP),True Negative(TN),False Positive(FP)和False Negative(FN)是進行評估的基準數據.基于基準評價數據,通常用于評估分類結果的的指標包括精確率(precision)、召回率(recall)、F值(F-measure)、誤判率和漏判率,具體是:
①精確率:指測試集中被正確判為惡意頁面的數量占所有被判為惡意頁面數量的百分比;
②召回率:指測試集中惡意頁面被正確判為惡意頁面的數量所占全部惡意頁面數量的比值;
③F值:需要綜合全面地考慮精確率和召回率,而F值是對精確率和召回率的加權調和平均,因此,當F值比較高時,可以說明檢測方法更有效;
④誤判率:指測試集中正常頁面被誤判為惡意網頁的數量占全部真正正常頁面數量的百分比;
⑤漏判率是指測試集中惡意頁面被漏判為正常頁面的數量占全部真正惡意頁面數量的百分比.
對于分類器的選擇,我們在數據集1 上分別采用5 種不同的機器學習算法訓練分類器,并進行十折交叉驗證,評估不同機器學習算法的分類效果,計算10 輪的惡意URL 的平均精確率、平均召回率和F值,結果見表7.

Table 7 Ten-fold cross-validation results of different algorithms表7 不同算法十折交叉驗證結果
從測試結果中可以看出,融合多種特征的檢測方法在5 種不同的機器學習算法上都取得較好的分類結果.相比于其他4 種機器學習算法,隨機森林算法使用多個子決策樹預測類別的眾數作為最終的輸出分類結果,其中,使用隨機森林算法的效果最好,平均精確率達到了98.6%,平均召回率達到97.5%,F值達到了0.98.經過綜合比較,最終我們選擇隨機森林算法作為分類器的算法.
同時,為了評估融合多種特征方法的泛化能力,我們使用隨機森林算法作為分類器,用數據集1 作為訓練集,對數據集2 進行測試,測試結果見表8.從測試結果可以看出:融合多種特征的檢測方法的精確率達到了96.2%,召回率達到了94.6%,誤判率為3.8%,漏判率為5.4%,F值達到0.95.

Table 8 Test result ofon dataset 2表8 數據集2 測試結果
為了找到惡意URL 被漏判的原因,我們上述檢測中漏判的108 個惡意URL 進行人工分析,發現其中有72個惡意URL 采用誘導用戶點擊跳轉的攻擊方式,即:頁面本身不含有惡意代碼,當用戶手動點擊頁面中的鏈接后,才會重定向到最終的惡意URL,這類頁面屬于惡意URL 的引導頁面.而我們在特征采集過程采用了自動化訪問的方式,只檢測當前頁面,對頁面中的鏈接不會進行自動觸發,我們進而對這些人工觸發的惡意URL 進行再次檢測,發現可以檢測出這些惡意頁面.
漏判結果中還有24 個惡意URL對模擬的客戶端未返回包含惡意代碼的頁面.在人工分析的過程中,我們更換了客戶端環境和IP 地址再次訪問,發現惡意URL 返回了包含惡意代碼的頁面.我們分析,主要原因是模擬的客戶端環境和發起請求的IP 地址不滿足惡意URL 的攻擊條件,沒有觸發惡意行為.根據上述分析,如果檢測環境增加自動觸發鏈接以及部署足夠多樣的采集環境,將有助于進一步減少漏判.
為了評估不同方面特征對于檢測效果的影響大小,我們分別使用全部25 個特征組合、單獨使用12 個頁面特征、6 個JavaScript 函數參數特征、7 個Web 會話流程特征以及頁面特征與Web 會話流程一起的5 種特征組合,使用隨機森林算法在數據集1 上進行訓練,并對數據集2 進行測試.測試結果見表9.

Table 9 Test results comparison of different feature combination methods表9 不同特征組合的測試結果
使用全部特征組合的檢測效果最好,精確率達到96.2%,召回率達到94.6%;而僅使用JavaScript 函數參數特征時,檢測效果最差.我們對僅使用JavaScript 函數參數特征漏判而全部特征組合成功檢測出的惡意網站進行人工分析,發現這些惡意網站在會話過程中進行了多次重定向跳轉,在重定向的初始頁面中未包含惡意代碼,可以看出,采用全部特征組合可以有效地檢測出使用逃避手段的惡意網站.同時,從表中測試結果可以看出:將頁面特征與Web 會話流程特征相結合一起時,分類器的檢測效果得到了提高.
如圖12所示為不同特征組合的ROC 曲線,從圖中可以看出:相對于其他4 個特征組合,使用全部特征的組合曲線更靠近坐標軸的左上方,意味著它能夠在保證較低假陽率的情況下,有更高的真陽率.這在AUC 值上更加明顯,使用全部特征的組合模型的AUC 值達到0.98.同時,從圖中可以看出:頁面特征與Web 會話流程特征相結合時,提高了分類器的檢測效果.

Fig.12 ROC curve of different feature combination methods圖12 不同特征組合的ROC 曲線
在使用隨機森林算法的進行學習過程中,信息增益通常被用作選擇特征的重要指標.信息增益是指特征為分類器提供信息的多少,即:在確定某一條件下,信息的不確定性減少的程度.當特征為分類器模型提供的信息量越多,則表示該特征在分類器中更加重要,相應地,它的信息增益越大.我們計算特征在隨機森林算法的學習過程中的信息增益,表10 顯示了排在前10 位的最高信息增益的特征列表.從表中可以看出:前10 位最高信息增益的特征中,包含了提出的3 大類特征,其中,我們提出的新的頁面特征和Web 會話流程特征的信息增益較大,對準確分類的貢獻度更大.

Table 10 Top 10 features with the highest information gain表10 前10 位最高信息增益的特征
(1)與開源項目比較
我們將提出的檢測方法命名為HADMW.HADMW 在檢測過程中動態執行頁面源代碼,因此將HADMW 與相似功能的動態檢測工具進行比較,選擇了開源項目Capture-HPC[21]和PhoneyC[22].我們在2019年2月獲取和搭建了Capture-HPC 和PhoneyC,并將數據集2 分別使用這兩個開源項目進行測試,并將檢測結果與HADMW的結果進行對比,如表11所示:Capture-HPC 的F值為0.79,PhoneyC 的F值為0.87.可以看到,HADMW 比Capture-HPC 和PhoneyC 擁有更好的檢測效果.在時間開銷方面,HADMW 檢測每個惡意網站的平均時間為8.9s,而Capture-HPC 和PhoneyC 的平均時間為14.7s 和17.2s.實驗結果表明:HADMW 可以檢測出更多的惡意URL,檢測效率也優于Capture-HPC 和PhoneyC.
同時,由于HADMW 使用了動態特征獲取,我們也對比了其特征獲取時間與靜態方法的對比.HADMW 特征獲取的時間包括獲取頁面源代碼和動態執行源代碼,與靜態方法相比,多了動態執行源代碼的過程.我們使用改寫擴展Thug,對1 000 條URL 上進行了測試和觀察,動態方法檢測每個惡意URL 的平均時間為8.9s,其中,獲取頁面源代碼平均需要3.84s,動態執行頁面源代碼平均需要5.06s.相比于獲取頁面源代碼所需要的時間,動態方法增加了執行頁面源代碼的時間開銷,增加了約1.3 倍的特征獲取時間.

Table 11 Comparison with open source tools表11 與兩款開源工具對比
(2)與安全軟件比較
根據AV-TEST 組織發布的在2018年用戶最受歡迎的安全軟件的測試報告[23],我們選擇了兩款得分最高的安全軟件Bitdefender 和ESET,使用最新發布的版本對數據集2 進行測試,結果見表12.Bitdefender 的F值為0.92,ESET 的F值為0.93.可以看到,HADMW 比這兩款安全軟件檢測效果更好.我們分析認為,原因是:HADMW在特征的選取方面針對惡意URL 的逃避檢測手段,從頁面源代碼、JavaScript 關鍵函數參數以及整體攻擊會話流程方面選取特征對惡意URL 進行檢測;相比之下,安全軟件的掃描檢測通常是基于頁面中惡意代碼進行檢測.綜合比較表明,HADMW 的檢測效果優于現有安全軟件.

Table 12 Comparison with other security software表12 與其他安全軟件對比
(3)與近期研究比較
文獻[15,17]結合了動靜態兩方面的特征,都對惡意網頁檢測做了不錯的嘗試,但我們在公開資料中均未找到其方法對應的實現或源代碼,也沒有找到其公開的數據集.為了能夠較清晰地對比結果,我們將文獻[15,17]中提取的特征、測試數據集以及文獻自身公布的測試結果展示在表13 中.可以看出:HADMW 測試數據集中的樣本來源和數量更多,在準確率、召回率方面都有不錯的表現.

Table 13 Comparison with other existing approaches表13 與現有檢測方法對比

Table 13 Comparison with other existing approaches(Continued)表13 與現有檢測方法對比(續)
我們將數據集2 中的惡意網站在10 種模擬客戶端環境下特征值序列進行了分析,統計了這些特征值序列被分類器模型判斷為惡意網站的分布,得到每個惡意網站對10 種客戶端環境進行攻擊的數量,統計結果如圖13(a)所示,其中,對3 種客戶端環境進行攻擊的惡意網站數量最多.我們發現:惡意網站通常會對多種不同的客戶端環境實施攻擊,從而使得攻擊效益盡可能的最大化.
除此之外,我們統計了不同類型的客戶端環境被惡意網站攻擊的數量,結果如圖14(b)所示.其中,針對Windows XP 操作系統搭配IE6.0 版本瀏覽器的環境被惡意網站攻擊的數量最多,而且我們發現:操作系統和瀏覽器版本越低,被攻擊的數量越多.我們分析認為,是因為版本較低的瀏覽器和操作系統通常存在較多公開的可被利用的漏洞.

Fig.13 The number and type distribution of client environments attacked by malicious websites圖13 惡意網站攻擊的客戶端環境數目和類型分布
如今,互聯網中充斥著大量的惡意URL,攻擊者利用這些惡意URL 傳播惡意軟件和竊取隱私數據.本文基于真實存活的惡意URL 的統計,詳細分析了惡意URL 逃避手段的特點,從頁面內容、JavaScript 函數參數和Web 會話流程這3 個方面設計了25 個具有區分度的特征,提出了一種基于多種特征檢測惡意URL 的方法HADMW.測試結果表明:HADMW 取得了96.2%的精確率和94.6%的召回率;同時,與單純頁面特征的方法和現有檢測工具相比,HADMW 取得了更好的檢測效果.
在實驗過程中,我們發現部分惡意URL 采用誘導用戶點擊跳轉的攻擊方式,這些URL 只有在用戶手動點擊后,才會重定向到最終的惡意URL.這種惡意URL 在攻擊過程中誘導用戶點擊頁面,而本文提出的方法采用自動化訪問的方式進行檢測.在接下來的工作中,我們準備增加模擬用戶點擊操作的功能,以及擴充更多的客戶端環境.