數據庫漏洞的存在有多種方式,因爲每個現實的場景由多維組合而成,所以數據庫漏洞對應也能夠從不一樣角度歸類劃分。這種分類將更有利於咱們掌握對每種漏洞的防禦技術。html
數據庫安全實驗室主要從如下九個角度對數據庫漏洞進行分類介紹:linux
1.從漏洞做用範圍劃分web
遠程漏洞:攻擊者能夠利用並直接經過網絡發起對數據庫攻擊的漏洞。這類漏洞危害極大,攻擊者能爲所欲爲的經過此漏洞危害網絡上可辨識的數據庫。此類漏洞爲黑客利用漏洞的主力。sql
本地攻擊:攻擊者必須在本機擁有訪問權限的前提下才能發起攻擊的漏洞。比較典型有本地權限提高漏洞,這類漏洞在數據庫中普遍存在,能讓普通用戶得到最高管理員權限。shell
2. 從漏洞危害等級劃分數據庫
漏洞危害等級主要按照CVE的評分來劃分,分爲三個檔次:0-3(LOW);4-6(MEDIUM)、7-10(HIGH)。 洞的危害等級劃分是根據一個漏洞對數據庫形成什麼影響來劃分的。對數據庫的響的機密性、安全性、可用性影響越大威脅等級越高,反之危險等級越低。舉例說明:windows
CVE-2006-1705危險等級是低。它對數據庫系統文件無任何影響,可能會致使數據庫某些配置文件被修改,對數據庫運行無任何影響。安全
CVE-2006-1871危險等級是中。它只是極可能形成某些信息泄露,有可能致使數據庫某些配置文件被修改,可能致使數據庫性能降低或小概率出現斷連接。服務器
CVE-2006-3702危險等級是高。它能夠致使全部數據庫系統文件泄露,數據庫徹底被破壞,可能致使數據庫完全宕機。網絡
3. 從受影響系統劃分
現有的操做系統多種多樣,而且每種系統對應多個版本。操做系統主要分爲如下五類:dos 系統、windows 系統、unix 系統、linux 系統和其餘操做系統。因爲漏洞注入點地址和操做系統具體版本有着直接的關係,因此須要按照操做系統的具體版原本劃分。以oracle爲例,因爲不一樣的操做系統對緩衝區溢出的防守機制不一樣,致使這類漏洞基本不存在跨平臺的可能。
4.從漏洞的危害範圍劃分
漏洞危害是指漏洞被利用後形成的各類危害。本文的危害是指對數據庫的直接危害或利用數據庫對其餘系統形成的危害。這些危害能夠分爲三類:
危害數據庫自身,這類漏洞主要是對數據庫自身進行攻擊。這類漏洞在下文中的「5. 從黑客入侵數據庫的技術劃分」一節中有詳細講解。
危害數據庫所在服務器,這類漏洞經過數據庫對服務器進行攻擊。其中手段可分爲:經過pl/SQL運行OS命令、經過JAVA運行OS命令、直接經過任務調度程序運行OS命令、使用ALTER SYSTEM運行OS命令,在oracle的某些版本中能夠利用oracle編譯本地pl/SQL應用程序的方式來運行OS命令。
危害數據庫所在系統的文件系統,這類漏洞經過數據庫對服務器上的文件系統作攻擊。其中手段可分爲:使用 UTL_FILE包訪問文件系統、用JAVA訪問文件系統、利用操做系統環境變量訪問文件系統。
危害數據庫所在網絡上的其餘平臺,這類漏洞經過數據庫對網絡上的其餘數據庫和服務進行入侵。
5. 從黑客入侵數據庫技術劃分
5.1 SQL注入
SQL本文說所的SQLSQL注入不是web端的,而是針對數據庫自身的SQLSQL注入漏洞。二者差別很大。 pl/SQL注入的思想很是簡單,
在正常的sql語句中經過嵌入、註釋、轉義符等手段加入針對數據庫漏洞或數據庫設置缺陷的畸形字符串或其餘畸形輸入。經過單次或屢次這種畸形輸入逐步獲取數據庫中更高權限,最終獲取數據庫中敏感信息或直接奪取數據庫DBA權限。進而可能對數據庫所在的網絡環境和本地服務器形成危害。
手段具體分爲:
代碼注入。代碼注入攻擊多在支持多條SQL語句執行的數據中存在。它是經過黑客在正常語句中加入惡意EXECUTE命令完成攻擊的。
函數調用注入。函數調用注入是代碼注入的變體,但確是整個SQL注入的核心。它利用數據庫存在漏洞將惡意語句注入其中。具體手法分爲:
注入select /delete/insert/update語句
注入函數
注入匿名pl/SQL塊
遊標注入
利用觸發器
lateral提權技術
其中每種技術中還有細分,例如lateral提權技術中最著名的是CREATE ANT TRIGGER 權限提DBA、CREATE ANT VIEW 權限提DBA、EXECUTE ANY PROCEDURE權限提DBA、CREATE PROCEDUER 權限提DBA。
緩衝區溢出注入。這個緩衝區溢出和下文的緩衝區溢出不是一種。這種緩衝區溢出是數據庫系統函數中某些參數被傳入了超過參數長度限制的值,而引起的緩衝區溢出。
針對SQL操做的注入。最多見的是利用where子句修改SQL語句返回不一樣的結果集,來達到獲取數據庫敏感信息的目的。
5.2 緩衝區溢出
緩衝區溢出:這裏所說的緩衝區溢出是指源緩衝區的數據向小於自身位數的緩衝區複製數據時,超越目標緩衝區的位數邊界,而且數據庫未對存入數據進行邊界判斷,最終致使目標緩衝區爆滿。目標緩衝區內存改變程序控制流、奪取操做系統、禁止訪問等多種結果。緩衝區溢出主要能夠分紅四種:靜態數據溢出、棧溢出、堆溢出和格式化串。
手段具體分爲:
棧溢出 。緩衝區溢出的一種主要是經過利用截取函數返回值來進行棧溢出。方式主要分爲兩種,一種是經過緩衝區溢出改變函數邏輯流程;另外一種方式是經過緩衝區溢出改變函數返回地址。其中比較常見的爲第二種。
堆溢出 。緩衝區溢出的一種,利用原理相似棧溢出,但因爲堆中地址是動態分配的,沒法準肯定位,因此黑客要利用堆溢出須要經過DWORD SHOOT技術來對堆進行掃描,獲取堆溢出中可利用的地址。
靜態數據區溢出。靜態數據區域存放連續的全局變量和未初始化的靜態變量,緩衝區在這發生溢出稱爲靜態數據區溢出。
格式化串 。格式化串漏洞最顯著的例子,就是在*printf()系列函數中按照必定的格式對數據進行輸出。黑客主要是利用printf()系列函數有三條特殊的性質,首先,第一個能夠被利用的性質是:*printf()系列函數的參數的個數是不固定的。其次,利用*printf()的一個特殊的格式符%n,黑客就向內存中寫入exploit。再次,利用附加格式符控制跳轉地址的值。
5.3 其餘
弱口令 。一般指容易被別人猜想到或被破解工具破解的口令均爲弱口令,其中很大一部分是數據庫默認口令,其中有一部分是由於缺省密碼產生的。
撞庫。經過已收集到的在其餘服務中註冊的用戶名和密碼,對目標數據庫進行訪問嘗試。因爲不少人習慣用相同密碼和帳號,所以成功登錄到目標數據庫的可能性大大提升,達成盜取大量敏感信息的目的。
暴力破解。經過數據字典(密碼庫)對數據庫的用戶名進行碰撞,最終碰出能夠用於訪問數據庫的用戶和密碼組合。
6. 從數據庫漏洞成因劃分
輸入驗證錯誤。這種錯誤主要來源於字符串、包等輸入值缺少正確合理的驗證,從而致使畸形的輸入值進入數據庫系統函數中,對數據庫形成不可預計的後果。
邊界條件錯誤 。因爲數據庫屬於大型複雜的軟件,軟件內部函數調用過於複雜,有時會出現對某個傳入值的邊界,不一樣地方限制不一樣,可能對數據庫形成不良影響。
緩衝區溢出錯誤 。因爲數據庫中某些函數中的參數值缺少邊界限制和檢查,從而暴露出的數據庫漏洞。
訪問驗證錯誤 。訪問驗證錯誤主要在數據庫的網絡監聽上,黑客經過發送欺詐數據包,來騙取數據庫重要信息。
意外條件錯誤 。因爲數據庫中邏輯比較複雜,某些不多被觸發的邏輯分支因爲軟件週期等緣由,未被及時發現而致使的數據庫漏洞。
其餘錯誤 。除了以上五類緣由錯誤致使的數據庫漏洞,大部分其餘錯誤是因爲用戶在使用數據庫時,未能按照數據庫官方要求進行操做和配置,或者是數據庫自己的設計缺陷所引起的漏洞。
7. 從漏洞利用的結果劃分
越權訪問 。訪問本來不可訪問的數據,包括讀和寫。這一條一般是攻擊者的核心目的,並且可形成很是嚴重的災難(如銀行數據被人可寫)。
提權 。經過越權等方式,對一個低權限用戶提高權限,一步一步直到提高爲DBA權限。利用提權後的帳號竊取數據庫中核心數據。
拒絕服務 。攻擊者強制目標數據庫中止提供服務,是黑客經常使用的攻擊手段之一。其中數據庫端口進行的消耗性攻擊只是拒絕服務攻擊的一小部分,凡是使數據庫服務被暫停甚至所處主機死機,都屬於拒絕服務攻擊。
奪取操做系統 。當黑客經過網絡對數據庫進行攻擊,利用緩衝區漏洞的攻擊會經過劫持被入侵函數中的棧中的函數返回值,來奪取函數控制,跳轉到黑客編寫的shellcode。當shellcode打開CMD(windows)便可經過數據庫帳號來操控操做系統,從而奪取整個操做系統的過程。
認證繞過 。一般利用認證系統的漏洞不用授權就能進入系統。一般認證繞過都是爲權限提高或直接的數據訪問服務的。
8. 從數據庫存漏洞的位置劃分
因爲不一樣數據庫相似功能的名稱不一樣本文依oracle爲例說明:按照漏洞位置能夠分爲TNS(監聽)漏洞 、Aurora GIOP server漏洞、XDB組件漏洞、DBMS_CDC_IMPDP漏洞、LT組件漏洞、DBMS_CDC_SUBSCRIBE漏洞、DBMS_CDC_ISUBSCRIBE漏洞、MDSYS.SDO_GEOM_TRIG_INSI漏洞、SYS.CDC_DROP_CTABLE_BEFORE漏洞、DBMS_SCHRDULER漏洞、UTL_FILE漏洞、Data Redaction漏洞、審計漏洞等。
9. 從漏洞產生的時序上劃分
已發現好久的漏洞 。數據庫廠商已經發布補丁或修補方法,不少人已經知曉。這類漏洞一般不少人已經進行了修改,宏觀上看,危害較小。
剛發現的漏洞。數據庫廠商剛發佈補丁或修補方法,知道的人還很少。相對於上一種漏洞其危害性較大,若是此時出現了蠕蟲或傻瓜化的利用程序,那麼會致使大批數據庫受到攻擊。這也是通常黑客最多利用的漏洞。
0day漏洞。尚未公開的漏洞,在私下交易中的。這類漏洞一般是最危險的,每每是有組織黑客所採用的。