首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 密碼加密機制安全性分析:從舊版弱點到現代防護的演進

     編輯:關於SqlServer

前言

早期 SQL Server (7.0/2000) 在網路傳輸 (TCP 1433/TDS 協定) 中使用自訂弱加密演算法保護登入密碼,且 TDS 封包大部分為明文 (IP、用戶名、成功/失敗訊息)。這使得網路嗅探器極易攔截並離線破解密碼。本文分析舊版加密弱點、演示破解原理 (僅供防禦理解),並說明現代版本的根本性修正。

舊版 (SQL Server 2000 及之前) 密碼加密缺陷

1. TDS 登入封包結構

  • 用戶名明文傳輸。
  • 密碼經「單向雜湊」後傳送,但演算法為專有、未公開、無鹽值、可逆。
  • 同一密碼每次產生相同雜湊 (無隨機性),極易建立查表攻擊。

2. 弱加密演算機制 (簡化描述)

  • 將密碼字元逐一對應固定位元模式 (如原文提供的對照表),組合成雜湊值。
  • 無金鑰、無迭代、無鹽值、無時間成本 — 極易被 GPU/ASIC 並行暴力破解。
  • 特殊字元 ; (分號) 不在對照表中,導致密碼截斷/失效 — 顯示實作草率。

3. 實戰破解流程 (防禦視角)

  1. 網路嗅探 (Wireshark/NetMon) 捕獲 TDS 登入封包 (TCP 1433)。
  2. 解析封包提取用戶名、密碼雜湊。
  3. 使用對照表/彩虹表/離線暴力工具 (如 Cain & Abel、John the Ripper) 反推明文。
  4. 若密碼簡短/字典詞,秒級破解。

現代版本 (SQL Server 2005+) 的根本性修正

面向SQL Server 2000SQL Server 2005+
網路協定加密無 (明文 TDS),需手動配置 SSL 憑證預設支援 TLS 1.2+ 強制加密 (ForceEncryption),登入封包全程加密
密碼雜湊演算法專有弱雜湊SHA-2 256/512 + 隨機鹽值 + 多輪迭代 (PBKDF2 風格),儲存於 sys.sql_logins
登入驗證流程客戶端雜湊後送伺服器比對伺服器端驗證:客戶端傳送明文密碼 (在 TLS 加密通道內),伺服器端用鹽值重算比對
防暴力破解無登入失敗鎖定原則 (Windows 驗證繼承 AD 原則 / SQL 登入可配置)
審計僅錯誤日誌資料庫審計規格、擴充事件、登入觸發器

防禦檢核清單:杜絕舊版風險

  1. 淘汰 SQL Server 2000/2005:已停止主流支援,無安全性更新。升級至 2019/2022 或 Azure SQL。
  2. 強制 TLS 加密:SQL Server 組態管理員 → 協定 → ForceEncryption = Yes;憑證來自內部 CA 或公開 CA。
  3. 停用 SQL Server 驗證:改用 Windows 整合驗證 / Azure AD 驗證,享有 Kerberos、MFA、條件式存取。
  4. 封鎖 TCP 1433 對外暴露:防火牆/NSG 僅允許應用伺服器 IP 存取;生產環境走 Private Link / VNet。
  5. 啟用登入失敗鎖定:ALTER LOGIN ... WITH PASSWORD POLICY = ON; (繼承 Windows 鎖定門檻)。
  6. 部署資料庫審計:記錄所有登入成功/失敗、權限變更、結構描述變更至檔案/事件中樞/Log Analytics。
  7. 定期輪換服務帳號/應用密碼:使用 Key Vault / Secret Manager 管理,應用啟動時動態拉取。

結語

舊版 SQL Server 密碼加密是安全設計反面教材:自訂演算法、無鹽、無迭代、明文傳輸。現代版本透過標準化 TLS + 強雜湊 + 伺服器端驗證 + 審計徹底解決。若仍在維護舊版系統,請視為高風險技術債務,制定淘汰時間表並實施上述緩解措施。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved