Black Hat Windows 2002 - MS SQL Server Security Mysteries Explained
三句話摘要
SQL Server安全加固與部署的完整實踐指南,涵蓋原生安全強化、威脅偵測、加密部署、權限管理與.NET應用開發。 SQL Server安全不是安裝後套用防火牆規則就完事,而是從安裝規劃到認證架構、權限模型、加密策略到開發實踐的全鏈路設計——每個環節薄弱都會被利用,唯有深入理解應用需求與威脅模型才能做出正確權衡。 1. 安裝階段是關鍵防線:講者強調安裝時的每個決策都會影響後續安全,例如選擇服務帳戶時,許多人因為方便而選擇Local System,但應該建立專用的低權限帳戶(甚至本機帳戶即可),並給予Guest群組成員資格即足夠。即使計畫使用Windows驗證,也必須設定強密碼的SA帳戶,以防未來有人臨時改為混合模式認證。
重點整理
重點- 1
1. 安裝階段是關鍵防線:講者強調安裝時的每個決策都會影響後續安全,例如選擇服務帳戶時,許多人因為方便而選擇Local System,但應該建立專用的低權限帳戶(甚至本機帳戶即可),並給予Guest群組成員資格即足夠。即使計畫使用Windows驗證,也必須設定強密碼的SA帳戶,以防未來有人臨時改為混合模式認證。
- 2
2. 認證模式選擇影響整體設計:Windows整合認證是首選,但前提是應用程式與基礎設施支援。若必須使用混合認證,則須透過修改系統存儲程序(SP_password)來增加密碼複雜性檢查、透過連線字串隱藏認證資訊、以及物理網路隔離等多層防禦。講者用實例展示了IIS與SQL Server間的認證委派問題:IIS的匿名使用者被對應到IUSER帳戶,若IIS啟用「Allow IIS to control password」會導致驗證失敗。
- 3
3. 危險的DDL權限濫用:DDL管理員可以建立外觀相同的系統存儲程序(例如XP_COMMAND_SHELL),當系統管理員無意間在錯誤的資料庫上下文執行此程序時,即可觸發後門邏輯(添加帳戶到管理員群組)。這個案例說明了延遲編譯特性的安全隱患。
- 4
4. .NET託管程式碼帶來新機遇與風險:.NET框架提供代碼存取安全性(CAS)、參數化查詢、內建加密類別等防護,但並未根本杜絕SQL注入風險。開發者仍可能以字串串接方式建構SQL命令,因此良好的程式設計實踐依然是防線。
實用技巧與重點
乾貨- 部署與硬化步驟:
- 安裝前:建立低權限帳戶、使用NTFS磁區分割、設定強SA密碼
- 安裝後:掃描暫存檔案移除洩露的認證、啟用稽核(預設關閉)、移除未使用的網路通訊協議(Shared Memory用於本機、TCP/IP用於遠端)
- 服務管理:停用Distributed Transaction Controller(DTC)、SQL Agent(若無排程工作需求)、Microsoft Search(全文搜尋);使用Enterprise Manager的MNC外掛變更服務帳戶,勿在服務控制管理員直接變更
- 移除擴展存儲程序:xp_cmdshell、xp_regread等(物理DLL仍存在,但可防止自動化攻擊)
- 密碼複雜性實作示例:
- 建立使用者訊息5001:「password does not meet complexity requirements」
- 修改SP_password程序,新增檢查:`IF LEN(@newpwd) < 6 RAISERROR(5001, ...)`
- SSL/TLS設定步驟:
- 登入憑證服務伺服器,請求進階憑證
- 確保憑證帳戶與SQL Service執行帳戶相符
- 選項:(a)機器存儲(需以管理員登入)或(b)使用者帳戶存儲(需以SQL服務帳戶登入)
- 在伺服器網路公用程式中啟用「強制通訊協定加密」
- IIS-SQL Server整合常見誤區:
- IUSER帳戶:格式為IUSER_機器名稱,SQL Server上須建立同名帳戶
- 若啟用「Allow IIS to control password」,IIS SubAuth DLL改變使用者內容切換機制,無法進行Kerberos委派(hop)
- 解決方案:使用DMZ網域帳戶,避免多機器密碼同步問題
- 資料加密選項:
- 對稱加密:應用程式使用會話金鑰加密資料,再用公鑰加密會話金鑰,私鑰存儲離線
- COM元件方式:使用第三方COM或自寫Crypto API
- 擴展存儲程序方式:DLL外掛加密,但SQL Server擴展性不如Web伺服器
- 檔案層級:EFS或廠商專有工具保護MDF檔案
- SQL Ping 2.0工具功能:
- 掃描IP範圍內的SQL Server實例
- 對每個實例執行字典攻擊(預設2使用者×7密碼組合)
- 傳回版本資訊,對應至Service Pack編號
- 保存掃描結果為報告格式
- C2準則(C2 Compliance):
- 移除的擴展存儲程序清單與逐步說明見Microsoft官方文件
- 現有評估基於NT 4.0,但SQL Server部分仍可參考
- NET開發防護:
- 用參數化查詢取代字串串接:`command.CommandType = CommandType.StoredProcedure`
- 使用SqlParameter強型別參數
- 代碼存取安全性(CAS)屬性:`[SqlClientPermission(SecurityAction.Deny, ...)]`限制特定方法的資料庫存取
- 自定義權限設定,例如禁止空密碼連線
- 開發工作站風險:
- .NET SDK預設安裝MSDE,隱藏實例名稱為「\NETSDK」,預設混合認證、SA空密碼、Local System帳戶
- 多實例設定下:TCP port 1433被佔用,SQL Server自動分配隨機通訊埠,傳統掃描失效
- Service Pack必須逐實例安裝(instance-specific),若有5個實例需安裝5次
- 參考資源:
- App Detective(AppSec Inc.):唯一已知的商用掃描器,仍在測試版
- SQL Server版本對應表(第三方維護網站):mapping Service Pack編號至CVE漏洞
結論
結論“SQL Server安全不是安裝後套用防火牆規則就完事,而是從安裝規劃到認證架構、權限模型、加密策略到開發實踐的全鏈路設計——每個環節薄弱都會被利用,唯有深入理解應用需求與威脅模型才能做出正確權衡。”
完整解析
詳細演講背景源自2002年Windows安全環境的現實挑戰:SQL Server被廣泛部署卻常被忽視,開發者工作站充斥著配置不當的實例,連線字串安全性問題眾說紛紜。講者以實踐導向的方法論,從安裝前規劃開始系統論述。
首先是服務帳戶決策,這看似微小卻影響深遠。許多管理員因為懶惰或不知道為何需要這麼做,就選擇Local System——這賦予SQL Server過度的系統權限。講者建議建立專門帳戶,給予最小必要權限(例如guest群組成員),即可防止實例遭入侵時的橫向移動。更關鍵的是,即使現在不用SA帳戶,也要設定強密碼,因為未來某人臨時切換認證模式測試時,會成為攻擊入口——這是經驗談,不是理論。
認證模式的選擇攸關整個部署架構。Windows整合認證是標準答案,但實現它需要IIS與SQL Server間能進行Kerberos委派。講者用iBuySpy示例展示IUSER帳戶的委派困境:若IIS啟用SubAuth DLL管理密碼,用戶內容切換機制會改變,導致SQL Server無法確認身份。解決方案是使用DMZ域帳戶,讓所有Web伺服器共享同一帳戶身份,避免密碼同步的惡夢。若被迫使用混合認證,則須透過SP_password程序注入複雜性檢查、連線字串避免嵌入認證等防禦深度。
而DDL權限濫用展示了SQL Server權限模型的根本脆弱性。DDL管理員無法直接執行xp_cmdshell,但可以建立名為「xp_cmdshell」的存儲程序到目標資料庫,當系統管理員忽略當前資料庫上下文而執行此程序時,即觸發後門。講者在演講中現場示範,先建立惡意程序以添加帳戶到管理員群組,然後當SA以為在master資料庫執行常規命令時,實際執行了目標資料庫裡的後門程序。這揭示延遲編譯(delayed compilation)特性如何被濫用——程序名稱解析延至執行時,為權限提升創造窗口。
加密話題則涵蓋對稱與非對稱方案的權衡。SQL Server本身不提供加密功能,加密須在應用層進行。核心問題是金鑰存儲位置——若金鑰與加密資料同地,即失去防護意義。講者建議採用非對稱加密:應用層用公鑰加密會話金鑰,會話金鑰加密實際資料,私鑰存儲在離線安全區域。缺點是不適用所有場景——若應用本身需直接存取敏感資料,仍須在本機存儲私鑰,這又回到了原點。實務折衷是盡量推遠私鑰位置、強化檔案系統權限、使用EFS等措施提高成本。
.NET的出現帶來樂觀與風險並存的局面。代碼存取安全性(CAS)允許按方法粒度控制資料庫存取權限,參數化查詢內建於框架,加密類別開箱即用。但講者強調,這些不是銀彈。開發者依然可能用字串串接寫出脆弱的SQL命令,CAS只作用於託管程式碼而非已上傳的惡意二進位檔。真正的防線仍是開發紀律:使用StoredProcedure型別、參數化查詢、避免動態SQL。
最後的SQL Ping 2.0工具與開發工作站風險警告,反映了攻擊面的真實拓展。MSDE隱藏安裝、隨機通訊埠分配、實例特定的Service Pack機制——這些複雜性意味著傳統掃描已失效,企業需要新的探測方式。講者提供的工具允許大規模批量掃描與字典攻擊,映射版本到CVE,讓安全團隊能有系統地審計整個網段。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

