安全性警示
本文僅供防禦研究與歷史漏洞理解,嚴禁用於攻擊行為。 SQL Server 2000/7.0 TDS 協定在 1433 埠傳輸登入封包時,密碼採用簡單位元替換加密(非標準加密演算法),極易被逆向還原。現代版本 (2005+) 已強制加密登入封包並支援 TLS,此漏洞已不存在。
歷史加密機制分析
- 協定: Tabular Data Stream (TDS) 4.2/7.0。
- 加密方式: 每個密碼字元獨立對應一個固定位元組值(查表法),字元間以
0x5A 分隔。
- 弱點: 無鹽、無金鑰、無非線性運算、長度固定、可直接查表還原明文。
- 特殊 Bug: 分號
; (0x3B) 不在對照表中,若密碼含分號,驅動程式會忽略該字元導致長度不符,永遠無法登入。
字元對照表(節錄)
| 明文 | 加密位元組 | 明文 | 加密位元組 | 明文 | 加密位元組 |
| a | 0xB3 | b | 0x83 | c | 0x93 |
| A | 0xB1 | B | 0x81 | C | 0x91 |
| 1 | 0xB6 | 2 | 0x86 | 3 | 0x96 |
| @ | 0xA1 | # | 0x97 | $ | 0xE7 |
| ; | 不存在 | 空格 | 0x60 | _ | 0x50 |
完整對照表包含 90+ 可列印 ASCII 字元,每字元固定映射,無任何加密強度。
攻擊流程(歷史視角)
- 網路嗅探擷取 1433 埠 TDS 登入封包(明文用戶名、加密密碼)。
- 定位用戶名後第一個
0x5A 為密碼起始,以 0x5A 分隔提取各字元加密位元組。
- 查表還原明文密碼。
防禦與緩解措施
- 升級至 SQL Server 2005+: 強制加密登入封包,支援 TLS 1.2,TDS 8.0 協定移除弱加密。
- 強制加密連線: 伺服器設定 `ForceEncryption = Yes`,憑證佈署至所有用戶端。
- 停用/封鎖 1433 埠對外暴露: 防火牆僅允許應用伺服器 IP 存取,或使用 VPN/Private Link。
- 啟用 Kerberos/Windows 整合驗證: 避免密碼在網路傳輸。
- 稽核登入失敗: 偵測暴力破解嘗試。
現代最佳實務
- 連線字串加入 `Encrypt=True;TrustServerCertificate=False;`(生產環境需有效憑證)。
- 使用 Azure AD / Entra ID 整合驗證(Managed Identity、服務主體),完全移除密碼。
- 定期掃描網路流量確認無明文 TDS 7.0 封包。