摘 要:數(shù)據(jù)庫安全審計對于保障數(shù)據(jù)庫安全是至關(guān)重要的。設(shè)計實現(xiàn)一個Informix數(shù)據(jù)庫安全審計系統(tǒng),通過對Informix數(shù)據(jù)庫審計日志文件格式的分析,能夠?qū)?shù)據(jù)庫的操作按照用戶會話過程進行還原,同時設(shè)計多級的安全規(guī)則對相應(yīng)的數(shù)據(jù)庫操作給出不同級別的警告。在系統(tǒng)架構(gòu)上,采用分離的采集器和分析器結(jié)構(gòu),能針對多個日志數(shù)據(jù)源進行同時處理,日志分析結(jié)果采用XML格式進行存儲。具有很好的通用性和可擴展性。實驗測試結(jié)果表明,系統(tǒng)能很好地完成Informix數(shù)據(jù)庫操作的實時審計。
關(guān)鍵詞:Informix;數(shù)據(jù)庫安全;審計日志
中圖分類號:TP311.138 文獻標(biāo)識碼:A
1 引言
數(shù)據(jù)庫安全審計是保證數(shù)據(jù)庫安全性的有效手段,它的作用在于當(dāng)數(shù)據(jù)被惡意修改、數(shù)據(jù)復(fù)制不正常或數(shù)據(jù)庫系統(tǒng)出現(xiàn)問題時,數(shù)據(jù)庫管理員可以通過安全審計,跟蹤數(shù)據(jù)的修改過程,確定數(shù)據(jù)被破壞的程度和范圍,并制定相應(yīng)的解決方案,從而最大限度地縮短恢復(fù)周期,將損失降低到最小。

數(shù)據(jù)庫安全審計源于信息系統(tǒng)的安全審計,就是對系統(tǒng)安全進行審核、稽查和計算。概括的講,安全審計就是記錄一切(或部分)與系統(tǒng)安全有關(guān)活動的基礎(chǔ)上,對其進行分析處理、評估審查,查找系統(tǒng)的安全隱患,追查造成安全事故的原因,并做出進一步的處理。數(shù)據(jù)庫安全審計是創(chuàng)建一個用于監(jiān)測非正常的或可疑的活動的事件記錄,或者提供一個重要活動及操作者的記錄。由于可審計事件的粒度一般比較小,因此審計很容易在短時間內(nèi)產(chǎn)生大量的數(shù)據(jù),然而通常情況下系統(tǒng)受到攻擊的可能性并不大,這些數(shù)據(jù)所體現(xiàn)的操作絕大多數(shù)都是合法的。海量的數(shù)據(jù)給審計數(shù)據(jù)的人工分析和機器自動分析都帶來了極大的困難。目前,針對Informix數(shù)據(jù)庫的審計主要是Informix系統(tǒng)本身帶有的安全審計模塊,它可以完成對數(shù)據(jù)庫的在線監(jiān)控,能將數(shù)據(jù)庫操作記錄按照時間順序記錄在日志文件中,但是這些記錄對于使用者來說,內(nèi)容繁雜,不利于數(shù)據(jù)庫管理人員的分析和處理。
本文通過結(jié)合安全審計模塊設(shè)計實現(xiàn)了一個Informix數(shù)據(jù)庫安全審計系統(tǒng),該審計系統(tǒng)采用采集和分析分離的結(jié)構(gòu)并設(shè)計傳輸協(xié)議格式,能針對多個日志數(shù)據(jù)源進行同時處理。通過對Informix數(shù)據(jù)庫審計日志文件格式的分析,能夠?qū)?shù)據(jù)庫的操作按照用戶會話過程進行還原,同時設(shè)計多級別的安全規(guī)則可以對相應(yīng)的數(shù)據(jù)庫操作給出不同級別的警告。
2 Informix數(shù)據(jù)庫審計日志文件分析
為了提取審計日志文件的內(nèi)容,我們首先分析了審計日志的格式。審計日志以字符形式直接存儲,對每一個用戶配置好的數(shù)據(jù)庫操作行為都存儲成一條日志文件記錄。

