Kerberos協議


Windows密碼儲存機制

NTHash

在 Windows中, 存儲的密碼Hash就叫做 NTHash,也叫做 NTLM,其中NTLM 全稱是 “NT LAN Manager”,NTHash 是通過對密碼明文進行十六進制和unicode轉換,然后md4算法運算后得到(算法表示為MD4(UTF-16-LE(password)) )

NTLM (NT LAN Manager)

早期SMB協議在網絡上傳輸明文口令。后來出現 LAN Manager Challenge/Response驗證機制,簡稱LM,它是如此簡單以至很容易就被破解。微軟提出了WindowsNT挑戰/響應驗證機制,稱之為NTLM。已經有了更新的NTLM v2以及Kerberos驗證體系。NTLM是windows早期安全協議,因向后兼容性而保留下來。

 

 

windows為了避免密碼以明文形式傳輸(“原始密碼在任何情況下都不能被緩存”,這是一條基本的安全准則),只需要用戶提交用戶名,如果用戶名在SAM文件中,那么會發送一個Challenge(隨機生成)給客戶端,客戶端使用本身密碼的ntlm hash來與Challenge進行加密生成Response發送回服務端,服務端用SAM文件中存儲的ntlm hash和Response進行加密,生成的值與Response比較如果相等就說明正確,接通服務。NTLM v2相比NTLM v1就是更加安全

SAM

 SAM的英文名稱是:securityaccountmanager;中文名稱是:安全賬號管理器

 

 

文件中儲存着該台電腦的賬戶和密碼的hash,可以被mimikatz直接抓取

Kerberos身份認證

這張圖很好的說明了Kerberos的整個結構

Kerberos協議過程主要有兩個階段,第一個階段是KDC對Client身份認證,第二個階段是Service對Client身份認證。

 

DC(Domain Control)

域控,域中的老大,可以批量管理域內成員

KDC(key distributed center)

由域控擔當

作用:整個安全認證過程的票據生成管理服務,其中包含兩個服務,AS和TGS

 

AS(authentication service)

作用:為client生成TGT的服務,認證服務

TGS(ticket granting service)
作用:為client生成某個服務的ticket,票據授權服務

 

AS_REQ(request)
Client 發送用戶名 (比如Tom) 到 KDC (Key Distribution Center)以向 AS (Authentication Service)請求 TGT 票據等信息

AS_REP(response)
收到請求后,AS 生成隨機字符串 Session Key,使用 Tom 的 NTLM Hash 對 Session Key 加密得到密文 A,再使用賬號 krbtgt 的 NTLM Hash 對 Session Key 、 Client Info和 timestamp 加密得到 TGT,A 和 TGT 一起返回給 Client。

 

TGS-REQ 

Client 收到請求后,使用自身的 NTLM Hash 解密 A 就能得到 Session Key,然后使用 Session Key 對 Client Info 和 timestamp 加密得到 B,加上 TGT ,發送給 KDC中的 TGS。

TGS-REP 

TGS 收到請求后,使用 krbtgt 的 NTLM Hash 解密 TGT,得到 Session Key 和 timestamp 以及 Client Info,同時,使用 TGT 解密出的 Session Key 解密密文B,得到Client Info 和 timestamp。 比對這兩部分解密得到的內容以驗證是否通過。通過后,生成一個新的隨機數 Session Key2,並用它加密 client info 和 timestamp 得到密文 enc-part;使用服務器計算機的NTLM Hash 對 session key2 和 client info 以及 timestamp 加密得到最終的 Ticket,返回給 Client。

 

AP-REQ

Client 使用 Ticket 和 enc-part 直接請求某服務。

AP-REP

 對Ticket 和 enc-part 解密后進行驗證授權。

 

AD(Active Directory)
活動目錄

TGT(ticket-granting ticket)
作用:用於獲取ticket的票據

 

client
想訪問某個server的客戶端

server
提供某種業務的服務

 

