Oracle 雖號稱企業級資料庫,但並非「牢不可破」。駭客往往不攻擊資料庫核心,而是利用設定疏失、應用程式漏洞或人為弱點。本文從攻擊者視角剖析八大常見手法,並提供 DBA 可落實的防禦措施。
Web 應用未正確過濾使用者輸入,導致惡意 SQL 片段被拼接進動態查詢並在資料庫執行。例如登入欄位輸入 admin'-- 繞過驗證,或 '; SELECT * FROM ALL_USERS;-- 竊取帳號密碼。
利用 DBMS_EXPORT_EXTENSION 等高權限套件的缺陷,透過例外處理機制提權至 DBA。此漏洞曾影響 Oracle 8i 至 10g,官方補丁 (Security Alert 68) 雖修補部分向量,但同類邏輯缺陷難以根治。
SQL Guard 套件進行程式碼掃描。| 帳號 | 預設密碼 |
|---|---|
| SYS | CHANGE_ON_INSTALL / MANAGER |
| SYSTEM | MANAGER / CHANGE_ON_INSTALL |
| SCOTT | TIGER |
| DBSNMP | DBSNMP |
| CTXSYS | CHANGE_ON_INSTALL |
| OUTLN | OUTLN |
駭客亦會嘗試 oracle, oracle123, Oracle11g 等常見變體。
ALTER USER ... ACCOUNT LOCK)。PASSWORD_VERIFY_FUNCTION 強制複雜度,設定 PASSWORD_LIFE_TIME 定期輪換。DBA_USERS_WITH_DEFPWD 檢測弱密碼。自動化工具(如 OraBrute, John the Ripper)嘗試大量帳號/密碼組合。Oracle 預設 FAILED_LOGIN_ATTEMPTS=10 鎖定帳號,但 SYS AS SYSDBA 不受限,成為破解突破口。
PROFILE 限制 FAILED_LOGIN_ATTEMPTS 並啟用 PASSWORD_LOCK_TIME。SYSDBA 登入(REMOTE_LOGIN_PASSWORDFILE=NONE)。利用 UTL_TCP、UTL_HTTP、UTL_SMTP 等網路套件將資料傳出;或使用 DBMS_CRYPTO、DBMS_OBFUSCATION_TOOLKIT 加密隱藏流量以繞過 IDS。
AUDIT 記錄 UTL_TCP, UTL_HTTP 等敏感套件呼叫。未設密碼的監聽器允許遠程 SET LOG_FILE 指向 .rhosts,植入信任關係實現無密碼 rsh/rlogin。緩衝區溢位(如 TNS Listener Poison)可導致遠程代碼執行。
LSNRCTL> SET PASSWORD)。ADMIN_RESTRICTIONS_<listener_name>=ON 禁止遠程管理指令。低權限用戶擁有 CREATE ANY TRIGGER,在 SYSTEM 結構下建立觸發器,觸發條件為插入可寫入表格。觸發器呼叫 AUTHID CURRENT_USER 的預存程序執行 EXECUTE IMMEDIATE 'GRANT DBA TO attacker',借用 SYSTEM 權限完成提權。
CREATE ANY*, DROP ANY*, ALTER ANY* 系統權限,回收非必要授予。AUDIT GRANT DBA, CREATE TRIGGER, CREATE PROCEDURE BY ACCESS。PDB 隔離或 Database Vault 限制高權限操作。透過 CREATE LIBRARY + 外部程序、DBMS_SCHEDULER 外部作業、Java Stored Procedure (Runtime.exec()) 以 Oracle 服務帳號權限執行 OS 指令(刪檔、建帳號、竊取影子檔)。
CREATE LIBRARY, CREATE JOB, CREATE PROCEDURE 權限。AUDIT CREATE LIBRARY, CREATE JOB BY ACCESS。利用 UTL_FILE 讀寫作業系統檔案。若目錄物件權限鬆綁,可讀取 $ORACLE_HOME/dbs/init.ora, alert.log、甚至 /etc/passwd(透過符號連結)。
DIRECTORY 物件,回收 CREATE ANY DIRECTORY 權限。$ORACLE_HOME 僅 Oracle 軟體擁有者可寫,資料檔目錄僅 Oracle 程序可存取。AUDIT UTL_FILE 並監控異常檔案存取。ANY 權限。「警惕性是防禦的關鍵」。DBA 應建立定期安全檢核清單,將上述八大面向納入例行巡檢,才能在駭客之前發現並封堵弱點。