kerberos協議與票據


kerberos協議與票據

windows用戶密碼存儲在SAM文件(安全用戶管理)中

當我們登錄系統時,會對我們的密碼進行hash加密后與數據庫中密碼對比、

(SAM文件保留了計算機本地所有用戶的憑證信息)

image-20200927202906998

NTLM(NT Lan Manager)協議

早期SMB協議在網絡上傳輸明文口令。后來出現 LAN Manager Challenge/Response驗證機制,簡稱LM,它是如此簡單以至很容易就被破解。微軟提出了WindowsNT挑戰/響應驗證機制,稱之為NTLM。

是一種基於挑戰、應答的wins早期認證機制,安全性不高,從windows2000開始默認不再使用。

認證流程

winlogon.exe -> 接收用戶輸入 -> lsass.exe -> (認證)
(lsass進程,這個進程中會存一份明文密碼,將明文密碼加密成NTLM Hash,對SAM數據庫比較認證)

認證過程是將我們輸入的密碼轉化成NTML hash 與SAM 文件中的NTML hash對比

windows下兩種hash加密方法

LM hash

一種對稱加密hash

參考:https://www.cnblogs.com/-qing-/p/11343859.html

LM hash的不足:

1.輸入密碼后 大小寫不敏感

2.可以猜測到密碼是否大於七位

3.‘魔術字符串’已知,容易破解

NTML hash

將輸入的密碼進行十六進制編碼后轉化為Unicode,再用MD4加密得到結果

admin -> hex(16進制編碼) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
具體過程

1.客戶端向服務端發送用戶信息

2.服務端收到后判斷該用戶是否在本地賬戶列表中,如果沒有認證失敗,如果有隨機產生一個16位隨機數,稱為‘Challenge’,

使用用戶名對應的NTLM hash加密Challenge生成Challenge-1,存放在服務端內存中,然后將Challenge發送給客戶端

3.客戶端收到Challenge后用密碼對應的NTLM hash加密后得到Response( 表現形式為Net-NTLM hash),將它發送給服務方

4.服務端驗證Response和Challenge-1 相等則驗證成功

image-20200927205604311

kerberos協議


Kerberos 是一種網絡認證協議,其設計目標是通過密鑰系統為 客戶機 / 服務器應用程序 提供強大的認證服務。該認證過程的實現不依賴於主機操作系統的認證,無需基於主機地址的信任,不要求網絡上所有主機的物理安全,並假定網絡上傳送的數據包可以被任意地讀取、修改和插入數據。在以上情況下, Kerberos 作為一種可信任的第三方認證服務,是通過傳統的密碼技術(如:共享密鑰)執行認證服務的

三個實體:Client Server KDC(Authentication Server --AS 和 Ticket-Grant Service --TGS)

AS :用來認證用戶身份

TGS:授權服務訪問

Server:提供服務

Client:請求服務

具體過程

第一步:用戶登錄、請求身份認證

1用户登录

這個階段用戶輸入賬號密碼,在客戶端密碼被一個單向hash函數加密成Client密鑰

2.1客户端请求用户认证

用戶向AS發送請求

隨后AS確認存在該用戶,就將數據庫中該用戶對應的密碼也用同樣的單向hash函數加密,得到Client密鑰,,與用戶登錄時生成的相同。

2.2AS确认客户端用户身份

AS發回給Client的內容

1.用Client密鑰加密的Client/TGS SessionKey(client ,TGS間的通訊)

2.用TGS密鑰加密的TGT(用 krbtgt的HTLM hash加密)

(TGT中有:Client/TGS SessionKey、Client ID、Ticket的有效時間、Client的網絡地址)

Client收到后因為有Client密鑰所以可以解密得到Client/TGS SessionKey

第二步:請求服務授權

3.1客户端请求授权服务访问

Client向TGS發送的有

要服務的ID (Service ID) 和 上一步AS給的TGT

還有用Client/TGS SessionKey加密的{Client ID,Timestamp}

3.2TGS授权客户端用户访问服务

然后TGS返回給Client的信息有

MsgF:使用[Client/TGS SessionKey]加密的[Client/Server SessionKey]

MsgE:Client/Server SessionKey(用Service密鑰加密)、Client網絡地址、Ticket有效時間、Client ID

因為Client有Client/TGS SessionKey 可以的到 Client/Server SessionKey

然而 Client/Server SessionKey因為是用Service加密,所以對Client不透明

第三步:發送服務請求、Server響應請求

4.1客户端向申请的服务发送请求

MsgE:就是上一步的MsgE,

MsgG:用Client/Server SessionKey加密的{Client ID,Timestamp}(用來向ss證明,自己有來自TGS的key)

4.2被请求的服务给客户端响应

SS收到客戶端的服務請求之后,先利用自身的[Service密鑰]對Msg E進行解密,提取出Client-To-Server Ticket, 在3.2步驟中,提到了該Ticket中包含了[Client/Server SessionKey]以及Client ID信息。
SS使用[Client/Server SessionKey]解密Msg G,提取Client ID信息,而后將該Client ID與Client-To-Server Ticket中的Client ID進行比對,如果匹配則說明Client擁有正確的[Client/Server SessionKey]
而后,SS向Client響應Msg H(包含使用[Client/Server SessionKey]加密的Timestamp信息)。
Client收到SS的響應消息Msg H之后,再使用[Client/Server SessionKey]對其解密,提取Timestamp信息,然后確認該信息與Client發送的Authenticator 2中的Timestamp信息一致。

黃金票據(Golden Ticket)

在認證的第一步Client通過AS認證后,AS會給Client發送Client/TGS SessionKey和TGT ,因為Client/TGS SessionKey不會保存在KDC中,而TGT的產生是用krbtgt 的NTLM hash加密(固定)的,所以假如知道了krbtgt的NTML hash就可以偽造TGT,然后這樣有了黃金票據,在Client和TGS交互的時候,只要拿出偽造的TGT,和隨便一個Client/TGS SessionKey生成的{Client ID,Timestamp}就可以跳過AS的驗證,不用驗證賬號和密碼

特點

需要知道krbtgt的NTML hash

不用到AS那去驗證

可以獲取任意服務

白銀票據(Silver Ticket)

在認證的第三步,Client要向Server發送ST 和 Client/Server SessionKey加密的{Client ID,Timestamp} ,然后服務端用自己的Key(Server的NTML hash)解密得到 Client/Server SessionKey,然后用Client/Server SessionKey解密得到{Client ID,Timestamp} 。

如果Client知道了Server的NTML hash就可以偽造出一個ST ,而 Client/Server SessionKey在server收到之前是不知道的,也可以偽造,從而繞過了KDC,直接獲取服務。

特點

需要知道server的NTML hash

不需要和KDC驗證

只能得到特定的服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM