朱靜雯 許 靜 陳 亮 李 潔
1(南開(kāi)大學(xué)軟件學(xué)院 天津 300350) 2(南開(kāi)大學(xué)人工智能學(xué)院 天津 300350) 3(國(guó)網(wǎng)天津市電力公司電力科學(xué)研究院 天津 300384)
如今軟件發(fā)展迅速,迭代頻率高,由于網(wǎng)絡(luò)安全意識(shí)不夠,導(dǎo)致很大一部分開(kāi)發(fā)者在編寫(xiě)程序過(guò)程中未考慮對(duì)SQL注入攻擊(Structure Query Language Injection Attack,SQLIA)的防范。據(jù)OWASP[1](Open Web Application Security Project)統(tǒng)計(jì),近幾年SQL注入漏洞的威脅穩(wěn)居第一,如果惡意用戶針對(duì)Web系統(tǒng)進(jìn)行SQL注入攻擊,若是攻擊成功一定程度上會(huì)造成很大危害。另外,對(duì)于攻擊進(jìn)行及時(shí)的檢測(cè)分析,可以在Web系統(tǒng)中有效定位和挖掘到漏洞位置,從而為后期的修復(fù)和防御打下基礎(chǔ)。惡意攻擊者在Web系統(tǒng)中留下的網(wǎng)絡(luò)日志可被用來(lái)識(shí)別其攻擊行為。
檢測(cè)SQL注入攻擊的一種有效方法是研究用戶的行為意圖,而基于日志研究用戶的點(diǎn)擊行為模型的難點(diǎn)主要體現(xiàn)在:(1) 對(duì)于一個(gè)復(fù)雜的或者動(dòng)態(tài)網(wǎng)頁(yè),請(qǐng)求中可能嵌套了多個(gè)廣告或者信息組合模塊,導(dǎo)致日志冗余量大,難于處理;(2) 瀏覽器的多線程并發(fā)可以導(dǎo)致同一用戶的日志記錄被交織和混亂,基于單條記錄的行為模式匹配將受到影響;(3) 防火墻過(guò)濾和代理模式影響了日志采集的完整性,使得用戶連續(xù)點(diǎn)擊行為意圖的還原受到阻礙。
當(dāng)前國(guó)內(nèi)外對(duì)于SQL注入攻擊的檢測(cè)方法中,靜態(tài)模式匹配的做法[2-4]較為常見(jiàn)。其他檢測(cè)方法如污點(diǎn)跟蹤,原理是對(duì)用戶的輸入進(jìn)行判斷、標(biāo)記和轉(zhuǎn)換,然后監(jiān)督這段字符串結(jié)構(gòu)是否改變或者是否被當(dāng)作額外的查詢語(yǔ)句執(zhí)行。對(duì)于動(dòng)態(tài)規(guī)則檢測(cè)方法[5-6],趙宇飛等[5]從網(wǎng)絡(luò)流量檢測(cè)的角度,提出了針對(duì)SQL注入的LFF檢測(cè)方法。LEF檢測(cè)方法利用流量趨勢(shì)可以匹配到未知類型的產(chǎn)生數(shù)據(jù)流的SQL注入攻擊。但也因此受到了流量特征限制,不太適用于經(jīng)驗(yàn)豐富的攻擊者和數(shù)據(jù)規(guī)格較小的情況,尤其是在進(jìn)行了流量控制的信息系統(tǒng)中更為明顯。也有很多研究思路是圍繞攻擊者的行為展開(kāi)的。將馬爾可夫模型用于用戶行為模式分析[7-8]、入侵者的建模[9]和行為預(yù)測(cè)[10],從而發(fā)現(xiàn)Web攻擊行為。馬蘭等[11]提出了一種基于隱半馬爾可夫模型(Hidden simi-Markov Model,HSMM)的SWIM應(yīng)用層DDoS攻擊的檢測(cè)方法,利用HSMM建立動(dòng)態(tài)異常檢測(cè)模型動(dòng)態(tài)地追蹤正常SWIM用戶的瀏覽行為,以訪問(wèn)包的大小和請(qǐng)求時(shí)間間隔為特征進(jìn)行建模,并訓(xùn)練模型進(jìn)行異常檢測(cè),結(jié)果表明所提方法可有效地檢測(cè)DDoS攻擊。朱驪安[12]用隱馬爾可夫模型建立Web參數(shù)模型,檢測(cè)注入類的Web攻擊,并用于實(shí)際案例分析,取得了較高的準(zhǔn)確率。韋煒等[13]提出一種新的多階馬爾可夫預(yù)測(cè)推薦算法,該算法通過(guò)學(xué)習(xí)用戶歷史行為數(shù)據(jù),以及分析用戶瀏覽行為特征,達(dá)到預(yù)測(cè)用戶瀏覽行為的目的。
在Web應(yīng)用攻擊場(chǎng)景中,尤其是對(duì)于SQL注入等需要注入代碼至攻擊入口的攻擊類型中,攻擊者需要遍歷網(wǎng)站及參數(shù),會(huì)多次連接服務(wù)器,并在單位時(shí)間內(nèi)會(huì)產(chǎn)生大量連接和頁(yè)面跳轉(zhuǎn),并且需要發(fā)送大量的探測(cè)攻擊載荷及漏洞利用腳本,而常規(guī)用戶往往更加關(guān)注網(wǎng)站內(nèi)容及功能,因而兩者對(duì)于登陸或輸入框等攻擊入口的訪問(wèn)頻率、停留時(shí)間和跳轉(zhuǎn)行為與普通用戶存在著較大差異[1,5,12-13]。在系統(tǒng)用戶訪問(wèn)操作日志中,記錄了大量用戶行為數(shù)據(jù),因此可以從日志中發(fā)現(xiàn)用戶瀏覽行為的異常,對(duì)頻發(fā)的入口頁(yè)面的訪問(wèn)進(jìn)行判斷。本文通過(guò)行為分析方法,基于自定義日志,提出一種利用隱馬爾可夫模型HMM進(jìn)行SQL注入攻擊自動(dòng)檢測(cè)的方法。該方法與其他攻擊檢測(cè)方法不同,不僅對(duì)SQL注入關(guān)鍵詞進(jìn)行檢測(cè)和分析,同時(shí)進(jìn)一步通過(guò)隱馬爾可夫模型深入分析系統(tǒng)用戶行為的異常,從而在發(fā)生異常初期及時(shí)判斷訪問(wèn)路徑的偏離程度。該方法可利用隱馬爾可夫模型對(duì)隱狀態(tài)的還原能力,完整地還原用戶的瀏覽軌跡,從而識(shí)別攻擊用戶并發(fā)現(xiàn)潛在的SQL注入攻擊威脅。
典型的Web系統(tǒng)網(wǎng)站的結(jié)構(gòu)不僅包括頁(yè)面之間的關(guān)聯(lián),也包括頁(yè)面內(nèi)容的布局和各種鏈接的類型。用戶的每次點(diǎn)擊行為都會(huì)發(fā)出HTTP請(qǐng)求,這些細(xì)節(jié)會(huì)被詳細(xì)記錄在日志中。
本文以Web系統(tǒng)Iwebshop為目標(biāo)網(wǎng)站進(jìn)行示例分析和檢測(cè)實(shí)驗(yàn)。圖1是Iwebshop首頁(yè)的整體結(jié)構(gòu)框架,包括下拉菜單、搜索欄、輪播圖和類別導(dǎo)航等模塊,其中a、b、c分別表示該網(wǎng)頁(yè)中的三類主要的鏈接類型。同一個(gè)列表區(qū)域中的超鏈接項(xiàng)視作同一類型,若多個(gè)列表屬于相同功能的并列關(guān)系,則也看作是同一鏈接類型。
圖1 Iwebshop結(jié)構(gòu)圖
在示例網(wǎng)站中,針對(duì)攻擊需求增加了相應(yīng)的漏洞入口,以自定義日志的格式記錄下用戶的訪問(wèn)瀏覽行為,其中部分用戶的訪問(wèn)行為包含攻擊操作。日志源格式主要包括兩部分:來(lái)源于Apache服務(wù)器生成的日志和使用JavaScript捕捉的用戶點(diǎn)擊超鏈接生成的自定義txt日志。
通過(guò)對(duì)用戶訪問(wèn)行為進(jìn)行記錄并從時(shí)間軸角度分析日志,發(fā)現(xiàn)每條日志都是針對(duì)一個(gè)對(duì)象(Object)的HTTP請(qǐng)求。對(duì)象請(qǐng)求序列如圖2所示,標(biāo)記為O={O1,O2,…,Ot}。如果連續(xù)的請(qǐng)求對(duì)象屬于同一頁(yè)面,則定義這一段連續(xù)的HTTP請(qǐng)求為某個(gè)頁(yè)面P的一次請(qǐng)求。在HMM模型中,這樣的一組請(qǐng)求對(duì)應(yīng)一個(gè)特定的狀態(tài)S。在實(shí)際操作中,用戶的一次具體的點(diǎn)擊操作便會(huì)引發(fā)一組目標(biāo)頁(yè)面的網(wǎng)絡(luò)請(qǐng)求。該點(diǎn)擊操作所在的頁(yè)面可能包含著循環(huán)展示等多個(gè)功能模塊,所以該請(qǐng)求會(huì)引起一系列被動(dòng)和嵌套的網(wǎng)絡(luò)請(qǐng)求。這一組請(qǐng)求在時(shí)間和內(nèi)容上發(fā)生聚集。因此用戶在瀏覽器端的點(diǎn)擊過(guò)程即可對(duì)應(yīng)到HMM模型的狀態(tài)轉(zhuǎn)換過(guò)程。此處用aij來(lái)表示狀態(tài)Si到狀態(tài)Sj的一次遷移。
圖2 用戶點(diǎn)擊行為模型
用戶的有效點(diǎn)擊對(duì)象往往是超鏈接。有效點(diǎn)擊會(huì)導(dǎo)致頁(yè)面之間的跳轉(zhuǎn)或頁(yè)面內(nèi)狀態(tài)的改變。對(duì)于一個(gè)特定的頁(yè)面,根據(jù)功能和位置的不同將有效超鏈接劃分為幾種類型,而每種類型的超鏈接點(diǎn)擊事件對(duì)應(yīng)該頁(yè)面(也就是該狀態(tài))的一次有效輸出。因此用戶的點(diǎn)擊過(guò)程就可以被定義為HMM的輸出過(guò)程,如圖3所示。在客戶端進(jìn)行檢測(cè)和分析時(shí),只需要捕捉定義后的輸出值即可。對(duì)于一個(gè)給定的輸出,可以經(jīng)過(guò)模型推導(dǎo),找出對(duì)應(yīng)的隱含狀態(tài),即該鏈接類型所在的頁(yè)面。至此,將用戶瀏覽系統(tǒng)的過(guò)程通過(guò)建模對(duì)應(yīng)到了HMM模型的狀態(tài)轉(zhuǎn)換和值輸出的過(guò)程中。
圖3 用戶點(diǎn)擊輸出模型
隱馬爾可夫模型是一個(gè)雙重馬爾可夫過(guò)程,由可見(jiàn)的輸出層和隱藏的狀態(tài)層組成。實(shí)際觀察到的輸出序列被用于識(shí)別分析,在某個(gè)狀態(tài)的輸出值具有隨機(jī)性;隱藏的狀態(tài)序列是一條受到狀態(tài)轉(zhuǎn)移概率影響的馬爾可夫鏈。
在本文中通過(guò)三元組λ=(A,B,π)來(lái)表示一個(gè)隱馬爾可夫模型:其中:A表示隱含狀態(tài)轉(zhuǎn)移概率矩陣,B表示觀測(cè)狀態(tài)轉(zhuǎn)移概率矩陣,π表示初始狀態(tài)概率矩陣。關(guān)鍵數(shù)據(jù)源可能包括頁(yè)面間的跳轉(zhuǎn)概率矩陣A、在各個(gè)頁(yè)面點(diǎn)擊不同類型超鏈接的狀態(tài)轉(zhuǎn)移概率矩陣B和初始概率矩陣π。其中,初始概率矩陣π體現(xiàn)的特征是網(wǎng)站初始狀態(tài)為首頁(yè),是必經(jīng)入口,而兩種狀態(tài)轉(zhuǎn)移矩陣A和B的值是統(tǒng)計(jì)大量用戶訪問(wèn)行為得出。
馬爾可夫模型方法的缺點(diǎn)是當(dāng)系統(tǒng)復(fù)雜度和規(guī)模變大時(shí),狀態(tài)數(shù)量的驟增造成對(duì)結(jié)果圖表的計(jì)算會(huì)相當(dāng)復(fù)雜和困難[14]。因此選擇頁(yè)面建立狀態(tài)時(shí),頁(yè)面數(shù)量應(yīng)在相對(duì)合適的范圍內(nèi)。
HMM模型通過(guò)設(shè)置初始狀態(tài)轉(zhuǎn)換概率矩陣和狀態(tài)的不同輸出值的概率矩陣,可從給定的輸出值序列推斷出可能的狀態(tài)轉(zhuǎn)換序列。利用HMM模型對(duì)隱狀態(tài)的描述能力,分析日志記錄中的鏈接類型并反向推測(cè)這些記錄對(duì)應(yīng)的頁(yè)面類型。在捕捉完整的用戶點(diǎn)擊鏈的前提下,HMM模型的這種逆向還原能力彌補(bǔ)了部分缺失日志記錄的不足。
針對(duì)HMM模型特點(diǎn),本文將所有的獨(dú)立頁(yè)面定義為狀態(tài),組成的集合映射為HMM模型中的狀態(tài)集。頁(yè)面之間共用了一些重要組件,但是頁(yè)面地址URL中的controller值是根據(jù)所實(shí)現(xiàn)的功能定義的。頁(yè)面內(nèi)不同鏈接類型定義為在某個(gè)頁(yè)面或狀態(tài)的輸出值,即用戶點(diǎn)擊一個(gè)鏈接,就完成了在某個(gè)狀態(tài)的一次值的輸出。
根據(jù)Web系統(tǒng)的結(jié)構(gòu),按照一定順序定義網(wǎng)頁(yè)名稱和ID,然后為頁(yè)面指定狀態(tài)ID,如表1所示?!皃age_ID”字段對(duì)應(yīng)日志記錄中的controller值。此處定義狀態(tài)集S={s1,s2,…,sn},n=17。
表1 狀態(tài)-頁(yè)面關(guān)聯(lián)表
基于上文所建立的用戶行為隱馬爾可夫模型,本文通過(guò)自定義日志和行為分析技術(shù),提出了一種SQL注入攻擊行為檢測(cè)方法,其整體的實(shí)現(xiàn)流程如圖4所示。首先,獲取Web系統(tǒng)用戶瀏覽日志并判斷是否為正常的訓(xùn)練數(shù)據(jù)。如果是正常訓(xùn)練數(shù)據(jù),則根據(jù)可達(dá)性概率矩陣和鏈接類型表進(jìn)行網(wǎng)站建模,并進(jìn)行隱馬爾可夫模型的訓(xùn)練;接下來(lái)進(jìn)行用戶行為軌跡的逆向還原,如果不是訓(xùn)練數(shù)據(jù),則表明已經(jīng)是訓(xùn)練好的數(shù)據(jù),那么則直接進(jìn)行行為逆向還原。最終基于行為概率分析進(jìn)行行為單元的分析,并最終判斷用戶行為是否包含SQL注入攻擊。
圖4 本文所述方法整體流程
該方法通過(guò)隱馬爾可夫模型對(duì)隱含狀態(tài)的分析還原能力,深入分析和還原系統(tǒng)用戶的瀏覽軌跡,并識(shí)別用戶行為中的異常,從而可以在發(fā)生異常初期及時(shí)判斷訪問(wèn)路徑的偏離程度。同時(shí),該方法不受代理服務(wù)器和防火墻干擾,是一種提高分類效率和準(zhǔn)確度的方法,可以一定程度上保證系統(tǒng)用戶行為意圖的完整性,并減小上層算法的規(guī)模和復(fù)雜度。
建立可達(dá)性概率矩陣是本文所述方法的一個(gè)重要環(huán)節(jié)。首先,對(duì)Iwebshop進(jìn)行遍歷,得到所有頁(yè)面集合并詳細(xì)統(tǒng)計(jì)各頁(yè)面內(nèi)的鏈接類型。在遍歷過(guò)程中同時(shí)記錄頁(yè)面間跳轉(zhuǎn)的順序關(guān)系。頁(yè)面Pi到頁(yè)面Pj的可達(dá)性定義為在頁(yè)面Pi的所有鏈接類型中存在至少一個(gè)鏈接使得用戶可以通過(guò)點(diǎn)擊操作來(lái)完成到頁(yè)面Pj的跳轉(zhuǎn)意圖。頁(yè)面之間的跳轉(zhuǎn)關(guān)系可以用圖5所示的頁(yè)面可達(dá)性圖表表示。其中Rij(第i行,第j列)的值為“○”表示頁(yè)面Pi到頁(yè)面Pj的可達(dá)性成立,沒(méi)有值則表示不可達(dá)。
圖5 頁(yè)面可達(dá)性統(tǒng)計(jì)圖
在大量的正常用戶訪問(wèn)日志數(shù)據(jù)集中,抽取約2 000條來(lái)自多個(gè)主機(jī)的瀏覽記錄組成正常用戶的瀏覽行為模型;由帶有攻擊屬性的用戶日志組成異常瀏覽數(shù)據(jù)集。此外,根據(jù)數(shù)據(jù)交互入口的數(shù)量,將登錄、幫助及列表、商品搜索和商城資訊頁(yè)面歸為SQL注入攻擊相對(duì)容易實(shí)施;首頁(yè)、用戶中心和團(tuán)購(gòu)商品頁(yè)面攻擊難度較大;其余頁(yè)面攻擊難度歸為中等。
為了能夠?qū)⒂脩酎c(diǎn)擊行為抽象成構(gòu)建HMM模型的格式,還需要對(duì)采集到的自定義日志數(shù)據(jù)進(jìn)行處理和分析。首先,本文對(duì)超鏈接進(jìn)行了代碼上的監(jiān)控,一次有效點(diǎn)擊會(huì)產(chǎn)生一條自定義文本記錄。用戶真正點(diǎn)擊的節(jié)點(diǎn)會(huì)帶有特殊標(biāo)記,根據(jù)標(biāo)記對(duì)日志進(jìn)行初步篩選和清理,形成如表2所示的采樣日志范例。每一條記錄中依次包含的關(guān)鍵屬性包括:日期與時(shí)間、IP地址、用戶名、客戶端操作環(huán)境與協(xié)議、HTTP操作方法和URL值。其中URL地址中關(guān)注controller和用戶追加字段。controller值反映了當(dāng)前頁(yè)面位置和用戶瀏覽過(guò)程中點(diǎn)擊的鏈接類型值,而用戶追加字段往往是提交內(nèi)容和危險(xiǎn)關(guān)鍵字的拼接。范例中①、②、③屬于正常訪問(wèn)記錄,④、⑤、⑥屬于SQL注入的前期嘗試,不在正常用戶操作范圍。從日志中提取頁(yè)面標(biāo)識(shí)和鏈接類型標(biāo)識(shí)構(gòu)成用戶瀏覽鏈,分別對(duì)應(yīng)HMM模型的狀態(tài)標(biāo)識(shí)和狀態(tài)輸出值標(biāo)識(shí),從而構(gòu)造出狀態(tài)遷移和特征值輸出過(guò)程。
表2 采樣日志范例
本文在建立可達(dá)性矩陣并進(jìn)行采集數(shù)據(jù)處理的基礎(chǔ)上,進(jìn)一步構(gòu)建用戶瀏覽日志的隱馬爾可夫HMM模型。本文基于MATLAB的HMM工具箱函數(shù)進(jìn)行計(jì)算,其主要包括:
(1) hmmgenerate:給定一個(gè)隱馬爾可夫模型,可以從模型中計(jì)算產(chǎn)生一個(gè)指定長(zhǎng)度的狀態(tài)序列和對(duì)應(yīng)的輸出序列,而且序列符合隨機(jī)性特征。
(2) hmmviterbi:在已知混淆矩陣和轉(zhuǎn)移矩陣的情況下,使用Viterbi算法來(lái)計(jì)算某個(gè)輸出序列對(duì)應(yīng)的最優(yōu)的隱藏狀態(tài)序列。
(3) hmmestimate:給定一個(gè)輸出序列和對(duì)應(yīng)的狀態(tài)序列,來(lái)計(jì)算輸出概率、轉(zhuǎn)移概率的最大似然估計(jì)。
(4) hmmtrain:已知輸出的序列,狀態(tài)轉(zhuǎn)移序列不確定。通過(guò)猜測(cè)來(lái)初始化轉(zhuǎn)移矩陣和混淆矩陣。通過(guò)迭代的過(guò)程來(lái)估計(jì)出轉(zhuǎn)移狀態(tài)和混淆矩陣。此處可以設(shè)定迭代次數(shù)和精度。
(5) hmmdecode:主要用來(lái)計(jì)算給定觀測(cè)序列的概率,指在確定的狀態(tài)下產(chǎn)生序列中某符號(hào)的條件概率。
基于上述函數(shù)可進(jìn)行HMM模型計(jì)算及構(gòu)建。首先從正常瀏覽日志的數(shù)據(jù)集中提取全部頁(yè)面跳轉(zhuǎn)鏈,統(tǒng)計(jì)得到頁(yè)面跳轉(zhuǎn)的概率矩陣A和頁(yè)面訪問(wèn)的概率分布B。據(jù)此初始化得到的馬爾可夫模型為用戶的合理請(qǐng)求,偏離該模型的行為劃分為異常。
初始概率矩陣π的生成過(guò)程:采用正則表達(dá)式匹配的方法將日志中參數(shù)controller的值提取出來(lái),例如login→ucenter→cart→home→ucenter。根據(jù)狀態(tài)-頁(yè)面關(guān)聯(lián)表,可以轉(zhuǎn)化為含有時(shí)序的狀態(tài)轉(zhuǎn)換鏈:s2→s5→s4→s1→s5。然后使用狀態(tài)轉(zhuǎn)換對(duì)表示為:S=[(s2,s5),(s5,s4),(s4,s1),(s1,s5)]。對(duì)于每一個(gè)狀態(tài)對(duì)(sa,sb),sa為源狀態(tài)(頁(yè)面),sb為目的狀態(tài)(頁(yè)面)。si的取值共有17種。根據(jù)源狀態(tài)的17種取值建立17個(gè)集合U1,U2,…,U17。每個(gè)集合Ui包含所有以si作為源狀態(tài)的狀態(tài)對(duì)。對(duì)于U1,計(jì)算頁(yè)面P1轉(zhuǎn)移到其他頁(yè)面Pe的概率,公式如下:
probability=count(se)/count(U1)
(1)
probability為某跳轉(zhuǎn)頁(yè)面在所有以頁(yè)面P1為源頁(yè)面的跳轉(zhuǎn)頁(yè)面集合中的比例,對(duì)于Ui的計(jì)算以此類推,得出如表3所示的頁(yè)面跳轉(zhuǎn)概率矩陣??梢钥闯?,Pij表示頁(yè)面Pi轉(zhuǎn)移到頁(yè)面Pj的概率,概率為0表示頁(yè)面可達(dá)關(guān)系不成立。概率是根據(jù)普通用戶的瀏覽記錄統(tǒng)計(jì)得到。因此在用戶瀏覽過(guò)程中,明顯偏離預(yù)設(shè)瀏覽習(xí)慣的訪問(wèn)行為需要針對(duì)性分析來(lái)排查異常。同樣的,在訪問(wèn)模型中同時(shí)加入普通用戶和攻擊者的訪問(wèn)數(shù)據(jù)來(lái)調(diào)整參數(shù),得到新的狀態(tài)轉(zhuǎn)移概率矩陣和值輸出矩陣,從而使得該模型具有更好的狀態(tài)轉(zhuǎn)移過(guò)程的還原能力。
表3 頁(yè)面跳轉(zhuǎn)概率矩陣
續(xù)表3
為了對(duì)本文所述方法的有效性進(jìn)行實(shí)驗(yàn)驗(yàn)證,基于“PHP 5+ MySQL 5”搭建了用于實(shí)驗(yàn)的示例目標(biāo)系統(tǒng)Iwebshop。在該目標(biāo)系統(tǒng)中,針對(duì)實(shí)驗(yàn)需求增加了相應(yīng)的漏洞入口,并以自定義日志的格式記錄下用戶的訪問(wèn)瀏覽行為,其中部分用戶的訪問(wèn)行為包含SQL注入攻擊操作。日志源格式主要包括兩部分:來(lái)源于Apache服務(wù)器生成的日志和使用JavaScript捕捉的用戶點(diǎn)擊超鏈接生成的自定義txt日志。實(shí)驗(yàn)采用平臺(tái)為64位Windows 7系統(tǒng)計(jì)算機(jī),并使用版本為R2013a的MATLAB集成的HMM工具箱進(jìn)行模型計(jì)算,對(duì)本文所述方法進(jìn)行了應(yīng)用實(shí)現(xiàn)。
通過(guò)本文模型計(jì)算出的狀態(tài)轉(zhuǎn)移概率矩陣和值輸出矩陣進(jìn)行訪問(wèn)狀態(tài)還原,并還原計(jì)算出最終的用戶訪問(wèn)狀態(tài)和頻率分布,如圖6和圖7所示。其中,狀態(tài)分布頻率即該用戶在指定時(shí)間段內(nèi)對(duì)各個(gè)頁(yè)面的訪問(wèn)頻率分布。橫軸表示狀態(tài)序號(hào),縱軸表示累計(jì)數(shù)量。本次實(shí)驗(yàn)選取2 000條記錄長(zhǎng)度的雙方瀏覽歷史進(jìn)行對(duì)比,得到400個(gè)行為單元。GState為符合HMM的正常用戶訪問(wèn)情況,AState是SQL注入攻擊后的狀態(tài)分布情況。在正常瀏覽過(guò)程中,該示例數(shù)據(jù)中35%用于首頁(yè)和賬戶驗(yàn)證,28%用于瀏覽幫助及幫助列表,25%用于商品詳情和商品搜索,7%用于購(gòu)物車和用戶中心,約有5%用于商城資訊;在模擬攻擊瀏覽過(guò)程中,27%用于商城資訊頁(yè)面瀏覽,25%用于首頁(yè)和賬戶驗(yàn)證,17%用于商品分類,15%用于商品搜索和詳情頁(yè),幫助頁(yè)面占13%,個(gè)人中心和購(gòu)物車約3%。最明顯的不同是普通的用戶將過(guò)半的訪問(wèn)頁(yè)面選擇了首頁(yè)和商城的瀏覽,還有近1/4用于獲取幫助。而攻擊者將大部分操作用于賬戶驗(yàn)證過(guò)程和資訊,還有近1/5訪問(wèn)停留在商品分類列表。后者的訪問(wèn)分布屬于明顯異常情況,增加了該類用戶作為攻擊者的可疑程度。
圖6 普通用戶訪問(wèn)頻率分布(GState)
圖7 攻擊者訪問(wèn)頻率分布(AState)
圖8是截取一名普通用戶和一名惡意攻擊者的訪問(wèn)數(shù)據(jù)各400條繪制得到的瀏覽軌跡對(duì)比曲線圖。橫軸表示日志記錄編號(hào),縱軸是頁(yè)面ID。通過(guò)重復(fù)試驗(yàn),統(tǒng)計(jì)并觀察訪問(wèn)軌跡曲線的波動(dòng)粒度,將每5條清洗結(jié)果的記錄視為一個(gè)行為單元。這樣,在不影響觀察用戶瀏覽意圖的前提下,達(dá)到了賦予一小段時(shí)間內(nèi)連續(xù)請(qǐng)求合理的意義的目的。
圖8 普通用戶與攻擊者的瀏覽軌跡對(duì)比曲線
對(duì)圖像中兩條曲線的規(guī)律性波動(dòng)片段進(jìn)行采樣,然后根據(jù)狀態(tài)-頁(yè)面關(guān)聯(lián)表進(jìn)行反向還原,盡可能地重現(xiàn)用戶瀏覽過(guò)程和訪問(wèn)意圖。按照規(guī)律波動(dòng)片段的長(zhǎng)度研究,首先分析序號(hào)104到218之間的長(zhǎng)片段C1:虛線曲線在幫助列表和幫助詳情跳轉(zhuǎn),大致意圖是在尋找某類目詳細(xì)幫助。實(shí)線曲線80%在資訊詳情頁(yè)面,有規(guī)律地低頻率跳轉(zhuǎn)至首頁(yè)和商品詳情頁(yè)。根據(jù)正常用戶訪問(wèn)行為統(tǒng)計(jì),訪問(wèn)資訊頁(yè)面并停留在資訊頁(yè)面的概率為(0.1)n,其中n為連續(xù)訪問(wèn)的次數(shù),顯然這段訪問(wèn)明顯偏離HMM用戶行為模型,且商城資訊頁(yè)攻擊難度最小,因此片段C1鑒定為SQL注入攻擊片段。
對(duì)于序號(hào)8到75之間的長(zhǎng)片段C2:虛線曲線在登錄系統(tǒng)和注冊(cè)之后查看詳情頁(yè)面,最后在登錄之后跳轉(zhuǎn)至商品搜索結(jié)果頁(yè)面。登錄和注冊(cè)頁(yè)面來(lái)回跳轉(zhuǎn)概率分別為38%和10%,該現(xiàn)象較符合正常用戶訪問(wèn)習(xí)慣。而實(shí)線曲線是高頻率反復(fù)訪問(wèn)商品分類頁(yè),根據(jù)HMM模型正常用戶轉(zhuǎn)移矩陣,該頁(yè)面重復(fù)訪問(wèn)概率僅為(0.01)n,商品分類頁(yè)同時(shí)含有可閉合的URL參數(shù)和搜索輸入框,攻擊難度適中。所以片段C2極有可能包含SQL注入攻擊。
片段C3是序號(hào)起止于266和291的訪問(wèn)序列。虛線曲線訪問(wèn)頁(yè)面是首頁(yè)、搜索列表、用戶中心和資訊詳情,跳轉(zhuǎn)方向和頻率均未有異常,也未出現(xiàn)單個(gè)頁(yè)面的連續(xù)多次訪問(wèn)。作為對(duì)比的實(shí)線曲線,雖然在幫助列表和幫助詳情兩者之間的跳轉(zhuǎn)方向符合正常模型要求,但出現(xiàn)了明顯的幫助詳情頁(yè)的連續(xù)請(qǐng)求記錄,該頁(yè)面又屬于攻擊難度最小的類別,故將該片段識(shí)別為危險(xiǎn)訪問(wèn)級(jí)別的請(qǐng)求序列。
此外,本文通過(guò)實(shí)驗(yàn)過(guò)程還發(fā)現(xiàn)了存在跨越正常瀏覽片段和危險(xiǎn)訪問(wèn)片段的行為單元。實(shí)驗(yàn)中,定義行為單元的5條記錄中,屬于危險(xiǎn)片段的記錄不少于3條,則將該單元納入攻擊行為的范疇。例如,序號(hào)1到10的記錄分為兩個(gè)行為單元Behavior_a(1-5)和Behavior_b(6-10)。序號(hào)8/9/10被并入了前一部分分析到的攻擊片段C1,因此行為單元Behavior_b含有三條攻擊屬性記錄,屬于攻擊屬性的行為單元;Behavior_a屬于正常訪問(wèn)行為單元。標(biāo)記完成后統(tǒng)計(jì)實(shí)驗(yàn)結(jié)果,長(zhǎng)片段C1、C2、C3包含的攻擊行為單元共210個(gè),如表4所示。整體實(shí)驗(yàn)的誤報(bào)率為16.2%,漏報(bào)率為5.75%,實(shí)驗(yàn)結(jié)果表明本文所述方法可以有效檢測(cè)出Web系統(tǒng)用戶的SQL注入攻擊行為。
表4 粒度調(diào)整對(duì)實(shí)驗(yàn)的影響
為進(jìn)一步對(duì)比驗(yàn)證本文所述方法的有效性,本文采用K-means方法及FCM模糊聚類方法進(jìn)行橫向?qū)嶒?yàn)和結(jié)果對(duì)比分析。
為反映不同類型攻擊的特征,本文在進(jìn)行K-means聚類分析時(shí),從語(yǔ)法角度將SQL注入記錄標(biāo)記為7個(gè)參數(shù)指標(biāo),分別是:前終結(jié)符、注入前綴、注入關(guān)鍵詞、常變量參數(shù)、大寫(xiě)字母、其他特殊字符、后終結(jié)符。
首先使用粒度為5進(jìn)行聚類,將初始日志每5條綁定成一個(gè)單元,這涉及到橫向參數(shù)綁定方法和縱向條目綁定方法。不同于上節(jié)中曲線繪制時(shí)選擇的評(píng)定方法,前者選擇將5條訪問(wèn)數(shù)據(jù)視為一個(gè)行為單元整體,可以保證行為曲線在最小粒度上的含義和連貫性,從而給出更合理的異常劃分標(biāo)準(zhǔn)。此處選擇縱向綁定保證盡可能地保留參數(shù)包含的攻擊意圖。橫向和縱向是針對(duì)數(shù)據(jù)排列方向而言,橫向意味著將同一條記錄數(shù)據(jù)的不同參數(shù)進(jìn)行歸并來(lái)縮減算法復(fù)雜度,更加適用于獨(dú)立性較強(qiáng)的界限明確的數(shù)據(jù)源;縱向是指將相鄰n條數(shù)據(jù)對(duì)應(yīng)的同一個(gè)參數(shù)的不同取值進(jìn)行歸并,換算成為一條綜合評(píng)定的有代表性的新數(shù)據(jù)項(xiàng)。后者更適用于在更細(xì)粒度上不方便設(shè)定異常劃分標(biāo)準(zhǔn)的數(shù)據(jù)源。兩種思想都具有一定的減小數(shù)據(jù)規(guī)模和算法復(fù)雜度的效果。
實(shí)驗(yàn)中的橫向綁定方法:將每條日志記錄的7個(gè)特殊參數(shù)值評(píng)定出攻擊結(jié)果(是/否),將連續(xù)5條結(jié)果進(jìn)行單元綁定來(lái)決定該行為單元的結(jié)果,橫向綁定會(huì)增大判定誤差;縱向綁定方法:行為單元L={l1,l2,l3,l4,l5},包含5條連續(xù)日志。日志包含7個(gè)SQL注入攻擊參數(shù)。將p11、p21、p31、p41、p51綁定為行為單元L的第一個(gè)參數(shù)的集合,L的其他參數(shù)以此類推,從而得到L的參數(shù)表。再使用K-means方法進(jìn)行聚類,K-means方法使用默認(rèn)參數(shù),共410條結(jié)果,71個(gè)攻擊記錄,339個(gè)正常訪問(wèn)記錄。
若使用默認(rèn)粒度1,直接進(jìn)行K-means聚類,得到攻擊分類577條,正常日志記錄1 474條。攻擊占比為28.1%,攻擊識(shí)別結(jié)果低于HMM方法。因?yàn)楣魡卧前堰B續(xù)的一段訪問(wèn)都記為攻擊范疇,而K-means方法會(huì)把攻擊過(guò)程中必要或非必要指向正常頁(yè)面的記錄記為正常訪問(wèn)結(jié)果。在聚類或距離分類方法中,每個(gè)日志記錄都是相對(duì)獨(dú)立的,因此對(duì)主頁(yè)的訪問(wèn)將被歸類為正常訪問(wèn)記錄,導(dǎo)致攻擊檢測(cè)結(jié)果低于HMM行為單元方法。
FCM(Fuzzy C-means)算法是基于對(duì)目標(biāo)函數(shù)優(yōu)化基礎(chǔ)上的一種數(shù)據(jù)聚類方法。在該算法產(chǎn)生的結(jié)果中,用一個(gè)個(gè)數(shù)值表示每一個(gè)數(shù)據(jù)點(diǎn)對(duì)聚類中心的隸屬程度。文中的日志數(shù)據(jù)中,處于試探攻擊地帶的日志和一定比例的非正常模式瀏覽痕跡是不應(yīng)該從嚴(yán)格意義上劃分是否屬于攻擊類別的。使用FCM模糊聚類算法處理文中行為單元數(shù)據(jù),得到每個(gè)行為單元對(duì)攻擊類別的隸屬度。在模糊集上,給定一個(gè)論域U,從U到單位區(qū)間[0,1]上的一個(gè)映射就可以稱為U上的一個(gè)模糊集,記為A。對(duì)于每一條數(shù)據(jù)x,μA是映射函數(shù),μA(x)的值叫作元素x對(duì)模糊集A的隸屬度,接近1的取值表示x隸屬于A的可能性更大。
引進(jìn)隸屬度的概念同樣可以驗(yàn)證HMM模型中的片段概率分析的合理性。在用戶瀏覽軌跡圖中,長(zhǎng)片段C1的范圍大約是從序號(hào)110到序號(hào)204之間的記錄。
表5 瀏覽軌跡C1片段的攻擊隸屬度分布
該片段的攻擊隸屬度聚集在高可信度的范圍,這和HMM模型下的屬于正常瀏覽模型的概率極低的結(jié)論相契合,同時(shí)也表明識(shí)別SQL注入攻擊特征字段選擇的合理性。
本文基于隱馬爾可夫模型,提出一種SQL注入攻擊行為的檢測(cè)方法。首先獲取Web系統(tǒng)訪問(wèn)用戶的行為序列,利用HMM模型恢復(fù)隱藏狀態(tài)并完成狀態(tài)序列,然后利用網(wǎng)頁(yè)訪問(wèn)頻率區(qū)分用戶瀏覽意圖,從而優(yōu)化攻擊識(shí)別結(jié)果。該方法不需要提供系統(tǒng)的字符輸入接口,建模完成后即可獲取所需的輸入數(shù)據(jù),幾乎不會(huì)影響原系統(tǒng)的源代碼和運(yùn)行邏輯,且不受防火墻和代理服務(wù)器限制。最后根據(jù)行為曲線偏離程度和訪問(wèn)頻率異常程度綜合判定具有SQL注入攻擊意圖的用戶。在異常標(biāo)準(zhǔn)設(shè)定和結(jié)果評(píng)定方面,提出了縱向綁定和橫向綁定的數(shù)據(jù)處理方法,有效提升了異常數(shù)據(jù)的保留比例,提高了系統(tǒng)中SQL注入攻擊檢測(cè)能力,并通過(guò)對(duì)比實(shí)驗(yàn)和結(jié)果分析驗(yàn)證了本文所述方法的有效性。下一步工作考慮同時(shí)應(yīng)用單個(gè)操作的攻擊隸屬度和所屬行為單元的攻擊概率來(lái)分配權(quán)重,設(shè)計(jì)成綜合性的用戶行為評(píng)估系統(tǒng)以提高結(jié)果準(zhǔn)確性。