數(shù)據(jù)安全治理關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解
數(shù)據(jù)安全治理之API監(jiān)測系統(tǒng) ,解決API接口安全問題【安華金和】
新一代數(shù)據(jù)庫脫敏技術(shù),為敏感數(shù)據(jù)建立保護(hù)盾!
數(shù)據(jù)庫脫敏系統(tǒng)與金融行業(yè)案例解讀
數(shù)據(jù)安全治理建設(shè)思路的著力點(diǎn)——數(shù)據(jù)安全咨詢服務(wù)【安華金和】
數(shù)據(jù)庫防火墻功能有哪些?-數(shù)據(jù)安全-安華金和
數(shù)據(jù)安全關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解【安華金和】
中國數(shù)據(jù)安全治理落地指導(dǎo)書籍《數(shù)據(jù)安全治理白皮書5.0》正式發(fā)布(附下載)
在Oracle數(shù)據(jù)庫中觸發(fā)器被大量使用,這是因?yàn)闊o論是在功能還是安全性方面觸發(fā)器相對于Oracle數(shù)據(jù)庫本身都有著眾多優(yōu)勢。觸發(fā)器可以實(shí)現(xiàn)比數(shù)據(jù)庫自身標(biāo)準(zhǔn)功能更精細(xì)、更復(fù)雜的數(shù)據(jù)庫控制能力和更便利的數(shù)據(jù)同步功能。在數(shù)據(jù)同步方面,觸發(fā)器可以限制對表的修改、自動(dòng)派生列、強(qiáng)制數(shù)據(jù)的一致性等。在強(qiáng)化安全方面,觸發(fā)器可以在修改數(shù)據(jù)庫數(shù)據(jù)前對操作用戶的權(quán)限進(jìn)行驗(yàn)證、對數(shù)據(jù)庫做操作限制、審計(jì)用戶操作的數(shù)據(jù)庫語句、實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)完整性規(guī)則等一系列安全防護(hù)措施。
觸發(fā)器不僅解決很多功能和安全上的需要,而且使用范圍廣泛。Oracle幾乎可以為所有事件創(chuàng)建觸發(fā)器,其中包括DML操作,如INSERT、DELETE和UPDATE,而且可以將這些操作設(shè)定為事件前或事件后觸發(fā)。甚至可以為用戶登錄、用戶被刪除或表被截?cái)嘀惖奶厥馐录x觸發(fā)器。
剖其本質(zhì)觸發(fā)器是一種由sql語言及其擴(kuò)展語言編寫成的隱式存儲(chǔ)過程,它和存儲(chǔ)過程唯一不同的是觸發(fā)器是由一個(gè)事件來啟動(dòng)運(yùn)行的,并不是被用戶直接調(diào)用的。由于觸發(fā)器的存儲(chǔ)過程是一個(gè)隱式的存儲(chǔ)過程,所以很多人認(rèn)為觸發(fā)器本身無法接受用戶的輸入,就算有注入漏洞也難以被利用。其實(shí)則不然,雖然在注入方面加大了一定的利用難度,但漏洞依舊可以被利用。在Oracle的演進(jìn)過程中有很多著名的觸發(fā)器漏洞。例如: SDO_GEOM_TRIG_INS1、USER_SDO_LRS_METADATA、SDO_CMT_CBK_TRIG、CDC_DROP_CTABLE_BEFORE、SDO_DROP_USER_BEFORE等等。觸發(fā)器的漏洞和觸發(fā)器本身一樣也是由特定事件啟動(dòng)的,觸發(fā)器中的漏洞猶如Oracle中一顆定時(shí)炸彈一般,一旦被黑客引爆就可以取得數(shù)據(jù)庫的控制權(quán)、從而獲取敏感數(shù)據(jù)、主機(jī)操作權(quán)限甚至整個(gè)內(nèi)網(wǎng)環(huán)境的控制權(quán)。
觸發(fā)器是由sql及其擴(kuò)展語言編寫而成的,所以安全問題往往也發(fā)生在sql代碼上。正是因?yàn)檫@一原因,如果想利用觸發(fā)器中的漏洞入侵?jǐn)?shù)據(jù)庫,也需要滿足sql注入漏洞的3個(gè)要素:1.通過觸發(fā)器是否可以用低權(quán)限用戶拿到高權(quán)限執(zhí)行權(quán)限。2.是否存在sql注入點(diǎn),可以注入存在惡意代碼的參數(shù)。3.怎么把惡意變量注入到觸發(fā)器中。
觸發(fā)器提供的權(quán)限是定義它自身用戶的權(quán)限,也就是說觸發(fā)器都是定義者權(quán)限。因此具有特殊權(quán)限的賬號下的觸發(fā)器被入侵的風(fēng)險(xiǎn)性更大,一但這些觸發(fā)器存在安全問題,則黑客可能利用這些權(quán)限獲得整個(gè)數(shù)據(jù)庫的控制權(quán)。這些高風(fēng)險(xiǎn)賬號系統(tǒng)自帶的有MDSYS、SYS、OLAPSYS、DBSNMP、ORDSYS、CTXSYS等。雖然這些賬號權(quán)限各不相同,但都可以被用來對低權(quán)限用戶進(jìn)行一定程度的提權(quán),甚至通過漏洞之間的相互配合拿到DBA權(quán)限。
有些人認(rèn)為觸發(fā)器無法接受直接輸出的參數(shù),同時(shí)也無法被直接調(diào)用,所以觸發(fā)器漏洞很難被利用。但事實(shí)確是觸發(fā)器雖然無法直接調(diào)用,無法直接接受參數(shù),但它可以間接的接受參數(shù)。
我們一起看一個(gè)簡化的例子。圖中Get_user_password創(chuàng)建了一個(gè)惡意函數(shù)。其中觸發(fā)器是由SYS用戶定義的,在執(zhí)行觸發(fā)器的時(shí)候會(huì)局部獲取SYS賬號的權(quán)限。在這一例子中觸發(fā)器的作用是在表A插入內(nèi)容的時(shí)候,把插入的內(nèi)容同步到B。用戶輸入的變量會(huì)從表A通過觸發(fā)器的改寫流入表B中。而如果向表A的變量插入惡意語句,這些惡意語句則會(huì)被帶入到觸發(fā)器中,被觸發(fā)器所擁有的高級權(quán)限所執(zhí)行,最終導(dǎo)致數(shù)據(jù)庫被入侵。
接下來我們一起看下具體的入侵過程:首先我們創(chuàng)建了一個(gè)存在惡意語句的函數(shù)GET_user_password。其中核心語句是 select password from sys.user$where name ==’’SYS’’’;(獲取sys用戶的密碼散列)。由于我們拿到的只是一個(gè)低權(quán)限用戶,雖然創(chuàng)建了這個(gè)存在惡意語句的函數(shù),但并不能執(zhí)行該函數(shù)。接下來我們找到一個(gè)高權(quán)限用戶定義的觸發(fā)器,下面就是想辦法把GET_user_password傳輸?shù)接|發(fā)器中。上文我們已經(jīng)說過由于觸發(fā)器是不接受參數(shù)的所以無法直接寫入?yún)?shù),但我們可以利用觸發(fā)器會(huì)把表A中插入的輸入同步插入到表B中這個(gè)原理把惡意代碼注入到觸發(fā)器中。在這一步中由于觸發(fā)器是高權(quán)限用戶,則可以對select password from sys.user$where name ==’’SYS’’’;進(jìn)行查詢,從而最終用低權(quán)限用戶獲取SYS的密碼散列,最后通過一定的算法可以把密碼散列轉(zhuǎn)換成明文,從而獲取SYS賬號的權(quán)限。
以上是一個(gè)觸發(fā)器漏洞最簡單的利用過程,當(dāng)然還有更多更復(fù)雜的利用方式,今后安華金和數(shù)據(jù)庫攻防實(shí)驗(yàn)室會(huì)進(jìn)一步和大家分享。通過以上實(shí)例說明,觸發(fā)器漏洞絕對是可以被利用的,只是比存儲(chǔ)過程或函數(shù)中的漏洞更加難以利用,更加難以被發(fā)現(xiàn)而已。但實(shí)際造成的危害絕不比任何數(shù)據(jù)庫上存在的其他漏洞類型造成的危害小。
觸發(fā)器漏洞造成的危害主要可以分為三個(gè)級別:
1.對數(shù)據(jù)庫自身及其數(shù)據(jù)庫中存儲(chǔ)的敏感信息造成入侵;
2.對數(shù)據(jù)庫所在主機(jī)及其主機(jī)中存在的關(guān)鍵信息造成入侵;
3.對數(shù)據(jù)庫所在的網(wǎng)絡(luò)環(huán)境及網(wǎng)絡(luò)中其他信任它的主機(jī)造成入侵。
每一個(gè)級別都會(huì)以上一個(gè)級別為依托,從觸發(fā)器漏洞這一個(gè)點(diǎn)逐漸深入,從數(shù)據(jù)庫到本地主機(jī)再到入侵整個(gè)網(wǎng)絡(luò)和網(wǎng)絡(luò)上的主機(jī)。
對于Oracle觸發(fā)器的漏洞防護(hù)同樣要追本溯源,從源頭來治理。所以對于觸發(fā)器漏洞帶來的威脅防護(hù)思路主要是攔和改。
攔,是指通過數(shù)據(jù)庫防火墻等數(shù)據(jù)庫安全產(chǎn)品對訪問數(shù)據(jù)庫的會(huì)話中存在的惡意字段進(jìn)行過濾和糾察,使得惡意入侵行為被阻斷在數(shù)據(jù)庫防火墻層面,無法到達(dá)數(shù)據(jù)庫中。改,則是通過修改傳入到數(shù)據(jù)庫中的包的內(nèi)容去掉其中可能的惡意信息。兩種方式的區(qū)別在于是否中斷整個(gè)會(huì)話。雖然方式有所不同,但都會(huì)達(dá)到防止入侵?jǐn)?shù)據(jù)庫的目的。
最后也是最重要的就是數(shù)據(jù)庫防火墻部署的位置。數(shù)據(jù)庫防火墻必須被部署于數(shù)據(jù)庫前,且保證數(shù)據(jù)庫防火墻是進(jìn)入數(shù)據(jù)庫的唯一通路。這樣才能有效防止入侵者利用其他手繞過數(shù)據(jù)庫防火墻直接訪問數(shù)據(jù)庫,從而真正起到對數(shù)據(jù)庫的安全防護(hù)作用。