這篇文章將為大家詳細(xì)講解有關(guān)kerberos體系中委派的利用方式是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)公司專注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營(yíng)銷(xiāo)中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
下面主要說(shuō)明一下在kerberos體系中關(guān)于委派的利用方式,委派在域環(huán)境中其實(shí)是一個(gè)很常見(jiàn)的功能,對(duì)于委派的利用相較于先前說(shuō)的幾種攻擊方式較為“被動(dòng)”,但是一旦利用也會(huì)有很大的危害。
在域中如果出現(xiàn)A使用Kerberos身份驗(yàn)證訪問(wèn)域中的服務(wù)B,而B(niǎo)再利用A的身份去請(qǐng)求域中的服務(wù)C,這個(gè)過(guò)程就可以理解為委派。
例:
User訪問(wèn)主機(jī)s2上的HTTP服務(wù),而HTTP服務(wù)需要請(qǐng)求其他主機(jī)的SQLServer數(shù)據(jù)庫(kù),但是S2并不知道User是否有權(quán)限訪問(wèn)SQLServer,這時(shí)HTTP服務(wù)會(huì)利用User的身份去訪問(wèn)SQLServer,如果User有權(quán)限訪問(wèn)SQLServer服務(wù)才能訪問(wèn)成功。
而委派主要分為非約束委派(Unconstraineddelegation)和約束委派(Constrained delegation)兩個(gè)方式,下面分別介紹兩種方式如何實(shí)現(xiàn)。
非約束委派在Kerberos中實(shí)現(xiàn)時(shí),User會(huì)將從KDC處得到的TGT發(fā)送給訪問(wèn)的service1(可以是任意服務(wù)),service1拿到TGT之后可以通過(guò)TGT訪問(wèn)域內(nèi)任意其他服務(wù),所以被稱為非約束委派。
流程:
1. 用戶通過(guò)發(fā)送KRB_AS_REQ消息請(qǐng)求可轉(zhuǎn)發(fā) TGT(forwardable TGT,為了方便我們稱為T(mén)GT1)。
2. KDC在KRB_AS_REP消息中返回TGT1。
3. 用戶再通過(guò)TGT1向KDC請(qǐng)求轉(zhuǎn)發(fā)TGT(forwardedTGT,我們稱為T(mén)GT2)。
4. 在KRB_TGS_REP消息中返回轉(zhuǎn)發(fā)TGT2。
5. 用戶使用TGT1向KDC申請(qǐng)?jiān)L問(wèn)Service1的ST(ServiceTicket)。
6. TGS返回給用戶一個(gè)ST。
7. 用戶發(fā)送KRB_AP_REQ請(qǐng)求至Service1,這個(gè)請(qǐng)求中包含了TGT1和ST、TGT2、TGT2的SessionKey。
8. Service1使用用戶的TGT2通過(guò)KRB_TGS_REQ發(fā)送給KDC,以用戶的名義請(qǐng)求能夠訪問(wèn)Service2的票據(jù)。
9. KDC在KRB_TGS_REP消息中返回Service2到Service1的票據(jù)。
10. Service1以用戶的名義像Service2發(fā)送KRB_AP_REQ請(qǐng)求。
11. Service2響應(yīng)步驟10中Service1的請(qǐng)求。
12. Service1響應(yīng)步驟7中用戶的請(qǐng)求。
13. 在這個(gè)過(guò)程中的TGT轉(zhuǎn)發(fā)機(jī)制,沒(méi)有限制Service1對(duì)TGT2的使用,也就是說(shuō)Service1可以通過(guò)TGT2來(lái)請(qǐng)求任意服務(wù)。
14. KDC返回步驟13中請(qǐng)求的票據(jù)。
15和16即為Service1通過(guò)模擬用戶來(lái)訪問(wèn)其他Service。
可以看到在前5個(gè)步驟中User向KDC申請(qǐng)了兩個(gè)TGT(步驟2和4),一個(gè)用于訪問(wèn)Service1一個(gè)用于訪問(wèn)Service2,并且會(huì)將這兩個(gè)都發(fā)給Service1。并且Service1會(huì)將TGT2保存在內(nèi)存中。
非約束委派的設(shè)置:
Windows域中可以直接在賬戶屬性中設(shè)置:
由于非約束委派的不安全性,微軟在windows2003中發(fā)布了約束委派的功能。約束委派在Kerberos中User不會(huì)直接發(fā)送TGT給服務(wù),而是對(duì)發(fā)送給service1的認(rèn)證信息做了限制,不允許service1代表User使用這個(gè)TGT去訪問(wèn)其他服務(wù)。這里包括一組名為S4U2Self(Service for User to Self)和S4U2Proxy(Service forUser to Proxy)的Kerberos協(xié)議擴(kuò)展。
從下圖可以看到整個(gè)過(guò)程其實(shí)可以分為兩個(gè)部分,第一個(gè)是S4U2Self的過(guò)程(流程1-4),第二個(gè)是S4U2Proxy的過(guò)程(流程5-10)。
流程:
1. 用戶向Service1發(fā)送請(qǐng)求。
2. 這時(shí)在官方文檔中的介紹是在這一流程開(kāi)始之前Service1已經(jīng)通過(guò)KRB_AS_REQ得到了用戶用來(lái)訪問(wèn)Service1的TGT,然后通過(guò)S4U2self擴(kuò)展模擬用戶向KDC請(qǐng)求ST。
3. KDC這時(shí)返回給Service1一個(gè)用于用戶驗(yàn)證Service1的ST(我們稱為ST1),并且Service1用這個(gè)ST1完成和用戶的驗(yàn)證過(guò)程。
4. Service1在步驟3使用模擬用戶申請(qǐng)的ST1完成與用戶的驗(yàn)證,然后響應(yīng)用戶。
注:這個(gè)過(guò)程中其實(shí)Service1是獲得了用戶的TGT和ST1的,但是S4U2Self擴(kuò)展不允許Service1代表用戶去請(qǐng)求其他的服務(wù)。
5. 用戶再次向Service1發(fā)起請(qǐng)求,此時(shí)Service1需要以用戶的身份訪問(wèn)Service2。這里官方文檔提到了兩個(gè)點(diǎn):
A.Service1已經(jīng)驗(yàn)證通過(guò),并且有一個(gè)有效的TGT。
B.Service1有從用戶到Service1的forwardableST(可轉(zhuǎn)發(fā)ST)。個(gè)人認(rèn)為這里的forwardable ST其實(shí)也就是ST1。
6. Service1代表用戶向Service2請(qǐng)求一個(gè)用于認(rèn)證Service2的ST(我們稱為ST2)。用戶在ST1中通過(guò)cname(client name)和crealm(client realm)字段標(biāo)識(shí)。
7. KDC在接收到步驟6中Service1的請(qǐng)求之后,會(huì)驗(yàn)證PAC(特權(quán)屬性證書(shū),在第一篇中有說(shuō)明)的數(shù)字簽名。如果驗(yàn)證成功或者這個(gè)請(qǐng)求沒(méi)有PAC(不能驗(yàn)證失敗),KDC將返回ST2給Service1,不過(guò)這個(gè)ST2中cname和crealm標(biāo)識(shí)的是用戶而不是Service1。
8. Service1代表用戶使用ST2請(qǐng)求Service2。Service2判斷這個(gè)請(qǐng)求來(lái)自已經(jīng)通過(guò)KDC驗(yàn)證的用戶。
9. Service2響應(yīng)Service1的請(qǐng)求。
10. Service1響應(yīng)用戶的請(qǐng)求。
在這個(gè)過(guò)程中,S4U2Self擴(kuò)展的作用是讓Service1代表用戶向KDC驗(yàn)證用戶的合法性,并且得到一個(gè)可轉(zhuǎn)發(fā)的ST1。S4U2Proxy的作用可以說(shuō)是讓Service1代表用戶身份通過(guò)ST1重新獲取ST2,并且不允許Service1以用戶的身份去訪問(wèn)其他服務(wù)。更多的細(xì)節(jié)可以參考官方的文檔,和RFC4120的內(nèi)容。
同時(shí)注意forwardable字段,有forwardable標(biāo)記為可轉(zhuǎn)發(fā)的是能夠通過(guò)S4U2Proxy擴(kuò)展協(xié)議進(jìn)行轉(zhuǎn)發(fā)的,如果沒(méi)有標(biāo)記則不能進(jìn)行轉(zhuǎn)發(fā)。
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/3bff5864-8135-400e-bdd9-33b552051d94
約束委派的配置:
可以在賬戶屬性中將tsvc的委派方式更改為約束委派
在域中,可以通過(guò)PowerView腳本來(lái)搜索開(kāi)啟了委派的主機(jī)和用戶。查詢非約束委派主要是通過(guò)搜索userAccountControl屬性包含ADS_UF_TRUSTED_FOR_DELEGATION的主機(jī)或賬戶。而約束委派則通過(guò)查詢userAccountControl屬性包含TRUSTED_TO_AUTH_FOR_DELEGATION的主機(jī)或用戶。
通過(guò)Import-ModulePowerView.ps1加載PowerView腳本之后使用下面的命令進(jìn)行查詢。
查詢域中配置非約束委派的賬戶:
Get-NetUser -Unconstrained -Domainyunying.lab
查詢域中配置非約束委派的主機(jī):
Get-NetComputer -Unconstrained -Domainyunying.lab
在另一個(gè)版本的PowerView中采用的是Get-DomainComputer
Get-DomainComputer -Unconstrained-Properties distinguishedname,useraccountcontrol -Verbose | ft -a
查詢域中配置約束委派的賬戶:
Get-DomainUser –TrustedToAuth -Propertiesdistinguishedname,useraccountcontrol,msds-allowedtodelegateto| fl
Get-DomainUser -TrustedToAuth -Domainyunying.lab
查看設(shè)置了約束委派的用戶
查詢域中配置約束委派的主機(jī):
Get-DomainComputer -TrustedToAuth -Domainyunying.lab
上文中說(shuō)明了兩種委派方式,下面結(jié)合實(shí)驗(yàn)說(shuō)明針對(duì)兩種委派的利用方式。
首先環(huán)境和前兩篇文章相同。假設(shè)我們已經(jīng)獲取了一個(gè)已經(jīng)配置了委派的賬戶權(quán)限或者是密碼,現(xiàn)在我們通過(guò)這些條件來(lái)攻擊其他賬戶。
實(shí)驗(yàn)環(huán)境:
域:YUNYING.LAB
域控:WindowsServer 2008 R2 x64(DC):用戶Administrator
域內(nèi)主機(jī):WindowsServer 2008 R2 x64(s2):用戶tsvc
所需工具:
Mimikatz
實(shí)驗(yàn)流程:
在域中只有服務(wù)賬戶才能有委派功能,所以先把用戶tsvc設(shè)置為服務(wù)賬號(hào)。
setspn -U -Avariant/golden tsvc
通過(guò)setspn -l tsvc查看配置成功。
然后在“AD用戶和計(jì)算機(jī)”中將tsvc設(shè)置為非約束委派模式
此時(shí)在域控上使用Administrator訪問(wèn)tsvc所在主機(jī)S2的SMB服務(wù)。
我們?cè)赟2上通過(guò)mimikatz可以導(dǎo)出Administrator發(fā)送過(guò)來(lái)的TGT內(nèi)容。這里需要使用管理員權(quán)限打開(kāi)mimikatz,然后通過(guò)privilege::debug命令提升權(quán)限,如果沒(méi)有提升權(quán)限會(huì)報(bào)kuhl_m_sekurlsa_acquireLSA錯(cuò)誤。再使用sekurlsa::tickets/export命令導(dǎo)出內(nèi)存中所有的票據(jù)。
可以看到名稱為[0;9bec9]-2-0-60a00000-Administrator@krbtgt-YUNYING.LAB.kirbi的這一條即為Administrator發(fā)送的TGT。
此時(shí)訪問(wèn)域控被拒絕。
通過(guò)
kerberos::ptt [0;9bec9]-2-0-60a00000-Administrator@krbtgt-YUNYING.LAB.kirbi
命令將TGT內(nèi)容導(dǎo)入到當(dāng)前會(huì)話中,其實(shí)這也是一次Pass The Ticket攻擊(有興趣的可以了解一下)。
通過(guò)kerberos::list查看當(dāng)前會(huì)話可以看到票據(jù)已經(jīng)導(dǎo)入到當(dāng)前會(huì)話。
導(dǎo)入之后已經(jīng)可以訪問(wèn)域控的共享目錄。也就是說(shuō)每當(dāng)存在用戶訪問(wèn)tsvc的服務(wù)時(shí),tsvc的服務(wù)就會(huì)將訪問(wèn)者的TGT保存在內(nèi)存中,可以通過(guò)這個(gè)TGT訪問(wèn)這個(gè)TGT所屬用戶的所有服務(wù)。非約束委派的原理相對(duì)簡(jiǎn)單,就是通過(guò)獲取到的administrator的TGT進(jìn)行下一步的訪問(wèn)。
這里有一個(gè)點(diǎn)就是sekurlsa::tickets是查看內(nèi)存中所有的票據(jù),而kerberos::list只是查看當(dāng)前會(huì)話中的kerberos票據(jù)。更多的mimikatz的使用可以參考https://github.com/gentilkiwi/mimikatz/wiki
Print Spooler服務(wù)+非約束委派提升至域控權(quán)限:
在2018年的DerbyCon中WillSchroeder(@ Harmj0y),Lee Christensen(@Tifkin_)和Matt Nelson(@ enigma0x3)提到了關(guān)于非約束委派的新方式,通過(guò)域控的Print Spooler服務(wù)和非約束委派賬戶提升至域控權(quán)限(https://adsecurity.org/?p=4056),主要的原理就是通過(guò)PrintSpooler服務(wù)使用特定POC讓域控對(duì)設(shè)置了非約束委派的主機(jī)發(fā)起請(qǐng)求,獲取域控的TGT,從而提升權(quán)限。
約束委派由于只指定了特定的服務(wù),所以利用起來(lái)相對(duì)非約束委派更加復(fù)雜,本實(shí)驗(yàn)的條件是配置了約束委派的賬號(hào),并且已知當(dāng)前配置了約束委派的當(dāng)前賬戶的密碼(tsvc的密碼)。
這里環(huán)境和上文中不變,依然使用普通域賬號(hào)tsvc和域Administrator賬戶。不過(guò)增加了一個(gè)新的工具kekeo,他和mimikatz是同一個(gè)作者。
1)、確認(rèn)賬號(hào)tsvc設(shè)置了約束委派。
通過(guò)工具PowerView的查詢可以看到域內(nèi)配置了約束委派的列表:
2)、使用kekeo對(duì)域控發(fā)起申請(qǐng)TGT的請(qǐng)求。
通過(guò)已知的賬戶名和明文密碼對(duì)KDC發(fā)起請(qǐng)求,得到TGT。
Kekeo# tgt::ask /user:tsvc /domain:yunying.lab/password:admin1234! /ticket:tsvc.kirbi
/user:當(dāng)前用戶名
/domain:所在域名
/password:當(dāng)前用戶名的密碼
/ticket:生成票據(jù)名稱,上圖里生成的沒(méi)有按參數(shù)設(shè)定的來(lái)命名,不重要,也可以直接跳過(guò)這個(gè)參數(shù)
3)、使用kekeo申請(qǐng)TGS票據(jù)
Kekeo#tgs::s4u /tgt:TGT_filename/user:administrator@yunying.lab /service:cifs/dc.yunying.lab
/tgt:上一步通過(guò)kekeo生成的tgt票據(jù)
/user:想要偽造的用戶名寫(xiě)全稱(用戶名@域名)
/service:想要偽造訪問(wèn)的服務(wù)名(服務(wù)名/主機(jī)的FQDN名稱)
4)、從kekeo中使用exit命令退出,然后使用mimikatz將生成的TGS文件導(dǎo)入到Kerberos憑據(jù)列表中
這時(shí)可以看到導(dǎo)入之后已經(jīng)能夠成功訪問(wèn)域控的共享文件(嚴(yán)格來(lái)說(shuō)應(yīng)該是非約束委派中設(shè)置的SPN的權(quán)限)。而且在這個(gè)過(guò)程中是不需要管理員權(quán)限的,只是用當(dāng)前賬戶的權(quán)限就可以完成,因?yàn)椴恍枰獜膬?nèi)存中導(dǎo)出票據(jù)。
下面看一下在非約束委派中是如何實(shí)現(xiàn)通過(guò)非約束委派去獲得所設(shè)置的SPN的權(quán)限的。實(shí)驗(yàn)過(guò)程其實(shí)主要是三個(gè)步驟:
1、請(qǐng)求TGT
2、請(qǐng)求TGS
3、將TGS導(dǎo)入內(nèi)存
主要看1、2兩個(gè)步驟,第1步中使用Kekeo發(fā)起AS-REQ請(qǐng)求去請(qǐng)求TGT。
Kekeo# tgt::ask /user:tsvc/domain:yunying.lab /password:admin1234! /ticket:tsvc.kirbi
這時(shí)tsvc獲取到了一個(gè)TGT,并且kekeo工具將其保存為一個(gè)kirbi格式的文件。
第2步,再使用這個(gè)TGT申請(qǐng)兩個(gè)ST文件,上文中說(shuō)到過(guò)在約束委派實(shí)現(xiàn)的過(guò)程中分為兩個(gè)部分,分別是S4U2Self擴(kuò)展和S4U2Proxy擴(kuò)展。S4U2Self中Service1會(huì)代替用戶向KDC申請(qǐng)一張用于訪問(wèn)自身的TGS,這個(gè)TGS也就是生成的兩個(gè)TGS中的一個(gè)(TGS_administrator@yunying.lab@YUNYING.LAB_tsvc@YUNYING.LAB.kirbi)還有一個(gè)TGS是用于訪問(wèn)非受限委派中設(shè)置的SPN的TGS(TGS_administrator@yunying.lab@YUNYING.LAB_cifs~dc.yunying.lab@YUNYING.LAB.kirbi)。
我們抓包也可以看到這里是發(fā)起了兩次TGS_REQ請(qǐng)求,在第一個(gè)TGS_REQ請(qǐng)求的包里面可以看到KRB5-PADATA-S4U2SSELF的標(biāo)識(shí)。并且cname和sname都是tsvc,也是側(cè)面說(shuō)明這個(gè)TGS其實(shí)就是拿來(lái)驗(yàn)證自身的。
再看第二個(gè)TGS_REQ請(qǐng)求,sname的值為cifs/dc.yunying.lab,也就是截圖中非約束委派中“可由此賬戶提供委派憑據(jù)的服務(wù)”一欄中添加的SPN。而這個(gè)其實(shí)就是S4U2Proxy擴(kuò)展中所申請(qǐng)的TGS票據(jù)。
關(guān)于約束委派的這種攻擊方式就是通過(guò)在Service1(tsvc)中將自己偽造成用戶,然后獲取允許約束委派的SPN的TGS的一個(gè)過(guò)程。
通過(guò)上文中說(shuō)到設(shè)置了非約束委派的賬戶權(quán)限如果被竊取那么攻擊者可能獲取非常多其他賬戶的TGT,所以最好是不要在域中使用非約束委派這種功能。
域中不需要使用委派的賬戶特別是administrator賬戶,設(shè)置為“敏感用戶不能被委派”。
如果是win2012的系統(tǒng)也可以通過(guò)設(shè)置受保護(hù)的用戶組來(lái)緩解委派所帶來(lái)的危害。
在兩種方式的委派中,非約束委派的實(shí)驗(yàn)獲取的權(quán)限更大,能夠通過(guò)TGT直接獲取目標(biāo)主機(jī)的所有服務(wù)權(quán)限,而約束委派實(shí)驗(yàn)主要是通過(guò)TGS來(lái)獲取約束委派列表中設(shè)置的SPN的TGS來(lái)獲得相應(yīng)的SPN的權(quán)限。
關(guān)于kerberos體系中委派的利用方式是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)頁(yè)標(biāo)題:kerberos體系中委派的利用方式是什么
標(biāo)題路徑:http://aaarwkj.com/article46/gdioeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、移動(dòng)網(wǎng)站建設(shè)、定制開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)