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

SQL Server xp_cmdshell 安全防護:風險識別、偵測與加固指南

     編輯:關於SqlServer

背景

xp_cmdshell 允許 T-SQL 執行作業系統命令,是提權攻擊的首選目標。駭客取得 sysadmin 後常嘗試啟用它以控制伺服器主機。

常見攻擊手法與偵測

1. 移除 xp_cmdshell (防禦)

IF EXISTS (SELECT * FROM sys.objects WHERE name = 'xp_cmdshell' AND type = 'X')
    EXEC sp_dropextendedproc 'xp_cmdshell'

偵測:SELECT * FROM sys.objects WHERE name = 'xp_cmdshell' 無結果。

2. 重新註冊 xp_cmdshell (攻擊/誤操作)

-- SQL 7.0
EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
-- SQL 2000/2005+
EXEC sp_addextendedproc 'xp_cmdshell', 'xpstar.dll'  -- 實際 DLL 視版本

偵測:定期稽核 sys.objects 類型 X (擴充預存程序) 異動。

3. 刪除/重命名 DLL 繞過移除 (進階攻擊)

若 xplog70.dll / xpstar.dll 遺失,sp_addextendedproc 會報錯「找不到 DLL」。防禦:檔案完整性監控 (FIM) 監控 Binn 目錄關鍵 DLL。

企業級加固清單

  1. 預設停用:EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE (SQL 2005+ 預設關閉)。
  2. 移除擴充程序:生產環境執行 sp_dropextendedproc 徹底移除。
  3. 最小權限原則:應用程式帳戶嚴禁 sysadmin,僅授 db_datareader/writer 或預存程序 EXECUTE 權限。
  4. 稽核與警報:啟用「登入失敗」、「結構描述變更」、「擴充程序建立」事件通知或 Extended Events 告警。
  5. 檔案完整性監控:Binn 目錄關鍵 DLL (xpstar.dll, xplog70.dll) 列入 FIM 白名單,異動即警示。
  6. 網路隔離:資料庫伺服器禁止主動對外連線,僅允許應用層存取。

替代方案

  • 需求:匯出檔案 → 使用 bcp / SSIS / CLR 安全組件。
  • 需求:排程作業 → SQL Agent 作業步驟 (CmdExec/PowerShell) 在代理服務帳戶下執行,受限於代理權限。
  • 需求:外部 API 呼叫 → CLR 預存程序 (SAFE/EXTERNAL_ACCESS) 經程式碼審查部署。

總結

xp_cmdshell 是高風險介面,生產環境應徹底移除或嚴格管控。防禦重點在於「最小權限」、「稽核異動」、「檔案完整性」三層防線。

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