前言
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 64 字元預示密碼長度 1-15 位
2. 從本地配置檔竊取密文與金鑰
- EM 配置檔: `$ORACLE_HOME/sysman/config/emoms.properties` 同時存放 `SYSMAN` 密文 (`oracle.sysman.eml.mntr.emdRepPwd`) 與金鑰 (`...emdRepPwdSeed`)。
- 取得兩者即可用 DES 解密器還原明文密碼。
- 若多帳號共用密碼,將導致 `SYS/SYSTEM` 等高權限帳號連鎖洩漏。
圖:emoms.properties 中的密文與金鑰 (紅框標示)
圖:使用 DES 解密器還原 SYSMAN 明文密碼
安裝日誌: `$ORACLE_HOME/cfgtoollogs/` 下多個安裝/配置日誌可能含明文或可逆密文密碼。
3. 破解網路協議加密邏輯 (以 9i 為例,10g/11g 原理類似但更複雜)
- Client 發送 `SERVICE_NAME` → Listener 驗證服務存在。
- Client 發送用戶名 → Server 從資料庫讀取該用戶密碼雜湊值 (Hash)。
- Server 生成會話金鑰 (`AUTH_SESSKEY`):
調用 `slgdt()` 取系統時間 (分、時、秒、毫秒) 與用戶雜湊值 XOR 運算產生 8 位元組明文。
調用 `kzsrenc()` (DES ECB 模式) 加密明文 → 會話金鑰。
再用用戶雜湊值加密會話金鑰 → `AUTH_SESSKEY` 發送給 Client。
- Client 用用戶雜湊值解密 `AUTH_SESSKEY` 取得會話金鑰。
- Client 用會話金鑰 (DES CBC 模式) 加密用戶輸入的明文密碼 → `AUTH_PASSWORD` 回傳 Server。
- Server 用會話金鑰解密 `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) 修補已知協議漏洞。
結語
資料庫密碼安全是系統防禦的基石。結合 強密碼策略 + 最小權限檔案存取 + 版本升級/補丁管理 三大支柱,可有效化解主動破解與配置洩漏風險。建議納入定期資安健檢與紅隊演練驗證防禦成效。
- 上一篇文章: No
- 下一篇文章: Oracle 資料庫重啟標準作業程序 (SOP):從優雅關閉到啟動驗證