劉小樂 方 勇 黃 誠 許益家
(四川大學網(wǎng)絡(luò)空間安全學院 成都 610065)
現(xiàn)代社會中,用戶每天都需要上網(wǎng)進行一些必要的網(wǎng)絡(luò)活動,如瀏覽新聞網(wǎng)站、查看電子郵件、搜索信息等.用戶點擊一些看起來很正常的鏈接,然而可能會遭受信用卡信息被盜、電子郵件賬戶被劫持、文件勒索等.這些網(wǎng)絡(luò)安全事件正日益成為Web用戶普遍會遇到的問題,它們通常是由漏洞利用工具包(exploit kit,EK)造成的.EK通常利用Web瀏覽器及其相關(guān)插件、操作系統(tǒng)或其他軟件中的漏洞來傳播惡意負載.典型EK通常包括一個管理控制臺、一堆不同應(yīng)用程序的漏洞利用代碼以及其他幫助黑客進行攻擊的附加功能[1].EK攻擊的大致過程是:用戶訪問受感染的網(wǎng)站或點擊惡意廣告,經(jīng)過1個或多個重定向網(wǎng)站重定向到惡意網(wǎng)站,惡意網(wǎng)站利用瀏覽器或插件漏洞控制用戶計算機,最終控制它們自動下載惡意負載[2].雖然EK的活躍程度會因瀏覽器的安全性提高、漏洞修補等因素受到波動,但只要軟件中存在漏洞,EK就是一個有效的威脅.Bottle EK從2019年9月以來一直比較活躍,它利用漏洞CVE-2018-15982和CVE-2018-8174啟動木馬Cinobi,從日本銀行用戶信息中竊取用戶的銀行憑據(jù)[2].因此,如何準確地檢測EK攻擊活動是安全研究人員需要重視的問題.
之前的研究工作是通過構(gòu)建url檢測模型來判斷url是否托管了EK:文獻[3-5]從IP地址、whois查詢結(jié)果、域名、重定向等方面提取特征檢測可疑的url;Akiyama等人[6]開發(fā)了一種基于蜜罐的監(jiān)控系統(tǒng),專門監(jiān)控url重定向行為,發(fā)現(xiàn)惡意url重定向與EK攻擊活動密切相關(guān);Eshete等人[7]通過分析40多個EK的url樣本來提取基于內(nèi)容、鏈接和結(jié)構(gòu)的特征以及瀏覽器與惡意服務(wù)器之間的交互特征,并構(gòu)建一組分類器,通過蜜罐訪問url并使用這些分類器來分析檢測url.以上基于url的檢測方法忽略了EK攻擊期間網(wǎng)絡(luò)流量數(shù)據(jù)包之間的交互過程,導(dǎo)致檢測準確度較低.為解決這一問題,有研究者提取EK攻擊過程中產(chǎn)生的HTTP重定向鏈來進行分析:Mekky等人[8]關(guān)注Web會話的重定向鏈,利用重定向鏈的長度、跨域次數(shù)和重定向延遲區(qū)分有EK攻擊活動的網(wǎng)站與正常網(wǎng)站,實驗表明該方法在準確識別惡意鏈方面非常有效;Burgess等人[9]提出REdiREKT系統(tǒng),利用Zeek入侵檢測系統(tǒng)處理HTTP流量,從中提取重定向鏈,將每個樣本的重定向鏈存儲為JSON對象并從中提取48個特征進行檢測;Qin等人[10]從網(wǎng)絡(luò)流量中提取HTTP頭信息,并基于用戶的單個會話構(gòu)建HTTP消息圖,從圖中提取節(jié)點特征、邊特征、圖屬性特征以及和圖中心性質(zhì)相關(guān)的特征.這些方法雖提高了模型檢測的性能,但提取的特征僅包含節(jié)點信息,忽視了節(jié)點間的結(jié)構(gòu)特征,導(dǎo)致構(gòu)建的模型對EK攻擊活動的檢測是不精確的.
本文提出一種基于深度圖卷積神經(jīng)網(wǎng)絡(luò)(deep graph convolutional neural network,DGCNN)檢測EK攻擊活動的方法.該方法根據(jù)EK網(wǎng)絡(luò)會話中的HTTP頭信息和響應(yīng)實體內(nèi)容提取重定向關(guān)系,根據(jù)自定義的節(jié)點和邊的生成規(guī)則構(gòu)建重定向圖,并使用DGCNN提取深層次的圖節(jié)點結(jié)構(gòu)特征.相比其他檢測模型,本文方法增加了節(jié)點之間基于響應(yīng)實體內(nèi)容的重定向,構(gòu)建更完整的重定向圖;使用DGCNN豐富圖的節(jié)點結(jié)構(gòu)特征向量表示,提高了模型檢測準確率,使得模型平均檢測準確率達到97.54%.
本文使用PCAP格式數(shù)據(jù)集.PCAP文件由1個PCAP文件頭和多個PCAP數(shù)據(jù)包組成,PCAP數(shù)據(jù)包又由數(shù)據(jù)包頭和數(shù)據(jù)包內(nèi)容組成,數(shù)據(jù)包內(nèi)容是本文需要進行解析還原的數(shù)據(jù).本文檢測模型框架如圖1所示.檢測流程為:首先,通過函數(shù)scapy.rdpcap()將PCAP格式的樣本解析成HTTP請求和響應(yīng),確定HTTP請求響應(yīng)對;然后,提取HTTP頭信息中的重定向和響應(yīng)實體中基于內(nèi)容的重定向,對每個樣本構(gòu)建一個連通的重定向圖,該圖將每對HTTP請求響應(yīng)對作為節(jié)點,HTTP請求響應(yīng)對之間的重定向關(guān)系作為邊;接著,根據(jù)節(jié)點屬性字段content_type占比確定節(jié)點標簽的數(shù)學表示,根據(jù)邊類型確定邊標簽的數(shù)學表示,提取HTTP請求響應(yīng)對中的域名和路徑的統(tǒng)計特征作為節(jié)點的屬性特征;最后,將節(jié)點屬性特征、節(jié)點標簽和邊標簽的數(shù)學表示輸入4層圖卷積層進行深層次的圖節(jié)點結(jié)構(gòu)特征提取,將提取的節(jié)點結(jié)構(gòu)特征向量連接聚合成整張圖的圖表示,并輸入傳統(tǒng)的卷積層、池化層和全連接層進行圖分類.
使用函數(shù)scapy.rdpcap()解析PCAP格式樣本.scapy.rdpcap()按照TCP/IP 4層參考模型顯示數(shù)據(jù)包的詳細信息,數(shù)據(jù)包解析后的輸出字段信息如表1所示.本文通過解析[Raw]層的信息來提取HTTP請求和響應(yīng)的各字段信息.
表1 數(shù)據(jù)包解析后的分層及字段信息
由于HTTP/1.1協(xié)議的并發(fā)性,并不能直接確定每個HTTP請求對應(yīng)的HTTP響應(yīng).根據(jù)當前數(shù)據(jù)包請求中的ack值是否等于其他數(shù)據(jù)包響應(yīng)中的seq值來確定最終的HTTP請求響應(yīng)對.
本文將構(gòu)建的重定向圖命名為HRG.HRG是一個有向的異質(zhì)圖,由節(jié)點和有向邊組成,每個節(jié)點都有自己的類型和屬性信息,每條邊也都有自己的類型和方向.
1.2.1 HRG 中節(jié)點和邊的生成方法
1) 節(jié)點生成
HRG中的每個節(jié)點表示1個HTTP請求響應(yīng)對,表示為字典形式node={id,host,path,referer,location,method,http_version,status_code,content_type,payload}.其中,id表示網(wǎng)絡(luò)會話中HTTP請求響應(yīng)對的順序,即節(jié)點在圖中的序號.從HTTP請求報文中獲取method,http_version,host,path和referer字段;從HTTP響應(yīng)報文中獲取location,status_code和content_type字段,并將獲得的響應(yīng)實體內(nèi)容添加到payload字段.
2) 邊生成
HRG中的每條邊表示2個節(jié)點之間的重定向關(guān)系,表示為字典形式edge={srcN,dstN,type}.其中,srcN表示起始節(jié)點,dstN表示結(jié)束節(jié)點,type表示邊類型.type有4個屬性,分別為None,referer,location和content_redir(基于響應(yīng)內(nèi)容的重定向).本文定義的邊生成規(guī)則如下,其中節(jié)點的url由字符串“http://”與節(jié)點的字段host和path中的字符串拼接得到.
(1) 如果i.location等于j.url且i.id小于j.id,則生成從節(jié)點i指向節(jié)點j的類型為location的邊;
(2) 如果i.referer等于j.url且i.id大于j.id,則生成從節(jié)點j指向節(jié)點i的類型為referer的邊;
(3) 如果i.payload中的url等于j.url且i.id小于j.id,則生成從節(jié)點i指向節(jié)點j的類型為content_redir的邊,本文使用正則表達式提取payload中的url;
(4) 如果節(jié)點i是節(jié)點j的上一個節(jié)點,且以上3種情況都沒有,則生成從節(jié)點i指向節(jié)點j的類型為None的邊.
圖2給出了一個由有Neutrino EK攻擊活動的網(wǎng)絡(luò)會話構(gòu)建HRG的示例,圖中展示了5個HTTP請求響應(yīng)對的信息,即創(chuàng)建了5個節(jié)點.在會話交互過程中,用戶首先訪問http://93.171.172.220/?1(節(jié)點1),服務(wù)器返回一個HTTP重定向目標http://93.171.172.220/?2(節(jié)點2);然后用戶訪問節(jié)點2,服務(wù)器返回一個HTTP重定向目標http://1208b83b81c141ecd6f05e24.webhop.org:8000/aotyprvqvj?hash=6a4c601e0802b403736ff29 f3ceaa7c0&qspot=4012736(節(jié)點3);接著用戶訪問節(jié)點3所在網(wǎng)站,該網(wǎng)站加載所需的.js,.css等資源,從而引出節(jié)點4、節(jié)點5等其他節(jié)點.根據(jù)邊生成規(guī)則(1),節(jié)點1的location與節(jié)點2的url相同,生成從節(jié)點1指向節(jié)點2的類型為location的邊.同樣,生成從節(jié)點2到節(jié)點3的類型為location的邊.根據(jù)邊生成規(guī)則(2),節(jié)點4和節(jié)點5的referer與節(jié)點3的url相同,分別生成從節(jié)點3指向節(jié)點4和節(jié)點5的類型為referer的邊.
1.2.2 HRG中節(jié)點和邊的數(shù)學表示
為方便將圖作為DGCNN的輸入,將圖中節(jié)點和邊的信息轉(zhuǎn)化為數(shù)學表示.將節(jié)點信息分別轉(zhuǎn)化為節(jié)點標簽和節(jié)點屬性特征,將邊類型轉(zhuǎn)化為邊標簽.
1) 節(jié)點標簽數(shù)學表示
本文根據(jù)節(jié)點的屬性字段content_type來確定節(jié)點標簽.首先從malware-traffic-analysis.net[11]網(wǎng)站收集有EK攻擊活動的PCAP文件,從文獻[10]收集正常網(wǎng)絡(luò)活動的PCAP文件,構(gòu)建所有PCAP文件的HRG圖;然后分別對有EK攻擊活動的HRG圖樣本和正常網(wǎng)絡(luò)活動的HRG圖樣本統(tǒng)計每種content_type出現(xiàn)的次數(shù)占所有節(jié)點的比例.根據(jù)有EK攻擊活動的HRG圖樣本中content_type的排名,每種content_type占比結(jié)果如表2所示:
表2 content_type占比
從表2可知,有EK攻擊活動的PCAP文件流量數(shù)據(jù)包中content_type是text/html的占比最大,響應(yīng)的HTML內(nèi)容中可能會包含CSS,JavaScript等內(nèi)容,特別是嵌入或引入的JavaScript腳本可能是惡意的.有EK攻擊活動樣本中content_type是圖片格式和CSS樣式表的占比較正常網(wǎng)絡(luò)活動樣本中的少,說明正常網(wǎng)絡(luò)活動樣本可能經(jīng)常引入圖片或CSS樣式來豐富網(wǎng)站內(nèi)容,重定向網(wǎng)站或執(zhí)行漏洞利用的網(wǎng)站則不需要這些額外資源.有EK攻擊活動樣本中包含java,flash,silverlight和octet-stream的content_type占比較正常網(wǎng)絡(luò)活動樣本中的大,它們的響應(yīng)中可能包含java,flash和silverlight的漏洞利用信息,如果在EK攻擊活動的漏洞利用階段執(zhí)行成功,EK攻擊將交付惡意負載,將其安裝在用戶的客戶端,而正常網(wǎng)絡(luò)活動樣本中這些響應(yīng)類型幾乎不會出現(xiàn).根據(jù)表2給具有不同content_type的節(jié)點設(shè)置不同的節(jié)點標簽(用權(quán)重表示),如表3所示:
表3 節(jié)點標簽數(shù)學表示
2) 節(jié)點屬性特征數(shù)學表示
通過人工對有EK攻擊活動樣本和正常網(wǎng)絡(luò)活動樣本進行分析,發(fā)現(xiàn)有EK攻擊活動的請求中出現(xiàn)的域名和路徑與正常網(wǎng)絡(luò)活動請求中出現(xiàn)的域名和路徑在長度、特殊字符、字母等方面有很大不同.本文提取節(jié)點中host字段域名的特征和path字段路徑和查詢的特征,共提取22個字符統(tǒng)計特征作為節(jié)點的屬性特征表示,如表4所示.表4中“路徑”指url中的路徑拼接查詢后的字符串,粗體字符串表示本文提取的新特征.
表4 域名和路徑的字符統(tǒng)計特征
續(xù)表4
3) 邊標簽數(shù)學表示
本文根據(jù)邊類型確定邊標簽.分別統(tǒng)計所有有EK攻擊活動的HRG圖樣本和正常網(wǎng)絡(luò)活動的HRG圖樣本中的邊類型占比,如表5所示.由表5可知,有EK攻擊活動樣本中邊類型content_redir占比最大,說明在EK攻擊活動中攻擊者經(jīng)常利用基于內(nèi)容的重定向?qū)⒂脩糁囟ㄏ虻綈阂饩W(wǎng)站.邊類型referer占比較小,因為EK攻擊活動中的重定向網(wǎng)站不需要引入額外的.css,.js等資源來豐富網(wǎng)站內(nèi)容,但也可能是攻擊者將HTTP頭信息中referer字段的信息隱藏.正常網(wǎng)絡(luò)活動樣本中邊類型referer占比最大,說明在正常網(wǎng)絡(luò)活動中正常網(wǎng)站內(nèi)容豐富,通常會通過referer加載許多其他資源.表5還給出了根據(jù)邊類型占比設(shè)置的邊標簽(用權(quán)重表示).
表5 邊類型占比及邊標簽
DGCNN是文獻[16]提出的端到端的用于圖分類的深度學習模型,直接接收圖(用圖的鄰接矩陣和節(jié)點信息矩陣表示)作為輸入,不需要進行任何預(yù)處理.DGCNN首先使用多層圖卷積層提取深層次的圖節(jié)點結(jié)構(gòu)特征;然后SortPooling層根據(jù)圖卷積層的輸出(即節(jié)點結(jié)構(gòu)特征向量)對圖中節(jié)點進行排序,并按照節(jié)點順序連接節(jié)點結(jié)構(gòu)特征向量生成整張圖的圖表示;最后將輸出的圖表示輸入傳統(tǒng)卷積層和全連接層進行圖分類.
1) 圖卷積層
本文用X∈n×c表示圖的節(jié)點信息矩陣,是由節(jié)點標簽的one-hot編碼矩陣和節(jié)點的屬性特征矩陣拼接后的矩陣.其中,c表示圖初始有c列特征元素,n表示圖中的節(jié)點數(shù).圖卷積層的輸出根據(jù)式(1)計算得出:
(1)
為了提取深層次的圖節(jié)點結(jié)構(gòu)特征,DGCNN堆疊多個圖卷積層,如式(2)所示:
(2)
其中,Zt表示第t個圖卷積層的輸出,Wt表示第t個圖卷積層的參數(shù)矩陣.將t個圖卷積層的輸出水平連接起來得到輸出Z1:t[Z1,Z2,…,Zt].Z1:t的每一行都可以看作是1個節(jié)點的特征向量表示,其編碼了節(jié)點的深層次的結(jié)構(gòu)信息.
2) SortPooling層
SortPooling層的輸入是Z1:t,共有n行,每行表示1個節(jié)點的特征向量,因此有n個節(jié)點.每列表示組成特征向量的1個特征元素[17].該層的輸出是1個有k行的向量矩陣,k是一個可調(diào)整的整數(shù)參數(shù).經(jīng)過該層池化后,原來的n個節(jié)點變成k個節(jié)點,且這k個節(jié)點按節(jié)點結(jié)構(gòu)特征向量進行了排序.把這k個節(jié)點的結(jié)構(gòu)特征向量按排列的順序展開,連接成整張圖的圖表示.
將SortPooling層輸出的圖表示輸入卷積層、最大池化層和全連接層進行分類預(yù)測.
本文的EK數(shù)據(jù)集從網(wǎng)站malware-traffic-analysis.net[11]獲取.該網(wǎng)站由專業(yè)安全研究人員維護,其中的案例幾乎包含了所有流行的EK,且每個案例都由研究人員手動分析.對網(wǎng)站從2013—2021年的PCAP文件進行爬取,將爬取的.zip文件用網(wǎng)站提供的密碼解壓縮,除去密碼不能解密的和不是EK攻擊活動的,共得到1 199個PCAP文件.正常數(shù)據(jù)集采用文獻[10]數(shù)據(jù),從Alexa排名前5萬的網(wǎng)站中收集,總共40 GB.本文使用VirusTotal[18]過濾掉正常數(shù)據(jù)集中包含可疑域名的PCAP文件,再過濾掉沒有重定向邊的PCAP文件,最后留下10 543個至少包含1條重定向邊的PCAP樣本.為保證數(shù)據(jù)集的平衡,從正常數(shù)據(jù)集中隨機選取1 200個PCAP文件構(gòu)成正常網(wǎng)絡(luò)活動樣本.本文對EK數(shù)據(jù)集與正常網(wǎng)絡(luò)活動樣本中的每個樣本都構(gòu)建HRG圖,總共獲得113 271個節(jié)點和210 904條邊.
實驗環(huán)境的軟硬件配置信息如表6所示.PCAP文件解析使用scapy庫實現(xiàn),HRG圖的創(chuàng)建使用networkx庫實現(xiàn),DGCNN模型使用stellargraph庫和Keras庫實現(xiàn).
表6 實驗環(huán)境配置
本文的EK攻擊活動檢測是一個二分類問題.實驗結(jié)果使用準確率(acc)、精確率(P)、召回率(R)和F1值進行評估,公式如下:
(3)
(4)
(5)
(6)
其中,TP(true positive)表示樣本預(yù)測值為惡意且樣本標簽為惡意的樣本數(shù),TN(true negative)表示樣本預(yù)測值為正常且樣本標簽為正常的樣本數(shù),F(xiàn)P(false positive)表示樣本預(yù)測值為惡意但樣本標簽為正常的樣本數(shù),F(xiàn)N(false negative)表示樣本預(yù)測值為正常但樣本標簽為惡意的樣本數(shù).
本文模型各層設(shè)置的主要參數(shù)如表7所示:
表7 模型參數(shù)設(shè)置
為驗證本文模型的有效性,設(shè)計以下2組實驗.
1) 準確率(acc)和損失值(loss)
將收集的EK數(shù)據(jù)集和正常網(wǎng)絡(luò)活動樣本按照8∶2的比例分為訓練集和測試集,采用本文方法使用訓練集訓練模型,并使用測試集進行模型評估.訓練模型的迭代輪數(shù)(epochs)為200,批處理大小(batch_size)為50,選用Adam優(yōu)化器且學習率為0.001.圖3給出了在訓練集和測試集上得到的acc和loss,這里loss是指模型分類預(yù)測值和真實值之間的差別,由交叉熵損失函數(shù)計算得到.
由圖3(a)可知,隨著epochs的增加,訓練集和測試集的acc都逐漸增加.當epochs為200時,訓練集的acc達到98.75%,測試集的acc趨近于訓練集的acc,達到97.81%.由圖3(b)可知,隨著epochs的增加,訓練集和測試集的loss都呈下降狀態(tài),且在[0,0.2]的范圍內(nèi)波動.當epochs為200時,訓練集的loss為0.035 7,測試集的loss為0.068 5.可見,隨著epochs的增加,本文模型能夠有效檢測EK攻擊活動且損失較小.
2) 檢測模型對比
將本文提出的EK活動檢測模型與文獻[10]和文獻[19]提出的檢測模型進行對比,使用10折交叉驗證方法進行模型評估,結(jié)果如表8所示:
表8 檢測模型對比 %
文獻[10]構(gòu)建網(wǎng)絡(luò)會話圖模型,從圖中提取節(jié)點屬性特征、邊屬性特征、圖屬性特征和圖中心性質(zhì)特征進行檢測,忽視了圖的節(jié)點結(jié)構(gòu)特征.文獻[19]利用EK中使用的url路徑和查詢組件特征檢測EK活動,因提取的特征少、不全面,導(dǎo)致訓練的模型檢測EK攻擊活動不準確.本文采用圖卷積神經(jīng)網(wǎng)絡(luò)的方法提取重定向圖的節(jié)點結(jié)構(gòu)特征,豐富了圖的向量表示,由表8可知,本文模型在準確率、精確率、召回率等方面都有明顯提升,平均檢測準確率達到97.54%.
為更好地解決EK攻擊活動檢測問題,本文提出一種基于DGCNN的EK攻擊活動檢測模型.通過與其他方法對比,本文模型能夠精確有效地檢測EK攻擊活動,平均檢測準確率達到97.54%.為繼續(xù)提高模型的檢測準確率,未來研究工作主要有3點:1)公有的EK數(shù)據(jù)集較少,還需要收集更多的數(shù)據(jù)集進行模型驗證;2)本文只提取了節(jié)點屬性的統(tǒng)計特征,忽略了屬性的字符級特征;3)本文利用url的正則匹配提取基于響應(yīng)內(nèi)容的重定向關(guān)系,但攻擊者可能通過對響應(yīng)內(nèi)容中的url實施分割、編碼等混淆技術(shù)來阻止檢測,這導(dǎo)致提取的url不完善,未來將研究如何重構(gòu)響應(yīng)內(nèi)容中的url.