SQL Injection 攻擊頻傳,但 SQL Server 2000 已通過美國政府 C2 級安全認證。安全關鍵在於**正確配置**而非產品本身。本文提供四階段防護體系:補丁與基線、網路隱藏、最小權限、危險功能封鎖。
核心觀念:Web 連線帳號**絕不使用 sa / db_owner**。建立自訂資料庫角色,僅授予必要物件權限。
| 類別 | 權限項目 | 範圍 |
|---|---|---|
| 物件權限 | SELECT/INSERT/UPDATE/DELETE | 表/檢視表 (可細至欄位) |
| SELECT/UPDATE | 使用者定義函數 | |
| INSERT/DELETE | 整列操作,不可細至欄位 | |
| EXECUTE | 預存程序/函數 | |
| REFERENCES | 外鍵參考 | |
| 陳述式權限 | CREATE TABLE/VIEW/PROCEDURE/FUNCTION/RULE/DEFAULT | 建立物件 |
| BACKUP DATABASE/LOG | 備份 | |
| CREATE DATABASE | 建立資料庫 |
| 角色 | 權限 | 風險 |
|---|---|---|
| db_owner | 資料庫完整控制 | 極高:可備份、建表、授權、植入木馬 |
| db_securityadmin | 管理所有權限/角色 | 高:可提權自己 |
| db_ddladmin | 所有 DDL (無 GRANT/REVOKE) | 中:可修改結構 |
| db_datareader | 讀所有使用者表 | 低:唯讀 |
| db_datawriter | 寫所有使用者表 | 中:可竄改資料 |
| db_denydatareader | 拒絕讀所有表 | 拒絕 |
| db_denydatawriter | 拒絕寫所有表 | 拒絕 |
WebApp_Role)SQL Server 內建擴展預存程序可讀寫登錄、檔案系統、執行命令,注入攻擊利用這些「跳板」提權。採取「寧錯殺不放過」策略移除。
-- 核心危險組
EXEC sp_dropextendedproc 'xp_cmdshell' -- 執行 OS 命令 (最高危)
EXEC sp_dropextendedproc 'xp_regread' -- 讀登錄
EXEC sp_dropextendedproc 'xp_regwrite' -- 寫登錄
EXEC sp_dropextendedproc 'xp_regdeletekey' -- 刪登錄鍵
EXEC sp_dropextendedproc 'xp_regdeletevalue' -- 刪登錄值
EXEC sp_dropextendedproc 'xp_regenumkeys' -- 列舉登錄鍵
EXEC sp_dropextendedproc 'xp_regenumvalues' -- 列舉登錄值
EXEC sp_dropextendedproc 'xp_regaddmultistring'
EXEC sp_dropextendedproc 'xp_regremovemultistring'
-- 資訊洩露組
EXEC sp_dropextendedproc 'xp_dirtree' -- 列目錄樹
EXEC sp_dropextendedproc 'xp_enumgroups' -- 列舉 Windows 群組
EXEC sp_dropextendedproc 'xp_fixeddrives' -- 列固定磁碟空間
EXEC sp_dropextendedproc 'xp_loginconfig' -- 登入配置
EXEC sp_dropextendedproc 'xp_enumerrorlogs' -- 列錯誤日誌
EXEC sp_dropextendedproc 'xp_getfiledetails' -- 取檔案詳細資訊
EXEC sp_dropextendedproc 'sp_OACreate'
EXEC sp_dropextendedproc 'sp_OADestroy'
EXEC sp_dropextendedproc 'sp_OAMethod'
EXEC sp_dropextendedproc 'sp_OAGetProperty'
EXEC sp_dropextendedproc 'sp_OASetProperty'
EXEC sp_dropextendedproc 'sp_OAGetErrorInfo'
EXEC sp_dropextendedproc 'sp_OAStop'
EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
EXEC sp_addextendedproc 'xp_regread', 'xpstar.dll'
-- ... 依移除清單對應 .dll 恢復
-- 查詢 DLL 對應: EXEC sp_helpextendedproc 'xp_cmdshell'
移除後將 xplog70.dll、xpstar.dll 改名 (如 .bak),即使攻擊者取得 sa 也無法 sp_addextendedproc 成功。
安全是纵深防禦:**補丁基線 → 網路隱藏 → 最小權限 → 功能封鎖 → 稽核監控**。Web 應用層仍需參數化查詢、輸入驗證、WAF 等配合,資料庫層才是最後一道防線。