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