深入详解windows安全认证机制ntlmKerberos
0x01 為什么要理解windows 安全認(rèn)證機(jī)制:
加深對后續(xù)各種漏洞利用的理解深度,還是那句話,要知其然,更要知其所以然,不廢話,咱們直接開始
0x02 windows認(rèn)證協(xié)議主要有以下兩種:
基于ntlm的認(rèn)證方式,主要用在早期的windows工作組環(huán)境中,認(rèn)證的過程也相對比較簡單
另一種是基于Kerberos的認(rèn)證方式,主要用在域環(huán)境中,下面就這兩種不同的認(rèn)證方式做些簡要的通信流程說明
0x03 關(guān)于ntlm認(rèn)證流程簡要說明,如下:
?
0x04 從圖中我們可以清晰的看到,ntlm在域中的認(rèn)證過程主要分為以下幾步:
第一步,首先在client輸入username,password和domain,然后client會把password hash后的值先緩存到本地第二步,之后,client把username的明文發(fā)送給server(DC)第三步,DC會生成一個16字節(jié)的隨機(jī)數(shù),即challenge(挑戰(zhàn)碼),再傳回給client第四步,當(dāng)client收到challenge以后,會先復(fù)制一份出來,然后和緩存中的密碼hash再一同混合hash一次,混合后的值稱為response,之后client再將challenge,response及username一并都傳給server第五步,server端在收到client傳過來的這三個值以后會把它們都轉(zhuǎn)發(fā)給DC第六步,當(dāng)DC接到過來的這三個值的以后,會根據(jù)username到域控的賬號數(shù)據(jù)庫(ntds.dit)里面找到該username對應(yīng)的hash,然后把這個hash拿出來和傳過來的challenge值再混合hash第七步,將(6)中混合后的hash值跟傳來的response進(jìn)行比較,相同則認(rèn)證成功,反之,則失敗,當(dāng)然,如果是本地登錄,所有驗證肯定也全部都直接在本地進(jìn)行了?
0x05 關(guān)于ntlm的一點小結(jié):
????它是一種基于挑戰(zhàn)(challenge)/響應(yīng)(response)消息交互模式的認(rèn)證過程,從整個認(rèn)證過程來看,安全確實不怎么到位,也就是說入侵者只需要拿到一個系統(tǒng)管理員的hash,直接給dc認(rèn)證就好了,反正賬戶名和域名都知道,早期的pass the hash (psexec)確實就是通過這種方式來進(jìn)行的,如果本地管理員的賬號密碼相同,其實不用密碼一樣可以被認(rèn)證,我們所要做的就是不斷通過這種方式來嘗試拓展內(nèi)網(wǎng)的其他機(jī)器,直到控制整個域,但后來的kb2871997,似乎改變了一些現(xiàn)狀,但也可能只是似乎
?
0x06 關(guān)于kerberos的一些概述:
????相對于ntlm而言,kerberos的認(rèn)證方式就要復(fù)雜的多,因為它提供了一個集中式的認(rèn)證方式,在整個認(rèn)證過程中總共要涉及到三方:客戶端,服務(wù)端和KDC [Key Distribution Center 密鑰分發(fā)中心], 在Windows域環(huán)境中,KDC的角色由DC(Domain Controller[域控])來擔(dān)任,Kerberos是一種基于票據(jù)的認(rèn)證方式,票據(jù)(Ticket)是用來安全的在認(rèn)證服務(wù)器和用戶請求的服務(wù)之間傳遞用戶的身份,同時也會傳遞一些附加信息,用來保證使用Ticket的用戶必須是Ticket中指定的用戶,Ticket一旦生成,在生存時間內(nèi)可以被Client多次使用來申請同一個Server的服務(wù)(票據(jù)竊取問題)
0x07 kerberos的大致工作流程:
????說到這里,我們大概也能明白,域中的客戶端要想訪問同域中的某個服務(wù)器資源時,需要首先購買該服務(wù)端認(rèn)可的票據(jù),也就是說,客戶端在訪問服務(wù)器之前需要預(yù)先買好票,等待服務(wù)驗票之后才能入場,但是這張票不能直接購買,還需要一張認(rèn)購權(quán)證,也就是說客戶端在買票之前需要預(yù)先獲得一張認(rèn)購權(quán)證,這張認(rèn)購權(quán)證和進(jìn)入服務(wù)器的入場券均有KDC發(fā)售,下面就以下圖來做簡要說明:
?
1)首先,客戶端(client)將域用戶的密碼hash一次并保存,然后,以此hash來作為客戶端和KDC之間的長期共享密鑰[kc](當(dāng)然,在DC上也保存著同樣的一條hash)2)之后,客戶端(client)開始利用(1)中的域用戶密碼hash再把時間戳,clientid,TGS id等信息混合hash一次,然后向as(認(rèn)證服務(wù)器 [Authentication Server])服務(wù)器進(jìn)行請求3)as接到該請求后,利用長期共享密鑰(kc)進(jìn)行解密,解密成功后,會返回給客戶端兩個票據(jù)(1)加密的K(c,tgs)(用于客戶端后續(xù)向KDC發(fā)起請求),TGS Name/ID,時間戳等,該票據(jù)由Kc加密(2)票據(jù)授予票據(jù)(Ticket Granting Ticket,簡稱TGT),該票據(jù)是給TGS的,票據(jù)的內(nèi)容包括K(c,tgs),Client身份信息,域名,時間戳等,該票據(jù)由TGS的秘鑰加密,只有TGS能夠解密4)然后,客戶端會利用長期共享密鑰解密k(c,tgs),并利用該秘鑰加密生成一個Authenticator,內(nèi)容包括:lifetime,時間戳,Client身份信息等,連同從AS獲取的TGT一并發(fā)送給TGS5)TGS利用自身的秘鑰解密TGT,獲取K(c,tgs),并用K(c,tgs)解密客戶端發(fā)送的Authenticator,對Client進(jìn)行認(rèn)證,如果Client通過了認(rèn)證,TGS隨機(jī)生成一個Session Key K(c,s),并產(chǎn)生兩個票據(jù)(1)服務(wù)票據(jù)(Ts):這是給服務(wù)器的服務(wù)票據(jù),由Server秘鑰Ks加密,內(nèi)容包括:K(c,s),Client身份信息,Service ID,時間戳,lifetime等(2)客戶端票據(jù)(Tc):該票據(jù)由K(c,tgs)加密,內(nèi)容包括:K(c,s),Server身份信息等6)客戶端收到tgs的回應(yīng)后,利用K(c,tgs)解密Tc,獲取K(c,s),Server身份信息等,并利用K(c,s)加密生成一個Authenticator發(fā)送給Server,內(nèi)容包括:時間戳,Client ID等信息,連同Ts一并發(fā)送給Server7)Server端在收到Client的請求后,利用自身秘鑰Ks解密Ts,得到K(c,s),再利用K(c,s)解密Authenticator,對Client進(jìn)行認(rèn)證,如果認(rèn)證通過,則表示KDC已經(jīng)允許了此次通信,此時Sever無需與KDC通信,因為Ks為KDC和Sever之間的長期共享秘鑰,如果在有效時間內(nèi),則此次請求有效?
0x08 關(guān)于kerberos利用方法:
1) 黃金票據(jù)(Golden Ticket)
????先假設(shè)這么一種情況,原先已拿到的域內(nèi)所有的賬戶hash,包括krbtgt這個賬戶,由于有些原因?qū)е掠蚬軝?quán)限丟失,但好在你還有一個普通域用戶權(quán)限,碰巧管理員在域內(nèi)加固時忘記重置krbtgt密碼,基于此條件,我們還能利用該票據(jù)重新獲得域管理員權(quán)限,利用krbtgt的HASH值可以偽造生成任意的TGT(mimikatz),能夠繞過對任意用戶的賬號策略,讓用戶成為任意組的成員,可用于Kerberos認(rèn)證的任何服務(wù)
2) 白銀票據(jù)(Silver Ticket)
????通過觀察Kerberos協(xié)議的認(rèn)證過程不難發(fā)現(xiàn),如果我們獲取了Server秘鑰Ks(服務(wù)器口令散列值),就可以跳過KDC的認(rèn)證,直接偽造票據(jù)和目標(biāo)Server通信
0x09 關(guān)于黃金票據(jù)和白銀票據(jù)的一些區(qū)別:
1)訪問權(quán)限不同
2)加密方式不同
Golden Ticket 由Kerberos的Hash加密Silver Ticket 由服務(wù)賬號(通常為計算機(jī)賬戶)Hash加密3)認(rèn)證流程不同
Golden Ticket 的利用過程需要訪問域控,而Silver Ticket不需要小結(jié):
???這些其實都是域內(nèi)滲透最基礎(chǔ)的知識,所以覺得大家還是非常有必要多花點兒時間,好好深刻體會一下,另外,微軟給我們的建議是,盡量們不要直接使用NTLM,而使用negotiate,如果使用的是negotiate,windows則會先判斷kerberos是否可用,如果可用就優(yōu)先使用kerberos,否則才會使用NTLM,kerberos的安全性確實要比NTLM要高很多
?
轉(zhuǎn)載于:https://www.cnblogs.com/backlion/p/7856115.html
總結(jié)
以上是生活随笔為你收集整理的深入详解windows安全认证机制ntlmKerberos的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 633 平方数之和
- 下一篇: Java FileReader与File