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

SQL Server SA 帳號防護實戰:從弱密碼到 xp_cmdshell 移除的纵深防禦

     編輯:關於SqlServer

風險實證:SA 弱密碼 = 伺服器淪陷

若攻擊者取得 `sa` 權限 (暴力破解/預設空密碼/密碼重用),可透過內建 `xp_cmdshell` 直接執行作業系統指令:

-- 攻擊者在 Query Analyzer / SSMS 執行
EXEC xp_cmdshell 'net user hacker P@ssw0rd /add';      -- 建立本地帳號
EXEC xp_cmdshell 'net localgroup administrators hacker /add'; -- 加入管理員群組

數秒內,攻擊者擁有 **本機系統管理員 (Local Admin)** 權限,進而完全控制伺服器、橫向移動、部署勒索軟體、竊取資料。

纵深防禦三層防線

第一防線:強制強密碼策略 (必要條件)

  • 安裝時即設定 `sa` 複雜密碼 (長度 ≥ 16、大小寫、數字、特殊字元、非字典詞)。
  • 啟用「強制密碼原則」與「強制密碼到期」 (登入屬性 → 一般頁)。
  • 定期輪換 (建議 90 天),離職人員立即撤銷/變更。

第二防線:移除/停用 `xp_cmdshell` (核心減面)

若業務**不需**資料庫執行 OS 指令 (絕大多數應用不需):

-- 檢查是否存在
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'xp_cmdshell' AND type = 'X')
    EXEC sp_dropextendedproc 'xp_cmdshell';
  • 移除後,即使 `sa` 被盜用,攻擊者無法直接落地執行指令。
  • 若極少數合法功能需求 (如備份壓縮、檔案搬移),改用 **SQL Agent Proxy 帳號 + CmdExec 步驟** 或 **CLR 安全組件** 替代,嚴格最小權限。

第三防線:最小權限原則與審計

  • 應用程式**禁用 `sa` 連線**,建立專用低權限 SQL 登入 (僅 `db_datareader/writer` + 執行特定預存程序權限)。
  • 啟用 **SQL Server 審計** (Audit) 記錄:失敗登入、結構變更、權限變更、`xp_cmdshell` 執行 (若保留)。
  • 定期檢視錯誤日誌與安全性日誌,異常登入來源立即封鎖 (防火牆/IPsec)。

補充:註冊表強制切換驗證模式 (緊急情況)

若無法以 Windows 登入 SSMS 切換模式:

reg add "HKLM\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer" /v LoginMode /t REG_DWORD /d 2 /f
net stop MSSQLSERVER & net start MSSQLSERVER

切換至「混合模式」後,務必補齊 `BUILTIN\Administrators` 與本機 `Administrator` 登入並授 `sysadmin`,否則 Windows 管理員將無法以整合驗證管理 SQL。

總結

**SA 強密碼是基石,移除 `xp_cmdshell` 是核心減面,應用專用低權限帳號是常態。** 三者缺一不可,構成 SQL Server 基礎設施安全的鐵三角。

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