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