Windows SSPI And SPN 筆記

2025-03-19

筆記 Windows Server SSPI 以及 SPN 的相關知識 🤓

logo

說明

名詞解釋

SSPI (Security Support Provider Interface)

它讓應用程式可以使用不同的安全驗證方法(例如 NTLM 或 Kerberos)來確認身份或保護資料,而無需了解這些方法的內部細節。

SPN (Service Principal Name)

SPN 是網路中服務的「識別資訊」,用於 Kerberos 驗證。它由「服務類型」和「主機名稱」組成,例如 MSSQLSvc/sqlserver.example.comHTTP/webserver.example.com 表示運行在 webserver.example.com 上的資料庫服務與網頁服務。SPN 必須綁定到運行該服務的帳戶(可以是用戶帳戶或電腦帳戶),以便 Kerberos 確認服務的身份。

NTLM (NT LAN Manager)

NTLM 是 Windows 系統中一種較舊的身份驗證方法,用戶輸入密碼後,系統會以特殊方式檢查其正確性。相較於更新的 Kerberos,NTLM 的安全性較低,因此現在通常作為備用方案。

SETSPN

SETSPN 是一個管理工具,用來設定或檢查 SPN。你可以用它來新增、刪除或列出服務的「識別資訊」,確保 SPN 設定正確,讓 Kerberos 驗證能順利進行。

MSSQLSVC

MSSQLSVC 是 SPN 的「服務類型」,用來標示 Microsoft SQL Server 服務。例如 MSSQLSvc/sqlserver.example.com 表示運行在 sqlserver.example.com 的 SQL Server 資料庫服務,用於提供 Kerberos 識別該服務。

如何確認 SPN

最簡單的方式就是透過 SETSPN 向 AD 詢問 SPN 設定。

搭配 -L 參數可以列出特定的帳戶在 AD 中的所有 SPN 設定,注意在要查詢帳戶不是 NT Service\MSSQLSERVER 而是要使用電腦帳戶的身分 hostname$

SETSPN -L <account>
SETSPN -L hostname$
SETSPN -L domain\sqlservice

搭配 -Q 參數可以詢問特定的 SPN 是否存在以及所屬的帳戶。

SETSPN -Q <SPN>:<port>
SETSPN -Q MSSQLSvc/sqlserver.example.com:1433

如何異動 SPN

使用 -D 參數可以刪除 SPN,用以處理服務與帳戶不一致的問題。

SETSPN -D <SPN>:<port> <account>
SETSPN -D MSSQLSvc/sqlserver.example.com:1433 domain\sqlservice

使用 -S 參數可以新增 SPN,確保服務與帳戶一致進行 Kerberos 驗證。

SETSPN -S <SPN>:<port> <account>
SETSPN -S MSSQLSvc/sqlserver.example.com:1433 domain\sqlservice

進階應用

可以使用 -Q 來藉由 SPN 的查詢,盤點網域當中的 SQL Server Service,多數的資料庫實體都可以被盤點,只有在預設安裝使用 AD 帳戶但沒有主動註冊 SPN 的情況下才會遺漏。

SETSPN -Q MSSQLSvc/*: > sqlserver_spn.txt

各種常見的 SPN

SPN 用途
Dfsr/foo.bar 分散式文件系統複製
DNS/foo.bar DNS 服務
exchangeAB/foo.bar Exchange 地址簿服務
GC/foo.bar/bar AD 全域編錄服務
HOST/bar 主機級別認證(如 SMB 或 DNS)
HOST/foo.bar/bar 主機服務(特定域)
ldap/foo.bar/bar 域控制器 LDAP 服務
ldap/foo.bar/DomainDnsZones.bar 域級 DNS 區域管理
ldap/foo.bar/ForestDnsZones.bar 林級 DNS 區域管理
ldap/foo.bar 標準 LDAP 服務
ldap/foo 簡單 LDAP 服務
MSSQLSvc/foo.bar SQL Server 服務
RestrictedKrbHost/bar 限制性 Kerberos 委派的服務
RPC/_msdcs.bar GUID + _msdcs.bar
TERMSRV/foo.bar RDP 遠程桌面服務
WSMAN/foo.bar 遠程管理服務(WinRM)

參考連結

使用 gMSA 讓 Windows 排程與服務帳號更安全 | 黑暗執行緒

使用 Windows 驗證連線至 SQL Server 時,發生「無法產生 SSPI 內容」錯誤