Active Directory 證書(shū)服務(wù)攻擊與防御(一)
作者: daiker@Amulab
0x00 前言
specterops發(fā)布了一篇關(guān)于Active Directory 證書(shū)服務(wù)相關(guān)漏洞的白皮書(shū)
https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf,關(guān)于Active Directory 證書(shū)服務(wù)的攻擊第一次系統(tǒng)的進(jìn)入我們的視野。
我在白皮書(shū)的基礎(chǔ)上學(xué)習(xí)了Active Directory 證書(shū)服務(wù)相關(guān)的漏洞,作為學(xué)習(xí)成果,用兩篇文章來(lái)介紹Active Directory 證書(shū)服務(wù)相關(guān)的基礎(chǔ)以及相關(guān)的漏洞利用。截止這篇文章發(fā)布為止,有些漏洞利用相關(guān)的工具并沒(méi)有發(fā)布出來(lái),在文章里面我會(huì)用其他的方式來(lái)演示。
白皮書(shū)里面,最核心的點(diǎn)在于證書(shū)服務(wù)發(fā)布的部分證書(shū)可用于kerberos認(rèn)證,并且在返回的PAC里面能拿到NTLM hash。這就是可以做很多事了,比如
1、拿到用戶的憑據(jù),能不能用用戶的憑據(jù)來(lái)申請(qǐng)一個(gè)證書(shū),這個(gè)證書(shū)用于kerberos認(rèn)證,后面就算用戶的密碼改了,只要證書(shū)在手,就能用證書(shū)隨時(shí)拿回NTLM。
2、能不能在用戶的電腦上找到證書(shū),以后拿著這個(gè)證書(shū)去做認(rèn)證。
3、什么樣的證書(shū)能用于kerberos認(rèn)證。
4、拿到CA服務(wù)器證書(shū)之后,能不能給任何用戶頒發(fā)證書(shū),再用這個(gè)證書(shū)做認(rèn)證,跟黃金票據(jù)一樣。
5、CA服務(wù)器上有沒(méi)有一些配置,能讓一個(gè)用戶申請(qǐng)別人的證書(shū),然后拿到這個(gè)證書(shū)做認(rèn)證。
6、CA證書(shū)申請(qǐng)有個(gè)界面是http的,http默認(rèn)不開(kāi)簽名,我們能不能通過(guò)Ntlm_Relay將請(qǐng)求relay到這里,申請(qǐng)用以進(jìn)行kerberos認(rèn)證的證書(shū)。
關(guān)于這些,都會(huì)在這兩篇文章里面討論。在寫(xiě)完之后,由于內(nèi)容過(guò)長(zhǎng),我將文章拆分為兩篇,第一篇是介紹一些基礎(chǔ)部分,以及三個(gè)相關(guān)的利用
1、竊取證書(shū)
2、通過(guò)憑據(jù)申請(qǐng)可用以Kerberos認(rèn)證的證書(shū)
3、通過(guò)證書(shū)竊取用戶憑據(jù)
在第二篇主要介紹一些其他的利用,包括
1、證書(shū)服務(wù)中的Ntlm_Relay
2、證書(shū)模板配置錯(cuò)誤
3、黃金證書(shū)
3、PKI 設(shè)計(jì)缺陷
4、防御指南
整體的思路如下圖

?
0x01 Active Directory 證書(shū)服務(wù)安裝
在開(kāi)始講解證書(shū)服務(wù)之前,我們先裝個(gè)證書(shū)服務(wù),方便起見(jiàn),直接在域控上安裝就行。
下一步下一步比較簡(jiǎn)單。















