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

Oracle 資料庫安全防禦指南:駭客八大經典攻擊向量與緩解措施

     編輯:Oracle 資料庫基礎

前言

Oracle 常被宣稱「牢不可破」,但駭客視角下,錯誤配置、預設帳號、未修補漏洞、過度授權構成巨大攻擊面。本文從攻擊者視角拆解八大經典滲透路徑,並提供 DBA 可落地的防禦清單,構建纵深防御體系。

一、SQL 注入 —— 首選入口

攻擊原理

Web 應用未對輸入參數化/過濾,攻擊者在表單注入 ' OR 1=1-- 或 '); SELECT * FROM all_users;--,繞過驗證、竊取數據、甚至提權。

進階:PL/SQL 注入 (CVE-2006-xxxx / Security Alert 68)

利用 DBMS_EXPORT_EXTENSION 觸發異常處理程序以 SYS 權限執行任意代碼,歷史版本 8i~10g 普遍受影響。

防禦

  • **強制綁定變數**:所有動態 SQL 用 EXECUTE IMMEDIATE ... USING 或 DBMS_SQL.BIND_VARIABLE
  • **輸入白名單驗證**:長度、字符集、正則匹配
  • **WAF/IDS 部署**:ModSecurity + Oracle 規則集、Pete Finnigan SQL Guard 套件
  • **最小權限原則**:應用帳號僅 SELECT/INSERT/UPDATE/DELETE 業務表,無 CREATE PROCEDURE、EXECUTE ANY PROCEDURE
  • **及時打補丁**:關注 Oracle Critical Patch Update (CPU)

二、預設/弱密碼 —— 敞開的大門

高風險預設帳號 (部分)

用戶預設密碼
SYSCHANGE_ON_INSTALL / MANAGER
SYSTEMMANAGER / CHANGE_ON_INSTALL
SCOTTTIGER
DBSNMPDBSNMP
CTXSYSCHANGE_ON_INSTALL
OUTLNOUTLN

防禦

  1. 安裝後**立即修改所有預設帳號密碼**
  2. 鎖定/過期無用帳號:ALTER USER scott ACCOUNT LOCK PASSWORD EXPIRE;
  3. 啟用 PASSWORD_VERIFY_FUNCTION 強制複雜度、歷史記憶、鎖定策略
  4. 定期審計:SELECT username, account_status FROM dba_users WHERE password_versions LIKE '%10G%'; (檢測舊弱雜湊)
  5. 參考 Pete Finnigan 維護的 最新預設密碼表

三、暴力破解 —— 撬鎖不歇

攻擊手段

  • 自動化工具 (OraBrute、John the Ripper + Oracle patch) 遍歷字母數字組合
  • 彩虹表 (Rainbow Table) 預計算雜湊,加速破解
  • SYS AS SYSDBA 帳號預設**不鎖定**,成首選目標

防禦

  • FAILED_LOGIN_ATTEMPTS = 5 (Profile 設定)
  • PASSWORD_LOCK_TIME = 1 (鎖定 1 天)
  • 網路層封鎖:僅允許應用伺服器 IP 訪問 Listener 埠
  • 審計失敗登入:AUDIT SESSION WHENEVER NOT SUCCESSFUL;

四、數據外洩 —— 隱蔽通道

攻擊手段

  • 竊取備份帶/磁碟、還原至攻擊者環境
  • UTL_TCP 發送低頻數據流至外部伺服器
  • DBMS_CRYPTO、DBMS_OBFUSCATION_TOOLKIT 加密隱藏流量規避 IDS

防禦

  • 備份加密 (RMAN BACKUP ENCRYPTION)、異地存儲、存取審計
  • 禁用/移除 UTL_TCP、UTL_SMTP、UTL_HTTP 公共執行權限:REVOKE EXECUTE ON utl_tcp FROM PUBLIC;
  • 部署 DAM (Database Activity Monitoring) 深度檢查 SQL、異常流量告警

五、Listener 攻擊 —— 遠程控制入口