每條記錄分為兩個部分,第一部分是日志頭,第二部分是附加的信息列。
其中日志頭包含八個字段,含義如表1所示。
附加信息列(Additional fields)則是根據(jù)不同的事件類型而有所不同,一般包括數(shù)據(jù)庫名、表名等信息,典型數(shù)據(jù)庫操作時記錄的附加信息列如表2所示。具體的可參見審計事件域表。
例如,以下是從審計日志文件中截取的一條審計記錄:
該記錄表示主機名為ZHANGWEI-DB的客戶端在2007年4月3日16:15:33登錄服務(wù)器名為OLZW的數(shù)據(jù)庫服務(wù)器,登錄的用戶名為Informix,該用戶對sysmaster數(shù)據(jù)庫的表號為221的表中的262行進行了插入行數(shù)據(jù)的操作。
3 審計系統(tǒng)結(jié)構(gòu)
為了能支持對多個日志源的審計分析,將審計系統(tǒng)設(shè)計成采集器和分析器兩部分,如圖1所示。采集器負(fù)責(zé)采集原始的Informix數(shù)據(jù)庫審計日志數(shù)據(jù),可以完成實時采集和定時采集的功能。分析器負(fù)責(zé)對采集器發(fā)送給它的數(shù)據(jù)進行日志解析、操作還原、會話關(guān)聯(lián)和審計結(jié)果輸出,并進行安全規(guī)則匹配和統(tǒng)一格式處理。系統(tǒng)中設(shè)計了相關(guān)的通信協(xié)議完成采集器和分析器之間的數(shù)據(jù)傳輸。
4 審計系統(tǒng)設(shè)計與實現(xiàn)
4.1 采集器
Informix數(shù)據(jù)庫審計系統(tǒng)的審計客體主要是數(shù)據(jù)庫的審計日志文件,采集器需要安裝在數(shù)據(jù)庫服務(wù)器上,負(fù)責(zé)讀取審計日志文件中的數(shù)據(jù),實時采集是通過設(shè)定相應(yīng)的時間間隔對日志文件中的增量數(shù)據(jù)進行采集,定時采集則可以指定需要分析的時間段,完成對審計日志文件中相關(guān)時間內(nèi)數(shù)據(jù)記錄的采集。采集得到的數(shù)據(jù)形成相應(yīng)的字節(jié)流,按照一定的協(xié)議格式通過TCP連接傳送給分析器。
4.2 網(wǎng)絡(luò)傳輸協(xié)議
在采集器和分析器間,設(shè)計了相應(yīng)的信令包和數(shù)據(jù)包,分別完成傳輸過程中的參數(shù)協(xié)商和日志數(shù)據(jù)的傳遞。
傳輸?shù)木唧w過程如圖2所示。

首先由采集器發(fā)出連接請求,分析器收到該連接請求之后,發(fā)出響應(yīng)包,與采集器協(xié)商編號、數(shù)據(jù)庫類型和文件名信息,之后分析器將本次傳輸?shù)钠鹗嘉恢冒l(fā)給采集器,采集器根據(jù)這個位置信息,決定從何處開始傳輸日志數(shù)據(jù),以保證傳輸數(shù)據(jù)的完整性和正確性。之后就開始傳輸,當(dāng)傳輸完畢時,采集器發(fā)送一個斷開連接的請求包,分析器收到該消息包,則斷開與采集器的連接。
4.3 分析器
分析器是審計系統(tǒng)的核心,主要完成的功能是接收日志采集代理發(fā)送過來的審計日志數(shù)據(jù),解析還原出數(shù)據(jù)庫操作并實現(xiàn)會話關(guān)聯(lián),最后對分析的結(jié)果進行規(guī)則匹配,顯示告警信息。分析器的結(jié)果包含系統(tǒng)告警信息和還原的用戶會話過程,即每個用戶在任何一次登錄退出過程中的所有數(shù)據(jù)庫操作行為記錄。
4.3.1 日志解析
日志解析的過程首先是讀取一條審計日志記錄,完成記錄中操作信息的還原,然后完成多條記錄的關(guān)聯(lián),最后得到一個用戶在一次登錄退出之間的操作。
由于在Informix審計日志記錄中,SQL操作是采用字母縮寫來表示的,如insert、delete、update分別記為INRW、DLRW、UPRW。同時日志記錄中操作的對象(表或視圖)也是采用數(shù)字編號來表示的。為了得到更加直觀的審計結(jié)果,日志解析首先要將這些縮寫和編號轉(zhuǎn)換成對應(yīng)的SQL操作名和相應(yīng)的表名或視圖名。

具體實現(xiàn)上,通過讀取審計日志頭中Event mnemonic字段的內(nèi)容就可以讀取操作縮寫名,直接還原SQL操作。對于對象名稱的還原,可以有兩種方法,一種是通過查找數(shù)據(jù)庫系統(tǒng)表systable可以獲取所有的對象名和對象編號的對應(yīng)關(guān)系。另一種方法是,通過解析審計事件為ACTB的日志記錄來獲取對象名和對象編號的對應(yīng)關(guān)系。在In-formix數(shù)據(jù)庫操作中,每個對表或視圖的操作首先都會產(chǎn)生一條ACTB的審計日志記錄,該記錄的附加信息列中帶有對象名和對象編號兩個域,分別描述下一記錄的操作對象名稱和對象編號。由于第一種方式需要對數(shù)據(jù)庫系統(tǒng)表進行查找,會影響數(shù)據(jù)庫系統(tǒng)本身的效率和性能,所以我們的審計系統(tǒng)中采取了第二種方式。
而對于用戶登錄的操作,在Informix的審計日志中,審計事件縮寫為STSN時,表示啟動新的會話,也就是一個新的用戶登錄。在這條審計記錄中會記錄下會話開始的時間、進程ID和用戶名等信息,我們可以通過解析該記錄內(nèi)容,獲取用戶的會話信息。

