kerberos
- 2021 年 5 月 21 日
- 筆記
kerberos概述
Kerberos(/ˈkərbərəs/)是一種電腦網路授權協議,用來在非安全網路中,對個人通訊以安全的手段進行身份認證。這個詞又指麻省理工學院為這個協議開發的一套電腦軟體。軟體設計上採用客戶端/伺服器結構,並且能夠進行相互認證,即客戶端和伺服器端均可對對方進行身份認證。
在kerberos協議中有三個角色:
- Client(訪問服務)
- Server(提供服務)
- KDC(Key Distribution Cente)密鑰分發中心
其中:
KDC(Key Distribution Center)= 密鑰分發中心
AS(Authentication Server)= 認證伺服器
TGT(Ticket Granting Ticket)= TGT服務票據,由AS在AS-REP發放
TGS(Ticket Granting Server)= 票據授權伺服器
ST(Server Ticket)=ST服務票據,由TGS在TGS-REP發放
kerberos協議分析
實驗環境
域名:HIRO
域控:WIN-KONG 域管:hiro\administrator
主機:DESKTOP-P34E60A 域用戶:hiro\win10
win10用戶執行:
net use \WIN-KONG\C$ password /u:hiro\administrator
AS-REQ:
主要內容:
- 請求的用戶端資訊
- 加密類型
- Authenticator(用戶Hash加密時間戳)
AS-REP:
主要內容:
- 通過活動目錄查詢用戶得到用戶的Hash,用Hash解密Authenticator,如果解密成功並且時間戳在規定時間內(一般為五分鐘),則預認證成功。
- 生成由krbtgt用戶Hash加密的TGT認購權證,用於確保客戶端和DC進行安全通訊的用戶Hash加密後的Login Session Key(作為下一階段的認證秘鑰)。
- 返回TGT,Login Session Key,時間戳和PAC。(PAC包含用戶SID,所在組等資訊)
PS:krbtgt在域生成的時候這個用戶會被自動創建,是秘鑰發行中心服務賬戶,不能直接登錄。
TGS-REQ:
主要內容:
- 客戶端資訊
- Authenticator(Login Session Key加密時間戳)
- TGT認購許可權
- 訪問的服務名
padata:
req-body:
TGS-REP:
主要內容:
- 檢查自身是否存在服務,如果存在,通過krbtgt解密TGT並通過Login Session Key解密Authenticator(Login Session Key加密時間戳),就驗證了對方身份。然後驗證時間戳是否在範圍內,並且驗證TGT中的時間戳是否過期,原始地址是否和TGT保存的地址相同等。
- 生成用AS-REP得到的Login Session Key加密後的用於確保安全傳輸的Server Session Key。
- 完成認證後,TGS生成ST票據,其中包括:客戶端資訊和原始的Server Session Key,整個ST票據由該服務的NTLM Hash加密。
- 將ST和Server Session Key發送給客戶端。
AP-REQ:
- 客戶端收到TGS服務後,通過自己快取的Login Session Key解密得到原始的Server Session Key。
- 將ST和Authenticator(Server Session Key加密時間戳)發送給服務端。
AP-REP:
- 通過服務的NTLM Hash解密ST,從中提取Server Session Key。
- 通過提取出來的Server Session Key解密Authenticator,從而驗證客戶端身份。
- 將Server Session Key加密時間戳為Authenticator發送給客戶端,客戶端用快取的Server Session Key進行解密,如果解密成功則說明兩方有相同的Server Session Key。
有些服務並沒有驗證PAC,這就是白銀票據能成功的原因。如果驗證了PAC的話,就算攻擊者擁有服務Hash,製作了ST票據,也不能製作PAC(PAC由兩個數字簽名構成,而這兩個數字簽名分別由伺服器NTLM Hash和KDC NTLM Hash加密),並且只有KDC才能製作和查看PAC。(同樣防止了MS14-068攻擊)
Keberos攻擊
AS-REQ:
1.Hash傳遞
Authenticator是由用戶密碼Hash加密的,如果得到了用戶密碼哈希就算解不出來也可以嘗試hash傳遞攻擊。
(工作組中只能以sid為500的用戶[administrator],域環境中只能用域管Hash)
2.域用戶枚舉,密碼噴洒
當cname值中的用戶不存在時返回包提示錯誤,當用戶名存在時,密碼正確或者錯誤返回包結果也不一樣,所以可以嘗試域用戶枚舉和密碼噴洒攻擊。
(可以在域外使用,但是能ping通域控)
AS-REP:
1.黃金票據
TGT由krbtgt用戶Hash加密,如果擁有krbtgt用戶Hash就可以製作TGT。
2.AS-REP Roasting攻擊
enc-part是由用戶密碼Hash加密的,如果域用戶設置了Do not require Kerberos preauthentication,就可以嘗試爆破然後用hashcat破解獲得用戶密碼。
(當關閉了預身份認證後,攻擊者可以使用指定用戶去請求票據,此時域控不會做任何驗證就將TGT票據和該用戶Hash加密的Login Session Key返回。所以只要對Login Session Key離線解密,就可以得到指定用戶的明文密碼。)
TGS-REP:
1.kerberoast攻擊
由於TGS-REP中的enc-part由服務密碼Hash加密,可以爆破獲得服務Hash,不管用戶對服務有沒有訪問許可權,只要TGT正確就一定會返回TGS。
2.白銀票據
ticket中的enc-part是由服務Hash加密的,如果有了服務Hash,就可以簽發任意用戶的ST票據,不需要跟域控打交道,但是只能訪問特定服務。(偽造的白銀票據沒有帶有效KDC簽名的PAC,如果目標驗證了KDC的PAC簽名,那麼白銀票據就不起作用了)