了解駭客如何攻破 SQL Server,才能建立有效防禦。本文整理十大經典攻擊向量,並對應滲透測試驗證重點,助你以攻擊者視角強化防禦。
1. 直接網際網路暴露
- 手法: 掃描全網開放 TCP 1433/1434,直接連線嘗試弱密碼、已知漏洞利用 (如 SQL Slammer 蠕蟲利用 UDP 1434 緩衝區溢位)。
- 後果: 勒索軟體植入、資料竊取、加密幣挖礦、拒絕服務。
- 防禦: **嚴禁直接對 Internet 開放**,防火牆封鎖、VPN/堡壘機存取、雲端安全群組最小開放。
2. 自動化弱點掃描
- 工具: QualysGuard (通用)、WebInspect (Web 應用)、NGSSquirrel for SQL Server (資料庫專用)、Nessus, OpenVAS。
- 掃描目標: 缺失修補 (OS/SQL/IIS)、預設帳戶/密碼、錯誤配置 (xp_cmdshell 啟用、SA 權限過大)、SNMP 社群字串預設值。
- 驗證: 定期排程認證掃描 (Credentiaed Scan) 取得最準確結果。
3. SQL Server 解析服務枚舉 (UDP 1434)
- 手法: 向 UDP 1434 發送查詢封包,列舉所有具名實例、版本、埠號、叢集資訊。**即使實例隱藏埠號也會被發現**。
- 工具:
SQLPing v2.5 (Chip Andrews) - 必備偵察工具。
- 衍生攻擊: 過長封包觸發 UDP 1434 緩衝區溢位 (CVE-2002-0649)。
- 防禦: 防火牆封鎖 UDP 1434 (僅內網管理區段開放)、停用 SQL Browser 服務 (若不需具名實例發現)。
4. sa / 系統管理員帳號密碼破解
- 現狀: 驚人比例的
sa **空密碼**或弱密碼 (sa, 123456, password)。
- 工具:
SQLPing (內建字典)、AppDetective, NGSSQLCrack (商用)、Hydra, Medusa (線上暴力破解)。
- 防禦: 強制強密碼策略、啟用密碼到期/歷史、鎖定原則、禁用/重命名 sa、僅 Windows 驗證。
5. 公開漏洞利用代碼 (Exploit) 直接攻擊
- 框架: Metasploit Framework (開源)、Canvas, Core Impact (商用)。
- 流程: 掃描發現漏洞 (如 CVE-2008-5416 sp_replwritetovarbin 堆疊溢位) → 選擇 Exploit 模組 → 設定 Payload (Meterpreter/Reverse Shell) → 執行攻擊。
- 威脅: 繞過防火牆、取得系統級命令執行、植入持久化後門。
- 防禦: **及時修補** (WSUS/SCCM)、啟用 DEP/ASLR、應用程式白名單 (AppLocker)、最小權限服務帳戶。
6. SQL Injection (SQL 注入)
- 成因: 前端應用未驗證/參數化使用者輸入,直接拼接 SQL 字串。
- 利用: URL/表單注入
' OR 1=1--, UNION SELECT, xp_cmdshell 等 → 繞過登入、竊取資料、執行系統指令。
- 工具: SQLMap (自動化神器), Havij, Burp Suite Scanner,
SQL Injector (SPI Dynamics)。
- 防禦: **全面參數化查詢 (Prepared Statements)**、預存程序 (參數化)、ORM 正確使用、WAF 規則、最小權限資料庫帳戶。
7. Blind SQL Injection (盲注)
- 特徵: 無錯誤回顯、無資料直接回顯,僅透過**布爾邏輯差異** (頁面內容變化) 或**時間延遲** (WAITFOR DELAY, BENCHMARK) 推斷資料。
- 難度: 速度慢、需自動化工具 (SQLMap --technique=B/T)。
- 防禦: 同 SQL Injection,統一錯誤頁面 (不洩露堆疊追蹤)、限制查詢執行時間、資料庫層面封鎖
WAITFOR/BENCHMARK (權限控制)。
8. 逆向工程尋找 0-day 漏洞
- 手法: 反組譯
sqlservr.exe、擴展儲存程序 DLL、ODBC 驅動程式,分析記憶體損壞、整數溢位、Use-After-Free 等弱點。
- 參考: 《Exploiting Software: How to Break Code》 (Greg Hoglund & Gary McGraw)。
- 防禦: 無法完全防禦 0-day,**縮小攻擊面** (停用不用的擴展程序/功能)、部署 HIPS/EDR 偵測異常行為、訂閱廠商安全公告首日修補。
9. Google Hacking (搜尋引擎偵察)
- 手法: 利用 Google 進階搜尋語法發現公開洩露的資訊:
inurl:"id=" intext:"SQL syntax" (尋找潛在注入點)
filetype:config "connectionString" "password=" (洩露設定檔)
site:target.com "Incorrect syntax near" (錯誤訊息洩露)
- 資源: Google Hacking Database (GHDB) - Johnny Long 維護。
- 防禦: 關閉自定義錯誤頁面 (生產環境
customErrors mode="RemoteOnly")、禁止目錄列表、敏感檔案 robots.txt 封鎖/驗證保護、定期 site: 自查。
10. 原始碼審計發現硬編碼憑證
- 場景: 開發人員為圖方便將連線字串 (含
sa 密碼) 硬編碼在 ASP/ASPX/.config/Java/DLL 中。
- 發現: 手工程式碼審查、Git 歷史搜尋 (
git log -p --all -S 'password')、Google Hacking、開源專案洩露。
- 防禦: **密碼外部化** (Key Vault, 環境變數, 加密設定檔)、CI/CD 管道整合密掃工具 (GitLeaks, TruffleHog)、代碼審查強制檢查、輪換所有曾洩露密碼**。
滲透測試驗證清單 (藍隊視角)
| 檢查項目 | 驗證方法 | 通過標準 |
| 網路層隔離 | Nmap 掃描外網 IP | TCP 1433/1434/UDP 1434 全部關閉 |
| 修補狀態 | MBSA / WSUS 報告 / Nessus 認證掃描 | 無 Critical/High 缺失修補 |
| sa 帳號狀態 | 登入檢查 / SQLPing | 已重命名、強密碼、停用、僅 Windows 驗證 |
| 服務帳戶權限 | services.msc / EM 檢視 | 一般網域使用者,非 Administrator |
| xp_cmdshell / OLE Automation | EXEC sp_configure 'xp_cmdshell' | 值為 0 (停用) |
| 錯誤訊息洩露 | 故意觸發錯誤 / Web 掃描 | 生產環境顯示通用錯誤頁,無堆疊/SQL 片段 |
| 資料庫帳戶最小權限 | 審查 sys.database_permissions | 應用帳戶無 db_owner/sysadmin,僅必要 GRANT |
| 稽核啟用 | EM 安全性分頁 / 錯誤記錄 | 失敗登入稽核啟用,日誌定期審閱 |
| 備份加密異地 | 檢查備份作業 / 還原測試 | 備份檔加密,異地離線備份存在且可還原 |
「既然駭客在做這些事,你也需要實施同樣的攻擊來檢驗系統的安全實力。這是理所當然的。」