安全審計打造固若金湯的數據堡壘(一)
眾所周知,數據庫系統功能強大而豐富,因而,對于一個數據庫環境而言,我們可以生成很多類型的審計記錄。當然,這并不意味著本文所涉及到的所有審計類型都適合讀者你,但是,知道有哪些審計類型以及如何實施這些審計有助于你滿足合規需求。
要實施完善的數據庫審計,必須理解的一個關鍵問題是需求,從而知道可以使用哪些審計類型來滿足自己的需求。本文可作為你實施數據庫審計的一個參考。
審計數據庫的登入和登出
在你要進入一家公司會晤某人的時候,一般需要在前臺進行登記。這樣做可確保公司完整的記錄進入公司的任何人,在出現問題時,或在追蹤和調查“這事兒是誰干的?”時,這種登錄很有用處。這種日志通常會記錄來客是誰、何時進入、何時離開。同樣的過程也適用于數據庫,多數環境中所需要的首要審計就是完整的記錄哪些人曾登入過數據庫。
對于這類審計,你需要記錄兩類事件:登入事件和登出事件。對于每一個事件,你都需要保存登錄名和時間,但你還應該考慮記錄附加信息。這包括發起連接的客戶端的IP地址,以及用于初始化連接的程序。例如,在Oracle環境中,你可能想知道該連接是否由SQL Plus等初始化。
除了這兩類事件,你還應當記錄所有失敗的登錄企圖。事實上,從安全的觀點來看,失敗的登錄事件甚至可能比成功的登錄更重要。記錄失敗的登錄企圖不僅是為了審計和合規目的,而且可作為警告和停用某個賬戶的基礎。
雖然你可將這三類事件放在同樣的文件或表格中,但你可能會以不同的方式進行報告。成功的登錄和登出報告不是多數人愿意關注的問題,除非要進行某種調查,因為這些日志反映了正常的操作。除此之外,還有一種例外情況,即比較不同時期的文件,看其是不是發生了改變。然而,過多的失敗登錄肯定是一個令人感興趣的安全報告,而且許多人會根據如下這幾個方面定期地查看這些失敗的登錄企圖:
用戶名
連接失敗的客戶端IP地址
源程序
時間和日期

例如,圖一展示了兩個視圖,這兩個視圖根據兩個方面進行了分類總結,一是根據登錄名(上圖的左側),二是根據顯示失敗登錄的詳細視圖的報告(包括登錄名、源IP地址、連接到哪個數據庫服務器、通信類型)。
可使用數據庫的特性或使用外部的數據庫安全方案來審計登入和登出活動。所有的數據庫廠商都支持這種基本的審計功能,而且因為這些事件的數量是很小的(至少在與審計實際的SQL調用時所得到的事件數量相比時是這樣的),所以數據庫在執行這種審計時所遭受的性能損失很少。
正如在插入或更新時,Oracle觸發器會啟動一樣,系統級觸發器會針對特定的系統事件(如登入、登出和DDL執行)而執行。下面看一下如何實施這種審計:
首先,創建一個你用來保存這種信息的表:

下一步,創建一個在發生新登入時可執行的觸發器:
#p#
多數數據在用戶登入時被記載,但在用戶登出時,需要用觸發器來記載其登出日期和時間,代碼如下:

在Oracle環境中這樣做就可以了。如果你運行的是Sybase環境,問題就更簡單了,因為你可以用下面的命令審計對所有數據庫的所有訪問:

根據失敗的登錄來實施警告或賬戶鎖定這種功能,需要得到數據庫廠商或數據庫安全解決方案的支持。如果使用數據庫來生成登錄和登出的審計,并且你的數據庫廠商可以實施賬戶鎖定功能,那么,你可以在數據庫環境中實現這一點。例如,你可能知道如何建立Oracle的口令策略。在另外一種環境中(如SQL server 2000),你就無法使用本地數據庫特性來完成此功能,而需要編寫代碼來檢查Windows的事件日志,查找失敗的登錄,或者使用一個外部的安全系統來實現。
在使用外部安全系統時,你可以使用SQL防火墻來阻止經過一定數量的失敗登入企圖后,某個登錄名的任何連接。在這種情形中,數據庫并不會收到連接企圖,因為這種連接企圖會在防火墻水平上被拒絕。另外一個選擇(該選擇并不要求你將安全系統置于數據庫之前)是使用數據庫過程,如圖二所示。在這種情形中,失敗的登錄次數超過某個上限后,審計系統就會生成一次審計。該審計被發送給一個負責連接到數據庫的系統,并且調用一個過程來鎖定賬戶。該系統一般還會通知數據庫管理員,告知已經采取了該行動,以便于進行調查,并且在必要時可以釋放被鎖定的賬戶。

除了可用于創建審計線索,登錄信息可用于創建一種可以幫助管理員確認異常的基準。用戶登錄活動的基準是“正常”登錄行為的反映。這種基準是通過著眼于在某段時間(例如,一個月)的所有登錄活動而構建的。通過將所有的可能性進行組合,對其分類而建立基準。例如,你可以根據網絡位置、用戶名、源程序、時間和日期來對登錄進行分類,此時的基準可能會類似于下面這個樣子:

這個基準表明,根據相對記錄期中所觀察到的所有登錄活動,user1總是從192.168.1.168(例如這是一臺應用程序服務器),并且是24小時持續地連接。User2用于從Excel連接到數據庫,它用于192.168子網中的多個網絡節點中,不能用于正常上班時間之外。***,在從isql發起訪問時,就會用到user3,它可以在周末從10.10.10子網的任何節點上工作。
有了這種基準,管理員就可以對背離正常操作的行為做出報告或發出警告。例如,如果你看到有人使用user1成功登錄,但其IP地址卻不同于192.168.1.168,而且所使用的工具卻是SQL Navigator之類的工具,可以斷定,要么你的環境發生了變化,要么是某人成功地獲得了應用程序服務器的用戶名和口令,并用這些信息從數據庫析取信息。再舉一個例子,使用user2在午夜2點的一次登錄就非常可疑。當然,這可能表明某個人工作得很晚,但根據具體環境、敏感性等,你可能需要深入地調查此事。
【編輯推薦】



