注意

  • Kerberos 協議設計的思路就是用來在不受信的環境下進行認證的協議。

  • krbtgt 賬號的 NTLM Hash 理論上只存在於 KDC 中。這意味着 TGT 只能由 KDC 來解密。如果krbtgt 賬號的NTLM Hash泄露了,那么 TGT 就能被解密甚至偽造。偽造的 TGT 叫做黃金票據。

  • Ticket 是由服務器計算機本身的 NTLM Hash 加密的,Client 不能解密。如果該Hash 泄露,那么就可以解密甚至偽造 Ticket。偽造的 Ticket 叫做白銀票據。

  • 在上述的流程中,涉及到時間戳 timestamp,由於它的存在,才使得被第三方獲取了加密信息 A 、B、TGT不會在短時間內被暴力破解。timestamp 一般時間為8小時。

  • Kerberos 協議和 NTLM 協議都會使用 NTLM Hash 對生成的任意隨機數加密,然后比對結果。 Kerberos 的主要區別在於添加了第三方——-KDC參與到認證過程中。

  • Client info 中包含域名信息、Client 名稱等

AS-REQ:

當域內某個用戶試圖訪問域中的某個服務,於是輸入用戶名和密碼,本機的Kerberos服務會向KDC的AS認證服務發送一個 AS-REQ認證請求。該請求包中包含: 請求的用戶名、客戶端主機名、加密類型 和 Authenticator(用戶NTLM Hash加密的時間戳) 以及一些 其他信息。

DC:win server 2012 (192.168.10.1)

win server 2008 (192.168.10.2)

 

 

 

 

 

 

 

net config workstation 查看當前主機域信息

 

 AS-REQ階段產生的攻擊方式

Hash傳遞

我們如果抓到一台主機的hash,域內其他主機可能與這個主機是相同的hash,我們拿着這個hash去撞其他主機

mimikatz

抓取sid為500的administrator的ntlm哈希

privilege::debug

sekurlsa::logonpasswords

 

 

sekurlsa::pth /user:administrator /domain:192.168.10.2 /ntlm:81793eb3f3f3fa9a5320ab13a4db6636

起一個cmd

域內用戶枚舉

AS-REQ 的 cname 值,當用戶不存在時,返回包提示錯誤,所以造成了改攻擊方式。user.txt不需要加上@punished.org,也可以使用udp

 

 

 密碼噴灑

並且當用戶名存在,密碼正確和錯誤時,返回包也不一樣,所以可以進行用戶名密碼爆破。這種針對所有用戶的自動密碼猜測通常是為了避免帳 戶被鎖定,因為針對同一個用戶的連續密碼猜測會導致帳戶被鎖定。所以只有對所有用戶同時執行特定的密碼登錄嘗試,才能增加破解的概率, 消除帳戶被鎖定的概率

針對明文:

 

 

AS-REP PASS THE TICKET

AS-REP:當KDC接收到請求之后,通過AD活動目錄查詢得到該用戶的密碼Hash,用該密碼Hash對請求包的Authenticator進行解密,如果解密 成功,則證明請求者提供的密碼正確,而且需要時間戳范圍在五分鍾內,且不是重放,於是預認證成功。KAS成功認證對方的身份之后,發送響應 包給客戶端。響應包中主要包括:krbtgt用戶的NTLM Hash加密后的TGT認購權證(即ticket這部分) 和 用戶NTLM Hash加密的Login Session key(即最外層 enc-part 這部分) 以及一些其他信息。該Login Session Key的作用是用於確保客戶端和KDC下階段之間通信安全。最后TGT認購權 證、加密的Lgoin Session Key、時間戳 和 PAC等信息會發送給客戶端。PAC中包含用戶的SID,用戶所在的組等一些信息。

 

 在enc-part里面最重要的字段是Login session key,作為下階段的認證密鑰。 AS-REP中最核心的東西就是 Login session-key 和 加密的ticket。正常我們用工具生成的憑據是 .ccache 和 .kirbi 后綴的,用mimikatz,kekeo, rubeus生成的憑據是以 .kirbi 后綴的,impacket 生成的憑據的后綴是 .ccache 。兩種票據主要包含的都是Login session-key 和 加密的 ticket,因此可以相互轉化。

AS-REP Roasting

