揭秘域管理員提權(quán)路徑:使用ESC5從DA到EA
一種從域管理員提權(quán)到企業(yè)管理員的全新攻擊路徑。
一、ESC5
ESC5又被稱為“易受攻擊的PKI對象訪問控制”。Will Schroeder和Lee Christensen編寫的《Certified Pre-Owned》白皮書在討論ESC5時提到了三類對象:
CA服務(wù)器的AD計(jì)算機(jī)對象(即通過S4U2Self或S4U2Proxy進(jìn)行攻擊)
CA服務(wù)器的RPC/DCOM 服務(wù)
容器中的子對象或子容器(例如證書模板容器、證書頒發(fā)機(jī)構(gòu)容器、NTAuthCertificates 對象、注冊服務(wù)容器等)
本文主要討論第三項(xiàng)的工作原理,并演示如何使用它通過域信任提升到企業(yè)管理員。
二、ADCS LDAP 層次結(jié)構(gòu)
ADCS在LDAP中存儲有關(guān)CA和證書模板的信息,可以通過打開ADSI并連接到配置命名上下文(Configuration NC)來查看這些對象。然后向下檢索:

Configuration > Services > Public Key Services
下面是該層次結(jié)構(gòu)的圖表,包括將要濫用的對象:

"Certificate Templates"容器存儲著可以發(fā)布到ADCSCA的模板。查看下述對話框,它能夠幫助列出該容器中的所有模板對象:

"Enrollment Services"容器為每個CA存儲一個pKIEnrollmentService對象。這些對象在其"Certificate Templates"屬性上列出了已“發(fā)布”到CA的模板:

這是需要控制來執(zhí)行ESC5?的兩個LDAP對象,包括一個證書模板和 pKIEnrollmentService對象。假設(shè)pKIEnrollmentService對象與受信任執(zhí)行域身份驗(yàn)證的CA相關(guān)聯(lián),并且它要么作為根CA受信任,要么鏈接到根CA。
三、Configuration NC的特殊現(xiàn)象
在展示如何進(jìn)行攻擊之前,需要了解一些基礎(chǔ)知識。
配置命名上下文(Configuration NC)是ActiveDirectory中存儲著整個林范圍配置數(shù)據(jù)的位置,子域在復(fù)制配置數(shù)據(jù)時必須從這里復(fù)制。Configuration NC的Distinguished Name為CN=Configuration,DC=example,DC=local,其中DC=example,DC=local是林根域的DN。
正如您所預(yù)想的那樣,如果配置中的某個對象在林根域處發(fā)生更改,則該更改會向下復(fù)制到林中的所有域。但您可能不知道的是,反之亦然:如果配置中的對象在子域中發(fā)生更改,則該更改會復(fù)制到林根。這是因?yàn)榱种械拿總€可寫域控制器都有一個林配置命名上下文(Configuration NC)的可寫副本。
Jonas Bülow Knudsen、Martin Sohn Christensen和 Tobias Thorbj?rn Munch Torp 撰寫了一篇博客文章(https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research),文章中提到他們?yōu)E用此機(jī)制,通過濫用指向站點(diǎn)的GPO鏈接,從子域中的域管理員升級到林根中的企業(yè)管理員。
這里是一個實(shí)驗(yàn)環(huán)境,域管理員有一個名為ForestRoot.local的林根域和一個名為ChildDomain.ForestRoot.Local的子域:

當(dāng)連接到子域的配置命名上下文(Configuration NC)時,查看公鑰服務(wù)容器的DN,然后查看配置命名上下文(Configuration NC)的域名:

這里查看的其實(shí)是林根域?qū)ο蟮淖佑虮镜馗北尽?/p>
現(xiàn)在看一下此對象的安全描述符:

作為子域中的域管理員,無法控制此對象。您可以看到此處添加ACE的按鈕變灰,但需要注意到SYSTEM主體對此對象具有完全控制權(quán)。
關(guān)閉MMC并重新打開它,但這次使用PsExec以SYSTEM用戶身份啟動MMC:

再次連接到域本地配置命名上下文(Configuration NC),導(dǎo)航到Public Key Services容器,并顯示其安全描述符:

現(xiàn)在可以添加ACE。向該對象添加一個ACE,以便Bob?-?子域中的用戶?-完全控制該容器:

現(xiàn)在再看一下Public Key Services容器,但這次是在林根域控制器上的配置命名上下文(Configuration NC)中:

