前言
因爲疫情導致在家辦公,正好可以利用這段時間提升一下自己,所以打算學習一下Windows認證。
windows認證
Kerberos 是一種網絡認證協議,其設計目標是通過密鑰系統爲客戶機 / 服務器應用程序提供強大的認證服務。該認證過程的實現不依賴於主機操作系統的認證,無需基於主機地址的信任,不要求網絡上所有主機的物理安全,並假定網絡上傳送的數據包可以被任意地讀取、修改和插入數據。在以上情況下, Kerberos 作爲一種可信任的第三方認證服務,是通過傳統的密碼技術(如:共享密鑰)執行認證服務的。
整個認證過程需要以下設備:
客戶端(Client)
服務端(Server)
認證端(KDC) kerberos認證服務器稱KDC,它是由 Authentication Service 和 Ticket Granting Service 組成,但是它會訪問 AD數據庫,在認證中會需要到。
- 客戶端向AS請求
首先client會先向DC(KDC>AS)發送請求,但是爲了保證傳輸安全,客戶端會使用已登錄用戶(user1)的Hash加密請求包中的timestamp(時間戳)部分,而域中所有用戶的信息(包括hash)都保存在AD(NTDS.DIT)中,這樣就只有DC和客戶端可以對請求包進行解密,請求包中需要包含的內容有:
發送內容① :[Pre-authentication data(client is ntlm_hash for Timestamp),Client name & realm(DomainName\Username),Server Name(KDC TGS NAME)]
Pre-authentication data:被客戶端加密的timestamp內容
Client name & realm:客戶端用戶名,如user1/h0r2yc.cn
Server Name:KDC、TGS 的 Server Name。
- AS認證通過後發送TGT給客戶端
DC(KDC>AS)接收到client發來的請求包後,會根據請求包中的用戶名(user1)向AD請求user1對應的hash,然後用hash解密出timestamp,如果解密出的timestamp和當前時間未超過5min,驗證通過,KDC會生成一個使用user1的hash加密的logon session key,以及一個用krbtgt(用於 Kerberos 身份驗證的賬戶) hash加密的TGT,然後發送給客戶端,TGT的有效期爲8個小時。
發送內容②:[Client_ntlm_hash(K(c,tgs))],[Krbtgt_ntlm_hash(k(c,tgs),Client_name(DomainName\Username),TGT_EndTime)]
Logon Session Key:會話憑證
Client name & realm:客戶端用戶,如user1
End time: TGT到期的時間
客戶端接收到數據,使用user1 hash解密出logon session key,但是TGT使用krbtgt hash加密,客戶端沒有對應的hash所以沒辦法解密。有了logon session key就可以進行第三步。
TGT裏面包含PAC,PAC包含Client的sid,Client所在的組。註釋:PAC的全稱是Privilege Attribute Certificate(特權屬性證書)。不同的賬號有不同的權限,PAC就是爲了區別不同權限的一種方式。
大多數服務不驗證PAC(通過將PAC校驗和發送到域控制器進行PAC驗證),因此使用服務帳戶密碼哈希生成的有效TGS可以完全僞造PAC。
- 客戶端向TGS發送TGS請求包
client接收到DC(KDC>AS)發送回來的數據後,client拿着自己加密的Session_key和TGT憑證向票據生成服務器(TGS)發起一個認證請求(KRB_TGS_REQ)。
發送內容③ :[Session_key(Authenticator([DomainName\Username,ServerName(DomainName\Server)]))],[TGT]
TGT:通過向AS請求獲得的TGT
Authenticator:客戶端使用logon session key加密的聯絡暗號
Client name & realm:客戶端用戶,如user1
Server name & realm:客戶端要訪問的服務端的用戶名
Pre-authentication data:被客戶端加密的timestamp內容
- TGS認證通過後發送Ticket以及session key
TGS接收到client發來的請求後,使用krbtgt hash解密TGT得到logon session key,在使用logon session key解密Authenticator得到聯絡暗號,認證通過。認證通過後TGS生成使用logon session key加密的session key(session key用於客戶端和server進行通訊),再生成一個使用user2 hash加密的ticket,然後發送給客戶端。
發送內容④ :k(c,tgs)加密[Session_key],[Server_ntlm_hash(Tiket(K(c,s),Client_Name(domainName\Username),TGT_EndTime))]
Session Key:用於客戶端和server通訊的key。
Client name & realm: 客戶端用戶,如user1
End time: Ticket的到期時間
- 客戶端向server發送請求
client接收到數據後,使用logon session key解密出session key,有了session key和Ticket後,就可以直接與server進行交互,無需再通過KDC認證。這時候client創建一個使用session key加密的Authenticator和timestamp(時間戳),然後client將加密過的timestamp、Authenticator以及ticket,還有一個詢問是否需要雙向驗證的flag發送給server。
發送內容⑤:K(c,s)加密[Authenticator([DomainName\Username,ServerName(DomainName\Server)])],[Tiket]
- server驗證通過允許訪問
server接收到請求包後,使用user2 hash解密Ticket得到session key,再使用session key解密Authenticator和timestamp,如果timestamp和當前時間不超過5min,驗證通過,允許訪問。
發送內容⑥:K(c,s)加密[Authenticator]
白銀票據分析及利用
白銀票據是一個有效的票據授予服務(TGS)Kerberos票據,因爲Kerberos驗證服務運行的每臺服務器都對服務主體名稱的服務帳戶進行加密和簽名。
白銀票據主要是發生在第五步驟上。
-
首先我們嘗試訪問目標服務器根目錄
訪問主域控文件共享,可以看到是無法訪問的,說明當前用戶密碼存在問題,也可以理解爲無權限。 -
用域管理賬號登錄主域控,使用工具mimikatz.exe執行命令抓取hash(在域控中執行):
#mimikatz.exe “privilege::debug” “sekurlsa::logonpasswords” exit>log.txt
-
在Client端查看SID號(在Cient端執行),複製並保存,也可以根據上一步mimikatz導出的文件中找到。
-
將在域控上抓取的hash也就是NTML值的複製到Client端,打開mimikatz.exe工具(在Cient端執行),創建票據命令:
#kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目標服務器主機名> /service:<服務類型> /rc4:<NTLM Hash> /user:<用戶名> /ptt
kerberos::golden:使用minikatz中票據的功能
/domain:指定域名
/sid:Client端查詢的sid號,在域控中查詢也可以,都是一樣的
/target:主域控中的計算機全名
/rc4:在域控中抓取的hash(NTLM)
/service:需要僞造的服務(cifs只是其中的一種服務,可僞造的服務很多)
/user:需要僞造的用戶名(可自定義)
/ppt:僞造了以後直接寫入到內存中
- 執行了後如果提示successfully表示僞造的白銀票據成功寫入到內存中。可以通過kerberos::list來查看
- 打開Client的cmd來執行共享文件查看,可以看到是可以成功查看域控c盤下的文件,並且此時權限也是最高的權限。
白銀票據可僞造服務類型
服務註釋 | 服務名 |
---|---|
WMI | HOST、RPCSS |
Powershell Remoteing | HOST、HTTP |
WinRM | HOST、HTTP |
Scheduled Tasks | HOST |
WMI | HOST、RPCSS |
LDAP 、DCSync | LDAP |
Windows File Share (CIFS) | CIFS |
Windows Remote Server Administration Tools | RPCSS、LDAP、CIFS |
檢測白銀票據利用行爲
銀票活動可能具有以下問題之一:
帳戶域字段應爲DOMAIN時爲空白
帳戶域字段應爲DOMAIN時爲DOMAIN FQDN。
事件ID:4624(帳戶登錄)
帳戶域是FQDN,應爲短域名
帳戶域:LAB.ADSECURITY.ORG [ADSECLAB]
事件ID:4634(帳戶註銷)
帳戶域爲空,應爲短域名
帳戶域:_______________ [ADSECLAB]
事件ID:4672(管理員登錄)
帳戶域爲空,應爲短域名
帳戶域:_______________ [ADSECLAB]
不過根據本人測試採集到的日誌信息,未發現此類異常日誌。可能是哪裏存在問題,歡迎大佬們指點
白銀/黃金區別
-
訪問權限不同
Golden Ticket: 僞造 TGT,可以獲取任何 Kerberos 服務權限
Silver Ticket: 僞造 TGS,只能訪問指定的服務 -
加密方式不同
Golden Ticket 由 Kerberos 的 Hash 加密
Silver Ticket 由服務賬號(通常爲計算機賬戶)Hash 加密 -
認證流程不同
Golden Ticket 的利用過程需要訪問域控,而 Silver Ticket 不需要
參考鏈接
白銀票據與黃金票據探究:
http://sh1yan.top/2019/06/03/Discussion-on-Silver-Bill-and-Gold-Bill/
windows認證-白銀票據、黃金票據分析及利用
http://www.h0r2yc.cn/2019/08/17/windows認證-白銀票據、黃金票據分析及利用/
[域滲透] - Pass the Ticket之金票&銀票
http://www.test666.me/archives/264/