?
0x02 Active Directory 證書(shū)服務(wù)概述
0x0201 企業(yè) PKI
PKI是一個(gè)術(shù)語(yǔ),有些地方會(huì)采用中文的表述——公鑰基本結(jié)構(gòu),用來(lái)實(shí)現(xiàn)證書(shū)的產(chǎn)生、管理、存儲(chǔ)、分發(fā)和撤銷等功能。我們可以把他理解成是一套解決方案,這套解決方案里面需要有證書(shū)頒發(fā)機(jī)構(gòu),有證書(shū)發(fā)布,證書(shū)撤掉等功能。
微軟的Active Directory 證書(shū)服務(wù)(我們可以簡(jiǎn)稱AD CS)就是對(duì)這套解決方案的實(shí)現(xiàn)。ADCS能夠跟現(xiàn)有的ADDS服務(wù)進(jìn)行結(jié)合,可以用以加密文件系統(tǒng),數(shù)字簽名,以及身份驗(yàn)證。下面詳細(xì)介紹下AD CS中比較重要的的證書(shū)頒發(fā)機(jī)構(gòu)以及證書(shū)模板。
0x0202 證書(shū)頒發(fā)機(jī)構(gòu)
證書(shū)頒發(fā)機(jī)構(gòu) (CA) 接受證書(shū)申請(qǐng),根據(jù) CA 的策略驗(yàn)證申請(qǐng)者的信息,然后使用其私鑰將其數(shù)字簽名應(yīng)用于證書(shū)。然后 CA 將證書(shū)頒發(fā)給證書(shū)的使用者。此外,CA 還負(fù)責(zé)吊銷證書(shū)和發(fā)布證書(shū)吊銷列表 (CRL)。
ADCS里面的CA分為企業(yè)CA和獨(dú)立CA,最主要的區(qū)別在于企業(yè)CA與ADDS服務(wù)結(jié)合,他的信息存儲(chǔ)在ADDS數(shù)據(jù)庫(kù)里面(就是LDAP上)。企業(yè)CA也支持基于證書(shū)模板和自動(dòng)注冊(cè)證書(shū),這也是我們比較關(guān)心的東西,如果沒(méi)有特指,文章里面提到的CA默認(rèn)就是企業(yè)CA。
舉個(gè)例子,我們有個(gè)有個(gè)域名daiker.com
,如果要做https,我們就需要找證書(shū)頒發(fā)機(jī)構(gòu)申請(qǐng)證書(shū),比如說(shuō)沃通CA。
我們也可以自己搭建一個(gè)證書(shū)頒發(fā)機(jī)構(gòu)。

但是使用自建的證書(shū)發(fā)布服務(wù)之后,瀏覽器還是不信任我們證書(shū),我們經(jīng)??梢钥吹?/p>
自行簽名的根證書(shū)。之所以出現(xiàn)這個(gè)是因?yàn)殡娔X本身并不相信我們的CA證書(shū)。以下證書(shū)是windows內(nèi)置的CA證書(shū)。如果我們能夠把我們的CA證書(shū)放在這個(gè)列表里面,我們的證書(shū)就能得到信任。

對(duì)于企業(yè)來(lái)說(shuō),如果使用ADCS服務(wù),想讓員工的計(jì)算機(jī)信任我們企業(yè)自己的CA證書(shū),有以下幾種方式
1、安裝企業(yè)根CA時(shí),它使用組策略將其證書(shū)傳播到域中所有用戶和計(jì)算機(jī)的“受信任的根證書(shū)頒發(fā)機(jī)構(gòu)”證書(shū)存儲(chǔ)
2、如果計(jì)算機(jī)不在域內(nèi),可以手動(dòng)導(dǎo)入CA證書(shū)
另外AD CS支持可縮放的分層 CA 模型,在此模型中,子從屬 CA 由其父 CA 頒發(fā)的證書(shū)認(rèn)證。層次結(jié)構(gòu)頂部的 CA 稱為根 CA。根 CA 的子 CA 稱為從屬 CA。

