■ 國家計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心江蘇分中心 邱凌志 顧弘
編者按:惡意軟件往往能夠逃避傳統(tǒng)使用黑名單標(biāo)記或關(guān)注終端惡意代碼檢測(cè)的方法。本文提出一種在大規(guī)模網(wǎng)絡(luò)中檢測(cè)惡意軟件分布的方法,聚焦于惡意軟件基礎(chǔ)設(shè)施之間的網(wǎng)絡(luò)關(guān)系,在大規(guī)模網(wǎng)絡(luò)中區(qū)分正常和惡意流量,用以發(fā)現(xiàn)傳統(tǒng)檢測(cè)方法無法檢測(cè)到的惡意軟件。
惡意軟件作為互聯(lián)網(wǎng)中最嚴(yán)重的網(wǎng)絡(luò)安全威脅之一,受害主機(jī)一旦感染惡意軟件,便可能被發(fā)送垃圾郵件、進(jìn)行拒絕服務(wù)攻擊以及竊取敏感數(shù)據(jù)。
筆者對(duì)超過500 條近半年的互聯(lián)網(wǎng)公開威脅情報(bào)研究發(fā)現(xiàn),惡意軟件無論是利用暴力破解各類服務(wù)端口方式傳播,或者是利用釣魚郵件方式傳播,亦或是利用瀏覽器漏洞的水坑攻擊方式傳播,在注入ShellCode 之后,會(huì)從服務(wù)端下載真正的惡意程序,然后開展挖礦、勒索及竊取信息等惡意行為,包括組成僵尸網(wǎng)絡(luò)。
Shell Code 通常利用HTTP 請(qǐng)求從遠(yuǎn)端服務(wù)器下載程序,并在本地安裝執(zhí)行惡意軟件。這些請(qǐng)求一般通過用戶瀏覽器進(jìn)行簡單的功能調(diào)用,從網(wǎng)絡(luò)角度來說,與用戶的正常軟件下載請(qǐng)求很難區(qū)分??墒?,當(dāng)進(jìn)入大規(guī)模網(wǎng)絡(luò),便會(huì)發(fā)現(xiàn)大量惡意軟件通過不同主機(jī)下載,而這些惡意主機(jī)又均與某一服務(wù)端相關(guān),呈現(xiàn)出惡意軟件基礎(chǔ)設(shè)施分布,這種分布與CDN網(wǎng)絡(luò)有些類似,但仍有不同。
本文提出一種在大規(guī)模網(wǎng)絡(luò)中檢測(cè)惡意軟件分布的方法,該方案聚焦于惡意軟件基礎(chǔ)設(shè)施之間的網(wǎng)絡(luò)關(guān)系,在大規(guī)模網(wǎng)絡(luò)中區(qū)分正常和惡意流量,用以發(fā)現(xiàn)傳統(tǒng)檢測(cè)方法無法檢測(cè)到的惡意軟件。
圖1 展現(xiàn)了方案的整體框架和數(shù)據(jù)流,整個(gè)檢測(cè)過程可以分為3 個(gè)階段:提取階段、篩選階段和分析階段。
系統(tǒng)的輸入數(shù)據(jù)為大規(guī)模網(wǎng)絡(luò)中的HTTP 流量。根據(jù)ISP 提供的流量數(shù)據(jù),每日的HTTP 請(qǐng)求報(bào)文數(shù)量達(dá)到上億級(jí)別,不可能直接檢測(cè)這一數(shù)量級(jí)的報(bào)文。因此,這一階段的目的是利用白名單的方法過濾掉大部分非惡意流量。
惡意軟件經(jīng)常修改后綴類型,因此,不能基于HTTP返回報(bào)文中的Content-Type字段判斷文件類型,而是需要重放HTTP 請(qǐng)求報(bào)文,根據(jù)下載文件的MIME 字段判斷文件的真實(shí)類型。結(jié)果如在預(yù)先制定的白名單范圍內(nèi),則過濾掉該報(bào)文,否則,提取源IP、目的IP、文件Hash 及完整請(qǐng)求URL 等字段生成待檢測(cè)記錄。
圖1 方案整體設(shè)計(jì)
在篩選階段,方案針對(duì)惡意攻擊者常用的4 種技術(shù)進(jìn)行檢測(cè)。
(1)服務(wù)端多態(tài)。為了躲避檢測(cè),惡意攻擊者會(huì)經(jīng)常改變服務(wù)端惡意文件下載路徑,甚至使用不同的域名,這些方式被稱為服務(wù)端多態(tài)。
(2)分布式主機(jī)。惡意攻擊者為確保惡意服務(wù)端有效,通常會(huì)使用多個(gè)服務(wù)端,這種分布式的主機(jī)與CDN 網(wǎng)絡(luò)有些相似。在這里,使用機(jī)器學(xué)習(xí)的分類算法區(qū)分正常CDN 與惡意分布式網(wǎng)絡(luò)。
(3)專用惡意主機(jī)。惡意攻擊者可能通過重定向技術(shù)將受害主機(jī)重定向至專用惡意域名,而這些專用惡意域名與正常網(wǎng)頁在頁面、CSS文件和JavaScript 腳本程序方面有許多不同,系統(tǒng)對(duì)此加以區(qū)分。
(4)掛馬網(wǎng)頁。受害主機(jī)首先通過瀏覽器訪問惡意網(wǎng)頁,被注入ShellCode 后會(huì)再次連接惡意服務(wù)端,可考慮利用User-Agent 字段識(shí)別這樣的網(wǎng)絡(luò)行為。但用戶使用不同瀏覽器訪問同一網(wǎng)站或者NAT 網(wǎng)絡(luò)可能造成誤報(bào),對(duì)此需要加以區(qū)分。
基于上述兩個(gè)階段篩選出的可疑記錄,生成惡意軟件基礎(chǔ)設(shè)施網(wǎng)絡(luò)分布圖,直觀展現(xiàn)惡意軟件的網(wǎng)絡(luò)分布。
在提取階段,首先將存儲(chǔ)在HDFS 的海量HTTP 流量請(qǐng)求報(bào)文檢索出來。為了提升下一步重放報(bào)文的效率,檢索過程同樣采用域名白名單的方法。域名白名單的制定由統(tǒng)計(jì)平均和經(jīng)驗(yàn)總結(jié)相結(jié)合,既包含傳統(tǒng)互聯(lián)網(wǎng)頭部企業(yè)域名,例如baidu.com、qq.com。也包含新興流行互聯(lián)網(wǎng)應(yīng)用域名,例如yximgs.com、miwifi.com。由此,制定域名白名單Top 100。
第二步,遍歷檢索出的HTTP 請(qǐng)求報(bào)文,如果包含文件下載的請(qǐng)求,則重放該報(bào)文。然而,下載文件開銷很大,尤其是大文件。幸運(yùn)的是,可以使用wget 命令只下載文件的前1 KB 大小。此后,通過Linux 的file 命令判斷文件類型,file 命令通過文件頭判斷文件真實(shí)類型,而不依據(jù)文件后綴。如果命中MIME 白名單(如視頻、音頻、圖片等格式)則舍棄,否則計(jì)算文件Hash 值,并提取IP、URL、User-Agent 等字段作為一條記錄,進(jìn)入下面檢測(cè)階段。
第一個(gè)檢測(cè)機(jī)制是捕捉惡意軟件發(fā)布者嘗試?yán)@過反病毒軟件基于簽名檢測(cè)的行為。檢測(cè)方法是檢索滿足如下兩個(gè)條件的下載記錄:相同的URI;下載超過n 個(gè)不同的文件,文件依據(jù)上一階段的Hash 值進(jìn)行區(qū)分,n 的取值在實(shí)驗(yàn)中將進(jìn)行評(píng)估。實(shí)際的例子觸發(fā)這一檢測(cè)機(jī)制的URI 如/dlq.rar,該URI 有多種域名變化,如www.9530.ca、585872.com??梢钥闯?,發(fā)布者不僅重打包惡意軟件,而且通過域名變換增加了惡意軟件的魯棒性。
檢測(cè)方法分為兩個(gè)階段:首先,試圖找到CDN;然后,使用一個(gè)分類器區(qū)分正常CDN與惡意CDN。
第一步,根據(jù)文件Hash值將所有記錄進(jìn)行聚類,即當(dāng)兩條下載記錄擁有相同 的Hash 值h,而 對(duì) 應(yīng) 的URL 分 別 為u1 和u2 時(shí),將這兩條記錄關(guān)聯(lián),形成一個(gè)Cluster。如果兩個(gè)Cluster存在相同的Domain 或服務(wù)端IP,則將這兩個(gè)Cluster合并為一個(gè)。系統(tǒng)認(rèn)為所有的Cluster 至少包含兩個(gè)記錄,否則無法構(gòu)成CDN 網(wǎng)絡(luò)。
第二步,使用機(jī)器學(xué)習(xí)的方法在上一階段的結(jié)果中區(qū)分正常CDN 與惡意Cluster,檢測(cè)分布式惡意軟件主機(jī)。通過對(duì)訓(xùn)練集中的數(shù)據(jù)手工打標(biāo)簽的方式,訓(xùn)練分類器。方案選擇隨機(jī)森林的算法作為分類器,以滿足需求。根據(jù)對(duì)惡意軟件基礎(chǔ)設(shè)施的研究,總結(jié)以下6 個(gè)分類特征:
域名共存:為了減少開銷,惡意軟件常常將很多域名放在同一臺(tái)服務(wù)器上,這個(gè)特征值等于一個(gè)Cluster中所有的域名數(shù)/IP 數(shù)。
頂級(jí)域名數(shù):為了逃避域名黑名單的檢測(cè),惡意軟件通常會(huì)使用一系列不同的頂級(jí)域名,正常的CDN 一般使用同一頂級(jí)域名下的二級(jí)域名。
每個(gè)域名上的路徑數(shù)、文件名數(shù):正常的CDN 考慮用戶體驗(yàn),會(huì)有完整的目錄結(jié)構(gòu),而惡意軟件則相反。對(duì)于上述特征,計(jì)算路徑數(shù)、文件名數(shù)/域名數(shù)。
自體輸血也有禁忌證,以下患者不適合自體輸血:采血可能誘發(fā)疾病加重者、菌血癥患者、貧血、肝腎功能不良或嚴(yán)重心臟病等患者[20]。
每個(gè)域名上的URI 數(shù)量:惡意軟件發(fā)布者在每個(gè)域名上通常只使用很少的URI 數(shù)量,最常見情形是只有一個(gè)。對(duì)于這一特征,計(jì)算集群域名中所有域名的URI 數(shù)量/域名數(shù)。
文件類型:正常CDN 會(huì)提供不同的文件類型供用戶下載,而惡意軟件服務(wù)端提供的最多的是可執(zhí)行文件。系統(tǒng)計(jì)算集群中所有主機(jī)的可執(zhí)行文件數(shù)/所有文件數(shù),作為特征指標(biāo)。
惡意軟件發(fā)布者經(jīng)常使用專用主機(jī)隱藏在僵尸網(wǎng)絡(luò)幕后。這些主機(jī)通常只會(huì)存放少量的可執(zhí)行文件,很少有其他類型的文件。正常主機(jī)則包含了HTML 頁面、CSS 文件以及JavaScript 腳本等等。利用這個(gè)特征,可以檢測(cè)出專用惡意主機(jī)。據(jù)此,系統(tǒng)發(fā)現(xiàn)了112adfdae.tk 這個(gè)域名,它被KingMiner 挖礦網(wǎng)絡(luò)用來傳播挖礦程序。
觀察掛馬網(wǎng)頁的網(wǎng)絡(luò)流量行為特征:連續(xù)兩條請(qǐng)求報(bào)文,一條來自瀏覽器,一條來自ShellCode。因此,系統(tǒng)尋找來自同一源IP,但User-Agent 字段不同的連續(xù)HTTP 請(qǐng)求報(bào)文。其中,第一個(gè)請(qǐng)求的文件類型必須是可執(zhí)行文件,然而,NAT 環(huán)境會(huì)對(duì)檢測(cè)產(chǎn)生干擾。對(duì)此,可以設(shè)定一個(gè)請(qǐng)求報(bào)文的時(shí)間間隔閾值,實(shí)際檢測(cè)過程中設(shè)定為1 min,當(dāng)時(shí)間間隔小于這個(gè)閾值時(shí),則認(rèn)為其是惡意軟件行為。符合這一策略的是znshuru.com 域名下的setup_pgytg001.exe文件,瀏覽器下載后會(huì)再次下載.dat 格式的惡意文件,User-Agent 字段為NULL。
如圖2 所示,一個(gè)最簡單的網(wǎng)絡(luò)圖由8 個(gè)節(jié)點(diǎn)構(gòu)成,方案關(guān)心以下節(jié)點(diǎn)之間的關(guān)系:
URL 屬于同一完整域名FQDN 或頂級(jí)域名Domain;
同一URL 下載的不同文件Hash;
相同URI 或文件名file。
圖2 簡單惡意軟件基礎(chǔ)設(shè)施網(wǎng)絡(luò)分布圖
開始圖中只有一個(gè)URL節(jié)點(diǎn),然后添加URL 到各節(jié)點(diǎn)的邊,當(dāng)2 條記錄存在上述關(guān)系時(shí),合并2 條記錄。如此迭代,直到圖無法增長或達(dá)到預(yù)先設(shè)定的大?。ū热?00 個(gè)節(jié)點(diǎn))。
一旦惡意軟件基礎(chǔ)設(shè)施網(wǎng)絡(luò)分布圖生成,安全分析人員可以直觀地看出圖中的哪個(gè)URL 節(jié)點(diǎn)或服務(wù)端節(jié)點(diǎn)(包括域名、IP)是惡意的。這基于簡單的規(guī)則:如果節(jié)點(diǎn)越孤立,則可能性越低,否則,屬于惡意的概率越大。當(dāng)然,為了量化這一概率,需要先對(duì)邊賦值:
邊url-hash,權(quán)重為1;
邊url-server,權(quán)重為1;
邊url-client,權(quán)重為4;
其余的邊權(quán)重均為2。
然后,給出節(jié)點(diǎn)j 的惡意概率Pj的計(jì)算公式:
其中,shortest_path(i,j)為節(jié)點(diǎn)i 到節(jié)點(diǎn)j 的最短加權(quán)路徑??梢钥闯觯?jié)點(diǎn)距離越近,權(quán)重越小,則概率越大。
在討論實(shí)驗(yàn)結(jié)果之前,需要先明確判斷下載文件是否為惡意軟件的標(biāo)準(zhǔn)。本文使用VirusTotal檢 測(cè)URL、域 名 以 及IP,VirusTotal 使用多個(gè)反病毒引擎,當(dāng)有2 個(gè)及以上反病毒引擎檢測(cè)結(jié)果為惡意時(shí),判斷該對(duì)象為惡意的。對(duì)于那些VirusTotal 未檢測(cè)為惡意的可疑對(duì)象,通過沙箱結(jié)合人工的方式進(jìn)行驗(yàn)證。
服務(wù)端多態(tài):在訓(xùn)練集中,當(dāng)n 取2 時(shí),檢測(cè)惡意URL 的數(shù)量為55。然而此時(shí),反病毒軟件的升級(jí)請(qǐng)求數(shù)量為423,會(huì)造成大量誤報(bào),極高的假陽率影響檢測(cè)。因此,一方面可通過域名白名單對(duì)反病毒軟件進(jìn)行過濾,另一方面根據(jù)實(shí)驗(yàn)結(jié)果,取n 為10。改善后,該方法的檢測(cè)準(zhǔn)確率達(dá)到93.4%,假陽率僅為6.6%。
分布式主機(jī):實(shí)驗(yàn)中使用隨機(jī)森林作為分類器區(qū)分正常CDN 和惡意CDN。在訓(xùn)練集中,初始參數(shù)的隨機(jī)森林成績僅有0.87 左右,經(jīng)過參數(shù)調(diào)整優(yōu)化,方案對(duì)分布式主機(jī)的檢測(cè)準(zhǔn)確率達(dá)到92.1%。在測(cè)試集中,經(jīng)驗(yàn)證實(shí)際的準(zhǔn)確率稍有降低,數(shù)值為85.2%。
表1 方案整體評(píng)估
整體評(píng)估:實(shí)驗(yàn)中發(fā)現(xiàn)專用惡意主機(jī)、掛馬網(wǎng)頁兩種檢測(cè)方法相較前兩種方法準(zhǔn)確率稍微低一些,這是因?yàn)橛行〔糠终5牧髁空?qǐng)求也滿足檢索條件。將4 種檢測(cè)方法結(jié)合,在表1 中給出整體實(shí)驗(yàn)結(jié)果,評(píng)估方案的有效性。
在訓(xùn)練集中,檢測(cè)結(jié)果去重后給出166 條惡意記錄。通過驗(yàn)證后,發(fā)現(xiàn)其中存在21 條誤報(bào),準(zhǔn)確率為87.3%。在測(cè)試集中,檢測(cè)結(jié)果去重后給出369 條惡意記錄,通過驗(yàn)證后,發(fā)現(xiàn)其中存在132 條誤報(bào),準(zhǔn)確率為64.2%??梢钥吹?,隨著測(cè)試數(shù)據(jù)的增多,系統(tǒng)準(zhǔn)確率也出現(xiàn)了下降。幸運(yùn)的是,由于惡意軟件基礎(chǔ)設(shè)施變化較快,檢測(cè)對(duì)象為一段時(shí)間T 內(nèi)的流量數(shù)據(jù),T 的取值一般為最近一天,最長至最近一周。T 如果時(shí)間太長,許多設(shè)施便會(huì)無法訪問。
此外,使用樣本集共161條惡意流量數(shù)據(jù)進(jìn)行測(cè)試,方案共檢測(cè)出其中108 條,假陰率為32.9%。這是因?yàn)?,樣本集中有一些?dú)立的惡意URL,比如doc、jar 為后綴的,與其他URL 未呈現(xiàn)相關(guān)性,方案對(duì)此難以識(shí)別。不過,傳統(tǒng)惡意軟件可以通過黑名單的方式檢測(cè),方案的目標(biāo)是輔助傳統(tǒng)檢測(cè)方法,而不是代替它。
最后,在2019 年11 月的測(cè)試集中,方案檢測(cè)到一個(gè)惡意域名es.ldbdhm.xyz,它被用作發(fā)布眾多jpg 后綴的惡意文件,這些文件實(shí)際上是可執(zhí)行pe 文件。可以關(guān)注到,2019 年12 月互聯(lián)網(wǎng)公開了相關(guān)威脅情報(bào),它是“紫狐”木馬使用的最新惡意域名,這表明了方案的有效性。
生成圖統(tǒng)計(jì):圖3 展現(xiàn)的一個(gè)真實(shí)惡意軟件基礎(chǔ)設(shè)施網(wǎng)絡(luò)分布圖,包含14 條檢測(cè)記錄,由于部分節(jié)點(diǎn)相同,因此節(jié)點(diǎn)數(shù)小于14 乘以字段數(shù)8,實(shí)際共79 個(gè)節(jié)點(diǎn)。實(shí)驗(yàn)中,訓(xùn)練集、測(cè)試集中分別生成了30 和66 幅惡意軟件基礎(chǔ)設(shè)施網(wǎng)絡(luò)分布圖,占比最多的為節(jié)點(diǎn)數(shù)小于50的生成圖。節(jié)點(diǎn)數(shù)小于50的生成圖網(wǎng)絡(luò)關(guān)系比較簡單甚至無相關(guān)性,因此方案的誤報(bào)也集中在這一區(qū)間。
圖3 真實(shí)的惡意軟件基礎(chǔ)設(shè)施網(wǎng)絡(luò)分布圖
本文提出一種新的在大規(guī)模網(wǎng)絡(luò)中挖掘惡意軟件分布的方法,區(qū)別于傳統(tǒng)惡意軟件檢測(cè)方案,該方案不使用黑名單或終端行為特征檢測(cè)技術(shù),而是聚焦挖掘惡意軟件網(wǎng)絡(luò)基礎(chǔ)設(shè)施,輔助發(fā)現(xiàn)那些多變化的惡意軟件,彌補(bǔ)傳統(tǒng)檢測(cè)方案的不足。
然而,在大規(guī)模網(wǎng)絡(luò)流量中區(qū)分正常和惡意報(bào)文給檢測(cè)工作帶來挑戰(zhàn)。本文使用白名單、機(jī)器學(xué)習(xí)分類技術(shù),結(jié)合網(wǎng)絡(luò)關(guān)系可視化,完成了檢測(cè)方案的設(shè)計(jì)。筆者實(shí)現(xiàn)了方案的原型系統(tǒng),分別選擇真實(shí)的2 天HTTP 城域網(wǎng)級(jí)別流量作為訓(xùn)練集,7 天城域網(wǎng)級(jí)別HTTP 流量作為測(cè)試集,對(duì)系統(tǒng)進(jìn)行了評(píng)估。
實(shí)驗(yàn)表明,系統(tǒng)能夠有效檢測(cè)大規(guī)模網(wǎng)絡(luò)中的惡意軟件網(wǎng)絡(luò)分布關(guān)系,以及尚未公布的惡意軟件網(wǎng)絡(luò)基礎(chǔ)設(shè)施。