張路青
(海軍駐中南地區(qū)光電系統(tǒng)軍事代表室 武漢 430223)
近年來,隨著互聯(lián)網(wǎng)的不斷發(fā)展,我國網(wǎng)站數(shù)量持續(xù)增長而網(wǎng)站所面臨的安全問題也愈發(fā)嚴(yán)重。圖1是360互聯(lián)網(wǎng)絡(luò)安全中心給出的每月存在高危漏洞的網(wǎng)站個(gè)數(shù)。其中,9月掃出的有高危漏洞的網(wǎng)站數(shù)最多,達(dá)到71964個(gè)。雖然通過網(wǎng)站的日志分析,網(wǎng)站管理人員可以清楚地獲取用戶的訪問行為,但是由于網(wǎng)站產(chǎn)生的日志文件較大,數(shù)據(jù)量較多,包含的數(shù)據(jù)類型多樣化,文件格式不統(tǒng)一等原因,手工進(jìn)行日志文件分析需要消耗大量的人力成本和時(shí)間成本,因此如何使網(wǎng)站的管理者從繁重的手工分析日志文件工作中解脫出來,能夠有效識別針對網(wǎng)站發(fā)起的惡意攻擊行為,并深度檢測網(wǎng)站是否具有潛在的安全漏洞,保障網(wǎng)站業(yè)務(wù)能夠正常穩(wěn)定安全的可持續(xù)執(zhí)行,對建設(shè)網(wǎng)絡(luò)信息安全體系有著極為重要的意義。
圖1 每月存在高危漏洞的網(wǎng)站個(gè)數(shù)
Web日志挖掘系統(tǒng)的概念由Cooley R首次提出,該系統(tǒng)首先是處理客戶訪問網(wǎng)站所留下的日志信息,并將日志信息中的數(shù)據(jù)轉(zhuǎn)換成傳統(tǒng)數(shù)據(jù)挖掘算法能夠處理執(zhí)行的數(shù)據(jù)格式,從而可以采用傳統(tǒng)的挖掘技術(shù)進(jìn)行處理,最終獲得有用的信息。Spiliopoulout提出了一種從Web日志中構(gòu)造聚集樹的算法,并建立了一個(gè)訪問模式挖掘器WUM(Web Utilization Miner),然后使用MINT挖掘語言在WUM中挖掘訪問模式[1]。為了發(fā)現(xiàn)攻擊和異常行為,Suneetha K R利用新的預(yù)處理技術(shù)與改進(jìn)Apri?ori數(shù)組向量算法,提出了一種針對Web日志記錄更加優(yōu)化的處理方法[2]。
以上研究成果對于Web攻擊數(shù)據(jù)挖掘技術(shù)研究具有很大的指導(dǎo)和借鑒意義。但是其中還存在一些不足之處:缺乏日志數(shù)據(jù)隱藏關(guān)系的發(fā)現(xiàn),致使數(shù)據(jù)豐富,信息匱乏的現(xiàn)象;目前對Web日志的分析還是以訪問統(tǒng)計(jì)及用戶查詢方面較多,缺乏對日志中的孤立點(diǎn)的挖掘以及對日志中各項(xiàng)之間的關(guān)聯(lián)規(guī)則的發(fā)現(xiàn),因此難以達(dá)到對Web日志中攻擊數(shù)據(jù)挖掘的要求。論文則從數(shù)據(jù)挖掘的角度,研究聚類分析的數(shù)據(jù)挖掘方法,并在此基礎(chǔ)上繼續(xù)展開研究。提出了基于孤立點(diǎn)異常度的攻擊數(shù)據(jù)挖掘算法,針對Web應(yīng)用漏洞和攻擊行為建立了檢測模型,并對算法進(jìn)行了實(shí)驗(yàn)驗(yàn)證。
Web日志主要是服務(wù)器用來將客戶在網(wǎng)上的訪問記錄或在站點(diǎn)上進(jìn)行的一系列操作的行為記錄保存在服務(wù)器的日志文件上,以作為日后處理問題的一個(gè)追溯和根據(jù)[3]。隨著計(jì)算機(jī)技術(shù)的高速發(fā)展和大容量存儲設(shè)備的出現(xiàn),使得Web服務(wù)器可以存儲海量的Web日志文件數(shù)據(jù)。Web日志挖掘就是通過分析日志文件中的記錄可以審查客戶瀏覽Web頁面的模式和執(zhí)行的操作,進(jìn)而推斷客戶訪問行為[4]。
如圖2所示是Web日志挖掘的總體流程[5]。
圖2 Web日志挖掘的主要過程
首先通過數(shù)據(jù)采集從Web服務(wù)器中取出所需要的Web日志文件;然后經(jīng)過數(shù)據(jù)預(yù)處理對這些日志文件進(jìn)行按要求的處理,往往是刪除冗余數(shù)據(jù)與系統(tǒng)噪聲,得到的是經(jīng)過清理之后的會(huì)話文件與事務(wù)文件;再通過模式發(fā)現(xiàn)建立數(shù)據(jù)項(xiàng)之間的規(guī)則或者模式,其中模式發(fā)現(xiàn)可以選擇多種不同的分析技術(shù),如關(guān)聯(lián)分析與聚類分析等;最后采用有用的模式進(jìn)行分析,挖掘出最終的結(jié)果。
由于在數(shù)據(jù)收集階段采集回來的數(shù)據(jù)不能保證是完整的,且在結(jié)構(gòu)上存在多種格式,或有許多冗余的數(shù)據(jù)。針對這個(gè)問題,需要先對原始Web日志文件進(jìn)行數(shù)據(jù)預(yù)處理,將數(shù)據(jù)轉(zhuǎn)換成結(jié)構(gòu)化的統(tǒng)一格式,并過濾掉重復(fù)的或無用的信息才能提高數(shù)據(jù)分析的效率。
對于攻擊數(shù)據(jù)挖掘來說,Web日志數(shù)據(jù)預(yù)處理主要需要進(jìn)行數(shù)據(jù)清理、用戶識別、會(huì)話識別與路徑補(bǔ)全這四個(gè)方面的操作[6]。
2.2.1 數(shù)據(jù)清理
數(shù)據(jù)清理主要是指通過填寫缺少的數(shù)值、識別或刪除離群點(diǎn)、刪除對挖掘結(jié)果無用的數(shù)據(jù)來“清理”數(shù)據(jù)。它主要是用來清理數(shù)據(jù)文件中出現(xiàn)的誤差,以及一些可能對挖掘結(jié)果影響較大的特殊值。數(shù)據(jù)清理需要達(dá)到以下幾個(gè)目標(biāo):格式標(biāo)準(zhǔn)化、異常數(shù)據(jù)清除、錯(cuò)誤糾正以及重復(fù)數(shù)據(jù)清除[7]。對Web日志進(jìn)行數(shù)據(jù)清理有多種方法,且目的不盡相同,因此需要根據(jù)每次挖掘任務(wù)的不同,選擇合適的處理方法對Web日志進(jìn)行清理。
2.2.2 用戶識別
在Web日志數(shù)據(jù)挖掘之前,需要對用戶進(jìn)行識別,來確定這些數(shù)據(jù)是否都來源于同一用戶還是多個(gè)用戶。因此可以利用以下的啟發(fā)式規(guī)則來進(jìn)行用戶識別:
1)以IP地址來識別用戶。
2)如果IP相同,則以瀏覽器或操作系統(tǒng)版本來識別用戶。
3)如果IP相同,且瀏覽器與操作系統(tǒng)也相同,那么可通過網(wǎng)站的拓?fù)浣Y(jié)構(gòu)來識別用戶。
2.2.3 會(huì)話識別
會(huì)話識別是指將用戶的訪問請求按時(shí)序進(jìn)行分片,形成多個(gè)相互獨(dú)立的序列,每一個(gè)會(huì)話序列對應(yīng)著用戶那一段時(shí)間內(nèi)的連續(xù)操作,因此研究分片后的會(huì)話序列,更有利于發(fā)現(xiàn)用戶的訪問模式以及瀏覽愛好,甚至可以察覺哪些會(huì)話可能屬于攻擊行為。
基于Web日志請求的用戶會(huì)話識別需要設(shè)定超時(shí)閾值,通常有兩種方法判斷用戶是否開啟了新的會(huì)話,第一種是判斷整個(gè)會(huì)話時(shí)間是否已經(jīng)超時(shí);第二種是判斷兩個(gè)請求頁面的時(shí)間差是否達(dá)到超時(shí)閾值。
2.2.4 路徑補(bǔ)全
路徑補(bǔ)全就是對用戶的訪問路徑進(jìn)行補(bǔ)充,在日志引用不完整的情況下,可以利用網(wǎng)站的拓?fù)浣Y(jié)構(gòu)來補(bǔ)充路徑[8]。只有構(gòu)造出完整的用戶訪問路徑,才好分析用戶的行為是否存在惡意攻擊。目前主流的路徑補(bǔ)全算法是利用網(wǎng)站本身的拓?fù)浣Y(jié)構(gòu)來進(jìn)行用戶路徑補(bǔ)充,而算法的主要問題是如何判斷用戶瀏覽序列中兩個(gè)連續(xù)頁面間需要做路徑補(bǔ)充。這里提出一種判斷方法,即:對于同一用戶的連續(xù)瀏覽頁面P1、P2,如果P1是P2的引用頁面,則無需做路徑補(bǔ)充;如果P1與P2并無直接相連關(guān)系,則說明用戶在瀏覽了P1頁面之后又瀏覽了其他頁面或點(diǎn)擊了回退操作再去瀏覽P2頁面的,這里就需要對P1和P2間做路徑補(bǔ)充。
這里通過尋找匹配父節(jié)點(diǎn)來進(jìn)行路徑補(bǔ)充。即當(dāng)P1和P2間需要進(jìn)行路徑補(bǔ)充時(shí),首先判斷P2與P1的父節(jié)點(diǎn)是否相同,如果相同,則P1與P2都是通過此父節(jié)點(diǎn)訪問的,否則就進(jìn)一步尋找各自的父節(jié)點(diǎn),并依次比較,直到找到相同的父節(jié)點(diǎn)。
經(jīng)有效處理后的Web日志存有多種HTTP請求信息,這些請求信息包含有很多的參數(shù),而且參數(shù)的類型也不完全一樣,可以分為數(shù)值型參數(shù)和分類型參數(shù)兩種。HTTP請求信息主要涉及的參數(shù)有HTTP請求方法、服務(wù)器返回碼、響應(yīng)包長度以及URI的各種參數(shù)等。將這些屬性設(shè)置為HTTP請求的屬性向量,并將它們分成方法屬性、統(tǒng)計(jì)屬性以及參數(shù)屬性三類,如表1所示。
表1 HTTP請求中各屬性及其類型
聚類分析是將有共同特征的對象實(shí)例聚成一類的過程。聚類與分類不同的是,在做聚類分析前并不知道會(huì)以何種方式或根據(jù)來分類,因此聚類分析的學(xué)習(xí)過程并不依賴于預(yù)先設(shè)定的訓(xùn)練樣本[9]。
典型的聚類分析過程可以分為三步,如圖3所示。
圖3 聚類分析過程
模式表示的是聚類算法的基礎(chǔ),通過特征提取或選擇用來生成新的簇。
模式相似性是聚類分析的最基本問題,通常通過定義模式間的距離函數(shù)或異常度來描述。
聚類劃分是聚類分析的核心,如何將對象劃分到不同的簇中,直接影響到聚類的結(jié)果。
孤立點(diǎn)是指數(shù)據(jù)集中的那些小模式數(shù)據(jù),也稱為異常點(diǎn)或離群點(diǎn)。它有可能是測試或執(zhí)行錯(cuò)誤時(shí)引起的,也可能是數(shù)據(jù)的某種變異性的結(jié)果。目前學(xué)術(shù)界對孤立點(diǎn)并沒有一個(gè)確切的定義,但卻有多種描述性定義。Hawkins給出了其本質(zhì)性定義:孤立點(diǎn)是在數(shù)據(jù)集中與眾不同的數(shù)據(jù),使人懷疑這些數(shù)據(jù)并非隨機(jī)偏差,而是產(chǎn)生于完全不同的機(jī)制[10]。Weisberg將孤立點(diǎn)定義為“數(shù)據(jù)集中與其他數(shù)據(jù)不服從于同一統(tǒng)計(jì)模型的數(shù)據(jù)”[11]。
在普通的數(shù)據(jù)挖掘中,孤立點(diǎn)一般是要被清除掉的,因?yàn)樗喈?dāng)于數(shù)據(jù)中的噪聲,對挖掘結(jié)果或多或少會(huì)產(chǎn)生影響。不同的是,在對網(wǎng)絡(luò)用戶攻擊行為進(jìn)行數(shù)據(jù)挖掘時(shí),孤立點(diǎn)反而是必不可少的,一個(gè)孤立點(diǎn)就有可能是一種攻擊數(shù)據(jù)源。目前常用的孤立點(diǎn)挖掘方法大體可分為以下幾類:基于統(tǒng)計(jì)學(xué)方法、基于距離的方法、基于密度的方法以及基于偏離的方法[12]。
在對于孤立點(diǎn)挖掘算法中,對象間的距離定義是非常重要的。HTTP請求中的對象屬性往往包含多種類型屬性,如表1所示。HTTP請求中的屬性一般可分為數(shù)值屬性和分類屬性,其中分類屬性又可以根據(jù)數(shù)值的類別分為布爾屬性、符號屬性、順序?qū)傩缘?。因此,在定義距離函數(shù)時(shí),不僅要計(jì)算不同屬性之間的距離,還得考慮不同屬性的權(quán)值問題,以平衡不同屬性對對象的貢獻(xiàn)程度的差異。
給定數(shù)據(jù)對象集合T,對象p=[p1,p2,…,pn],q=[q1,q2,……qn],p,q∈T。其維度為 n(對象的屬性個(gè)數(shù),其中na是數(shù)值屬性個(gè)數(shù),nb是na分類屬性的個(gè)數(shù),n=na+nb)。
定義1 數(shù)值屬性的質(zhì)心為對象各數(shù)值屬性值的算數(shù)平均值,即:
定義2 分類屬性的質(zhì)心為對象各分類屬性中取值頻率最高的值的算數(shù)平均值,即:
這里假定T中第k(na<k≤n)個(gè)分類屬性的取值范圍為{a1,a2,…,an},count(ai)表示屬性k取值為ai的次數(shù),則Fk(ai)表示屬性k取值為ai的頻率。Fm(k)為屬性k中取值最大的頻率,Vk為屬性k中最大頻率出現(xiàn)時(shí)的取值,則有:
綜合得到數(shù)據(jù)集T的質(zhì)心如式(6)所示:
定義3 對象p在數(shù)據(jù)集T中的異常度OF(p)為p與數(shù)據(jù)集T質(zhì)心的距離。
這里把數(shù)據(jù)集T的質(zhì)心看作是一個(gè)虛擬的對象o,然后根據(jù)多維屬性距離函數(shù)計(jì)算出對象p的異常度:
算法以URI作為類別標(biāo)志,把不同的URI聚集在不同的簇中,然后再分別進(jìn)行孤立點(diǎn)挖掘。對于同一個(gè)簇來說,它們擁有相同的URI,并且各個(gè)參數(shù)也基本相同,選出一些合適的參數(shù)作為參考屬性,這樣就構(gòu)成了一個(gè)具有多維屬性的數(shù)據(jù)對象。
有約束聚類的過程如圖4所示。
圖4 Web日志有約束聚類過程
首先進(jìn)行Web日志文件初始化,讀入一條記錄并構(gòu)成一個(gè)新的簇,并將該記錄的URI作為這個(gè)簇的類別標(biāo)志,然后再繼續(xù)讀入下一條記錄,若此記錄的URI與已經(jīng)存在的簇的類別標(biāo)志相同,則將此記錄存入對應(yīng)的簇中,并更新該簇的各類屬性的質(zhì)心,否則,以此記錄的URI建立一個(gè)新的簇并標(biāo)志。依次重復(fù)之前的操作,直到讀完Web日志文件的每一條記錄,最終完成有約束聚類過程。
基于異常度的孤立點(diǎn)挖掘是針對大量的日志文件來進(jìn)行的,因此可以引用統(tǒng)計(jì)學(xué)方法中的中心極限定理,即大量相互獨(dú)立的隨機(jī)變量,其均值的分布以正態(tài)分布為極限。
令隨機(jī)變量X服從正態(tài)分布,即 X~N(μ,σ2),查表可得知:
從以上結(jié)果中可得知,當(dāng)1≤β≤2時(shí),可以將概率P(X≥μ+βσ)控制在一個(gè)很小的范圍內(nèi)。而在大樣本的情況下,異常度OF(p)可以近似地看做服從正太分布。因此,可以設(shè)計(jì)挖掘算法如下:
第一步,按照不同的HTTP請求的URI生成有約束的聚類T={T1,T2,…,Ti,…,Tn},并計(jì)算各聚類的質(zhì)心。
第二步,掃描每個(gè)聚類Ti,計(jì)算Ti中的每個(gè)對象p的異常度OF(p)、平均值μ_OF(p)以及標(biāo)準(zhǔn)差σ_OF(p)。如果滿足式(9)則判斷對象p為孤立點(diǎn)。
OF(p)≥ μ_OF(p)+ β*σ_OF(p)????(1 ≤ β ≤ 2)(9)
5.1.1 數(shù)據(jù)源
測試數(shù)據(jù)主要來源于兩臺服務(wù)器主機(jī)的Web日志,一臺采用的Windows2003系統(tǒng)并搭建的Apache服務(wù)器,另一臺采用的Centos系統(tǒng)并搭建的Nginx服務(wù)器。其中Apache服務(wù)器主要搭建的是滲透測試平臺,因此其日志中會(huì)存在大量的攻擊數(shù)據(jù);Nginx服務(wù)器搭建的是常見cms系統(tǒng),因此其日志中將會(huì)以正常數(shù)據(jù)為主。
5.1.2 測試環(huán)境
本機(jī)測試環(huán)境為系統(tǒng)版本為Windows 7旗艦版,處理器為 Intel(R)Core(TM)i5-2400 CPU@3.10GHz,內(nèi)存為4G,采用python語言進(jìn)行算法編程及實(shí)驗(yàn)。
5.1.3 數(shù)據(jù)預(yù)處理
本測試數(shù)據(jù)并沒有達(dá)到海量數(shù)據(jù)的要求,但也應(yīng)按規(guī)范在數(shù)據(jù)挖掘前進(jìn)行數(shù)據(jù)預(yù)處理。比如對于服務(wù)器返回狀態(tài)碼為206(Partial Content,部分內(nèi)容)、304(Not Modified,未修改,采用緩存拷貝)、408(Request Timeout,請求超時(shí))這幾種確定不是攻擊數(shù)據(jù)或?qū)ν诰蚬魯?shù)據(jù)無幫助的記錄可以事先清理掉。
在預(yù)存格式的時(shí)候,因?yàn)檫@里主要研究的是基于行為的Web攻擊數(shù)據(jù)挖掘技術(shù),并無探討到攻擊數(shù)據(jù)挖掘后的攻擊溯源,所以在測試時(shí),關(guān)于IP項(xiàng)以及客戶端瀏覽器信息記錄項(xiàng)都可刪除。
又由于日志記錄本身是按時(shí)間進(jìn)行排序的,在數(shù)據(jù)預(yù)處理統(tǒng)一格式后可以刪除時(shí)間項(xiàng),這樣又可以節(jié)省出部分的數(shù)據(jù)空間。
從服務(wù)器日志中提取出20000條日志記錄,其中包含有19120條正常HTTP請求以及890條攻擊數(shù)據(jù)。根據(jù)第四章的基于異常度的孤立點(diǎn)挖掘算法得到檢測結(jié)果如表2所示。
表2 基于異常度的孤立點(diǎn)挖掘檢測結(jié)果
由表2可以看出,基于異常度的孤立點(diǎn)挖掘算法能夠有效地檢測出攻擊行為,并且檢測率與β的大小成反比,即β越小,檢測率越高,但同時(shí)誤報(bào)率也越高。通常需要對β進(jìn)行合理的取值,一般可將β取值1.27左右,既能保證很高的檢測率,而且也僅有5%左右的誤報(bào)率。
圖5 針對已知漏洞的檢測率
圖5顯示的是基于孤立點(diǎn)異常度的挖掘算法對已知漏洞的檢測效率圖,給出的890條樣本攻擊數(shù)據(jù)主要可分為四種類型,即SQL注入攻擊、XSS跨站攻擊、LFI本地文件包含攻擊以及其他攻擊??梢钥闯鲠槍RI攻擊特征很明顯的XSS跨站攻擊數(shù)據(jù)與LFI本地文件包含攻擊數(shù)據(jù)的檢測率極高,僅有個(gè)別案例逃過了檢測。同時(shí)SQL注入攻擊數(shù)據(jù)的檢測率也較高,只是一些特殊的或經(jīng)過精心編碼繞過的攻擊行為未能檢測出來,而其他類型的攻擊有些并不屬于孤立點(diǎn)范疇,則應(yīng)繼續(xù)采用其他的挖掘算法進(jìn)行輔助測試分析。
文中首先分析了Web日志HTTP請求包信息的特點(diǎn),利用約束聚類方法對Web日志中的HTTP請求數(shù)據(jù)進(jìn)行聚類,并定義了簇的質(zhì)心,給出了異常度函數(shù)計(jì)算公式,然后利用統(tǒng)計(jì)學(xué)的思想,提出了一種利用近似正太分布的檢測模型,研究出基于孤立點(diǎn)異常度的Web攻擊數(shù)據(jù)挖掘算法。實(shí)驗(yàn)證明該算法對XSS跨站攻擊、LFI本地文件包含攻擊以及常規(guī)SQL注入攻擊有較高的檢測率。后續(xù)的工作將致力于分布式挖掘研究以應(yīng)對真實(shí)海量的Web日志系統(tǒng)。