以上圖為例子,每個(gè)企業(yè)僅有一個(gè)根CA,他由自己頒發(fā),在大多數(shù)組織中,它們只用于頒發(fā)從屬 CA,不直接頒發(fā)證書(shū)。而具體的證書(shū)由從屬CA頒發(fā),比如網(wǎng)站的證書(shū),LDAPS的證書(shū),這樣做方便管理,在機(jī)器比較多的域內(nèi)還能起到負(fù)載均衡的作用。當(dāng)然,AD CS支持分層的CA模型不代表一定要分層,對(duì)于比較小的公司,一般都只有一個(gè)根CA,所有的證書(shū)由這個(gè)根CA進(jìn)行頒發(fā)。
0x0203 證書(shū)模板
證書(shū)模板是證書(shū)策略的重要元素,是用于證書(shū)注冊(cè)、使用和管理的一組規(guī)則和格式。這些規(guī)則是指誰(shuí)可以注冊(cè)證書(shū)。證書(shū)的主題名是什么。比如要注冊(cè)一個(gè)web證書(shū),那可以在Web服務(wù)器
這個(gè)默認(rèn)的證書(shū)模板里面定義誰(shuí)可以注冊(cè)證書(shū),證書(shū)的有效時(shí)間是多久,證書(shū)用于干啥,證書(shū)的主題名是什么,是由申請(qǐng)者提交,還是由證書(shū)模板指定。
我們可以使用certtmlp.msc
打開(kāi)證書(shū)模板控制臺(tái)
這些都是系統(tǒng)默認(rèn)的證書(shū)模板。
如果需要發(fā)布一個(gè)新的模板的話,可以右鍵復(fù)制模板,然后自己定義這些規(guī)則。
我們關(guān)心以下規(guī)則
常規(guī)設(shè)置:交付證書(shū)的有效期,默認(rèn)是一年
請(qǐng)求處理:證書(shū)的目的和導(dǎo)出私鑰的能力(雖然設(shè)置了證書(shū)不可被導(dǎo)出,但是mimikatz依舊能導(dǎo)出,我們后面會(huì)詳細(xì)說(shuō))
加密:要使用的加密服務(wù)提供程序 (CSP) 和最小密鑰大小
Subject name,它指示如何構(gòu)建證書(shū)的專有名稱:來(lái)自請(qǐng)求中用戶提供的值,或來(lái)自請(qǐng)求證書(shū)的域主體的身份。這個(gè)需要注意的是,默認(rèn)勾選了
在使用者名稱中說(shuō)那個(gè)電子郵件名
,當(dāng)用戶去申請(qǐng)的時(shí)候,如果用戶的LDAP屬性沒(méi)有mail就會(huì)申請(qǐng)失敗。
頒發(fā)要求:CA證書(shū)經(jīng)理程序批準(zhǔn)
這個(gè)值得注意,就算用戶有注冊(cè)權(quán)限(在ACL里面體現(xiàn)),但是證書(shū)模板勾選了這個(gè),也得得到證書(shū)管理的批準(zhǔn)才能申請(qǐng)證書(shū),如果沒(méi)有勾選這個(gè),那有權(quán)限就可以直接申請(qǐng)證書(shū)了。
安全描述符:證書(shū)模板的 ACL,包括具有注冊(cè)到模板所需的擴(kuò)展權(quán)限的主體的身份。關(guān)于這個(gè)的內(nèi)容看證書(shū)注冊(cè)那節(jié)的證書(shū)注冊(cè)權(quán)限里面。
擴(kuò)展:要包含在證書(shū)中的 X509v3 擴(kuò)展列表及其重要性(包括
KeyUsage
和ExtendedKeyUsages
)
這里我們要特別注意的是擴(kuò)展權(quán)限里面的應(yīng)用程序模板,
這個(gè)擴(kuò)展決定了這個(gè)模板的用途,比如說(shuō)文檔加密,文檔簽名,智能卡登陸等等。
經(jīng)過(guò)測(cè)試與研究,spectorops的工程師發(fā)現(xiàn)包含以下擴(kuò)展的證書(shū)可以使用證書(shū)進(jìn)行kerberos認(rèn)證。
1、客戶端認(rèn)證
2、PKINIT 客戶端身份驗(yàn)證
3、智能卡登錄
4、任何目的
5、子CA
其中PKINIT不是默認(rèn)存在的,需要我們手動(dòng)創(chuàng)建,點(diǎn)擊新建,名稱自定義,對(duì)象標(biāo)識(shí)符為1.3.6.1.5.2.3.4
?
0x03 證書(shū)注冊(cè)
0x00301 證書(shū)注冊(cè)流程
1、客戶端生成一個(gè)證書(shū)申請(qǐng)文件,這一步可以使用openssl生成,比如
openssl req -new -SHA256 -newkey rsa:4096 -nodes -keyout www.netstarsec.com.key -out www.netstarsec.com.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=netstarsec/OU=sec/CN=www.netstarsec.com"
或者直接找個(gè)在線的網(wǎng)站https://myssl.com/csr_create.html生成
2、客戶端把證書(shū)申請(qǐng)文件發(fā)送給CA,然后選擇一個(gè)證書(shū)模板。
這一步可以申請(qǐng)的方式比較多,上面這種是通過(guò)訪問(wèn)證書(shū)注冊(cè)界面進(jìn)行注冊(cè)的。ADCS請(qǐng)求注冊(cè)證書(shū)的方式在下一小節(jié)具體說(shuō)明。
3、CA證書(shū)會(huì)判斷模板是否存在,根據(jù)模板的信息判斷請(qǐng)求的用戶是否有權(quán)限申請(qǐng)證書(shū)。證書(shū)模板會(huì)決定證書(shū)的主題名是什么,證書(shū)的有效時(shí)間是多久,證書(shū)用于干啥。是不是需要證書(shū)管理員批準(zhǔn)。
4、CA會(huì)使用自己的私鑰來(lái)簽署證書(shū)。簽署完的證書(shū)可以在頒發(fā)列表里面看到。
0x00302 證書(shū)注冊(cè)接口
1、訪問(wèn)證書(shū)注冊(cè)網(wǎng)頁(yè)界面
要使用此功能,ADCS 服務(wù)器需要安裝證書(shū)頒發(fā)機(jī)構(gòu) Web 注冊(cè)角色。我們可以在添加角色和功能向?qū)?gt;AD證書(shū)頒發(fā)機(jī)構(gòu)Web注冊(cè)服務(wù)里面開(kāi)啟。

開(kāi)啟完就訪問(wèn)https://CA/certsrv?訪問(wèn)證書(shū)注冊(cè)網(wǎng)頁(yè)界面

2、域內(nèi)機(jī)器可以通過(guò)啟動(dòng) certmgr.msc (用于用戶證書(shū))或 certlm.msc (用于計(jì)算機(jī)證書(shū))來(lái)使用 GUI 請(qǐng)求證書(shū)

3、域內(nèi)機(jī)器可以通過(guò)命令行certreq.exe
和PowershellGet-Certificate
來(lái)申請(qǐng)證書(shū)
4、使用MS-WCCE
,MS-ICPR
這倆RPC,具體交互流程得去看文檔
5、使用CES,需要安裝證書(shū)注冊(cè)WEB服務(wù),soap的格式,具體的交互流程得看MS-WS-TEP
和MS-XCEP

6、使用網(wǎng)絡(luò)設(shè)備注冊(cè)服務(wù),得安裝網(wǎng)絡(luò)設(shè)備注冊(cè)服務(wù)

0x0303 證書(shū)注冊(cè)權(quán)限
知道了證書(shū)注冊(cè)的流程,注冊(cè)的接口,接下來(lái)我們關(guān)注的就是證書(shū)注冊(cè)的權(quán)限。跟證書(shū)注冊(cè)相關(guān)的權(quán)限主要有兩塊,一塊體現(xiàn)在CA證書(shū)上,一塊體現(xiàn)在證書(shū)模板上。
我們可以運(yùn)行certsrv.msc
之后右鍵證書(shū)頒發(fā)機(jī)構(gòu),右鍵屬性,安全查看權(quán)限。

對(duì)于CA證書(shū)的權(quán)限,我們比較關(guān)注的是請(qǐng)求證書(shū)的權(quán)限。默認(rèn)情況下,所有認(rèn)證用戶都有請(qǐng)求權(quán)限。如果有請(qǐng)求的權(quán)限,CA就去判斷請(qǐng)求的模板是否存在,如果存在,就交給證書(shū)模板去管理權(quán)限。
證書(shū)模板的權(quán)限,可以運(yùn)行certtmpl.msc
之后選擇特定的證書(shū)模板,右鍵屬性,安全查看權(quán)限

我們比較關(guān)注以下權(quán)限
注冊(cè)權(quán)限(Enroll)
擁有這個(gè)權(quán)限的用戶擁有注冊(cè)權(quán)限

