安全審計(jì)打造固若金湯的數(shù)據(jù)堡壘(三)
在安全審計(jì)系列的文章(一)和文章(二)中,我們介紹了審計(jì)數(shù)據(jù)庫(kù)的登入和登出,審計(jì)使用數(shù)據(jù)庫(kù)的源頭等。本文我們將介紹安全審計(jì)中的審計(jì)數(shù)據(jù)庫(kù)錯(cuò)誤等內(nèi)容。
審計(jì)數(shù)據(jù)庫(kù)錯(cuò)誤
審計(jì)由數(shù)據(jù)庫(kù)返回的錯(cuò)誤也是很重要的,它是你應(yīng)實(shí)施的首個(gè)審計(jì)日志之一。從安全的觀點(diǎn)來(lái)看,這尤其重要。例如,在許多情況下,攻擊者會(huì)進(jìn)行很多嘗試直至得逞。攻擊者可以使用基于UNION的攻擊,他需要猜測(cè)數(shù)據(jù)表的正確欄數(shù),直到他得到正確的數(shù)字,數(shù)據(jù)庫(kù)將會(huì)不斷地返回一個(gè)錯(cuò)誤代碼,表明SELECT語(yǔ)句所選擇的欄數(shù)不匹配。如果你記錄了所有的錯(cuò)誤,就可以確認(rèn)這種攻擊并做出響應(yīng)。失敗的登錄是需要進(jìn)行記錄和監(jiān)視的錯(cuò)誤之一,即使你并沒(méi)審計(jì)數(shù)據(jù)庫(kù)的登錄。最后,任何失敗的提升特權(quán)的試圖操作都表明攻擊正在發(fā)生。
從質(zhì)量的觀點(diǎn)看,錯(cuò)誤審計(jì)也很重要,它符合合規(guī)要求。我們應(yīng)該確認(rèn)并修復(fù)漏洞和應(yīng)用程序錯(cuò)誤,而記錄SQL錯(cuò)誤通常是確認(rèn)這些問(wèn)題的一種簡(jiǎn)單方法。因而,即使你關(guān)心的是安全問(wèn)題,將這種信息提供給應(yīng)用程序的所有者也很有意義,因?yàn)檎l(shuí)都不愿意運(yùn)行存在著問(wèn)題的代碼。幸運(yùn)的話(huà),這些錯(cuò)誤甚至?xí)蚰阒赋瞿切┯绊戫憫?yīng)時(shí)間和可用性的問(wèn)題。
數(shù)據(jù)庫(kù)廠(chǎng)商都支持詳細(xì)的錯(cuò)誤審計(jì),你可以參考具體的數(shù)據(jù)庫(kù)環(huán)境指南。在Oracle中,你可以使用系統(tǒng)觸發(fā)器:
下一步,創(chuàng)建一個(gè)可用于新登錄的觸發(fā)器:
在SQL Server中,你可以使用審計(jì)特性或跟蹤特性。如果你選擇使用跟蹤特性,你需要使用sp_trace_event來(lái)建立與錯(cuò)誤有關(guān)的正確事件。這包括下表所示的事件ID:
多種DB2事件監(jiān)視器與錯(cuò)誤審計(jì)相關(guān),并且你必須使用這些事件類(lèi)型。對(duì)于所需要的每一種類(lèi)型,你都應(yīng)當(dāng)過(guò)濾那些與錯(cuò)誤相關(guān)的記錄。例如,你應(yīng)當(dāng)為拒絕訪(fǎng)問(wèn)(ACCESS DENIED )記錄選擇檢查(CHECKING)記錄,并在VALIDATE類(lèi)型中查看AUTHENTICATE_PASSWORD 和 VALIDATE_USER事件。
雖然在有些環(huán)境中,記錄錯(cuò)誤和審計(jì)錯(cuò)誤是可能的,但外部的審計(jì)系統(tǒng)更加普遍。如果你監(jiān)視所有進(jìn)入的SQL請(qǐng)求和響應(yīng),跟蹤和報(bào)告所有的錯(cuò)誤是很簡(jiǎn)單的,且不會(huì)給數(shù)據(jù)庫(kù)帶來(lái)任何額外負(fù)擔(dān)。可以使用任何一種標(biāo)準(zhǔn)集來(lái)報(bào)告錯(cuò)誤,這種信息對(duì)于制定基準(zhǔn)是很益的。
如果你的應(yīng)用環(huán)境不太完善,制定基準(zhǔn)就顯得很重要。不是每一個(gè)數(shù)據(jù)庫(kù)和應(yīng)用環(huán)境都十全十美,在多數(shù)環(huán)境中,有些應(yīng)用程序會(huì)產(chǎn)生數(shù)據(jù)庫(kù)錯(cuò)誤,即使是在生產(chǎn)過(guò)程中也會(huì)如此。事實(shí)上,應(yīng)用程序所產(chǎn)生的錯(cuò)誤是重復(fù)性的:在大體相同的地方發(fā)生了相同的錯(cuò)誤,這類(lèi)錯(cuò)誤往往是由缺陷引起的,且這些缺陷并不會(huì)發(fā)生改變。如果制定了錯(cuò)誤基準(zhǔn),卻突然發(fā)現(xiàn)其它方面所產(chǎn)生的錯(cuò)誤,或者你看到了完全不同的錯(cuò)誤代碼,那么你該調(diào)查發(fā)生了什么問(wèn)題。
存儲(chǔ)過(guò)程和觸發(fā)器的來(lái)源變更審計(jì)
由于數(shù)據(jù)庫(kù)木馬使用了靈活但卻完全過(guò)程化的編程語(yǔ)言,要隱藏惡意代碼是很容易的。因此,你應(yīng)采取最佳方法來(lái)審計(jì)這些結(jié)構(gòu)的所有變更。
有幾種方法可實(shí)現(xiàn)這種審計(jì)。最簡(jiǎn)單的方法是基于配置控制的,可以通過(guò)定期(如每天)從數(shù)據(jù)庫(kù)中檢索代碼并將其與前一段時(shí)期所檢索的代碼相比較來(lái)實(shí)施這種審計(jì)。通過(guò)使用一些工具和腳本程序(如diff),這種方法相對(duì)易于實(shí)施。
第二種選擇是使用一個(gè)外部的數(shù)據(jù)庫(kù)安全和審計(jì)系統(tǒng)。這種系統(tǒng)可以實(shí)時(shí)地對(duì)創(chuàng)建或修改命令向管理員發(fā)出警告,并且很輕松地就生成可以詳細(xì)描述各種變化的報(bào)告,下圖顯示的就是觸發(fā)器的變更:
第三個(gè)選擇是使用內(nèi)置的數(shù)據(jù)庫(kù)特性。例如,在SQL Server中,你可以使用Recompile事件來(lái)跟蹤對(duì)存儲(chǔ)過(guò)程的變更:
在多數(shù)數(shù)據(jù)庫(kù)環(huán)境中,這種特性是通過(guò)DDL審計(jì)來(lái)支持的,雖然從命令中析取源代碼并以一種易于審計(jì)的方式維持代碼并不容易。
【編輯推薦】