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

駭客攻擊 Oracle 資料庫的八大經典手法與防禦對策

     編輯:Oracle 資料庫基礎

前言

Oracle 雖號稱企業級資料庫,但並非「牢不可破」。駭客往往不攻擊資料庫核心,而是利用設定疏失、應用程式漏洞或人為弱點。本文從攻擊者視角剖析八大常見手法,並提供 DBA 可落實的防禦措施。

1. SQL 注入攻擊

原理

Web 應用未正確過濾使用者輸入,導致惡意 SQL 片段被拼接進動態查詢並在資料庫執行。例如登入欄位輸入 admin'-- 繞過驗證,或 '; SELECT * FROM ALL_USERS;-- 竊取帳號密碼。

進階變體:PL/SQL 注入(Holy Grail)

利用 DBMS_EXPORT_EXTENSION 等高權限套件的缺陷,透過例外處理機制提權至 DBA。此漏洞曾影響 Oracle 8i 至 10g,官方補丁 (Security Alert 68) 雖修補部分向量,但同類邏輯缺陷難以根治。

防禦

  • 全面採用綁定變數,禁用動態 SQL 拼接。
  • 部署 WAF(Web Application Firewall)與 SQL 注入偵測規則。
  • 參考 Pete Finnigan 網站與 Steven Feuerstein 的 SQL Guard 套件進行程式碼掃描。

2. 預設/弱密碼攻擊

常見預設帳號

帳號預設密碼
SYSCHANGE_ON_INSTALL / MANAGER
SYSTEMMANAGER / CHANGE_ON_INSTALL
SCOTTTIGER
DBSNMPDBSNMP
CTXSYSCHANGE_ON_INSTALL
OUTLNOUTLN

駭客亦會嘗試 oracle, oracle123, Oracle11g 等常見變體。

防禦

  • 安裝後立即修改所有預設帳號密碼,鎖定不用帳號(ALTER USER ... ACCOUNT LOCK)。
  • 啟用 PASSWORD_VERIFY_FUNCTION 強制複雜度,設定 PASSWORD_LIFE_TIME 定期輪換。
  • 定期查詢 DBA_USERS_WITH_DEFPWD 檢測弱密碼。

3. 暴力破解

手法

自動化工具(如 OraBrute, John the Ripper)嘗試大量帳號/密碼組合。Oracle 預設 FAILED_LOGIN_ATTEMPTS=10 鎖定帳號,但 SYS AS SYSDBA 不受限,成為破解突破口。

防禦

  • 設定 PROFILE 限制 FAILED_LOGIN_ATTEMPTS 並啟用 PASSWORD_LOCK_TIME。
  • 網路層面部署 IDS/IPS 偵測異常登入流量。
  • 禁用不必要的遠程 SYSDBA 登入(REMOTE_LOGIN_PASSWORDFILE=NONE)。

4. 資料外洩

手法

利用 UTL_TCP、UTL_HTTP、UTL_SMTP 等網路套件將資料傳出;或使用 DBMS_CRYPTO、DBMS_OBFUSCATION_TOOLKIT 加密隱藏流量以繞過 IDS。

防禦

  • 實施最小權限原則,回收 PUBLIC 對網路套件的 EXECUTE 權限。
  • 部署資料庫防火牆(如 Oracle Database Firewall)監控異常外連。
  • 啟用 AUDIT 記錄 UTL_TCP, UTL_HTTP 等敏感套件呼叫。

5. 監聽器攻擊

手法

未設密碼的監聽器允許遠程 SET LOG_FILE 指向 .rhosts,植入信任關係實現無密碼 rsh/rlogin。緩衝區溢位(如 TNS Listener Poison)可導致遠程代碼執行。

防禦

  • 設定監聽器管理密碼(LSNRCTL> SET PASSWORD)。
  • 啟用 ADMIN_RESTRICTIONS_<listener_name>=ON 禁止遠程管理指令。
  • 升級至最新 CPU 修補緩衝區溢位漏洞。

6. 權限提升

經典案例:CREATE ANY TRIGGER

低權限用戶擁有 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 限制高權限操作。

7. 作業系統指令執行

手法

透過 CREATE LIBRARY + 外部程序、DBMS_SCHEDULER 外部作業、Java Stored Procedure (Runtime.exec()) 以 Oracle 服務帳號權限執行 OS 指令(刪檔、建帳號、竊取影子檔)。

防禦

  • 嚴格限制 CREATE LIBRARY, CREATE JOB, CREATE PROCEDURE 權限。
  • OS 層面:Oracle 服務帳號僅具最低權限,禁用互動式登入。
  • 啟用 AUDIT CREATE LIBRARY, CREATE JOB BY ACCESS。

8. 檔案系統存取

手法

利用 UTL_FILE 讀寫作業系統檔案。若目錄物件權限鬆綁,可讀取 $ORACLE_HOME/dbs/init.ora, alert.log、甚至 /etc/passwd(透過符號連結)。

防禦

  • Oracle 10g+ 強制使用 DIRECTORY 物件,回收 CREATE ANY DIRECTORY 權限。
  • OS 層面:$ORACLE_HOME 僅 Oracle 軟體擁有者可寫,資料檔目錄僅 Oracle 程序可存取。
  • 啟用 AUDIT UTL_FILE 並監控異常檔案存取。

總結:纵深防禦策略

  1. 最小權限:原則上不授予 DBA 以外帳號任何 ANY 權限。
  2. 修補管理:訂閱 Oracle Critical Patch Update (CPU),每季套用。
  3. 稽核與監控:啟用統一稽核,串接 SIEM 即時告警。
  4. 網路隔離:資料庫伺服器僅允許應用伺服器 IP 存取,禁用直接對外暴露。
  5. 加密:啟用 TNS 加密 (Native Network Encryption) 保護傳輸層。

「警惕性是防禦的關鍵」。DBA 應建立定期安全檢核清單,將上述八大面向納入例行巡檢,才能在駭客之前發現並封堵弱點。

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