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