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

SQL Server 觸發器安全隱患:加密後門與權限濫用實戰解析

     編輯:關於SqlServer

觸發器:DBA 的利器,駭客的後門

觸發器在 `INSERT/UPDATE/DELETE` 時自動執行,常用於稽核、同步。但若權限落入惡意使用者(`db_owner`、`sysadmin`、`db_ddladmin`),可植入 **加密觸發器竊取敏感資料(如明文密碼)**,且難被發現。

攻擊鏈還原 (以動網論壇 Dvbbs 為例)

  1. 攻擊者取得 `db_owner` 權限(非 Dvbbs 漏洞,屬權限配置失誤)。
  2. 目標表 `Dv_log` 記錄管理員操作,**明文密碼寫入 `l_content` 欄位** (ASP 端 MD5 加密前)。
  3. 建立加密觸發器 `dv_admin_history` ON `Dv_log` FOR INSERT:
CREATE TRIGGER dv_admin_history
ON Dv_log
WITH ENCRYPTION
FOR INSERT
AS
BEGIN
    -- 解析 inserted 虛擬表中的 l_content 擷取明文密碼
    -- 寫入普通用戶可見的隱蔽位置(如某大型文字欄位、自建稽核表)
END;
  • `WITH ENCRYPTION` 使 `sp_helptext` 無法查看定義,管理員即使發現觸發器也難分析。
  • 觸發器隱藏於 `sys.triggers`,非主動查詢 `sp_helptrigger` 或 SSMS「管理觸發器」不易察覺。
  • 竊取資料寫入「管理員不看、普通用戶可見」處,攻擊者以低權限帳號即可讀取。

防禦體系

層面措施
最小權限應用程式帳號**僅授 `db_datareader/db_datawriter` + 執行預存程序**,嚴禁 `db_owner`/`db_ddladmin`。
審計觸發器定期腳本掃描 `sys.triggers`、`sys.sql_modules`,檢查 `is_encrypted = 1`、非預期建立時間、可疑物件名稱。
DDL 觸發器防範建立 Server/Database 級 DDL Trigger 記錄所有 `CREATE/ALTER/DROP TRIGGER` 事件,寫入不可竄改稽核表/轉發 SIEM。
敏感資料不落地**密碼僅存雜湊 (bcrypt/Argon2/PBKDF2)**,嚴禁明文寫入任何資料表/日誌/錯誤訊息。
加密物件解密備份保留 DAC 連線/第三方工具解密 `WITH ENCRYPTION` 物件的能力,納入事件應急流程。

稽核查詢範例

-- 列出所有加密觸發器
SELECT 
    SCHEMA_NAME(t.schema_id) AS SchemaName,
    t.name AS TriggerName,
    OBJECT_NAME(t.parent_id) AS ParentTable,
    t.create_date,
    t.modify_date
FROM sys.triggers t
JOIN sys.sql_modules m ON m.object_id = t.object_id
WHERE m.definition LIKE '%WITH ENCRYPTION%';

結語

觸發器本身非漏洞,**權限過度授予 + 敏感資料明文儲存 + 缺乏 DDL 審計 = 後門溫床**。落實最小權限、禁用明文密碼、建立 DDL 審計管道,才能從根源斷除此類隱患。

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