資料庫安全漏洞分析

  資料庫漏洞的存在有多種方式,由於每一個現實的場景由多維組合而成,因此資料庫漏洞對應也可以從不同角度歸類劃分。這種分類將更有利於我們掌握對每種漏洞的防護技術。

  ‍‍‍‍‍‍安華金和資料庫安全實驗室主要從以下九個角度對資料庫漏洞進行分類介紹:‍‍‍‍

  ‍‍1.從漏洞作用範圍劃分

  ‍‍‍‍遠端漏洞:攻擊者可以利用並直接通過網路發起對資料庫攻擊的漏洞。這類漏洞危害極大,攻擊者能隨心所欲的通過此漏洞危害網路上可辨識的資料庫。此類漏洞為黑客利用漏洞的主力。

  ‍‍‍‍‍‍本地攻擊:攻擊者必須在本機擁有訪問許可權的前提下才能發起攻擊的漏洞。比較典型有本地許可權提升漏洞,這類漏洞在資料庫中廣泛存在,能讓普通使用者獲得最高管理員許可權。‍‍

  ‍‍‍‍2. 從漏洞危害等級劃分

  ‍‍‍‍漏洞危害等級主要按照CVE的評分來劃分,分為三個檔次:0-3LOW;4-6MEDIUM、7-10HIGH。 洞的危害等級劃分是根據一個漏洞對資料庫造成什麼影響來劃分的。對資料庫的響的機密性、安全性、可用性影響越大威脅等級越高,反之危險等級越低。舉例說明:

  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開啟CMDwindows即可通過資料庫賬號來操控作業系統,從而奪取整個作業系統的過程。

  ‍‍‍‍ 認證繞過 。通常利用認證系統‍‍‍‍‍‍的漏洞不用受權就能進入系統。通常認證繞過都是為許可權提升或直接的資料訪問服務的。‍‍

  ‍‍‍‍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漏洞。還沒有公開的漏洞,在私下交易中的。這類漏洞通常是最危險的,往往是有組織黑客所採用的。