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