1. 程式人生 > 其它 >Windows內網協議學習Kerberos篇

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
該訊息包括:

  1. 使用者主體名稱。
  2. 帳戶域的名稱。
  3. 使用從使用者密碼派生的使用者金鑰加密的預身份驗證資料。(NTLM Hash(Timestamp))

檢索使用者金鑰

當 KDC 收到來自使用者工作站上 Kerberos 客戶端的請求時,KDC 會在其資料庫中搜索該使用者,提取帳戶記錄,並從記錄中的欄位中獲取使用者金鑰

驗證使用者身份

KDC 解密預認證資料並評估其中的時間戳。如果時間戳通過測試,則 KDC 可以確信預認證資料是用使用者金鑰加密的,從而驗證使用者是真實的。

訊息 2:身份驗證服務回覆(Authentication Service Reply)

也就是AS_REP
會回覆兩個訊息

  1. Client NTLM Hash(Session Key)
    ,使用者與TGS一起使用的TGS會話金鑰,使用使用者的NTLM Hash進行加密;用於後續和TGS服務進行通訊
  2. 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

可以從圖中看出 傳送過去的也有兩部分

  1. TGT: 使用者的TGT
  2. 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

會向伺服器傳送兩條訊息

  1. Service Ticket:用伺服器Hash加密的票據
  2. 新的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中的時間進行比較。如果時間匹配,則客戶知道該服務是真實的。