自動(dòng)注冊(cè)的權(quán)限(AutoEnrollment)在配置證書(shū)自動(dòng)注冊(cè)的時(shí)候需要證書(shū)模板開(kāi)啟這個(gè)權(quán)限,關(guān)于證書(shū)自動(dòng)注冊(cè)的更多細(xì)節(jié),在下一小節(jié)會(huì)詳細(xì)說(shuō)明。
AllExtendedRights/Full ControlAllExtendedRights 包括所有的擴(kuò)展權(quán)限,就包括了注冊(cè)權(quán)限和自動(dòng)注冊(cè)權(quán)限。Full Control包括所有權(quán)限,也包括有的擴(kuò)展權(quán)限
我們關(guān)心完CA的權(quán)限以及證書(shū)模板的權(quán)限之外,還得注意一個(gè)配置CA證書(shū)管理程序批準(zhǔn)

如果證書(shū)模板沒(méi)有勾選這個(gè),那么有ca的證書(shū)請(qǐng)求權(quán)限,證書(shū)模板的注冊(cè)權(quán)限,就可以申請(qǐng)下證書(shū)。但是如果勾選了這個(gè)選項(xiàng),那么就算有注冊(cè)權(quán)限,那也得得到證書(shū)管理員的批準(zhǔn)才能注冊(cè)證書(shū)。
0x0304 證書(shū)自動(dòng)化注冊(cè)
相較于注冊(cè),自動(dòng)化注冊(cè)顧名思義就是自動(dòng)化,不需要用戶手動(dòng)注冊(cè)。有些軟件需要用戶證書(shū)去訪問(wèn),讓每個(gè)用戶自己手動(dòng)申請(qǐng)證書(shū)又不太現(xiàn)實(shí),這個(gè)時(shí)候自動(dòng)化注冊(cè)證書(shū)的優(yōu)勢(shì)就體現(xiàn)出來(lái)了。
接下來(lái)演示下怎么配置證書(shū)自動(dòng)化注冊(cè)。
1、配置一個(gè)證書(shū)模板
選擇一個(gè)已有的模板,右鍵復(fù)制模板

名字改成用戶自動(dòng)化注冊(cè)

去掉以下兩個(gè)勾,因?yàn)橛行┯脩艨赡軟](méi)有配置郵箱,自動(dòng)化申請(qǐng)證書(shū)的時(shí)候就會(huì)失敗。

給這個(gè)證書(shū)模板賦予任何Domain Users
有注冊(cè)和自動(dòng)化注冊(cè)的權(quán)限

然后下發(fā)一個(gè)組策略
新建一個(gè)組策略,命名為自動(dòng)注冊(cè)證書(shū)
然后打開(kāi)用戶配置>策略>安全設(shè)置>公鑰策略,配置下圖圈出來(lái)的三個(gè)




然后等組策略生效,域內(nèi)的每個(gè)用戶登錄的時(shí)候都會(huì)自動(dòng)申請(qǐng)一個(gè)證書(shū),不用人為申請(qǐng)證書(shū)。
?
0x04 Active Directory 證書(shū)服務(wù)在LDAP中的體現(xiàn)
ADCS的信息同樣也存儲(chǔ)在LDAP上,我們可以在配置分區(qū)底下的Service底下的Public Key Services
看到證書(shū)相關(guān)的信息
,比如在我們的環(huán)境就位于CN=Public Key Services,CN=Services,CN=Configuration,DC=test16,DC=local
。

