SQL Server 內建多項擴充預存程序提供作業系統層級存取能力(如命令執行、登錄操作、COM 物件存取),若遭惡意利用可導致伺服器完全失陷。依最小權限原則,生產環境應移除非業務必要的高風險擴充程序。
以系統管理員身分登入 master 資料庫,依序執行下列指令移除高風險元件:
-- 命令執行與系統存取
EXEC sp_dropextendedproc 'xp_cmdshell';
EXEC sp_dropextendedproc 'xp_enumgroups';
EXEC sp_dropextendedproc 'xp_loginconfig';
-- 錯誤日誌與檔案存取
EXEC sp_dropextendedproc 'xp_enumerrorlogs';
EXEC sp_dropextendedproc 'xp_getfiledetails';
-- OLE Automation 物件操作
EXEC sp_dropextendedproc 'sp_OACreate';
EXEC sp_dropextendedproc 'sp_OADestroy';
EXEC sp_dropextendedproc 'sp_OAGetErrorInfo';
EXEC sp_dropextendedproc 'sp_OAGetProperty';
EXEC sp_dropextendedproc 'sp_OAMethod';
EXEC sp_dropextendedproc 'sp_OASetProperty';
EXEC sp_dropextendedproc 'sp_OAStop';
-- 登錄操作系列
EXEC sp_dropextendedproc 'xp_regaddmultistring';
EXEC sp_dropextendedproc 'xp_regdeletekey';
EXEC sp_dropextendedproc 'xp_regdeletevalue';
EXEC sp_dropextendedproc 'xp_regenumvalues';
EXEC sp_dropextendedproc 'xp_regremovemultistring';
EXEC sp_dropextendedproc 'xp_regwrite';
-- Web 任務相關
DROP PROCEDURE sp_makewebtask;
下列三項擴充程序支援資料庫備份/還原與附加操作,非必要請勿移除:
xp_dirtree:建立/附加資料庫時掃描目錄結構xp_regread:還原資料庫時讀取登錄設定xp_fixeddrives:還原時檢查磁碟可用空間若因應用相容性需重新載入,可在 master 執行:
EXEC sp_addextendedproc 'xp_cmdshell', @dllname = 'xplog70.dll';
EXEC sp_addextendedproc 'xp_enumgroups', @dllname = 'xplog70.dll';
EXEC sp_addextendedproc 'xp_loginconfig', @dllname = 'xplog70.dll';
EXEC sp_addextendedproc 'xp_enumerrorlogs', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_getfiledetails', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'sp_OACreate', @dllname = 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OADestroy', @dllname = 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAGetErrorInfo', @dllname = 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAGetProperty', @dllname = 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAMethod', @dllname = 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OASetProperty', @dllname = 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAStop', @dllname = 'odsole70.dll';
EXEC sp_addextendedproc 'xp_regaddmultistring', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regdeletekey', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regdeletevalue', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regenumvalues', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regremovemultistring', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regwrite', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_dirtree', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regread', @dllname = 'xpstar.dll';
EXEC sp_addextendedproc 'xp_fixeddrives', @dllname = 'xpstar.dll';
master 資料庫。sys.extended_procedures 確認無未授權擴充程序被加入。