數(shù)據(jù)庫自主安全防護技術(shù)的研究與實現(xiàn)
攔截主要通過HOOK API技術(shù)實現(xiàn),可以攔截的操作包括DOS下的中斷、Windows中的API調(diào)用、中斷服務(wù)、IFS和NDIS過濾等。目前微軟提供了一個實現(xiàn)HOOK的函數(shù)庫Detours。其實現(xiàn)原理是:將目標(biāo)函數(shù)的前幾個字節(jié)改為jmp指令跳轉(zhuǎn)到自己的函數(shù)地址,以此接管對目標(biāo)函數(shù)的調(diào)用,并插入自己的處理代碼。
HOOK API技術(shù)的實質(zhì)是改變程序流程。在CPU的指令集中,能夠改變程序流程的指令包括JMP、CALL、INT、RET、RETF、IRET等。理論上只要改變API入口和出口的任何機器碼,都可以實現(xiàn)HOOK。但實際實現(xiàn)上要復(fù)雜得多,主要需要考慮如何處理好以下問題:(1)CPU指令長度。在32 bit系統(tǒng)中,一條JMP/CALL指令的長度是5 B,因此只需要替換API中入口處的前5 B的內(nèi)容,否則會產(chǎn)生不可預(yù)料的后果。(2)參數(shù)。為了訪問原API的參數(shù),需要通過EBP或ESP來引用參數(shù),因此需要明確HOOK代碼中此時的EBP/ESP的值。(3)時機問題。有些HOOK必須在API的開頭,如CreateFileA( )。有些必須在API的尾部,如RECV()。(4)程序上下文內(nèi)容的保存。在程序執(zhí)行中會涉及修改系統(tǒng)棧的內(nèi)容,因此注意保存棧中原有內(nèi)容,以便還原。(5)在HOOK代碼里盡量杜絕全局變量的使用,以降低程序之間的耦合性。通過以上的分析,整理出如圖4所示的實現(xiàn)的流程。
DSS與傳統(tǒng)數(shù)據(jù)庫的安全防護功能相比,具有以下特點:
(1)獨立于具體的數(shù)據(jù)庫。這種獨立性體現(xiàn)在:①DSS只需要數(shù)據(jù)庫提供其接口信息即可工作。②支持不同標(biāo)準(zhǔn)的SQL語句,通過數(shù)據(jù)庫命令映射表可將非標(biāo)準(zhǔn)的SQL語句映射為系統(tǒng)設(shè)置的SQL命令。③系統(tǒng)自身數(shù)據(jù)的物理存儲是獨立于數(shù)據(jù)庫的。
(2)靈活性和針對性的統(tǒng)一。用戶可以根據(jù)自己的需要配置針對特定應(yīng)用的相關(guān)規(guī)則。
(3)完善的自我安全保護措施。DSS只有數(shù)據(jù)庫安全管理員和安全審計員才能訪問。安全管理員和安全審計員是一類特殊的用戶,他們只負責(zé)安全方面的操作,而不能訪問數(shù)據(jù)庫中的數(shù)據(jù)。這與Oracle等的數(shù)據(jù)庫不同,在這些數(shù)據(jù)庫中,DBA可以進行所有的操作。DSS系統(tǒng)本身具有故障恢復(fù)能力,能使系統(tǒng)出現(xiàn)問題時恢復(fù)到一個安全的狀態(tài)。
(4)完備的信息查閱和報警功能。在DSS中,本文提供了便利的設(shè)計查閱工具,方便用戶對系統(tǒng)進行監(jiān)控。另外,用戶也可以自己定義報警條件和報警處理措施,一旦滿足報警條件,系統(tǒng)就會自動地做出響應(yīng)。
3 實驗及結(jié)果分析
DSS的開發(fā)主要采用VS 2005實現(xiàn),開發(fā)完成后在一臺主頻為2.8 GHz、內(nèi)存2 GB、裝有Windows 2000操作系統(tǒng)的普通 PC機上對其進行了功能和性能的測試,使用的數(shù)據(jù)庫是開源的嵌入式數(shù)據(jù)庫SQLite 3.6。為了搭建測試環(huán)境,需要在SQLite中添加初始化系統(tǒng)自身的數(shù)據(jù)字典,并開發(fā)應(yīng)用程序。測試內(nèi)容包括:登錄、用戶管理、Sensor、訪問控制、日志審計以及增加DSS前后數(shù)據(jù)庫系統(tǒng)安全性變化等功能性測試和增加DSS系統(tǒng)后對數(shù)據(jù)庫性能的影響兩方面。其中,性能測試主要從時間和資源的增加情況來說明,針對不同數(shù)據(jù)庫對象分別在五個級別(20 000、40 000、60 000、80 000、100 000)的數(shù)據(jù)上進行了插入和查詢操作測試。為了做好性能對比,在SQLite中也添加了相同的訪問控制功能,記為Inline Processing。插入操作的測試結(jié)果如圖5所示,查詢操作的測試結(jié)果如圖6所示。
從功能測試結(jié)果可以看出,DSS可以為數(shù)據(jù)庫系統(tǒng)提供自主防護。從性能測試的結(jié)果中看出,查詢操作和插入操作耗時相差比較大,這主要是SQLite工作方式引起的,在執(zhí)行用戶的插入操作時,數(shù)據(jù)庫需將內(nèi)存中的數(shù)據(jù)寫入磁盤數(shù)據(jù)庫文件中,占用了一部分時間。而查詢時,SQLite會將數(shù)據(jù)庫文件部分內(nèi)容緩存起來,加快了查詢的速度。另外,增加DSS會對性能有略微的影響,但是它能實現(xiàn)對數(shù)據(jù)庫系統(tǒng)自主保護。
本文針對傳統(tǒng)數(shù)據(jù)庫安全防護功能配置不靈活的問題,提出了一種基于HOOK技術(shù)的數(shù)據(jù)庫通用安全防護系統(tǒng)。該系統(tǒng)的最大優(yōu)點在于,它不受數(shù)據(jù)庫自身的約束,完全獨立于數(shù)據(jù)庫系統(tǒng),為用戶提供一種按需定制的功能,不僅增加了安防配置的靈活性而且提高了通用性,可以用于不同的數(shù)據(jù)庫系統(tǒng)中。
評論