經典手法

  • 設定 LOG_FILE 指向 .rhosts,寫入信任主機實現無密碼 rsh/rlogin
  • 緩衝區溢出 (CVE-2012-1675 等)
  • 遠程註冊惡意服務 (SID_LIST_LISTENER 操縱)

防禦

  1. 設定 Listener 管理密碼:LSNRCTL> SET PASSWORD → SAVE_CONFIG
  2. 啟用 ADMIN_RESTRICTIONS_LISTENER=ON 禁止遠程修改參數
  3. VALID_NODE_CHECKING_REGISTRATION_LISTENER=ON + REGISTRATION_INVITED_NODES 白名單
  4. Listener 日誌審計:LOG_DIRECTORY_LISTENER、LOG_FILE_LISTENER 定期分析

六、權限提升 —— 低權限變高權限

典型鏈條

  1. 擁有 CREATE ANY TRIGGER 的低權用戶
  2. 發現可寫表 (如 SYS.AUD$、應用日誌表)
  3. 在 SYS schema 建立觸發器,觸發條件為該表 INSERT/UPDATE
  4. 觸發器調用 AUTHID CURRENT_USER 存儲過程 → EXECUTE IMMEDIATE 'GRANT DBA TO low_user'
  5. 攻擊者插入一行 → 觸發器以 SYS 權限執行 → 獲得 DBA

防禦

  • 審計並回收 CREATE ANY TRIGGER/PROCEDURE/TYPE 等強權限
  • 關鍵系統表 (AUD$, FGA_LOG$) 設為 READ ONLY 或移至專用表空間
  • 啟用 AUDIT GRANT ANY PRIVILEGE, GRANT ANY ROLE, CREATE ANY TRIGGER BY ACCESS;
  • 定期查詢 DBA_SYS_PRIVS、DBA_TAB_PRIVS 掃描異常授權

七、作業系統命令執行 —— 突破資料庫邊界

攻擊路徑

  • Java Stored Procedure / External Procedure 呼叫 OS 命令
  • DBMS_SCHEDULER 建立 EXECUTABLE 作業
  • 利用 CREATE LIBRARY 載入惡意共享庫

防禦

  • REVOKE EXECUTE ON dbms_java FROM PUBLIC;、REVOKE CREATE LIBRARY FROM PUBLIC;
  • OS 層:Oracle 安裝用戶**非 root/Administrator**、最小化 sudo 權限
  • 啟用 Oracle Database Vault (若授權) 限制 SYS 操作 OS

八、檔案系統存取 —— 繞過資料庫權限

攻擊手段

  • UTL_FILE 讀寫 OS 檔案 (需 CREATE DIRECTORY 權限)
  • Java java.io.File 直接存取
  • 外部表 (ORACLE_LOADER) 讀取敏感檔案

防禦

  • 12c+ 強制 DIRECTORY 物件控管路徑,回收 CREATE ANY DIRECTORY
  • OS 層:$ORACLE_HOME、數據文件目錄權限 750、擁有者 oracle:oinstall
  • 審計 UTL_FILE、DBMS_SCHEDULER、EXTERNAL TABLE 操作

九、纵深防御總結清單

層面關鍵動作驗證頻率
帳號修改預設密碼、鎖定無用帳號、Profile 複雜度/鎖定月度
網路Listener 密碼/白名單、防火牆僅開應用 IP季度
權限回收 ANY 權限、最小化應用帳號、審計 GRANT/DDL月度
補丁CPU 季度評估、關鍵漏洞 30 天內修補季度
加密備份加密、敏感欄 TDE、傳輸 TLS半年
監控DAM/統一審計、異常登入/提權/外連告警實時
OS最小權限安裝用戶、目錄權限收緊、禁用非必要外部程序年度

十、總結

資料庫安全**不是產品功能,而是持續流程**。駭客只需一個疏忽;防禦者需在每一層都不留縫隙。將上述清單納入例行運維、審計、應急演練,才能將 Oracle 真正變成「牢不可破」的資產金庫。

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