李 勃,壽 曾,劉昕禹,高明慧,馬 力,徐 劍
1(南瑞集團有限公司(國網電力科學研究院有限公司),南京 210061) 2(北京科東電力控制系統(tǒng)有限責任公司,北京 100192) 3(國網遼寧省電力有限公司,沈陽 110003) 4(東北大學 軟件學院,沈陽 110169)
在網絡空間安全領域,數(shù)據(jù)庫系統(tǒng)是對攻擊者最有吸引力的目標之一,許多網絡攻擊的最終目的就是獲取數(shù)據(jù)庫中的敏感信息.為此,數(shù)據(jù)庫安全一直為企業(yè)界和學術界所關注[1,2].根據(jù)相關研究顯示,數(shù)據(jù)庫安全的最大威脅來自于系統(tǒng)內部,而不是外部攻擊者[3].然而,傳統(tǒng)的數(shù)據(jù)庫安全技術更多的是采用被動防御的思想,無法有效地檢測并阻止數(shù)據(jù)庫系統(tǒng)內部用戶的攻擊行為.因此,研究數(shù)據(jù)庫系統(tǒng)內部攻擊檢測方法就變得尤為重要[4-6].
異常檢測是入侵檢測研究領域中的一個重要課題,也是針對系統(tǒng)內部攻擊的有效方法[7-9].但是,目前的異常檢測方法主要是面向操作系統(tǒng)和計算機網絡,針對數(shù)據(jù)庫系統(tǒng)的研究成果相對較少.在早期的數(shù)據(jù)庫異常檢測研究中,是將數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)、語義等特征和異常檢測系統(tǒng)研究結合起來.Hu等人[10]利用數(shù)據(jù)依賴性挖掘器挖掘數(shù)據(jù)庫日志中的數(shù)據(jù)關聯(lián)關系,將不符合所挖掘的數(shù)據(jù)依賴性的行為識別為惡意行為;Kamra等人[11]構建了一種面向DBMS的異常用戶請求檢測方法.該方法的核心思想是對與數(shù)據(jù)庫交互的用戶配置文件進行學習,將偏離這些配置文件的用戶請求視為異常;Panigrahi等人[12]提出一種融合信息源和信度更新的數(shù)據(jù)庫異常檢測方法,使用事務間和事務內特征進行異常檢測,并使用了3種不同的表屬性敏感度級別,以便跟蹤高度敏感屬性的惡意修改行為.但是,早期的數(shù)據(jù)庫用戶行為異常檢測方法的誤報率和漏報率都比較高.
為此,部分學者將機器學習、深度學習等方法引入到數(shù)據(jù)庫入侵檢測中來.Ronao等人[13]提出了面向關系數(shù)據(jù)庫的基于加權投票隨機森林的異常查詢檢測方法.利用加權投票對隨機森林進行改進,使整個系統(tǒng)的性能得到進一步提升.但是,該方法僅針對的是關系數(shù)據(jù)庫中的查詢請求,在通用性方面有一定限制.Bu等人[14]提出基于深度學習和學習分類器的數(shù)據(jù)庫入侵檢測系統(tǒng).但是,該系統(tǒng)的建模過程復雜,并且不能很好地支持動態(tài)更新.Brahma等人[15]利用人工神經模糊推理系統(tǒng)來獲取用戶行為特征,并以此為基礎構建了數(shù)據(jù)庫入侵檢測系統(tǒng).在該系統(tǒng)中,利用模糊推理方法和人工神經網絡來生成了一些if-then規(guī)則.對于不符合這些模糊規(guī)則,用戶行為則被標記為惡意的.Singh等人[16]利用關聯(lián)規(guī)則和聚類分析在數(shù)據(jù)庫使用模式中發(fā)現(xiàn)異常行為.在該方法中,通過聚類算法,根據(jù)用戶的角色生成常規(guī)配置文件.如果新的用戶行為不符合現(xiàn)有規(guī)則,則會被標記為異常.Bu等人[17]利用卷積神經網絡(Convolutional Neural Network,CNN)和學習分類器系統(tǒng)(Learning Classifier System,LCS)提出了一種混合的數(shù)據(jù)庫入侵檢測系統(tǒng).在該系統(tǒng)中,LCS用來設計新的事務規(guī)則,以便識別數(shù)據(jù)庫審計日志中的任何異常事件,而CNN則用于分類.Guevara等人[18]利用了Markov鏈,通過分析用戶執(zhí)行的操作序列,構建出用戶的行為模式.但是,該方法需要大量的用戶操作記錄作為訓練集.Sallam等人[19]采用樸素Bayesian分類和二分類兩種方法進行數(shù)據(jù)庫異常檢測,該方法檢測準確率較高,但是誤報率較高.Jayaprakash等人[20]提出基于樸素貝葉斯監(jiān)督分類器的數(shù)據(jù)庫入侵檢測系統(tǒng),通過對具有侵入性的SQL語句進行分析來檢測異常行為.
密度聚類[21]能夠根據(jù)數(shù)據(jù)集的稠密度來實現(xiàn)任意形狀的聚類,并能有效處理噪聲點,這些特點較好地符合數(shù)據(jù)庫用戶行為特征,可以用于數(shù)據(jù)庫用戶行為異常檢測[22].但是,密度聚類受監(jiān)測樣本的穩(wěn)定性影響較大,如果監(jiān)測樣本出現(xiàn)一定程度的隨機性突變,則聚類效果不佳,進而導致異常檢測方案出現(xiàn)較高的誤報率.
集成學習方法以學習過程中的良好性能而著稱,相比于單分類器,其在異常檢測工作過程中具有更高的檢測精度.目前,已有不少學者將其應用到入侵檢測中來.Gaikwad等人[23]利用Bagging方法實現(xiàn)網絡入侵檢測系統(tǒng).之后,Gaikwad等人[24]又將改進后的決策樹REPTree作為Bagging方法的基類,從數(shù)據(jù)集中選擇相關特征以提高分類準確性并減少檢測的誤報率.
綜述所述,目前數(shù)據(jù)庫異常檢測方法所使用的技術方案相對單一,例如僅應用聚類或僅應用機器學習分類器,缺少多種方法的融合運用,進而導致已有方案的效率和檢測準確率較低.為此,提出了一種基于密度聚類與集成學習的數(shù)據(jù)庫異常檢測方案.在該方案中利用OPTICS聚類算法[25]對數(shù)據(jù)庫用戶的SQL操作進行聚類,獲取用戶的異常行為特征,并形成先驗知識;對于未能獲得簇標簽的行為數(shù)據(jù),交由集成學習作進一步分析,集成學習中采用使用Bagging、Boosting和Stacking方法組合多種個體分類器(樸素貝葉斯(Naive Bayes,NB)分類器、決策樹(Decision Trees,DT)分類器、k-近鄰(k-NearestNeighbor,kNN)分類器、多層感知器(Multilayer Perceptron,MLP)分類器進行分類,并創(chuàng)建用戶行為特征庫.以用戶行為特征庫為基礎,在盡可能減少誤報的情況,實現(xiàn)異常檢測.
OPTICS是一種不需要用戶提供特定密度閾值的密度聚類算法,是對DBSCAN算法(Density-Based Spatial Clustering of Applications with Noise)的改進,其并不顯式地產生數(shù)據(jù)集聚類,通過對輸出簇進行排序,來表達數(shù)據(jù)的基于密度的聚類結構.和DBSCAN不同,OPTICS算法可以獲得不同密度的聚類,因為OPTICS算法輸出的是樣本的一個有序隊列,從這個隊列可以獲得任意密度的聚類.
OPTICS算法的核心思想是:對于簇Ci中任意對象p,在其ε鄰域Nε(p)中,至少存在MinPts-1個其他對象,其中ε代表歐里幾何距離半徑,MinPts表示使得對象p作為核心對象在它的ε鄰域中至少應含有的對象數(shù)量.
OPTICS算法中,存在核心距離core-distance(cd)和可達距離reachability-distance(rd)兩個重要信息.
定義1.對象p的核心距離cdε,MinPts(p).設半徑參數(shù)為ε′,使得p的ε′-鄰域剛好包含MinPts個對象,若p不是關于ε′和MinPts的核心對象,則p的核心距離沒有定義,如式(1)所示.
(1)
定義2.對象p到對象q的可達距離rdε,MinPts(p,q).是使p從q密度可達的最小半徑值,其中q必須是核心對象,并且p必須在q的領域內,如式(2)所示.
(2)
OPTICS聚類算法,最終將根據(jù)識別結果輸出數(shù)據(jù)集的簇排序,該排序給出了對數(shù)據(jù)結構化和聚類的一般觀察.
局部離群因子(Local Outlier Factor,LOF)通過計算樣本點在局部的分布情況,以數(shù)值方式反映其離群程度,是一種基于密度的離群點檢測算法.該算法會給出數(shù)據(jù)集中的每個點計算一個離群因子LOF,通過判斷LOF大于或小于1來判定是否是離群因子.若LOF遠大于1,則認為是離群因子,接近于1,則是正常點.
定義3.局部可達距離lrd.該距離被描述為對于對象p,其MinPts鄰域中其他元素平均可達距離的倒數(shù),如式(3)所示.
(3)
其中NMinPts(p)表示在所有被聚類元素中,鄰近元素p的MinPts個元素序列.
LOF值計算,如式(4)所示.
(4)
若LOF值小于1時,則表明該點所在位置相對稠密,不是離群點.LOF值更能描述一個點的離群程度,但由于其計算量較高,因此通常先采用聚類算法粗略計算出離群點,再對離群點進行LOF值的計算.
本文提出的數(shù)據(jù)庫異常檢測方案,基于OPTICS算法與集成學習來實現(xiàn)異常檢測,檢測流程如圖1所示.具體檢測過程包括:數(shù)據(jù)預處理、訓練、學習模型構建以及異常檢測.
圖1 檢測流程Fig.1 Detection process
方案的具體業(yè)務流程如下:
Step 1.數(shù)據(jù)預處理.在數(shù)據(jù)預處理階段,首先,對數(shù)據(jù)庫用戶的SQL操作日志進行數(shù)據(jù)預處理,提取用戶行為特征值,并轉化為[0,1]區(qū)間的數(shù)值型數(shù)據(jù),以便后續(xù)的聚類算法與集成學習模型所使用.
Step 2.訓練.在訓練階段,訓練數(shù)據(jù)被劃分為兩個集合,即SmallSet和BigSet,SmallSet包含規(guī)模較小的訓練數(shù)據(jù),BigSet包含規(guī)模較大的訓練數(shù)據(jù).采用OPTICS算法,分別對上述兩個集合進行聚類.SmallSet聚類后的結果作為集成學習模型的先驗知識;對于BigSet中,經聚類后未形成簇的數(shù)據(jù),利用局部離群因子計算離群程度,對于仍然離群的訓練數(shù)據(jù),則交由集成學習模型進行處理.
Step 3.學習模型構建.在學習模型構建階段,使用集成學習方法進行識別,選用NB、DT、K-NN和MPL作為個體分類器,使用Bagging、Boosting和Stacking作為組合模型,由訓練階段產生的聚類結果作為先驗知識完成分類計算,對最終的分類結果進行特征存儲.
Step 4.檢測.在檢測階段,將新的用戶行為與特征庫中的已有特征進行匹配,從而實現(xiàn)對用戶的異常行為檢測.
本方案分析的用戶行為數(shù)據(jù)來自于用戶產生的數(shù)據(jù)庫SQL操作日志.這些操作日志,需要進行預處理才可以進行分析.本文利用由元組User_behavior< u_id,query_type,query_num,table_list,attr_list,time_slot,ip_seg >來描述用戶行為.User_behavior元組的元素含義如表1所示.
表1 User_behavior元組中的元素含義Table 1 Meaning of elements in User_behavior
為使User_behavior所表示的用戶行為數(shù)據(jù)可以為密度聚類、集成學習所能夠處理,需要將User_behavior元組中的元素映射為數(shù)值型數(shù)據(jù),并進行歸一化處理,轉化為[0,1]之間的數(shù)值.對于不同類型的數(shù)據(jù),具體的處理方式如下:
1)對于連續(xù)性數(shù)據(jù),保留其數(shù)據(jù)原樣;
2)對于離散型、非數(shù)值型數(shù)據(jù)則通過建立全局的散列表,對數(shù)據(jù)進行一個整型數(shù)值的映射,該映射值僅需要保證在同一元素下唯一即可.
3)對于元組型數(shù)據(jù),元組內部元素采用整數(shù)數(shù)值進行映射后,再對元組本身進行數(shù)值映射.
下面通過一個示例進行說明.
某元組型數(shù)據(jù)由兩條SQL查詢語句構成:
SQL1:SELECT x,y from
Table T1 where z=1
SQL2:DELETE from T2 where n =2
共涉及兩個數(shù)據(jù)庫表table_list
假設query_type
在訓練階段,利用OPTICS算法分別對SmallSet和BigSet進行聚類.
在SmallSet上應用OPTICS算法來構建先驗知識.首先,將參數(shù)ε與MinPts作為輸入,根據(jù)式(1)和式(3)計算出每個數(shù)據(jù)點的核心距離和可達性距離值后,以升序方式產生數(shù)據(jù)點cd的rd值,通過累積具有相鄰rd值的數(shù)據(jù)點來形成聚類簇.
在BigSet上同樣應用OPTICS算法,那些被成功標記為簇標簽的訓練數(shù)據(jù)將被標記為正常的用戶行為;而對于未能獲得簇標簽的訓練數(shù)據(jù),將利用局部離群因子計算其離群程度LOF,對于LOF值小于1的訓練數(shù)據(jù)同樣被標記為正常的用戶行為,而對于其他的訓練數(shù)據(jù)將交給下一階段處理.
訓練過程如算法1所示.
算法1.訓練算法
輸入:SmallSet S1與BigSet S2,|S1|≥|S2|;聚類參數(shù)ε、MinPts
輸出:不確定行為集合Su、可供集成學習模塊使用的先驗集合Sk
1.Sk=OPTICS(S2,ε,MinPts)
2.S1c=OPTICS(S1,ε,MinPts)
3.for k=1 to |S1c| do //遍歷Sn
4. if S1c[k]沒有簇標號 then
5. LOFSk=LOF(S1c[k])
6. if LOFSk<1 then
7. S1c[k]列入正常行為表GHT
8. Output(“正常行為”)
9. else
10. S1c[k]列入不確定行為集合Su
11. end if
12. else
13. S1c[k]列入正常行為表GHT
14. Output(“正常行為”)
15. end if
16.end for
17.返回[Sk,Su]
本方案的集成學習模型基于Bagging、Boosting和Stacking模型,同時選擇樸素貝葉斯(Naive Bayes,NB)分類器、決策樹(Decision Trees,DT)分類器、k-近鄰(k-Nearest Neighbor,kNN)分類器、多層感知器(Multilayer Perceptron,MLP)分類器作為集成學習模型的個體分類器.
在Bagging、Boosting和Stacking的復合分類器中,將使用NB、DT、kNN和MLP分類器進行分別測試.Bagging模型中通過投票方式獲得最終的分類結果,能夠有效降低使用單一分類器時的方差;在Boosting模型中,通過迭代修正測試數(shù)據(jù)集權重的方式,提升模型的精確度.Stacking模型中將分為兩層學習器,如圖2所示,在第0層(基學習器)通過k折分段的方式拆分原始數(shù)據(jù),交由其他個體分類器進行分類預測,再將結果遞交至第1層(元學習器)獲得最終的結果,從而實現(xiàn)更高的準確性與較低的誤報率.
圖2 集成學習模型Fig.2 Ensemble learning model
學習模型構建算法如算法2所示.
算法2.學習模型構建算法
輸入:訓練階段輸出的集合Sk,Su
輸出:正常行為、異常行為表.
1.Bag=Bagging(Su,Sk)
2.Boost=Boosting(Su,Sk)
3.Stack=Stacking(Su,Sk)
4.for k=1 to |Su| do
5. if(Su[k]∈Bag)‖(Su[k]∈Boost)‖(Su[k]∈Stack)then
6. Su[k]列入正常行為表GHT
7. Output(“正常行為”)
8. else
9. Su[k]列入異常行為表MHT
10. Output(“異常行為”)
11. end if
12.end for
對于各階段已經正確識別的用戶行為進行特征提取,并將正常行為特征保存到正常行為記錄表(Normal Behavior Table,NBT)中,將異常行為特征保存到異常行為記錄表(Abnormal Behavior
Table,ABT).在OPTICS與LOF計算中給出的正常請求都將更新至NBT中.同時,若集成學習模塊中識別出的正?;虍惓5恼埱螅蚕鄳谋4娴絅BT或ABT中.對于應用系統(tǒng)新產生的數(shù)據(jù)集,將優(yōu)先向NBT與ABT中進行匹配.表2給出NBT的存儲格式,表3給出ABT的存儲格式.對于未能準確匹配的新的數(shù)據(jù)集,交由集成學習模塊繼續(xù)進行識別.
表2 正常行為記錄表Table 2 Recordof normal behavior
圖3 異常檢測流程Fig.3 Anomaly detection process
圖3給出了異常檢測的流程.
表3 異常行為記錄表Table 3 Recordofabnormal behavior
本實驗環(huán)境是在CPU:Intel(R)Core(TM)i7-67003.40GHz,內存:16G,操作系統(tǒng)為Windows 10的計算機上進行.
由于已有的公開數(shù)據(jù)集無法滿足本實驗的測試需求,因此,參照Charissa等人[26]所提出的數(shù)據(jù)生成原理模擬產生了本實驗所需的測試數(shù)據(jù)集.
首先,構建可以模擬生成符合高斯分布的數(shù)據(jù)產生模擬器,分別產生用戶正常行為與異常行為數(shù)據(jù).
1)對于用戶正常行為,通過隨機創(chuàng)建多個簇中心,以該簇中心模擬的創(chuàng)建符合標準正態(tài)分布的隨機樣本點來模擬用戶一類的正常行為,但此類行為并不完全重合,存在微小的差異.
2)對于用戶異常行為,假設這種行為相對于大量的正常用戶行為而言是少量存在的.因此通過數(shù)據(jù)產生模擬器,創(chuàng)建少量、高方差的記錄.通過增大方差,使得這些行為數(shù)據(jù)表現(xiàn)的更加分散.
圖4 模擬器生成的一組二維數(shù)據(jù)集的分布情況Fig.4 Distribution of a set of two-dimensional data sets generated by the simulator
為驗證模擬器產生實驗數(shù)據(jù)的效果,創(chuàng)建一組由30000個二維數(shù)據(jù)構成的數(shù)據(jù)集合,其分布如圖4所示,在圖4中圓狀點對應大量的正常行為,“x”狀點對應異常行為.其中可以直觀的觀測到異常行為中有少部分存在于密集的正常行為中,且也有少部分正常行為分散在簇中心較遠區(qū)域,該模擬結果恰好符合數(shù)據(jù)庫用戶行為的實際情況.
本實驗使用本文所設計的模擬器來產生30000條測試數(shù)據(jù)集.在測試數(shù)據(jù)集的每條記錄中包含7個屬性元組,以及其對應的“正?!被颉爱惓!睒撕?
采用準確度(Accuracy,Acc)、精度(Precision,Pre)、真陽率(True Positive Rate,TPR)、假陽率(False Positive Rate,F(xiàn)PR)、F-measure 對本方案進行實驗分析.Acc表示正確檢測請求占全部請求的百分比,如式(5)所示;Pre表示在全部樣本中正確檢測的請求百分比,如式(6)所示;TPR表示在實際為正常請求中,檢測為正常請求的百分比,如式(7)所示;FPR表示在實際為惡意請求中,檢測為惡意請求的百分比,如式(8)所示;F-measure是Pre與FPR的加權調和平均數(shù),如式(9)所示,當F-measure較高時則能說明實驗方法有效.
(5)
(6)
(7)
(8)
(9)
OPTICS聚類對于本文所提出方案的性能有著非常重要的影響.而OPTICS聚類的性能主要由參數(shù)ε與MinPts決定.為獲得最優(yōu)的聚類效果,對參數(shù)ε與MinPts的不同取值情況下的OPTICS聚類性能進行測試,測試結果如表4所示.
表4 OPTICS聚類在ε與MinPts不同取值情況下的性能Table 4 Performance of OPTICS clustering under different values of ε and MinPts
觀察表4中1、2、5、6對照組可知,參數(shù)ε越小,其FPR值越來越小,F(xiàn)-measure越來越大,整體性能得到提升;但參數(shù)ε小到超過數(shù)據(jù)閾值時,將無法完成聚類.觀察2、5、7對照組,整體識別效果良好,但由2-4、6-7對照組數(shù)據(jù)可知,MinPts值越大,其聚類準確率有所下降.綜述上,對照組2,即ε=0.01且MinPts=10時,聚類效果最優(yōu).
表5 個體分類器在單一使用與復合模式下的性能Table 5 Performance of individual classifier in single use and composite mode
因此,后續(xù)實驗是在ε=0.01且MinPts=10的情況下完成的.
表5與圖5給出了當ε=0.01,MinPts=10時,在集成學習模塊中各個體分類器在單獨分類和復合模式下分類的性能情況.
圖5 個體分類器在單一使用與復合模式下的性能對比Fig.5 Performance comparison of individual classifier in single use and compound mode
由表5與圖4可知,使用復合模型相比于個體分類器在性能結果上有不同程度的提高.在不同分類器模型之間,MLP分類器具備較高的Pre、TPR以及較低的FPR,其F-measure分值也是最高的,該分類器在Bagging與Boosting模型下,提高Pre的同時也大幅度降低了FPR.
表6 4種個體分類器在Stacking模式下不同搭配的性能Table 6 Performance of four individual classifiers with different combinations in Stacking mode
表6給出了當ε=0.01,MinPts=10時,使用NB、DT、kNN和MLP分類器,在Stacking模型下的性能.其中在NB作為元分類器時,其他3種分類器為基分類器時,各項指標表現(xiàn)最好.
表7 系統(tǒng)檢測結果Table 7 System detection results
通過上述實驗結果表明,當聚類參數(shù)ε=0.01,MinPts=10時,集成學習中Bagging、Boosting復合模式情況下采用MLP個體分類器,Stacking模式下采用NB個體分類作為元學習器相比于其他組合而言具備更好的系統(tǒng)識別準確率和更低的誤報率,可作為系統(tǒng)最優(yōu)的實現(xiàn)策略,實現(xiàn)后的系統(tǒng)異常檢測結果如表7所示.
表8 與同類方案的對比分析結果Table 8 Comparative analysis results with similar scheme
Gaikwad等人[24]所提出的方案是目前數(shù)據(jù)庫異常檢測領域中的典型方案,與本文所提出的方案屬于同類方案,因此將兩種方案進行對比,對比結果如表8所示.由表8可知,本文所提出的方案在所有指標方面均具有一定的優(yōu)勢.
本文提出了一種基于OPTICS聚類與集成學習的數(shù)據(jù)庫異常檢測方法.對用戶的SQL操作日志數(shù)據(jù)集進行預處理,由OPTICS聚類算法構建用戶行為特征,利用Bagging、Boosting和Stacking算法組合的集成學習模塊對用戶行為作進一步分析,并創(chuàng)建用戶行為特征庫.基于用戶形成特征庫,實現(xiàn)數(shù)據(jù)庫異常檢測.通過模擬數(shù)據(jù)庫用戶行為數(shù)據(jù),對本方案進行測試,結果表明本方案能以較高的效率和準確率檢測出數(shù)據(jù)庫用戶的異常行為,具有一定的實際應用價值.