Windows SSPI And SPN 筆記
2025-03-19
筆記 Windows Server SSPI 以及 SPN 的相關知識 🤓
說明
名詞解釋
SSPI (Security Support Provider Interface)
它讓應用程式可以使用不同的安全驗證方法(例如 NTLM 或 Kerberos)來確認身份或保護資料,而無需了解這些方法的內部細節。
SPN (Service Principal Name)
SPN 是網路中服務的「識別資訊」,用於 Kerberos 驗證。它由「服務類型」和「主機名稱」組成,例如 MSSQLSvc/sqlserver.example.com
或 HTTP/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) |