srlabs/Certiception 安裝教學

白皮書: “*Certified Pre-Owned: Abusing Active Directory Certificate Services”*

https://tttang.com/archive/1593/#toc_061-misconfigured-certificate-templates-esc1

Certiception

Reference:

本專案使用 Ansible,需要一台 linux 的 controller 及一台被操作的 windows server

  1. windows 安裝 winrm

    • 可於連結下載 powershell script 檔,然後在需要被安裝的 windows host 上執行安裝 winrm
  2. controller 設定 Certiception

  3. 在 windows 建立 Enterprise Admin account

    • 創建名稱為 VagrantEnterprise Admin account,並根據資料在 controller 內編輯專案裡面的 inventory.yml

  4. Controller 上編輯 honeypotCA.yml, 然後在 Controller 執行 Ansible 指令
    Untitled

    1
    ansible-playbook -i inventory.yml playbooks/certiception.yml -vvv

    Untitled

    如果沒遇到錯誤就是安裝成功

  5. 在 windows 上確認 ESC1HoneypotTemplate Template 是否被安裝

    Untitled

  6. 觀察 Bloodhound 圖表

    • 在靶機上使用 Sharphound 來進行 AD graph 蒐集,然後匯入新版的 Bloodhound

    • 可以觀察到 ADCSESC1 這條 Edge 已經出現在 Bloodhound 內

      Untitled

  7. 使用 Certify 進行確認

    • 在靶機上使用 Certify,並確認證書

      1
      Certify.exe find /vulnerable

      Untitled

    • 使用 Certify 請求證書,如果 CA Response 為 Denied by Policy Module 表示成功安裝

      Untitled

      💡 可用 certutil.exe 找到 ca-name

Certiception 原理

  1. Certiception 會幫你自動創好一個 CA,但一個 Domain 內只有一個 CA,所以不能先有 ADCS
  2. ESC1HoneypotTemplate 確實是易受攻擊的證書,但使用 TameMyCerts 來阻止證書發放
  • 因為 ESC1 主要是利用 SAN,而 TameMyCerts 偵測到 request 包含 SAN 時就會取消

    螢幕擷取畫面 2024-07-22 220539.png

  1. 專案中使用 ADCSTemplate 來創建 Template,然後自動發放 ESC1HoneypotTemplate

ESC1

  • Misconfigured Certificate Templates - ESC1

憑證範本有一組特定的設置,使它們極易被攻擊者利用,以實現網域權限提升。下面我們來介紹第一種配置情況(ESC1):

  1. Enterprise CA 授予低特權使用者註冊權限

  2. Manager approval 被禁用

  3. 無需授權簽名

  4. 過於寬鬆的憑證範本安全描述符會授予低特權使用者憑證註冊權限。

  5. 憑證範本定義了啟用網域驗證的 EKU。

  6. 憑證範本允許請求者在 CSR 中指定 subjectAltName

    • 這裡主要關注到最後一個配置條件。回想一下,在 AD 驗證期間,AD 將使用憑證的 subjectAltName(SAN)欄位指定身分。因此,如果請求者可以在 CSR 中指定 SAN,則請求者可以以任何人(例如,網域管理員使用者)的身分要求憑證。憑證範本在其 AD 物件的 mspki-certificate-name-flag 屬性中指定請求者是否可以在其中指定 SAN。 mspki-certificate-name-flag 屬性是位元掩碼,如果存在 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT 標誌,則請求者可以指定 SAN。在憑證範本控制台 MMC 管理單元中,此值在範本的 “屬性” 的 “使用者名稱” 標籤中進行設置,如下圖所示,勾選 “在要求中提供(S)” 即可。

      Untitled

      Untitled