久久无码激情床戏视频,视频一区二区免费,国产丰满乱子伦无码,被亲夹得我好爽一区二区,国产一区二区三区欧美亚洲,国内裸体无遮挡免费视频,丰满人妻熟妇av无码区,国产麻豆成人av,波多野结衣被三个小鬼

?
Oracle數據庫SQL注入淺析與防護建議
作者:思成 發布時間:2016-06-29

SQL注入是在信息安全領域一種常見的攻擊手段。但是大部分人理解的SQL注入就是通過把SQL命令插入到Web表單提交或在輸入域名、頁面請求時 加入的查詢字符串,最終達到欺騙服務器執行偏離預期的SQL命令。這種情況下的SQL注入,引發原因基本是網頁對用戶輸入的信息缺乏校驗而導致。

很多人認為只有網頁才可以進行 SQL 注入,才有注入點。這是一個普遍對SQL 注入的錯誤認識。SQL注入嚴格來講應該叫做數據庫SQL注入。SQL注入的最終目的是獲取數據庫中存儲的敏感信息。事實上,任何可以連接到數據庫并進行 SQL 操作的程序都可以實施數據庫SQL注入,比如數據庫客戶端、網頁、帶有數據庫操作的程序客戶端。在這三種程序中,網頁注入最為常見,這和網頁的開發途徑相 對多元化、某些網頁開發人員安全經驗低、網頁使用量大等相關。

網頁的SQL注入主要是通過改變網頁發給后臺數據庫的SQL查詢邏輯,查詢一些敏感信息。但往往網頁鏈接數據庫所用的用戶權限較低,并沒有查詢數據 庫中的敏感信息的權限,只能獲取和網站相關的信息。攻擊者想要獲取目標數據庫中的敏感信息就要想辦法利用數據庫自身的SQL注入漏洞對網站所用的低權限用 戶進行提權操作(低權限是針對數據庫權限來說的)。攻擊者拿到數據庫DBA權限后可以對數據庫中的敏感信息肆意獲取,給數戶帶來不可預知經濟以及名譽上的 損失。

網站漏洞給攻擊者入侵的機會,而數據庫漏洞則會真真切切的威脅您的數據安全。安華金和攻防實驗室綜合多年的數據庫攻防經驗與積累將在下文中以目前市場份額最大的Oracle數據庫為例介紹Oracle存在的SQL注入威脅和一些防護建議。

Oracle數據庫SQL注入漏洞集中存在于PL/SQL編寫的函數、存儲過程、包、觸發器中。Oracle存在SQL注入漏洞的一個重要原因是 PL/SQL定義的兩種調用權限導致(定義者權限和調用者權限)。定義者權限給了低權限用戶在特定時期擁有高權限的可能,這就給提權操作奠定了基礎。調用 者權限給了低權限用戶創建的SQL被高權限執行的可能。Oracle的SQL注入漏洞往往就是基于這兩種權限而被攻擊者所利用。

利用Oracle的SQL注入漏洞一般只進行兩類操作一類是越權操作,一類是提權操縱。提權操作是越權操作中的一種,由于可利用漏洞自身的限制,某 些漏洞只支持越權操作。Oracle經典的提權操作命令是GRANT DBA TO USER(給USER用戶DBA權限)。越權操作的經典命令是select password from sys.user$ where name = 'SYS';(查詢DBA用戶的密碼哈希散列)獲得散列后可以通過orabf等軟件離線破解出散列對應密碼明文。

攻擊者在Oracle注入點采用何種注入方式和獲取的數據庫賬號具備的權限有直接關系。大體在SQL注入上數據庫賬號可以被分為三類:

1.被獲取賬號具有較高數據庫權限

2.被獲取賬號具有創建函數或存儲過程的權限

3.被獲取賬號只具有連接權限(最低權限的賬號)

細分如下圖所示:

對于第一種情況,多指入侵的攻擊者具備 CREATE ANY TRIGGER權限或CREATE ANY VIEW權限甚至EXECUTE ANT PROCEDURE權限等較高權限。攻擊者如果具備EXECUTE ANT PROCEDURE權限,則可以直接執行許多SYS用戶以定義者模式創建的函數或存儲過程。只要利用SYS用戶創建的存儲過程執行GRANT DBA TO USER則就完成了提權到DBA的過程。

例如:CALL SYS.INITJVMAUX.EXEC(‘GRANT DBA TO USER’,TRUE);

攻擊者具有CREATE ANY TRIGGER權限的賬號,也很容易提升到DBA。主要是因為具有CREATE ANY TRIGGER權限可以創建任意架構(schema)的觸發器,包括 SYS。唯一的限制就是攻擊者不能對 SYS 用戶所擁有的對象創建觸發器。這種情況下攻擊者提權具體步驟可以分為以下三步:

1.發現階段,攻擊者要確定數據庫中的 DBA 用戶(Oracle并非只有一個DBA賬號,例如SYSTEM也是個DBA),并且確定哪些表或視圖攻擊者擁有 INSERT,UPDATE,或 DELETE 權限(屬于public)。

2.構造階段,攻擊者構造一個調用者權限的含有提全語句的存儲過程,想辦法讓觸發器調用存儲過程。

3.實施階段,攻擊者針對目標DBA用戶創建觸發器,觸發這個事件。觸發器將以擁有者的權限執行,讓觸發器使用一個調用者權限的存儲過程。執行存儲過程中的提權語句。

