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

Oracle 密碼儲存與驗證機制深度剖析:攻擊向量與三大防禦建議

     編輯:Oracle 資料庫基礎

前言

Oracle 佔據資料庫市場首位,但也擁有最多公開漏洞。資料庫密碼是核心防線,一旦被竊取將導致整個網路滲透。攻擊者主要採兩大策略:繞過驗證 (利用預設帳號、配置洩漏) 與 主動破解驗證 (暴力破解、協議分析、本地檔案竊取)。本文聚焦主動破解手法並給出防禦對策。

一、Oracle 身份驗證繞過與破解手法

1. 利用預設密碼與協議洩漏的密碼長度

  • 預設帳號: `DBSNMP/DBSNMP` (智能代理) 常被忽略修改,因需在資料庫與 `snmp_rw.ora` 兩處同步修改。
  • 登入封包洩漏長度: `AUTH_PASSWORD` 欄位長度與明文密碼長度高度相關。
    Oracle 11g 範例:`AUTH_PASSWORD` 96 字元 → 明文 16-30 字元;64 字元 → 1-15 字元。
    攻擊者可透過封包擷取縮小暴力破解空間,大幅降低成本。所有版本皆存在此特性。
AUTH_PASSWORD 96字元對應16-30位密碼

圖:AUTH_PASSWORD 96 字元預示密碼長度 16-30 位

AUTH_PASSWORD 64字元對應1-15位密碼

圖:AUTH_PASSWORD 64 字元預示密碼長度 1-15 位

2. 從本地配置檔竊取密文與金鑰

  • EM 配置檔: `$ORACLE_HOME/sysman/config/emoms.properties` 同時存放 `SYSMAN` 密文 (`oracle.sysman.eml.mntr.emdRepPwd`) 與金鑰 (`...emdRepPwdSeed`)。
  • 取得兩者即可用 DES 解密器還原明文密碼。
  • 若多帳號共用密碼,將導致 `SYS/SYSTEM` 等高權限帳號連鎖洩漏。
emoms.properties 密文與金鑰位置

圖:emoms.properties 中的密文與金鑰 (紅框標示)

DES 解密還原明文

圖:使用 DES 解密器還原 SYSMAN 明文密碼

  • 安裝日誌: `$ORACLE_HOME/cfgtoollogs/` 下多個安裝/配置日誌可能含明文或可逆密文密碼。
  • 3. 破解網路協議加密邏輯 (以 9i 為例,10g/11g 原理類似但更複雜)

    1. Client 發送 `SERVICE_NAME` → Listener 驗證服務存在。
    2. Client 發送用戶名 → Server 從資料庫讀取該用戶密碼雜湊值 (Hash)。
    3. Server 生成會話金鑰 (`AUTH_SESSKEY`):
      調用 `slgdt()` 取系統時間 (分、時、秒、毫秒) 與用戶雜湊值 XOR 運算產生 8 位元組明文。
      調用 `kzsrenc()` (DES ECB 模式) 加密明文 → 會話金鑰。
      再用用戶雜湊值加密會話金鑰 → `AUTH_SESSKEY` 發送給 Client。
    4. Client 用用戶雜湊值解密 `AUTH_SESSKEY` 取得會話金鑰。
    5. Client 用會話金鑰 (DES CBC 模式) 加密用戶輸入的明文密碼 → `AUTH_PASSWORD` 回傳 Server。
    6. Server 用會話金鑰解密 `AUTH_PASSWORD` 得明文密碼副本 → 雜湊比對資料庫存值 → 驗證通過。
    Client 發送 SERVICE_NAME
    Server 生成 AUTH_SESSKEY
    Client 回傳 AUTH_PASSWORD

    攻擊鏈: 嗅探 `AUTH_SESSKEY` + `AUTH_PASSWORD` → 暴力破解用戶雜湊值 (因時間熵較低) → 解密 `AUTH_SESSKEY` 得會話金鑰 → 解密 `AUTH_PASSWORD` 得明文密碼。

    二、三大防禦加固建議

    1. 定期輪換密碼,杜絕預設/弱密碼

    • 建立資料庫後立即修改所有預設帳號密碼 (`SYS`, `SYSTEM`, `DBSNMP`, `SYSMAN`, `OUTLN` 等)。
    • 強制密碼複雜度:長度 ≥ 12、大小寫、數字、特殊符號混合。
    • 啟用密碼驗證函數 (`UTLPWDMG.SQL` 或自訂 Profile) 強制歷史記憶、過期、鎖定策略。

    2. 鎖定無用帳號,檔案層面最小權限

    • 不使用 Enterprise Manager (EM) → 鎖定 `SYSMAN`、`DBSNMP`:
      `ALTER USER SYSMAN ACCOUNT LOCK PASSWORD EXPIRE;`
    • 敏感配置檔 (`emoms.properties`, `snmp_rw.ora`, `listener.ora`, `sqlnet.ora`) 設定 OS 層面 ACL:
      僅 `oracle` 安裝擁有者可讀寫,`oinstall` 群組可讀,其他無權限 (chmod 640)。
    • 定期掃描 `$ORACLE_HOME` 下 `.log`, `.trc`, `.properties` 檔案是否含敏感資訊,納入資安稽核清單。

    3. 升級至 11g/12c/19c,啟用強雜湊與隨機化

    • 10g 以前:用戶雜湊值固定 (僅含用戶名),時間熵低易暴力破解。
    • 11g 引入 `AUTH_VFR_DATA` 隨機值,`AUTH_SESSKEY` 生成機制大幅增強,有效防禦離線破解。
    • 12c/19c 預設使用 PBKDF2/SHA-512 基於雜湊,支援大小寫敏感密碼 (`SEC_CASE_SENSITIVE_LOGON = TRUE`)。
    • 若無法立即升級,務必套用最新 CPU (Critical Patch Update) 修補已知協議漏洞。

    結語

    資料庫密碼安全是系統防禦的基石。結合 強密碼策略 + 最小權限檔案存取 + 版本升級/補丁管理 三大支柱,可有效化解主動破解與配置洩漏風險。建議納入定期資安健檢與紅隊演練驗證防禦成效。

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