每一塊的對(duì)象的用途都不一樣,接下來(lái)我們?cè)敿?xì)介紹我們比較關(guān)注的幾個(gè)對(duì)象
Certification Authorities
這個(gè)對(duì)象是證書(shū)頒發(fā)機(jī)構(gòu),定義了受信任的根證書(shū)。
每個(gè) CA 都表示為容器內(nèi)的一個(gè) AD 對(duì)象,objectClass為certificationAuthority
。
CA證書(shū)的內(nèi)容以二進(jìn)制的內(nèi)容放在cACertificate底下。
Enrollment Services這個(gè)對(duì)象定義了每個(gè)企業(yè) CA。每個(gè)企業(yè)CA 都表示為容器內(nèi)的一個(gè) AD 對(duì)象,objectClass為
pKIEnrollmentService
CA證書(shū)的內(nèi)容以二進(jìn)制的內(nèi)容放在cACertificate底下。dNSHostName定義了CA的DNS主機(jī)certificateTemplates這個(gè)對(duì)象定義了所有證書(shū)模板
NTAuthCertificates此條目用于存儲(chǔ)有資格頒發(fā)智能卡登錄證書(shū)并在 CA 數(shù)據(jù)庫(kù)中執(zhí)行客戶端私鑰存檔的 CA 的證書(shū)。關(guān)于智能卡,后面會(huì)單獨(dú)寫(xiě)一篇文章詳細(xì)闡述智能卡,在這篇文章里面,默認(rèn)提及的證書(shū)都是軟件層面的,不涉及到硬件的。
CDP這個(gè)容器存儲(chǔ)了被吊銷的證書(shū)列表
?
0x05 竊取證書(shū)
在我們控的計(jì)算機(jī)上可能會(huì)存在一些證書(shū),這些證書(shū)有可能是用客戶端身份驗(yàn)證,有可能是CA證書(shū),用以信任其他證書(shū)的。我們可以將這些證書(shū)導(dǎo)出來(lái),這里我們分為兩種情況導(dǎo)出來(lái)。
0x0501 從系統(tǒng)存儲(chǔ)導(dǎo)出證書(shū)
這種情況我們使用windows自帶的命令certutil
來(lái)導(dǎo)出
certutil
默認(rèn)查看的是計(jì)算機(jī)證書(shū),可以通過(guò)指定-user
參數(shù)來(lái)查看用戶證書(shū)
(圖形化查看用戶證書(shū)是命令是certmgr.msc
,圖形化查看計(jì)算機(jī)證書(shū)的命令是certlm.msc
)
certutil
還可以通過(guò)-store
來(lái)查看存儲(chǔ)分區(qū),參數(shù)有CA
,root
,My
分別對(duì)應(yīng)中間證書(shū)機(jī)構(gòu)
,個(gè)人證書(shū)
,受信任的根證書(shū)頒發(fā)機(jī)構(gòu)
。
有些證書(shū)在導(dǎo)入的時(shí)候需要密碼或者勾選證書(shū)不可導(dǎo)出

這個(gè)時(shí)候就需要使用mimikatz來(lái)導(dǎo)出證書(shū)了。下面我們舉兩個(gè)導(dǎo)出的案例。
1、導(dǎo)出用戶證書(shū)
打開(kāi)certmgr.msc