攻擊者具有CREATE ANY VIEW權限的賬號,提升到DBA也不難。方法類似CREATE ANY TRIGGER。攻擊者只要以數據庫管理員的模式創建一個視圖,然后讓一個具有高權限的用戶訪問這個視圖就可以達到提權的目的。

高權限用戶提權的方式往往不被漏洞所限制,所以用戶一定注意WEB訪問數據庫的賬號權限,過高的權限會給你的數據庫安全帶來極大隱患。Oracle 中,一個擁有CREATE ANY XXX權限的用戶很可能可以獲取數據庫DBA權限,所以除非業務必須否則絕不授予頁面鏈接數據庫用戶CREATE ANY XXX權限。

對于第二種情況,多指攻擊者具備的賬號具有創建存儲過程、函數等權限,那么攻擊者可以通過構造執行提權命令的具有調用者權限的存儲過程或函數,并通過具有 SYS(或其他高權限用戶)定義者權限的存儲過程或函數來調用它,從而實現提權。

攻擊者具有創建函數(create functions)的權限,那么等同于他們可以對數據庫進行任意操作。攻擊者可以將他們希望執行的 PL/SQL 代碼寫入他們創建的自定義函數(例如在自定義函數中加入GRANT DBA TO USER),并將該函數放入 SQL 語句。攻擊者只需要將他們創造的函數設置為調用者權限(AUTHID CURRENT_USER),這樣當高權限用戶所定義的存儲過程或函數調用攻擊者創建的函數時,真正執行攻擊者所創建的函數的人將是高權限用戶。同時攻擊 者定義的函數必須使用AUTONOMOUS+TRANSACTION 的編譯指示。這個編譯可以向編譯器表明,該函數將執行它子程序內部的事件,而與調用它的存儲過程或函數無關。最后只要在數據庫中尋找一個具有PUBLIC 執行權限的高權限存儲過程或函數即可。

對于第三種權限,同時也是最為普遍的情況,即當前數據庫用戶只具有較低的權限,并且不具備創建用戶自定義存儲過程或函數的權限。在該情況下,攻擊者主要有三種手段:

1.注入匿名PL/SQL塊

2.光標 snarf 攻擊

3.利用DBMS_JVM_EXP_PERMS邏輯漏洞,獲取JAVA執行權限,進而控制整個數據庫或整個系統

第一種手段攻擊者雖然不能創建存儲過程或函數,只能被限制執行SELECT或DML操作但攻擊者可以注入執行匿名塊的存儲過程或函數來達到提權的目 的。匿名塊是特殊的存儲過程,存在內存中,只能被調用一次。攻擊者可以透過這種手法繞過普通存儲過程的限制,可執行 SELECT、DML、DDL等。攻擊者需要的就是找到存在可以接納異常輸入的且不校驗用戶輸入的系統函數。

可能存在漏洞的函數基本具備以下4點特征:安全人員可以對具備以下特點的函數做一些調整(例如關閉public權限,防止低權限用戶調用)

1)問題函數中存在通過字符串連接符(||)連接函數,從而使注入可能正確實現。

2)問題函數中不能包含 OUT 參數,因為注入過程無法提供 OUT 類型參數。

3)問題函數中必須要返回一個簡單數據類型,復雜的數據類型可能會導致錯誤,因為復雜的數據類型在字符串拼接過程中不能被自動轉換成一個簡單的數據類型。

4)問題函數中必須要提供一種機制,使得攻擊者可以執行一定長度的 PL/SQL 語句。

第二種手段是David Litchfield提出的通過snarf入侵Oracle.主要出現在如果高權限用戶未正常或主動關閉顯式游標,會導致安全隱患。高權限用戶創建的游標 滯留在數據庫內存中,低權限用戶可以利用滯留的游標對Oracle發動攻擊。最常見的方式是攻擊者用loop循環猜測出懸掛游標。定位到懸掛游標后,回收 它并重新綁上高權限用戶,然后執行查詢,可以越權獲得高權限用戶才可訪問的敏感信息。

第三種手段是利用Oracle支持的JAVA。問題根源在于Oracle默認把DBMS_JVM_EXP_PERMS、DBMS_JAVA以及 DBMS_JAVA_TEST等危險package的執行權限直接授予了PUBLIC,導致任意用戶都可以執行JAVA程序,進而控制整個數據庫乃至整個 操作系統。這種類似問題不單出現在Oracle的JAVA服務中,在ORACLE 的其他服務中也存在類似漏洞。 如果業務不需要使用JAVA服務建議直接刪除即可。關閉無用服務是一種杜絕漏洞的好辦法。

無論是網站還是信息系統應用層都需要防SQL注入,與此同時數據庫更需要防SQL注入,數據的安全和數據庫的安全息息相關。面對數據庫SQL注入的威脅,安華金和數據庫攻防實驗室專家給出以下三點防護建議:

首先數據庫DBA限制住賬號權限是最關鍵的防范措施。攻擊者獲取不同級別的賬號進行后續的注入遇到的難度也不相同。賬號權限越低攻擊者越難利用其獲取數據庫中的敏感信息;

其次刪除不用的Oracle默認服務有助于減少能被攻擊者利用漏洞數量。

最后定期對數據庫進行升級也是非常必要的。定期升級有助于修復漏洞,減少漏洞數量。由于受穩定性限制等原因約束無法及時升級的數據庫也應該在數據庫和應用之間架設具有VPATCH(虛擬補丁)功能的數據庫防火墻。同時對敏感數據加密也是一種強化數據安全的有效手段。


?