在AS-REP階段,最外層的enc-part是用戶密碼hash加密的。對於域用戶,如果設置了"Do not require Kerberos preauthentication",此時向域控的88端口發送AS-REP內容(enc-part底下的ciper,因為這部分是使用用戶hash加密的Login Session Key,通過離線爆破就可以獲得用戶hash)重新組合,能夠拼接成"Kerberos  5 AS-REP etype 23"(18200)的格式,接下來可以通過hashcat對其破解,最終獲得明文密碼,這就構成了AS-REP Roasting攻擊

 

 默認這個功能是不啟用的,如果啟用AS-REP會返回用戶hash加密的sessionkey-as,這樣我們就能夠用john離線破解

 

 

使用Empire下的powerview.ps1查找域中設置了"不需要kerberos預認證"的用戶

 

Import-Module .\powerview.ps1

Get-DomainUser -PreauthNotRequired

這里如果運行了沒有東西的化有可能是powershell權限問題,或者就是你沒配"不需要kerberos預認證"

 

 

krbtgt 賬號

krbtgt是域創建時,系統創建的賬戶,這個賬戶不能登錄,作為密鑰分發賬戶,密碼由系統隨機生成

黃金票據(Gold Ticket)

攻擊者在獲取了 krbtgt 賬號的 ntlm hash 后,就能自己任意偽造 TGT(包括session key,client info等內容),然后直接發送給 kdc,實現任意權限偽造。

偽造黃金票據所需信息

1. 域名稱

2. 域的SID值      #通過whoami /user   去掉最后橫線的數字剩下的就是SID

 

 

 administrator的SID就是500

3. 域的KRBTGT賬戶NTLM-HASH

這個可以用mimikatz來抓

4. 偽造用戶名,可以是任意用戶名

偽造黃金票據的方法和工具

mimikatz 會模擬域控,向目標域控請求賬號密碼信息。 這種方式動靜更小,不用直接登陸域控,也不需要提取NTDS.DIT文件。需要域管理員或者其他類似的高權限賬戶。

dcsync:mimikatz中的功能,可以有效地“假冒”一個域控制器,並可以向目標域控制器請求帳戶密碼數據。

NTDS.DIT是什么

ntds.dit為ad的數據庫(C:\Windows\NTDS),內容有域用戶、域組、用戶hash等信息,域控上的ntds.dit只有可以登錄到域控的用戶(如域管用戶、DC本地管理員用戶)可以訪問。

 

 

 

用DCSync導出域內所有用戶Hash

利用條件:

Administrators組內的用戶
Domain Admins組內的用戶
Enterprise Admins組內的用戶
域控制器的計算機帳戶

 

先加入一個高權限組

 

 

提權  privilege::debug

 

 

 502對應的SID是krbtgt賬戶的,同時抓到了NTLM Hash

獲取域管理權限

這里我們使用一個普通域用戶運行mimikatz

 

 

接下來偽造一下票據,先查看,沒有票據

得到krbtgt hash之后使用mimikatz中的Kerberos::golden功能生成金票golden.kiribi,即偽造成功的TGT

kerberos::golden /admin:administrator /domain:punished.org /sid:S-1-5-21-2037016-3665143091-4119717394 /krbtgt:53b0436d814b06e3a8c8bf3ed9df4995 /ticket:golden.kiribi

 輸入我們自己偽造的票據

kerberos::list      #查看本地保存的票據,觀察client name

 

 這里我們已經成為域管了,普通權限的機子不能使用這個命令

 

 

 

Kerberos PAC 驗證

為什么有PAC驗證

上面的過程我們發現,整個證明過程只是證明了自己是誰,而並沒有權限的划分,PAC的全稱(Privilege Account Certificate)是用來驗證數據合法性的一個擴展功能,防止PAC欺騙,它被包含在 Kerberos Ticket 中以一個數據結構體存在。 PAC 結構體包含安全標識符,組成員身份,用戶配置文件信息和密碼憑據等信息,防止攻擊者利用篡改的 PAC 信息實現未授權訪問。通俗的說就是防止越權訪問。

認證過程

下圖顯示了Kerberos PAC 認證過程。

/styles/images/kerberos/pac.png

默認情況下 PAC 驗證是不開啟的,開啟后會增加一些網絡和性能上的消耗。

MS14-068 漏洞,就是基於 PAC 認證的錯誤,從而導致域內普通用戶可以偽造憑據,從而提權到管理員權限。

 參考

https://green-m.me/2019/01/24/play-with-kerberos/#0x01-nthash-%E5%92%8C-net-ntlm


免責聲明!

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



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