# Active Directory Certificate Services(ADCS) 濫用技術手法
[TOC]
由 SpecterOps 的研究員 Will Schroeder 和 Lee Christensen 在[《Certified Pre-Owned》](https://posts.specterops.io/certified-pre-owned-d95910965cd2)中詳細描述的 **Active Directory 憑證服務 (AD CS) 的八種主要濫用與提權路徑**。這些路徑利用了 AD CS 中常見的錯誤設定,讓低權限攻擊者能夠獲取高權限(通常是網域管理員)的憑證,進而控制整個網域。
- https://i.blackhat.com/USA21/Wednesday-Handouts/us-21-Certified-Pre-Owned-Abusing-Active-Directory-Certificate-Services.pdf
## **核心背景知識:**
* **AD CS 基礎:** 了解憑證授權單位 (CA)、憑證範本 (Certificate Template)、註冊流程、主體別名 (Subject Alternative Name - SAN)、擴充金鑰用法 (Enhanced Key Usage - EKU)、註冊代理程式 (Enrollment Agent) 等基本概念。
* **憑證與驗證:** 理解憑證如何用於 Kerberos (PKINIT) 或 Schannel (TLS/SSL) 驗證,特別是「用戶端驗證」(Client Authentication) 或「智慧卡登入」(Smart Card Logon) EKU 的重要性。
* **AD 物件權限:** 了解如何檢視和修改 AD 物件(特別是憑證範本和 CA 物件)的存取控制清單 (ACL)。
## **ESC1: 危險的憑證範本設定 - 註冊者提供主體 (Enrollee Supplies Subject)**
* **條件:**
* 憑證範本允許低權限使用者/群組註冊。
* 範本設定中啟用了 `ENROLLEE_SUPPLIES_SUBJECT` 旗標 (msPKI-Certificate-Name-Flag 包含 `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`)。
* 範本定義了具有高權限的 EKU,例如「用戶端驗證」、「智慧卡登入」、「任何目的」(Any Purpose) 或允許帳戶偽冒的特定 EKU。
* **攻擊:** 低權限使用者請求該範本的憑證,並在請求中指定一個高權限帳戶(例如網域管理員)作為 Subject Alternative Name (SAN)。
* **結果:** 攻擊者獲得一個有效的憑證,可以用來以指定的高權限使用者身分進行驗證。
* **學習重點:** 識別和利用允許使用者自訂 SAN 且具有危險 EKU 的範本。理解 SAN 在 Kerberos PKINIT 驗證中的作用。
## **ESC2: 危險的憑證範本權限**
* **條件:** 低權限使用者/群組對某個憑證範本物件具有危險的寫入權限,例如 `WriteOwner` (寫入擁有者)、`WriteDACL` (寫入 ACL)、`WriteProperty` (寫入屬性) 或 `FullControl` (完全控制)。
* **攻擊:** 攻擊者利用這些權限修改範本設定,使其變得容易受到 ESC1 的攻擊(例如,啟用 `ENROLLEE_SUPPLIES_SUBJECT` 旗標,或新增危險的 EKU),然後再執行 ESC1 攻擊。
* **結果:** 攻擊者透過修改範本,最終獲得高權限憑證。
* **學習重點:** 識別對憑證範本物件的不當權限分配,並了解如何利用這些權限修改範本關鍵屬性。
## **ESC3: 危險的註冊代理程式範本**
* **條件:**
* 存在一個「註冊代理程式」(Enrollment Agent) 類型的憑證範本(例如預設的 `EnrollmentAgent` 範本)。
* 低權限使用者/群組可以註冊這個註冊代理程式範本。
* 註冊代理程式範本的 EKU 允許「憑證請求代理程式」(Certificate Request Agent)。
* 存在其他允許高權限帳戶(如 Domain Admins)註冊的範本(例如預設的 `User` 或 `Machine` 範本)。
* **攻擊:** 攻擊者首先註冊獲得一個註冊代理程式憑證。然後,使用這個憑證代表 (Enroll On Behalf Of - EOBO) 一個高權限使用者(例如網域管理員)去請求另一個範本(如 `User` 範本)的憑證。
* **結果:** 攻擊者獲得一個代表高權限使用者的有效憑證。
* **學習重點:** 理解註冊代理程式的作用和 EOBO 機制,識別允許低權限使用者註冊的註冊代理程式範本。
## **ESC4: 危險的憑證授權單位 (CA) 存取控制**
* **條件:** 低權限使用者/群組對 CA 物件本身(在 `CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=...`)或 CA 的電腦物件具有危險的權限,特別是 `ManageCA` (管理 CA) 和 `ManageCertificates` / `IssueAndManageCertificates` (頒發和管理憑證)。
* **攻擊:**
* 擁有 `ManageCA` 權限:攻擊者可以授予自己 `ManageCertificates` 權限。
* 擁有 `ManageCertificates` 權限:攻擊者可以批准待處理的憑證請求(可能包含惡意 SAN 的請求)或拒絕合法請求,甚至直接指示 CA 為任意使用者頒發任意範本的憑證。
* **結果:** 攻擊者能夠控制 CA 的憑證頒發過程,為自己或他人頒發高權限憑證。
* **學習重點:** 識別對 CA 物件或其伺服器物件的不當權限分配,理解 `ManageCA` 和 `ManageCertificates` 權限的影響。
## **ESC5: 危險的 CA 設定 - EDITF_ATTRIBUTESUBJECTALTNAME2 (較少見)**
* **條件:** CA 的登錄表設定中啟用了 `EDITF_ATTRIBUTESUBJECTALTNAME2` 旗標 (`certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2`)。這個旗標允許客戶端在透過 RPC/DCOM 提交請求時,即使範本不允許,也能指定 SAN。
* **攻擊:** 攻擊者找到任何允許其註冊的範本,然後透過 RPC/DCOM 介面向 CA 提交請求,並在請求中夾帶一個指向高權限帳戶的 SAN。
* **結果:** 即使範本本身是安全的,攻擊者也能獲得包含惡意 SAN 的高權限憑證。
* **學習重點:** 了解 CA 的進階登錄表設定及其安全風險,如何檢測 `EDITF_ATTRIBUTESUBJECTALTNAME2` 旗標。
## **ESC6: 危險的 CA 權限與 HTTP 端點**
* **條件:**
* CA 伺服器上安裝了 AD CS Web Enrollment (網頁註冊) 或 Certificate Enrollment Web Services (CES/CEP) 角色。
* 執行這些 Web 服務的電腦帳戶(或服務帳戶)對 CA 具有 ESC4 中描述的危險權限(`ManageCA` 或 `ManageCertificates`)。
* **攻擊:** 攻擊者首先需要取得對 Web 伺服器的控制權(例如,透過其他漏洞)。然後,利用 Web 伺服器帳戶對 CA 的高權限,透過 Web 介面或相關服務來請求/批准惡意憑證。
* **結果:** 攻擊者利用 Web 端點作為跳板,濫用 CA 權限獲取高權限憑證。
* **學習重點:** 評估 Web 註冊服務的安全風險,檢查 Web 伺服器帳戶對 CA 的權限。
## **ESC7: NTAuthCertificates 儲存區的控制權**
* **條件:** 攻擊者獲得了對 `CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=...` 物件的寫入權限。這個物件儲存了所有被 AD 信任用於驗證的根 CA 和中介 CA 憑證。
* **攻擊:** 攻擊者將一個自己控制的(惡意)CA 的憑證添加到 `NTAuthCertificates` 儲存區中。然後,攻擊者可以使用這個惡意 CA 頒發任意憑證(例如,偽造的網域管理員憑證),這些憑證將被整個 AD 環境信任。
* **結果:** 攻擊者實質上建立了一個受信任的惡意 CA,可以隨意偽造身分。
* **學習重點:** 理解 `NTAuthCertificates` 的作用,識別對其物件的不當寫入權限。
## **ESC8: 危險的憑證範本鏈 (Issuance Policies / Application Policies)**
* **條件:** 涉及較複雜的憑證範本設定,特別是與憑證策略 (Certificate Policies)、頒發策略 (Issuance Policies) 或應用程式策略 (Application Policies) 相關的設定。例如,一個範本要求另一個範本的憑證簽章,或者策略 OID 設定不當允許繞過。通常需要結合 ESC2 或 ESC4 的權限。
* **攻擊:** 攻擊者利用這些複雜的策略設定中的漏洞或權限,繞過預期的安全限制,最終註冊到一個比預期權限更高的範本,或者獲得一個具有更強大 EKU 的憑證。
* **結果:** 攻擊者透過利用策略設定的漏洞獲得高權限憑證。
* **學習重點:** 理解憑證策略 OID 和範本間的關係,分析複雜範本設定中的潛在繞過路徑(這個相對較少見且複雜)。
## **通用工具和技能:**
* **Certipy:** 這是發現和利用這些 AD CS 漏洞的關鍵工具。務必熟練使用 `certipy find`, `certipy auth`, `certipy req`, `certipy forge` 等命令。
* **PowerShell (Certify/PSPKI):** 也有 PowerShell 工具可以進行類似的檢查。
* **AD 權限分析:** 需要能夠讀懂 ACL,並判斷哪些權限是危險的。
* **憑證操作:** 了解如何使用 `certreq.exe`, `certutil.exe`,以及如何將獲取的 PFX/PEMS 憑證用於 Rubeus 等工具進行 Kerberos 驗證。