由于在審計日志記錄中,屬于同一會話的操作,其主機名、進程號和用戶名三個字段是相同的,因此可以通過檢測每條記錄的這三個字段來進行匹配。雖然在Unix/Linux系統(tǒng)中,存在進程號時間片輪轉(zhuǎn)的問題,即系統(tǒng)的進程號在一定的時間后會發(fā)生輪轉(zhuǎn),從而使得進程號發(fā)生重復(fù)。但是進程號輪轉(zhuǎn)時出現(xiàn)同一進程號的前提是前一個進程已經(jīng)結(jié)束了,也就是相當(dāng)于說該會話已經(jīng)完成,因此并不會影響會話關(guān)聯(lián)的正確性。
4.3.2 統(tǒng)一格式處理
出于通用性和擴展性方面的考慮,審計系統(tǒng)對日志解析的結(jié)果使用統(tǒng)一的XML數(shù)據(jù)格式進行處理和保存。下面是一段日志解析后的保存結(jié)果示例。
其中,Session代表會話,Operation代表數(shù)據(jù)庫操作。
在Session記錄中,SID表示會話號,PID表示進程號。屬于同一會話的操作被歸于一個會話號之下。在Opera-tion記錄中,Op表示數(shù)據(jù)庫操作行為類型,Timestamp表示操作時間,ObjectlD表示操作對象標(biāo)識號,ObjectName表示操作對象名,RowID表示行號,DataBaseName表示數(shù)據(jù)庫名,Status表示操作是否成功。
4.3.3 安全規(guī)則關(guān)聯(lián)匹配

為了實現(xiàn)安全審計的目的,系統(tǒng)設(shè)定了安全規(guī)則,規(guī)定了三個安全等級,級別越高,表示存在的安全威脅越大。系統(tǒng)分別對用戶多次登錄嘗試、用戶授權(quán)、數(shù)據(jù)表修改、記錄增刪等行為給出安全警告。
安全規(guī)則的保存采用了XML格式,可以由管理用戶按照需求進行添加和刪除。以下是一段安全規(guī)則的示例。
其中標(biāo)簽名代表數(shù)據(jù)庫操作名,Status為操作狀態(tài),Warn-ingLevel為警告級別,Suggestion為應(yīng)對策略和建議。如上例中第4條規(guī)則表示連續(xù)三次登錄失敗,警告級別為3。
在進行安全規(guī)則匹配時,遍歷日志解析結(jié)果文件,對每條記錄結(jié)果取出操作名和成功狀態(tài),與安全規(guī)則庫進行匹配,完成相應(yīng)警告輸出。
5 系統(tǒng)測試
系統(tǒng)測試在分布式的環(huán)境下進行,日志采集器運行在Windows平臺的Informix數(shù)據(jù)庫服務(wù)器上,日志分析器運行在Linux平臺。系統(tǒng)第一次運行時,需要對審計日志、分析結(jié)果文件名稱和存放位置、通信地址和端口等進行相應(yīng)的配置。

采用實時測試模式,系統(tǒng)啟動以后,分析器會一直循環(huán)等待接收采集器發(fā)送過來的日志數(shù)據(jù)。我們以一個大小為5M的審計日志文件作為測試數(shù)據(jù)源,審計系統(tǒng)在不到10秒的時間內(nèi)完成對該文件的分析,并給出了相應(yīng)的結(jié)果。結(jié)果表明,系統(tǒng)能很好地完成Informix數(shù)據(jù)庫操作的實時審計,將用戶的數(shù)據(jù)庫操作行為按照會話的過程清晰地展現(xiàn)出來,同時能對這些操作行為給出相應(yīng)的警告提示信息。分析的部分結(jié)果截圖如圖3所示。
從圖3可以看出,用戶名為informix的某用戶從13:02:26開始登錄到13:07:06退出登錄,其中進行了創(chuàng)建用戶表test_621等操作。
系統(tǒng)安全關(guān)聯(lián)匹配的部分結(jié)果截圖如圖4所示。

從圖4可以看出,對應(yīng)圖3的日志分析結(jié)果,審計系統(tǒng)對用戶informix的登錄,創(chuàng)建表,插入行數(shù)據(jù)都給出了相應(yīng)的警告提示信息,管理員用戶可以很明確的做好對應(yīng)的操作處理。
6 結(jié)束語
數(shù)據(jù)庫安全審計機制是數(shù)據(jù)庫安全機制的一種,本文根據(jù)Informix數(shù)據(jù)庫管理系統(tǒng)自身的特點,設(shè)計并實現(xiàn)了具有審計數(shù)據(jù)的采集和審計數(shù)據(jù)的分析以及報警功能的Informix數(shù)據(jù)庫安全審計系統(tǒng),任何通過數(shù)據(jù)庫引擎對數(shù)據(jù)庫進行的操作都會被審計系統(tǒng)記錄,而這些記錄可用于追蹤和調(diào)查非授權(quán)用戶的非法操作,從而確保數(shù)據(jù)庫的安全性、完整性和可用性。