首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 資料庫加密爆漏洞:密碼雜湊演算法弱、大小寫不敏感、幾分鐘可破解

     編輯:Oracle 資料庫相關知識

漏洞背景

  • 時間:2005 年 10 月 (SANS Institute Joshua Wright & 倫敦大學 Carlos Sid 發現)
  • 影響版本:Oracle 10g R1/R2、9i、8i (11g 前均受影響)
  • 核心問題:密碼雜湊演算法 **過於簡單、無 Salt、大小寫不敏感**、允許離線暴力破解。

技術細節

  1. 雜湊演算法:SHA-1(UPPER(username) || password) — **無 Salt、大寫化用戶名**、單次 SHA-1,**極易建立 Rainbow Table**。
  2. 大小寫不敏感:密碼儲存前轉大寫,**搜尋空間縮減 52→26 (字母) + 10 (數字) = 36 字元集**。
  3. 無帳號鎖定/延遲機制:可無限制離線嘗試。
  4. 預設帳號弱密碼:SCOTT/TIGER, SYS/CHANGE_ON_INSTALL, SYSTEM/MANAGER 等廣為人知。

破解實測

研究者指出:**普通硬體、幾分鐘內即可破解大多數用戶密碼**。工具:orabf (Oracle Brute Force)、Cain & Abel、John the Ripper (支援 Oracle 10g 格式)。

Oracle 官方回應與修正時間軸

版本改進狀態
10g R2 (10.2.0.4+)引入 **案例敏感密碼** (可選),但預設仍不敏感補丁
11g R1 (11.1)**預設啟用案例敏感**、SHA-1 + Salt (10 bytes)、支援 SEC_CASE_SENSITIVE_LOGON重大改進
11g R2 (11.2)新增 PASSWORD_VERSIONS 欄位 (10G/11G/12C),支援漸進式遷移成熟
12c R1 (12.1)**PBKDF2 (SHA-512, 4096 iterations)**、**強制案例敏感**、SEC_CASE_SENSITIVE_LOGON 參數廢除現代標準
18c/19c/21c支援 **SCRAM-SHA-256/512**、EXCLUSIVE_MODE 禁用舊版驗證最新

緊急緩解措施 (針對舊版無法升級環境)

  1. 強制長密碼:Profile 設定 PASSWORD_VERIFY_FUNCTION 要求 **≥ 12 字元、含大小寫/數字/特殊符號**。
  2. 縮短密碼壽命:PASSWORD_LIFE_TIME = 60 (天),強制定期輪換。
  3. 啟用帳號鎖定:FAILED_LOGIN_ATTEMPTS = 5, PASSWORD_LOCK_TIME = 1 (天)。
  4. 網路加密:SQLNET.ENCRYPTION_SERVER = REQUIRED, SQLNET.ENCRYPTION_TYPES_SERVER = (AES256) — 防止傳輸中竊聽雜湊。
  5. 稽核登入失敗:AUDIT SESSION WHENEVER NOT SUCCESSFUL; 監控暴力嘗試。
  6. 禁用預設帳號:ALTER USER scott ACCOUNT LOCK; 等。

現代最佳實踐 (12c+)


-- 1. 確認密碼版本 (應為 12C)
SELECT username, password_versions FROM dba_users WHERE account_status = 'OPEN';

-- 2. 僅允許 12C 驗證 (禁用 10G/11G 回退)
ALTER SYSTEM SET ALLOWED_LOGON_VERSION_SERVER = 12C SCOPE=SPFILE;
-- 12c 預設 12C,19c 可設 12C/18C

-- 3. 密碼驗證函數 (範例)
CREATE OR REPLACE FUNCTION verify_complex (
    username VARCHAR2, password VARCHAR2, old_password VARCHAR2
) RETURN BOOLEAN IS
BEGIN
    IF LENGTH(password) < 12 THEN RAISE_APPLICATION_ERROR(-20001, '密碼至少 12 字元'); END IF;
    IF NOT REGEXP_LIKE(password, '[A-Z]') THEN RAISE_APPLICATION_ERROR(-20002, '需含大寫'); END IF;
    IF NOT REGEXP_LIKE(password, '[a-z]') THEN RAISE_APPLICATION_ERROR(-20003, '需含小寫'); END IF;
    IF NOT REGEXP_LIKE(password, '[0-9]') THEN RAISE_APPLICATION_ERROR(-20004, '需含數字'); END IF;
    IF NOT REGEXP_LIKE(password, '[!@#$%^&*]') THEN RAISE_APPLICATION_ERROR(-20005, '需含特殊符號'); END IF;
    RETURN TRUE;
END;
/
-- 套用至 Profile
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION verify_complex;

結語

**Oracle 10g/9i 密碼雜湊機制在現代標準下極度脆弱**。**唯一徹底解法:升級至 12c+ 並啟用 12C/18C 專用驗證**。舊版環境必須疊加 **長密碼、短壽命、帳號鎖定、網路加密、稽核** 多層防禦,並規劃遷移時間表。資料庫安全**不止於修補程式,更在於架構升級**。

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