引言
Microsoft SQL Server 中的 SA(系統管理員)帳號擁有最高權限,一旦被惡意利用,攻擊者可完全掌控資料庫伺服器,甚至進一步滲透作業系統。本文針對 SA 權限濫用的常見攻擊路徑,提供實務防禦建議,幫助資料庫管理員強化安全防線。
SA 權限的風險
- 完全掌控資料庫: SA 可執行任意 T-SQL 指令、讀寫任意資料、管理使用者與權限。
- 作業系統級滲透: 若啟用
xp_cmdshell 等擴展存儲程序,攻擊者可執行系統命令,上傳 WebShell、竊取檔案、建立後門。
- 橫向移動跳板: 透過連結伺服器、SQL Agent 作業等機制,攻擊者可向內網其他主機發起攻擊。
核心防護原則
1. 最小權限原則
應用程式連接資料庫時,嚴禁使用 SA 帳號。建立專用的低權限資料庫使用者,僅授予必要的 SELECT、INSERT、UPDATE、EXECUTE 權限,並限制存取特定結構描述與資料表。
2. 禁用或移除危險擴展功能
- 執行
sp_configure 'xp_cmdshell', 0; RECONFIGURE; 關閉命令執行功能。
- 若不使用 OLE Automation、CLR 整合、Ad Hoc Distributed Queries 等進階功能,應一併停用。
- 考慮移除
xp_cmdshell、xp_regread、xp_regwrite 等擴展存儲程序(需謹慎評估相容性)。
3. 強化認證與存取控制
- 為 SA 設定長度 ≥ 16 字元、包含大小寫、數字、特殊符號的複雜密碼,並定期輪換。
- 啟用「強制密碼原則」與「強制密碼過期」(SQL Server 2005+ 支援)。
- 限制 SA 登入來源:僅允許本機或特定管理 IP 透過防火牆規則連接。
- 可考慮重新命名 SA 帳號(
ALTER LOGIN sa WITH NAME = [NewAdminName];),增加攻擊者猜測難度。
4. 稽核與監控
- 啟用 SQL Server 稽核(Audit)記錄登入失敗、權限變更、結構描述修改等關鍵事件。
- 部署資料庫活動監控(DAM)工具,即時偵測異常查詢、大量資料匯出、非常用時間登入等行為。
- 定期審查
sys.server_principals、sys.database_permissions,確認無異常高權限帳號。
5. 修補與最小化暴露面
- 及時套用 Microsoft 安全性更新(CU/GDR),修補已知提權漏洞(如 CVE-2022-21907 等)。
- 關閉不必要的網路協定(Named Pipes、VIA),僅啟用 TCP/IP 並綁定特定 IP/埠。
- 將 SQL Server 服務帳號降為最低權限網域使用者,避免使用 Local System 或 Domain Admin。
事件應急檢查清單
- 發現可疑 SA 登入 → 立即鎖定帳號(
ALTER LOGIN sa DISABLE;)並變更密碼。
- 檢查
xp_cmdshell、sp_OACreate 等是否被啟用,並查詢錯誤日誌尋找異常命令執行紀錄。
- 掃描 Web 目錄尋找未授權的 .asp/.aspx/.php WebShell。
- 檢視 Windows 事件日誌(Security、System)與 SQL Server ERRORLOG,追蹤攻擊時間線。
- 若確認主機被植入後門,建議重灌作業系統並從乾淨備份還原資料庫。
結語
SA 帳號是資料庫王國的「鑰匙」,守護好它需要「最小權限、強認證、禁危險功能、持續監控、及時修補」五大支柱。將安全內建於開發部署流程,才能從根本上降低被入侵風險。