srlabs/Certiception 安裝教學
白皮書: “*Certified Pre-Owned: Abusing Active Directory Certificate Services”*
https://tttang.com/archive/1593/#toc_061-misconfigured-certificate-templates-esc1
Certiception
Reference:
- https://www.gss.com.tw/blog/ansible-5
- https://medium.com/ianyc/ansible-windows連線設定-basic-certificate-authentication-6750611d3764
本專案使用 Ansible,需要一台 linux 的 controller 及一台被操作的 windows server
windows 安裝 winrm
- 可於連結下載 powershell script 檔,然後在需要被安裝的 windows host 上執行安裝 winrm
controller 設定 Certiception
在 controller 上下載
安裝 ansible
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
1
$ python3 -m pip install --user ansible
在 windows 建立 Enterprise Admin account
創建名稱為
Vagrant
的Enterprise Admin account
,並根據資料在 controller 內編輯專案裡面的 inventory.yml
Controller 上編輯 honeypotCA.yml, 然後在 Controller 執行 Ansible 指令
1
ansible-playbook -i inventory.yml playbooks/certiception.yml -vvv
如果沒遇到錯誤就是安裝成功
在 windows 上確認 ESC1HoneypotTemplate Template 是否被安裝
觀察 Bloodhound 圖表
在靶機上使用 Sharphound 來進行 AD graph 蒐集,然後匯入新版的 Bloodhound
可以觀察到 ADCSESC1 這條 Edge 已經出現在 Bloodhound 內
使用 Certify 進行確認
在靶機上使用 Certify,並確認證書
1
Certify.exe find /vulnerable
使用 Certify 請求證書,如果 CA Response 為 Denied by Policy Module 表示成功安裝
💡 可用 certutil.exe 找到 ca-name
Certiception 原理
- Certiception 會幫你自動創好一個 CA,但一個 Domain 內只有一個 CA,所以不能先有 ADCS
- ESC1HoneypotTemplate 確實是易受攻擊的證書,但使用 TameMyCerts 來阻止證書發放
因為 ESC1 主要是利用 SAN,而 TameMyCerts 偵測到 request 包含 SAN 時就會取消
- 專案中使用
ADCSTemplate
來創建 Template,然後自動發放 ESC1HoneypotTemplate
ESC1
- Misconfigured Certificate Templates - ESC1
憑證範本有一組特定的設置,使它們極易被攻擊者利用,以實現網域權限提升。下面我們來介紹第一種配置情況(ESC1):
Enterprise CA 授予低特權使用者註冊權限
Manager approval 被禁用
無需授權簽名
過於寬鬆的憑證範本安全描述符會授予低特權使用者憑證註冊權限。
憑證範本定義了啟用網域驗證的 EKU。
憑證範本允許請求者在 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)” 即可。