如果我們想查看個(gè)人證書(shū)可以用
certutil -user -store My
找到我們想導(dǎo)出的證書(shū)的hash
如果僅僅是只是導(dǎo)出證書(shū),不導(dǎo)出私鑰
certutil -user -store My f95e6b5dbafac54963c450052848745a54ec7bd9 c:\Users\test1\Desktop]test1.cer
如果要導(dǎo)出證書(shū)包含私鑰
certutil -user -exportPFX f95e6b5dbafac54963c450052848745a54ec7bd9 c:\Users\test1\Desktop]test1.pfx
這一步如果我們需要輸入一個(gè)密碼,這個(gè)密碼是待會(huì)兒這個(gè)導(dǎo)出的證書(shū) 導(dǎo)入到咱們的電腦的時(shí)候要用的
2、查看計(jì)算機(jī)證書(shū)
打開(kāi)certlm.msc
如果我們想查看計(jì)算機(jī)證書(shū)可以用
certutil -store My
找到我們想導(dǎo)出的證書(shū)的hash
certutil -store My 888d67d9ef30adc94adf3336462b96b5add84af4 c:\Users\test1\Desktop\win10.cer
在我們要導(dǎo)出pfx文件的時(shí)候
這種是勾選了證書(shū)不允許被導(dǎo)出的,certutil就導(dǎo)出不了,回過(guò)去看我們剛剛查看證書(shū)的hash的時(shí)候
就可以看到,里面標(biāo)志著私鑰不能被導(dǎo)出,這個(gè)時(shí)候我們就需要用到mimikatz了,mimikatz的crypto::certificates
默認(rèn)也是不支持導(dǎo)出私鑰不能被導(dǎo)出
類型的證書(shū)的私鑰】
這個(gè)時(shí)候可以使用crypto::capi
修改lsass
然后就可以導(dǎo)出了
0x0502 從文件系統(tǒng)搜索證書(shū)
我們經(jīng)常可以在郵件,磁盤(pán)里面看到證書(shū),我們一般按照后綴來(lái)搜索證書(shū)的,我們一般關(guān)注以下后綴
1、key后綴的,只包含私鑰
2、crt/cer 后綴的,只包含公鑰
3、csr后綴的,證書(shū)申請(qǐng)文件,不包含公鑰,也不包含私鑰。沒(méi)啥用
4、pfx,pem,p12后綴的,包含公私鑰,我們最喜歡的。
搜索文件后綴的每個(gè)人使用的工具不一樣,我個(gè)人比較喜歡的是SharpSearch
,.Net的項(xiàng)目,支持內(nèi)存加載,可以寫(xiě)成CNA插件。
?
0x06 通過(guò)用戶憑據(jù)申請(qǐng)可用于kerberos認(rèn)證的證書(shū)
在所有默認(rèn)的證書(shū)模板里面,我們最關(guān)注的模板默認(rèn)有用戶模板和計(jì)算機(jī)模板。
前面我們說(shuō)過(guò),使用認(rèn)證進(jìn)行kerberos認(rèn)證的需要擴(kuò)展權(quán)限里面包含以下其中一個(gè)
1、客戶端身份認(rèn)證
2、PKINIT 客戶端身份驗(yàn)證
3、智能卡登錄
4、任何目的
5、子CA
如果用戶如果想要注冊(cè)證書(shū),需要經(jīng)過(guò)兩個(gè)權(quán)限的檢驗(yàn)。
1、在CA上具有請(qǐng)求證書(shū)的權(quán)限,這個(gè)默認(rèn)所有認(rèn)證的用戶都有請(qǐng)求證書(shū)的權(quán)限。
2、在模板上具有注冊(cè)證書(shū)的權(quán)限。
用戶/計(jì)算機(jī)模板,他剛好滿足這些條件。
1、他們的擴(kuò)展屬性都有客戶端身份認(rèn)證
2、用戶證書(shū)默認(rèn)所有的域用戶都有注冊(cè)權(quán)限
3、計(jì)算機(jī)默認(rèn)所有的域內(nèi)計(jì)算機(jī)都有注冊(cè)權(quán)限
4、用戶/計(jì)算機(jī)模板不需要企業(yè)管理員批準(zhǔn)
這兩個(gè)默認(rèn)的證書(shū)模板,讓我們不需要有域管的憑據(jù),只需要一個(gè)域內(nèi)用戶的憑據(jù),就可以注冊(cè)證書(shū),這個(gè)證書(shū)還可用于進(jìn)行kerberos認(rèn)證。因此我們這里注冊(cè)的時(shí)候選擇的模板是用戶/計(jì)算機(jī)模板(具體哪個(gè)模板看我們擁有的憑據(jù)是用戶還是計(jì)算機(jī))。
當(dāng)我們拿到用戶的憑據(jù),想使用這個(gè)憑據(jù)去申請(qǐng)用戶證書(shū),我們可以
1、訪問(wèn)證書(shū)注冊(cè)網(wǎng)頁(yè)界面
這個(gè)咱們之前說(shuō)過(guò),需要安裝證書(shū)頒發(fā)機(jī)構(gòu) Web 注冊(cè)角色。我們可以嘗試訪問(wèn)下,訪問(wèn)的路徑是https://CA/certsrv
,會(huì)彈401認(rèn)證,我們輸入用戶的憑據(jù)就行。

這個(gè)瀏覽器建議用IE
2、使用certmgr.msc
申請(qǐng)
如果我們?cè)谟騼?nèi),直接打開(kāi)certmgr.msc
申請(qǐng)就行



