Windows內網協議學習Kerberos篇
認證流程
角色 | 功能 |
---|---|
Domain Controller | 也就是域控 |
Key Distribution Center | 祕鑰分發中心,簡稱KDC,預設安裝在域控裡,包括AS、AD和TGS。 |
Account Database | 類似於SAM的一個數據庫(AD),儲存所有client的白名單,只有存 在於白名單的client才能順利申請到TGT |
Authentication Service | 簡稱為AS,為client生成TGT的服務;也就是認證服務 |
Session Key | 會話金鑰 |
Session Key Distribution | 會話金鑰分發,當客戶端想要連線到伺服器時,客戶端會向 KDC 傳送請求,KDC 會分發一個唯一的短期會話金鑰,供雙方在相互驗證時使用 |
Ticket | 票據,是網路物件互相訪問的憑證 |
Ticket Granting Ticket | 票據授權票據(TGT)。TGT 使身份驗證服務能夠安全地將請求者的憑據傳輸到票證授予服務。 |
Ticket Granting Service: | 簡稱為TGS,為client生成某個服務的ticket;也就是出票服務 |
User key | 也就是使用者的NTLM Hash |
AS_REQ & AS_REP
從AS中獲取TGT
訊息 1:身份驗證服務請求(Authentication Service Request)
也就是AS_REQ
client將訊息傳送到KDC
該訊息包括:
- 使用者主體名稱。
- 帳戶域的名稱。
- 使用從使用者密碼派生的使用者金鑰加密的預身份驗證資料。(NTLM Hash(Timestamp))
檢索使用者金鑰
當 KDC 收到來自使用者工作站上 Kerberos 客戶端的請求時,KDC 會在其資料庫中搜索該使用者,提取帳戶記錄,並從記錄中的欄位中獲取使用者金鑰
驗證使用者身份
KDC 解密預認證資料並評估其中的時間戳。如果時間戳通過測試,則 KDC 可以確信預認證資料是用使用者金鑰加密的,從而驗證使用者是真實的。
訊息 2:身份驗證服務回覆(Authentication Service Reply)
也就是AS_REP
會回覆兩個訊息
- Client NTLM Hash(Session Key)
- TGT,使用TGS金鑰加密
TGT 包括:
- KDC 與使用者一起使用的 TGS 會話金鑰。
- 使用者的授權資料。
- 授權資料包括:
- 使用者帳戶的 SID。
- 使用者所在域 tailspintoys.com 中的安全組的 SID。
- 企業中通用組的 SID,包括使用者或使用者所屬的域組之一。
當client收到server的回覆時,用自己的NTLM Hash解密訊息1,獲得其中的Session Key
客戶端不需要解密訊息2(他也解密不了 沒有key),只需要訊息1中的TGS Session Key就可以向TGS發起請求
TGS_REQ & TGS_REP
從TGS中獲取ticket
訊息 3:票據授予服務請求
也就是TGS_REQ
可以從圖中看出 傳送過去的也有兩部分
- TGT: 使用者的TGT
- Authenticator:在Kerberos的Authenticator實際上就是關於Client的一些資訊和當前時間的一個Timestamp;Authenticator=Session Key(Client info + Timestamp)
訊息 4:票據授予服務回覆
也就是TGS_REP
當 KDC 收到 KRB_TGS_REQ 時,它用自己的金鑰(TGS key)解密TGT,從TGT中提取到Session Key,再使用Session Key解密其他內容,解密出來的內容同TGT中的資訊進行校驗來評估客戶端可不可信。
如果驗證通過,KDC從TGT中提取使用者的授權資料並建立另一個Session Key(Server Session Key)供客戶端與服務一起使用。KDC使用使用者的TGS裡的Session Key加密這個Server Session Key(Session key(Server Session Key))。然後和使用者的授權資料一起打包進Ticket中,並使用服務的金鑰(Server Hash)加密Ticket(Server Hash(Ticket))。然後,KDC 在 Kerberos 票證授予服務回覆 (KRB_TGS_REP) 中將這些憑據傳送回客戶
新的Server Session Key是客戶端和服務端一起使用的
當Kerberos客戶端收到回覆時,它使用使用者的TGS的Session Key解密Server Session Key以用於服務,並將金鑰儲存在其憑據快取中。然後它提取服務的票證並將其儲存在其快取中。
AP-REQ & AP-REP
就是請求服務了
AP-REQ
會向伺服器傳送兩條訊息
- Service Ticket:用伺服器Hash加密的票據
- 新的Authorization:裡面存的是使用者的資料+Timestamp,用Server Session Key加密
AP-REP
該服務接收 KRB_AP_REQ,解密Ticket,並提取使用者的授權資料和Server Session Key。該服務使用Server Session Key解密使用者的Authorization,然後評估其中的時間戳。如果身份驗證器通過測試,則服務會在客戶端的請求中查詢相互身份驗證標誌。如果設定了該標誌,則服務使用會話金鑰對來自使用者身份驗證器的時間進行加密,並在 Kerberos 應用程式回覆 (KRB_AP_REP) 中返回結果。如果未設定標誌,則不需要響應。
當用戶工作站上的客戶端收到 KRB_AP_REP 時,它會使用與服務共享的Server Session Key解密服務的Authorization,並將服務返回的時間與客戶端原始的Authorization中的時間進行比較。如果時間匹配,則客戶知道該服務是真實的。