可以看到ACE已經(jīng)從子域復(fù)制到了林根域。
四、整合
當(dāng)想濫用LDAP中PKI對象的控制時,至少需要以下能力來執(zhí)行 ESC5:
能夠?qū)⑿履0逄砑拥阶C書模板容器。
對與林根CA關(guān)聯(lián)的pKIEnrollmentService對象的寫入訪問權(quán)限,以及與NT身份驗(yàn)證可信的CA關(guān)聯(lián)或鏈接到的pKIEnrollmentService 對象。
接下來將向您展示如何將子域中的域管理員轉(zhuǎn)換為林根目錄中的企業(yè)管理員。通過之前的知識您可以看到,作為子域中的域管理員,可以完全控制Public Key Services容器。
雖然無法完全控制 pKIEnrollmentService 對象,但可以授予自己其控制權(quán),因?yàn)樵搶ο髥⒂昧藱?quán)限繼承:

但是默認(rèn)模板禁用了權(quán)限繼承,作為子域中的域管理員無法控制它們:

接下來看一下Certificate Templates容器本身的安全描述符:

使用PsExec以SYSTEM用戶身份在子DC上啟動MMC:

然后,將連接到域本地配置命名上下文(Configuration NC)并導(dǎo)航到Certificate Templates容器?,F(xiàn)在可以完全控制該對象,其中包括添加子對象的能力。
可以用SYSTEM用戶身份打開certsrv.msc,然后復(fù)制現(xiàn)有模板:

打開新模板的屬性,通過在模板配置以下選項(xiàng)來執(zhí)行ESC1:
1.向在子域中控制的主體授予注冊權(quán)限。
2.將客戶端身份驗(yàn)證包含在應(yīng)用程序策略中。
3.允許證書請求中的 SAN。
4.未啟用管理員批準(zhǔn)或授權(quán)簽名。
將新模板寫入企業(yè)配置命名上下文(Configuration NC)的子域副本中,然后它將自行復(fù)制到林根域控制器的配置命名上下文(Configuration NC)中:

現(xiàn)在,需要將模板發(fā)布到CA??梢酝ㄟ^濫用對該對象的完全控制,以子DC上的SYSTEM用戶身份執(zhí)行此操作:

當(dāng)證書在此對象的certificateTemplates屬性上列出時,證書就會“發(fā)布”到CA。所以說,想將模板“發(fā)布”到CA,需要做的就是將模板添加到該列表中:

如果在林根域控制器上啟動certsrv.ms 并檢查CA的“證書模板”,確實(shí)可以看到這個新的惡意模板現(xiàn)在已“發(fā)布”并可供使用:

現(xiàn)在準(zhǔn)備工作已經(jīng)完成,可以執(zhí)行 ESC1 將子域中的 DA 轉(zhuǎn)換為林根域的 EA。
使用 Certify 來獲取證書,指定惡意模板和想要模擬的企業(yè)管理員:


使用openssl將證書轉(zhuǎn)換為PFX:

通過 RDP 連接將 PFX 放到子域DC上,使用Rubeus為企業(yè)管理員用戶獲取 TGT:

可以通過wmic證明TGT是有效的:

五、基于圖表思考
用圖表來描述這個攻擊路徑將有助于理解所有的橫向移動關(guān)鍵點(diǎn)。
從林根域及其配置命名上下文(Configuration NC)中的相關(guān)對象開始,青色節(jié)點(diǎn)是根域,橙色節(jié)點(diǎn)是容器,紫色節(jié)點(diǎn)是C 對象:

現(xiàn)在添加與林根域具有雙向信任的子域:

子域具有林根域的配置命名上下文(Configuration NC)的子域本地副本:

對子域中的域本地對象所做的更改將復(fù)制到林根域中的相應(yīng)對象:

子域的域控制器上的SYSTEM用戶可以完全控制從林根域的配置命名上下文(Configuration NC)復(fù)制到本地子域的某些對象:

對"Certificate Templates"容器的完全控制意味著能夠向該容器添加新對象。此處添加的任何新模板也會復(fù)制到林根域:

CA是林根域的根CA,林根域有著自己的用戶,如ForestRootDA用戶:

紅色邊緣顯示了從子域的域控制器到林根域管理員的整個攻擊路徑:

這篇文章展示了攻擊者如何使用ESC5,然后使用ESC1將子域中的DA轉(zhuǎn)換為林根域處的EA。
還有一些問題需要花時間去思考:如果 ADCS 尚未部署怎么辦?例如,如果完全控制"Public Key Services"容器但沒有CA,是否可以引導(dǎo)必要的LDAP對象并頒發(fā)CA將DA轉(zhuǎn)變?yōu)镋A?
*本文部分節(jié)選自SpecterOps公司發(fā)表的《From DA to EA with ESC5》一文。
原文鏈接:https://specterops.io/blog/2023/05/16/from-da-to-ea-with-esc5/