隨著信息化的發(fā)展,數(shù)據(jù)庫(kù)安全問題成為當(dāng)前政府和企事業(yè)單位用戶關(guān)注的焦點(diǎn),數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品已經(jīng)成為當(dāng)前信息安全產(chǎn)品的盛寵。中培偉業(yè)《SQL Server 高級(jí)管理與性能調(diào)優(yōu)最佳實(shí)踐》培訓(xùn)專家秦老師指出,目前國(guó)內(nèi)數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品存在8大常見缺陷。
長(zhǎng)SQL語(yǔ)句漏審
大多數(shù)的SQL語(yǔ)句都在1K以里長(zhǎng)度,市面上的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品大多都能準(zhǔn)確記錄下,也能實(shí)現(xiàn)正常的解析;但在SQL語(yǔ)句超過1.5K時(shí),很多的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品就會(huì)發(fā)生漏審,或者只能審計(jì)下部分SQL語(yǔ)句。
一般Oracle一個(gè)通訊包的長(zhǎng)度在2K,單一包內(nèi)能夠容納的語(yǔ)句長(zhǎng)度大約在1.4K多一點(diǎn)(大約為1460);超過這個(gè)大小的SQL語(yǔ)句一般會(huì)拆分成多包;在Oracle 11g下通常通訊包為2K,最大可以達(dá)到8K;對(duì)于Oracle數(shù)據(jù)庫(kù)沒有明確說(shuō)明可兼容的SQL語(yǔ)句的長(zhǎng)度,有的說(shuō)32K或64K是個(gè)臨界點(diǎn),但筆者也曾作過嘗試2M做的SQL語(yǔ)句也能發(fā)送并被Oracle正常解析。
對(duì)于一些數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品,由于沒有將多個(gè)SQL通訊包進(jìn)行有效解析和關(guān)聯(lián),在發(fā)生長(zhǎng)SQL語(yǔ)句時(shí)會(huì)發(fā)生無(wú)法解析或解析不全的情況;具體表現(xiàn)是,對(duì)于長(zhǎng)SQL語(yǔ)句并未記錄,或僅記錄了前半部分。
這種情況的危害是,對(duì)于有些業(yè)務(wù)系統(tǒng)中自身就包含長(zhǎng)SQL語(yǔ)句,比如經(jīng)分系統(tǒng),報(bào)表系統(tǒng),這些SQL語(yǔ)句會(huì)被漏記;同時(shí),一些黑客或攻擊人員會(huì)利用這樣的一些漏洞,進(jìn)行數(shù)據(jù)庫(kù)攻擊而不留下痕跡。比如,若某個(gè)數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品,是基于單包解析機(jī)制進(jìn)行的,則對(duì)于超過1.5K的SQL語(yǔ)句無(wú)法記錄或僅記錄了前1.5K,則攻擊者可以首先加入1.5K長(zhǎng)的注釋,然后再寫語(yǔ)句,這樣會(huì)發(fā)生漏審或被審計(jì)下來(lái)的信息無(wú)效。
多語(yǔ)句無(wú)法有效分割
多語(yǔ)句是SQL Server上的一個(gè)特定情況。在其它的數(shù)據(jù)庫(kù)管理系統(tǒng)中,語(yǔ)句之間都有明確的分割標(biāo)識(shí);而在SQL Serve中語(yǔ)句之間可以沒有明確的分隔符。SQL Server會(huì)將這些語(yǔ)句不加分割地組織在一個(gè)數(shù)據(jù)庫(kù)通訊包中發(fā)送;對(duì)于一些專業(yè)化程度不高的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品,會(huì)將這些語(yǔ)句作為一條語(yǔ)句審計(jì)下來(lái)。有效地實(shí)現(xiàn)多語(yǔ)句分割,需要非常專業(yè)的SQL解析技術(shù)。一些簡(jiǎn)單的方法,比如用select、use 、set這樣的關(guān)鍵字來(lái)進(jìn)行語(yǔ)句分割,稍微復(fù)雜的情況就不好處理了。
即使采用稍微復(fù)雜一些的技術(shù),比如正則表達(dá)式,也很難做到準(zhǔn)確切割;非專業(yè)化的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品都存在這個(gè)缺陷。 對(duì)無(wú)法準(zhǔn)確切割多語(yǔ)句的缺陷,在不同的產(chǎn)品中表現(xiàn)不同,所造成的審計(jì)問題也不同,但大體可以總結(jié)為如下幾點(diǎn):
(1)在審計(jì)記錄中,不能準(zhǔn)確記錄下每條語(yǔ)句的SQL操作類型,從而造成一些高危操作不能有效地被識(shí)別或告警,比如drop、truncate這些語(yǔ)句。
(2)在審計(jì)記錄中,不能準(zhǔn)確記錄下每條SQL語(yǔ)句的數(shù)據(jù)庫(kù)對(duì)象,從而造成對(duì)敏感對(duì)象的訪問不能有效地被識(shí)別或告警。
(3)在審計(jì)記錄中,不能準(zhǔn)確地記錄每條語(yǔ)句是否執(zhí)行成功;比如多條語(yǔ)句中第一條語(yǔ)句執(zhí)行成功,后面的語(yǔ)句執(zhí)行失敗了,往往會(huì)被整體記錄為一個(gè)結(jié)果,往往記錄的結(jié)果是成功。
(4)在審計(jì)記錄中,不能準(zhǔn)確地反饋出每條語(yǔ)句造成的影響行數(shù),從而也無(wú)法觸發(fā)基于影響行的安全策略;往往記錄下來(lái)的都是第一條語(yǔ)句的影響行,其余語(yǔ)句的影響行都被忽略掉了。
數(shù)據(jù)庫(kù)對(duì)象解析錯(cuò)誤
數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品中一個(gè)重要需求是要有效記錄下來(lái)SQL語(yǔ)句的操作類型、訪問對(duì)象;根據(jù)這些操作類型和訪問對(duì)象,審計(jì)產(chǎn)品可以有效地制訂告警策略,可以有效地根據(jù)操作類型、訪問對(duì)象進(jìn)行事后的追蹤與檢索。我國(guó)相關(guān)部門的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品標(biāo)準(zhǔn)中要求:應(yīng)對(duì)數(shù)據(jù)庫(kù)網(wǎng)絡(luò)訪問對(duì)象的名稱進(jìn)行準(zhǔn)確審計(jì),包括數(shù)據(jù)庫(kù)服務(wù)器名稱、IP名稱、數(shù)據(jù)庫(kù)名稱、表、視圖、序列、包、存儲(chǔ)過程、函數(shù)、庫(kù)、索引和觸發(fā)器等。
參數(shù)審計(jì)錯(cuò)誤
參數(shù)綁定是數(shù)據(jù)庫(kù)編程中常用的一種方法,通過這種方法,數(shù)據(jù)庫(kù)系統(tǒng)可以減少編譯次數(shù),快速執(zhí)行,提升效率;但這種編程方法將對(duì)數(shù)據(jù)庫(kù)的審計(jì)帶來(lái)挑戰(zhàn),在筆者所見到的若干數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品中,在這種情況下都出了不少的錯(cuò)誤。有的是漏審了語(yǔ)句,有的是記錄下了操作的語(yǔ)句,但將具體執(zhí)行時(shí)所使用的參數(shù)記錯(cuò)了或漏記了。這些缺陷對(duì)于審計(jì)產(chǎn)品無(wú)疑很是致命。
除了以上列舉的4個(gè)常見缺陷,在實(shí)際情況下還有一些常見的缺陷:
錯(cuò)誤的應(yīng)答結(jié)果,特別是影響行數(shù)解析不正確
對(duì)于SQL操作是否成功,是數(shù)據(jù)庫(kù)審計(jì)的基本需求;對(duì)數(shù)據(jù)庫(kù)操作讀取或影響了多少行是用戶的實(shí)際需求。但SQL操作成功與否的準(zhǔn)確記錄,需要仰仗SQL語(yǔ)句的合理切割和句柄的準(zhǔn)確追蹤及對(duì)返回結(jié)果集的完全解析;大多數(shù)數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品在多語(yǔ)句情況,或者通過FETCH操作批量獲取等環(huán)節(jié)下,無(wú)法準(zhǔn)確獲得查詢執(zhí)行的正確性以及影響行數(shù)。
充滿失真率的應(yīng)用用戶關(guān)聯(lián)
市場(chǎng)上的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品大多數(shù)都宣傳支持三層關(guān)聯(lián)審計(jì),實(shí)現(xiàn)SQL語(yǔ)句與業(yè)務(wù)用戶的關(guān)聯(lián)。這種基于三層關(guān)聯(lián)審計(jì)的技術(shù),是通過http協(xié)議中的參數(shù)與SQL語(yǔ)句中的參數(shù)的匹配,以及時(shí)間的匹配來(lái)完成的,屬于模糊匹配。這種方法在http參數(shù)經(jīng)過加工后或基于邏輯判斷后再發(fā)出SQL語(yǔ)句,也即SQL語(yǔ)句的參數(shù)與http參數(shù)沒有直接的匹配關(guān)系時(shí)將完全失效;在高并發(fā)時(shí)更是一個(gè)災(zāi)難。這種方法的準(zhǔn)確率往往很難超過80%。
不夠?qū)I(yè)化的審計(jì)界面
這個(gè)問題主要是針對(duì)基于網(wǎng)絡(luò)審計(jì)而發(fā)展來(lái)的數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品,這種產(chǎn)品由于在設(shè)計(jì)之初就不是專門面向數(shù)據(jù)庫(kù)用戶的,因此并未按照數(shù)據(jù)庫(kù)的訪問類別、會(huì)話追蹤、數(shù)據(jù)庫(kù)對(duì)象層次進(jìn)行界面組織,造成這類產(chǎn)品的界面極其不易使用。
過度冗余的審計(jì)信息存儲(chǔ)
很多應(yīng)用系統(tǒng)會(huì)采用動(dòng)態(tài)拼接SQL語(yǔ)句的方式來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問;這會(huì)造成大量SQL語(yǔ)句語(yǔ)法形式相同而僅僅是SQL語(yǔ)句中的參數(shù)值不同的語(yǔ)句。當(dāng)前的很多審計(jì)產(chǎn)品將這些語(yǔ)句進(jìn)行重復(fù)地記錄和存儲(chǔ),造成了審計(jì)效率的低下,存儲(chǔ)設(shè)備的浪費(fèi),并會(huì)對(duì)SQL語(yǔ)句的分析和排查效率造成致命影響。
作為國(guó)內(nèi)專業(yè)的數(shù)據(jù)庫(kù)安全廠商,安華金和數(shù)據(jù)庫(kù)審計(jì)產(chǎn)品(DBAudit)可以有效避免以上8類缺陷常見缺陷。