摘 要:提出了一種可以檢測(cè)數(shù)據(jù)庫(kù)管理系統(tǒng)中異常事務(wù)入侵檢測(cè)模型。該模型運(yùn)用粗糙集理論從用戶(hù)歷史會(huì)話中提取用戶(hù)正常行為輪廓,并利用散列算法來(lái)加速SQL模板的匹配,既可以有效檢測(cè)異常事務(wù),又可以避免因?yàn)橐粌纱握`用而把無(wú)辜的用戶(hù)誤認(rèn)為是惡意攻擊者。對(duì)模型的性能做了測(cè)試和分析。
關(guān)鍵詞:數(shù)據(jù)庫(kù)入侵檢測(cè);行為模式;SQL模板;粗糙集
?
數(shù)據(jù)庫(kù)中往往保存著對(duì)公司或組織極為重要的數(shù)據(jù),由于數(shù)據(jù)的重要性和價(jià)值,數(shù)據(jù)庫(kù)經(jīng)常成為攻擊者的目標(biāo)。網(wǎng)絡(luò)化進(jìn)一步延伸了數(shù)據(jù)庫(kù)受到攻擊的時(shí)間和空間。傳統(tǒng)的數(shù)據(jù)庫(kù)安全機(jī)制(如身份認(rèn)證、訪問(wèn)控制等)認(rèn)為未授權(quán)用戶(hù)的所有行為都是違背系統(tǒng)安全策略的,應(yīng)該禁止,而授權(quán)用戶(hù)符合授權(quán)的行為則都不會(huì)造成系統(tǒng)破壞。這種以預(yù)防為主的被動(dòng)安全機(jī)制已越來(lái)越不能滿足日益增長(zhǎng)的數(shù)據(jù)庫(kù)安全的需要。一方面外部攻擊者總能找到新方法闖入數(shù)據(jù)庫(kù),另一方面?zhèn)鹘y(tǒng)的數(shù)據(jù)庫(kù)安全機(jī)制無(wú)法檢測(cè)和阻止惡意授權(quán)用戶(hù)的威脅。例如未授權(quán)用戶(hù)通過(guò)竊取到合法的身份或權(quán)限等手段,偽裝成合法用戶(hù),授權(quán)用戶(hù)也可能會(huì)在情感或利益的驅(qū)使下執(zhí)行一些惡意數(shù)據(jù)庫(kù)事務(wù)。據(jù)統(tǒng)計(jì),對(duì)數(shù)據(jù)庫(kù)的攻擊80%來(lái)自?xún)?nèi)部,內(nèi)部濫用是數(shù)據(jù)庫(kù)系統(tǒng)的主要威脅[1]。
入侵檢測(cè)系統(tǒng)(IDS)作為一種積極主動(dòng)的安全防護(hù)技術(shù),能夠檢測(cè)到應(yīng)用程序和用戶(hù)的異常行為。可以通過(guò)有效地結(jié)合入侵檢測(cè)技術(shù)來(lái)加強(qiáng)數(shù)據(jù)庫(kù)的安全性。然而目前國(guó)內(nèi)外對(duì)入侵檢測(cè)技術(shù)的研究主要集中在網(wǎng)絡(luò)層和操作系統(tǒng)層,對(duì)處于應(yīng)用層的數(shù)據(jù)庫(kù)入侵檢測(cè)研究較少。DEMIDS機(jī)制[2]只從內(nèi)容上分析了用戶(hù)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),沒(méi)有從時(shí)間上給予分析。此外,DEMIDS機(jī)制審計(jì)粒度過(guò)細(xì),會(huì)嚴(yán)重降低DBMS性能。DBMTD機(jī)制[3]需要數(shù)據(jù)庫(kù)管理員(DBA)手工創(chuàng)建授權(quán)事務(wù)輪廓。而事務(wù)輪廓只能反映事務(wù)內(nèi)的SQL序列關(guān)系,不能反映事務(wù)間的SQL模板序列關(guān)系,也不能反映事務(wù)內(nèi)路徑的執(zhí)行頻度。極少執(zhí)行的路徑不應(yīng)該作為正常路徑,極少執(zhí)行的事務(wù)也可能會(huì)存在異常。本文針對(duì)以上問(wèn)題,提出了一種基于粗糙集的數(shù)據(jù)庫(kù)異常檢測(cè)機(jī)制。
1 基于粗糙集的數(shù)據(jù)庫(kù)異常檢測(cè)模型
1.1 基本原理與系統(tǒng)模型
定義1 用通配符(%)替代用戶(hù)遞交的SQL語(yǔ)句中數(shù)據(jù)值,就得到了SQL模板[4]。
用戶(hù)常常使用相同的SQL模板,但較少使用相同的查詢(xún),即SQL模板具有穩(wěn)定性。用于訓(xùn)練的所有查詢(xún)都是正常的,它們所操作的屬性之間的距離[2]是相近的,即SQL模板的穩(wěn)定性中實(shí)際已包含了屬性結(jié)構(gòu)的穩(wěn)定性,因此不必再另外考慮屬性間的距離。
典型數(shù)據(jù)庫(kù)應(yīng)用程序是客戶(hù)/服務(wù)器系統(tǒng)(或三層系統(tǒng)),用戶(hù)通過(guò)客戶(hù)端程序連接到DBMS (當(dāng)今的趨勢(shì)是使用瀏覽器通過(guò)互聯(lián)網(wǎng)訪問(wèn)數(shù)據(jù)庫(kù))。用戶(hù)所能執(zhí)行的SQL模板是事先定義好并被編寫(xiě)在數(shù)據(jù)庫(kù)應(yīng)用程序的代碼里,用戶(hù)只能按照SQL模板規(guī)定的形式來(lái)操作數(shù)據(jù)庫(kù)。在基于角色的訪問(wèn)控制機(jī)制(RBAC)中,屬同一角色的不同用戶(hù)可以調(diào)用的SQL模板集是相同的,但每個(gè)用戶(hù)使用這些SQL模板的規(guī)律卻不盡相同。用戶(hù)使用數(shù)據(jù)庫(kù)的方式隨著時(shí)間的推移會(huì)落入一定的模式中,因此,在事務(wù)或應(yīng)用模式中,SQL模板之間是存在一定執(zhí)行順序的。粗糙集可以從比較小的樣本序列中提取預(yù)測(cè)規(guī)則集,得到的行為模型能有效逼近理想正常行為模型。本文的方法是:在訓(xùn)練階段,根據(jù)用戶(hù)正常歷史審計(jì)數(shù)據(jù),確定每個(gè)角色可以調(diào)用的SQL模板集,并通過(guò)粗糙集約簡(jiǎn)建立用戶(hù)正常行為輪廓;在檢測(cè)階段,使用用戶(hù)正常行為輪廓預(yù)測(cè)下一個(gè)SQL模板。若預(yù)測(cè)失敗,認(rèn)為發(fā)生異常。盡管異常并不一定就是入侵,但至少應(yīng)該引起DBA的密切注意。系統(tǒng)模型如圖1所示。
?
審計(jì)部件:進(jìn)行數(shù)據(jù)采集。訓(xùn)練階段要求DBA對(duì)用戶(hù)行為進(jìn)行監(jiān)視,以保證采集的訓(xùn)練數(shù)據(jù)都是正常的。訓(xùn)練樣本量越大,用戶(hù)行為越規(guī)范,建立的輪廓就越準(zhǔn)確。
預(yù)處理部件:將采集到的數(shù)據(jù)處理成數(shù)據(jù)挖掘部件和入侵檢測(cè)部件需要的形式。
數(shù)據(jù)挖掘部件:構(gòu)建SQL模板庫(kù);建立正常用戶(hù)行為決策表,并運(yùn)用粗糙集約簡(jiǎn),建立正常用戶(hù)行為輪廓。
SQL模板庫(kù):規(guī)定各角色可用的SQL模板。
用戶(hù)輪廓:存儲(chǔ)用戶(hù)正常行為輪廓。
入侵檢測(cè)部件:根據(jù)入侵檢測(cè)算法,判斷新的用戶(hù)行為是否為正常。
響應(yīng)部件:如果發(fā)現(xiàn)異常行為則觸發(fā)入侵警報(bào),并按一定的策略采取相應(yīng)的防范措施。
1.2 預(yù)處理過(guò)程
預(yù)處理過(guò)程包括以下3個(gè)步驟:
(1)集成用戶(hù)會(huì)話連接。一個(gè)會(huì)話連接包含多個(gè)審計(jì)記錄,需要通過(guò)登陸和退出命令以及會(huì)話連接ID把多個(gè)屬于同一會(huì)話的審計(jì)記錄歸并到同一個(gè)會(huì)話連接中去。定義一個(gè)會(huì)話連接包含下面的屬性:本次會(huì)話連接的ID,本次會(huì)話的數(shù)據(jù)庫(kù)用戶(hù)名,該用戶(hù)所屬的角色名,本次會(huì)話用戶(hù)所提交的所有SQL語(yǔ)句序列。
?。?)提取SQL模板序列階段。根據(jù)SQL模板的定義,依次將每個(gè)SQL語(yǔ)句轉(zhuǎn)化成SQL模板。相應(yīng)地,SQL語(yǔ)句序列就轉(zhuǎn)化成為SQL模板序列。
(3)計(jì)算SQL模板散列值。SQL模板長(zhǎng)度不一,特別是嵌套查詢(xún)語(yǔ)句的模板一般較長(zhǎng),匹配效率較低。為了提高匹配效率,本文使用散列算法對(duì)每個(gè)SQL模板計(jì)算散列值,以后只要匹配散列值即可。這樣SQL語(yǔ)句序列被進(jìn)一步處理成散列值序列。散列函數(shù)[5]是一種把可變長(zhǎng)度輸入串(預(yù)映射)轉(zhuǎn)換成固定長(zhǎng)度輸出串(散列值)的函數(shù)。散列函數(shù)具有單向性,從預(yù)映射的值很容易計(jì)算其散列值,但已知一個(gè)散列值,要找到預(yù)映射值,使其散列值等于已知散列值在計(jì)算上是不可行的。所以使用散列算法還可以增強(qiáng)系統(tǒng)安全性。
1.3 數(shù)據(jù)挖掘過(guò)程
1.3.1 粗糙集與知識(shí)約簡(jiǎn)
1.3.2? SQL模板庫(kù)的建立
一個(gè)好的散列算法,存在沖突的概率極小??梢哉J(rèn)為散列值唯一代表一個(gè)SQL模板。由于散列值處理起來(lái)還是不太方便,本文還為每個(gè)散列值設(shè)置了連續(xù)的編號(hào)。每個(gè)編號(hào)唯一代表一個(gè)散列值,因此編號(hào)也唯一代表了一個(gè)SQL模板。編號(hào)與SQL模板庫(kù)的建立過(guò)程是同時(shí)進(jìn)行的,過(guò)程如下:
(1)依次根據(jù)會(huì)話中每個(gè)SQL模板的散列值搜索SQL模板庫(kù);
?。?)如果模板庫(kù)中沒(méi)有該散列值,則為其設(shè)置一個(gè)編號(hào)。若有,則獲取其編號(hào);
?。?)如果用戶(hù)所屬角色中沒(méi)有該散列值,則將其加入,格式為角色、散列值和編號(hào)。
用編號(hào)代替相應(yīng)的散列值,SQL語(yǔ)句序列就轉(zhuǎn)化成編號(hào)序列。
1.3.3 建立決策系統(tǒng)
本文的目標(biāo)是為每個(gè)用戶(hù)建立一個(gè)正常行為輪廓,以用戶(hù)作為獨(dú)立的單元來(lái)進(jìn)行訓(xùn)練。依次對(duì)每個(gè)用戶(hù)執(zhí)行這個(gè)過(guò)程,就得到所有用戶(hù)的正常行為輪廓。
設(shè)X是某用戶(hù)所有正常審計(jì)會(huì)話產(chǎn)生的全部SQL模板序列的集合,注意,此時(shí)的序列實(shí)際上是編號(hào)序列。用長(zhǎng)度為L(zhǎng)+1的窗口依次沿每個(gè)SQL模板序列以步長(zhǎng)為1滑動(dòng),得到一系列長(zhǎng)度為L(zhǎng)+1的序列段,所有這些序列段組成了序列段集U。把U中每個(gè)序列段的前L個(gè)位置稱(chēng)作條件屬性集,記作A,把第L+1個(gè)位置稱(chēng)作決策屬性,記作d。SQL模板序列段反映了用戶(hù)會(huì)話中SQL模板之間的執(zhí)行次序。如果選取序列段為1,就丟失SQL模板的次序信息,而長(zhǎng)度太大,就會(huì)丟失會(huì)話的局部狀態(tài)信息,無(wú)法正確反映正常情況下的局部SQL模板的調(diào)用狀況。序列段長(zhǎng)度的選取與具體數(shù)據(jù)庫(kù)事務(wù)長(zhǎng)度有關(guān),約為2~5個(gè)事務(wù)所包含的模板數(shù)。
建立正常行為輪廓的基本思想是根據(jù)U中的前L個(gè)SQL模板預(yù)測(cè)第L+1個(gè)SQL模板,即找到U中的條件屬性集A與決策屬性之間的關(guān)系。
1.3.4 提取用戶(hù)正常行為輪廓
在決策系統(tǒng)中,不是所有的屬性對(duì)知識(shí)表示都起作用。知識(shí)約簡(jiǎn)就是在決策系統(tǒng)保持分類(lèi)能力不變的條件下,去掉那些在知識(shí)表示中不起作用的屬性,以簡(jiǎn)化知識(shí)的表示。利用粗糙集理論約簡(jiǎn)知識(shí),可得到最小決策規(guī)則分類(lèi)模型。
刪除覆蓋率小于指定覆蓋率的規(guī)則。規(guī)則的覆蓋率是指同該規(guī)則匹配的短序列段的數(shù)目占總序列段數(shù)目的百分比。用戶(hù)的所有規(guī)則組成了用戶(hù)輪廓。
1.4 入侵檢測(cè)
定義6? 會(huì)話的異常度定義為預(yù)測(cè)失敗的序列段個(gè)數(shù)同會(huì)話中序列段總數(shù)之比。由安全管理員事先設(shè)定一個(gè)閾值,若會(huì)話異常度大于閾值,則認(rèn)為本次會(huì)話異常。
借助訓(xùn)練階段得到的用戶(hù)行為輪廓可以檢測(cè)出該用戶(hù)會(huì)話是否異常。一條規(guī)則同一個(gè)長(zhǎng)度為L(zhǎng)+1的序列段匹配,應(yīng)滿足如下條件:
?。?)規(guī)則適用的長(zhǎng)度為L(zhǎng)+1;
(2)規(guī)則條件中描述的序列段各個(gè)位置上的SQL模板應(yīng)同序列段中的情況相符。
由于可能出現(xiàn)不一致規(guī)則的情況,因此本文引入了預(yù)測(cè)集概念。檢測(cè)用戶(hù)會(huì)話的算法如下:
(1)根據(jù)SQL模板庫(kù)把用戶(hù)會(huì)話轉(zhuǎn)換成SQL模板編號(hào)序列;
(2)如果序列還沒(méi)有檢測(cè)完,用長(zhǎng)度為L(zhǎng)+1的窗口在SQL模板序列上滑動(dòng),步長(zhǎng)為1,每次截取一個(gè)長(zhǎng)度為L(zhǎng)+1的序列段。否則結(jié)束檢測(cè);
(3)如果該序列段中包含不可用SQL模板,則會(huì)話異常度置為閾值+1,轉(zhuǎn)(7);
(4)在正常模型中,尋找與該序列段匹配的規(guī)則,以獲得對(duì)該序列段預(yù)測(cè)集;
?。?)若預(yù)測(cè)集為空,則以最常出現(xiàn)的幾個(gè)預(yù)測(cè)結(jié)果組成對(duì)該序列段的預(yù)測(cè)集;
?。?)如果該序列段的第L+1個(gè)模板在預(yù)測(cè)集中,則預(yù)測(cè)成功。否則,將當(dāng)前事務(wù)標(biāo)記為異常事務(wù),報(bào)告給DBA,并計(jì)算會(huì)話異常度;
(7)若會(huì)話異常度大于設(shè)定的閾值,則該會(huì)話連接為異常,報(bào)警并采取相應(yīng)措施。否則轉(zhuǎn)(2)。
2?實(shí)驗(yàn)結(jié)果與性能分析
本系統(tǒng)實(shí)驗(yàn)數(shù)據(jù)庫(kù)為高校人事管理數(shù)據(jù)庫(kù),包含36個(gè)表,302個(gè)字段,使用SQL Server 2000的Profiler工具創(chuàng)建跟蹤來(lái)采集審計(jì)數(shù)據(jù)。首先按第3節(jié)方法建立SQL模板庫(kù),選取的序列段長(zhǎng)度為9,并將用戶(hù)會(huì)話連接處理成決策系統(tǒng)形式,然后運(yùn)用波蘭華沙大學(xué)與挪威科技大學(xué)聯(lián)合開(kāi)發(fā)的ROSSETA軟件包對(duì)決策系統(tǒng)進(jìn)行屬性約簡(jiǎn),并生成if-then形式的預(yù)測(cè)規(guī)則集,最后將預(yù)測(cè)規(guī)則集應(yīng)用于檢測(cè)。
為了驗(yàn)證方法的有效性,實(shí)驗(yàn)時(shí),將閾值設(shè)成很大的值,以保證會(huì)話序列能被檢測(cè)完。首先將50個(gè)正常會(huì)話用于檢測(cè),誤報(bào)率為5.8%,序列平均異常度為2.52。然后將生成的500個(gè)異常事務(wù)平均分配到這50個(gè)正常會(huì)話中,只有4個(gè)異常事務(wù)沒(méi)有被檢測(cè)出來(lái),漏報(bào)率為0.8%,序列平均異常度為30.66。由誤報(bào)率和漏報(bào)率可以看出,本文建立的模型是比較精確的。由序列平均異常度可以看出,異常序列的平均異常度顯著高于正常序列的平均異常度,所以只要選取適當(dāng)閾值,盡管存在少量的誤報(bào),也能夠準(zhǔn)確地將正常會(huì)話同異常會(huì)話區(qū)分開(kāi)來(lái)。
本系統(tǒng)能夠檢測(cè)的攻擊類(lèi)型如下:SQL注入攻擊、合法用戶(hù)的權(quán)限濫用、偽裝攻擊。
SQL注入攻擊是最常見(jiàn)的一種數(shù)據(jù)庫(kù)入侵方法,據(jù)了解,國(guó)內(nèi)60%的論壇都存在SQL漏洞,它的危害程度應(yīng)該引起足夠的重視。攻擊者利用數(shù)據(jù)庫(kù)應(yīng)用程序的漏洞,精心偽造惡意SQL語(yǔ)句,改變SQL查詢(xún)結(jié)構(gòu)以獲取用戶(hù)特權(quán)或?qū)?shù)據(jù)庫(kù)產(chǎn)生影響。這種攻擊是操作系統(tǒng)和網(wǎng)絡(luò)層入侵檢測(cè)系統(tǒng)所難以檢測(cè)的。下面以SQL注入攻擊為例說(shuō)明本模型的實(shí)際應(yīng)用。
例如用戶(hù)讓?xiě)?yīng)用程序按指定類(lèi)型列出自己的所有注冊(cè)信用卡。這段功能的偽代碼如下:
uname = getAuthenticatedUser()
cctype = getUserInput()
result = sql('SELECT nb FROM creditcards WHERE user=''
+ uname + '' AND type='' + cctype +'';')
print(result)
如果用戶(hù)Bob搜索他的所有VISA卡,將執(zhí)行以下查詢(xún):SELECT nb FROM creditcards WHERE user='Bob' AND type='VISA';。這個(gè)例子包含了一個(gè)SQL注入漏洞。若Bob想看用戶(hù)Alice所有信用卡,他可以請(qǐng)求卡類(lèi)型'OR user ='Alice。這將引起如下查詢(xún)執(zhí)行:SELECT nb FROM creditcards WHERE user='Bob' AND type=''OR user='Alice';這個(gè)查詢(xún)將Alice所有信用卡列表返回給Bob。
在本模型中,上述攻擊語(yǔ)句將被提取為模板SELECT nb FROM creditcards WHERE user=% AND type=% OR user=%; 然后對(duì)該模板進(jìn)行散列,根據(jù)散列值搜索SQL模板庫(kù),結(jié)果沒(méi)有與之匹配的散列值,因此可以斷定該模板異常。同樣地,該模型可以拒絕任何不符合事先定義的SQL模板的訪問(wèn)。
對(duì)于第二種攻擊,授權(quán)用戶(hù)繞過(guò)或回避安全控制, 一般會(huì)訪問(wèn)那些原來(lái)不允許訪問(wèn)的數(shù)據(jù)庫(kù)或數(shù)據(jù)庫(kù)對(duì)象。對(duì)它們的檢測(cè)類(lèi)似第一種。
對(duì)于第三種攻擊,攻擊者通過(guò)合法的登錄過(guò)程進(jìn)入系統(tǒng)(可能是竊取到賬號(hào)和口令)。不能單憑一兩次異常就斷定該用戶(hù)非法,檢測(cè)這種攻擊的前提是入侵者會(huì)作出較多與正常用戶(hù)不同的行為。如果一次會(huì)話中用戶(hù)反常行為過(guò)多,就認(rèn)為是一次入侵。
本文對(duì)已有的數(shù)據(jù)庫(kù)入侵檢測(cè)機(jī)制進(jìn)行了分析研究,并提出了一種基于粗糙集的數(shù)據(jù)庫(kù)入侵檢測(cè)模型。為了提高檢測(cè)的效率和精確度,使用了散列算法和預(yù)測(cè)集概念。該模型可以拒絕任何不符合事先定義的SQL模板的訪問(wèn),還可以發(fā)現(xiàn)偽裝成合法用戶(hù)、但與合法用戶(hù)正常使用方式不同的攻擊者以及合法用戶(hù)的濫用行為。研究可以有效檢測(cè)數(shù)據(jù)庫(kù)入侵的方法是數(shù)據(jù)庫(kù)入侵容忍技術(shù)亟待解決的首要問(wèn)題,下一步工作是結(jié)合其他檢測(cè)方法進(jìn)一步提高模型精確度,并將該模型應(yīng)用到數(shù)據(jù)庫(kù)入侵容忍技術(shù)中。
?
參考文獻(xiàn)
[1] 文俊浩, 徐玲, 李立新,等. 安全增強(qiáng)的數(shù)據(jù)庫(kù)系統(tǒng)的模型構(gòu)建[J]. 計(jì)算機(jī)應(yīng)用, 2005, 25(8): 1734-1736.
[2]?CHUNG C Y, GERTZ M, LIVIN K. DEMID S. A misuse detection system for database systems[C]. In: Third Annual IFIP TC-11 WG 11.5 Working Conference on Integrity and Internal Control in Information Systems. Amsterdam, Netherlands: Kluwer Academic Publishers, 1999:159-178.
[3]?MARCO V,HENIPUE M. Detection of malicious transactions in DBMS[C]. In: Proceedings of the 11th IEEE International Symposium Pacific Rim Dependable Computing, Washington. DC, USA: IEEE Computer Society, 2005:350-357.
[4]?YAO Q,AN A,HUANG X.Finding and analyzing database user sessions[C]. In: Proceedings of the 10th International Conference on Database Systems for Advanced Applications, Heidelberg, Berlin: Springer, 2005:851-862.
[5]?BRUCE S. Applied cryptography protocols, algorithms, and source code in C (Second Edition) [M]. New York: Willey, 1999:21-22.