?
0x07 通過(guò)證書(shū)竊取用戶憑據(jù)
0x0701 請(qǐng)求kerberos證書(shū)
在傳統(tǒng)的kerberos認(rèn)證的時(shí)候,是使用用戶密碼進(jìn)行認(rèn)證的。回顧下申請(qǐng)TGT的過(guò)程。
用用戶hash加密時(shí)間戳作為value,type為PA-ENC-TIMESTAMP, 放在PA_DATA上。KDC收到請(qǐng)求,使用用戶hash解密value的值得到時(shí)間戳跟當(dāng)前時(shí)間做比對(duì),如果在合理的范圍(正常五分鐘),就認(rèn)證通過(guò)。
事實(shí)上也可以使用證書(shū)作為認(rèn)證,這也是這次spectorops關(guān)于ADCS研究的最大亮點(diǎn),后面漏洞緊緊圍繞這點(diǎn)。
RFC4556引入了對(duì) Kerberos 預(yù)身份驗(yàn)證的公鑰加密支持。這個(gè)RFC 的title是Public Key Cryptography for Initial Authentication in Kerberos
,后面我們使用簡(jiǎn)稱PKINIT來(lái)介紹使用證書(shū)進(jìn)行kerberos身份認(rèn)證這種方法。
PKINIT同樣也使用時(shí)間戳,但不是使用用戶密碼派生密鑰加密消息,而是使用屬于證書(shū)的私鑰對(duì)消息進(jìn)行簽名。
我們可以使用rubeus 進(jìn)行驗(yàn)證。
我們首先為用戶Administrator注冊(cè)一個(gè)證書(shū),使用certmgr.msc
進(jìn)行注冊(cè)

然后導(dǎo)出來(lái),記得跟私鑰一起導(dǎo)出來(lái)

接下來(lái)我們拿著這個(gè)證書(shū)去請(qǐng)求kerberos認(rèn)證
Rubeus4.0.exe asktgt /user:Administrator /certificate:administrator.pfx /domain:test16.local /dc:dc-05.test16.local

0x0703 請(qǐng)求NTLM 憑據(jù)
在微軟的文檔https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-pkca/4e5fb325-eabc-4fac-a0da-af2b6b4430cb里面有一段話

也就是當(dāng)使用證書(shū)進(jìn)行kerberos認(rèn)證的時(shí)候,返回的票據(jù)的PAC包里面還有NTLM票據(jù)。
這個(gè)東西Benjamin(mimikatz,kekeo作者)在17年已經(jīng)研究并進(jìn)行武器化
詳情見(jiàn)https://twitter.com/gentilkiwi/status/826932815518371841

下面我們用一個(gè)案例來(lái)說(shuō)明。
當(dāng)我們控制了一臺(tái)主機(jī),里面有個(gè)用戶的證書(shū)

我們使用certutil
來(lái)導(dǎo)出證書(shū)(如果導(dǎo)出不了的話,就用mimikatz來(lái)導(dǎo)出證書(shū))

然后把pfx文件拷貝到我們自己的計(jì)算機(jī),雙擊導(dǎo)入,輸入剛剛我們輸?shù)拿艽a。
我們本地的計(jì)算機(jī)做個(gè)代理進(jìn)內(nèi)網(wǎng),并且把dns也代理進(jìn)去(dns設(shè)置為內(nèi)網(wǎng)的域控)

使用kekeo獲取用戶的NTLM

我們?cè)僮鰝€(gè)測(cè)試,把用戶的密碼改了

這個(gè)時(shí)候用之前獲取的證書(shū)繼續(xù)發(fā)起請(qǐng)求,還是能獲取到NTLM Hash。

?
0x08 引用
https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
https://forsenergy.com/zh-cn/certsvr/html/c8955f83-fed9-4a18-80ea-31e865435f73.htm
https://docs.microsoft.com/zh-cn/learn/modules/implement-manage-active-directory-certificate-services/
https://forsenergy.com/zh-cn/certtmpl/html/85e1436e-4c52-489a-93a2-6603f1abadf7.htm
https://www.riskinsight-wavestone.com/en/2021/06/microsoft-adcs-abusing-pki-in-active-directory-environment/