最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Active Directory 證書(shū)服務(wù)攻擊與防御(一)

2021-08-24 17:19 作者:北京中安網(wǎng)星  | 我要投稿

作者: 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ò)展列表及其重要性(包括KeyUsageExtendedKeyUsages

這里我們要特別注意的是擴(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-TEPMS-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為pKIEnrollmentServiceCA證書(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/


Active Directory 證書(shū)服務(wù)攻擊與防御(一)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
临猗县| 九寨沟县| 运城市| 宁海县| 乌拉特中旗| 铁力市| 阿荣旗| 于都县| 吐鲁番市| 樟树市| 济宁市| 常山县| 绥芬河市| 闽清县| 清徐县| 自贡市| 沅陵县| 靖边县| 新和县| 胶州市| 奉贤区| 莒南县| 拉萨市| 东港市| 华蓥市| 新津县| 房产| 淮南市| 咸阳市| 若羌县| 温州市| 磐石市| 新营市| 璧山县| 南宫市| 尚志市| 古丈县| 会宁县| 德格县| 商都县| 沈丘县|