mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/ad-certi
This commit is contained in:
parent
0e5df77e95
commit
5180e63350
@ -1,27 +1,27 @@
|
||||
# AD CS Domain Persistence
|
||||
# AD CS Персистентність у домені
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Це резюме технік збереження домену, викладених у [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Перевірте його для отримання додаткових деталей.
|
||||
**This is a summary of the domain persistence techniques shared in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Check it for further details.
|
||||
|
||||
## Підробка сертифікатів за допомогою вкрадених CA сертифікатів - DPERSIST1
|
||||
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
||||
|
||||
Як можна визначити, що сертифікат є CA сертифікатом?
|
||||
Як визначити, що сертифікат є CA сертифікатом?
|
||||
|
||||
Можна визначити, що сертифікат є CA сертифікатом, якщо виконуються кілька умов:
|
||||
Можна встановити, що сертифікат є CA сертифікатом, якщо виконані кілька умов:
|
||||
|
||||
- Сертифікат зберігається на CA сервері, а його приватний ключ захищений DPAPI машини або апаратним забезпеченням, таким як TPM/HSM, якщо операційна система це підтримує.
|
||||
- Поля Issuer і Subject сертифіката збігаються з відмінним ім'ям CA.
|
||||
- У сертифікатах CA присутнє розширення "CA Version" виключно.
|
||||
- Сертифікат не має полів Extended Key Usage (EKU).
|
||||
- Сертифікат зберігається на CA сервері, а його приватний ключ захищений за допомогою DPAPI машини або апаратно (наприклад, TPM/HSM), якщо ОС це підтримує.
|
||||
- Поля Issuer і Subject сертифіката збігаються з distinguished name самого CA.
|
||||
- Розширення "CA Version" присутнє виключно в CA сертифікатах.
|
||||
- У сертифіката відсутні поля Extended Key Usage (EKU).
|
||||
|
||||
Щоб витягти приватний ключ цього сертифіката, підтримуваним методом є інструмент `certsrv.msc` на CA сервері через вбудований GUI. Проте цей сертифікат не відрізняється від інших, що зберігаються в системі; отже, можна застосувати такі методи, як [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) для витягнення.
|
||||
Щоб витягти приватний ключ цього сертифіката, підтримуваний спосіб — використати інструмент `certsrv.msc` на CA сервері через вбудований GUI. Однак цей сертифікат не відрізняється від інших сертифікатів, що зберігаються в системі; тому для його витягання можна застосувати методи на кшталт [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2).
|
||||
|
||||
Сертифікат і приватний ключ також можна отримати за допомогою Certipy з наступною командою:
|
||||
Сертифікат і приватний ключ також можна отримати за допомогою Certipy, виконавши наступну команду:
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
Отримавши сертифікат CA та його приватний ключ у форматі `.pfx`, можна використовувати інструменти, такі як [ForgeCert](https://github.com/GhostPack/ForgeCert), для генерації дійсних сертифікатів:
|
||||
Після отримання сертифіката CA та його приватного ключа у форматі `.pfx`, такі інструменти, як [ForgeCert](https://github.com/GhostPack/ForgeCert), можна використати для генерації дійсних сертифікатів:
|
||||
```bash
|
||||
# Generating a new certificate with ForgeCert
|
||||
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123! --Subject "CN=User" --SubjectAltName localadmin@theshire.local --NewCertPath localadmin.pfx --NewCertPassword Password123!
|
||||
@ -36,28 +36,75 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
|
||||
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||
```
|
||||
> [!WARNING]
|
||||
> Користувач, на якого націлено підробку сертифіката, повинен бути активним і здатним аутентифікуватися в Active Directory, щоб процес був успішним. Підробка сертифіката для спеціальних облікових записів, таких як krbtgt, є неефективною.
|
||||
> Користувач, для якого фальсифікується сертифікат, має бути активним і здатним автентифікуватися в Active Directory для успіху процесу. Підробка сертифіката для спеціальних облікових записів, таких як krbtgt, неефективна.
|
||||
|
||||
Цей підроблений сертифікат буде **дійсним** до дати закінчення, зазначеної в ньому, і **доки сертифікат кореневого ЦС дійсний** (зазвичай від 5 до **10+ років**). Він також дійсний для **машин**, тому в поєднанні з **S4U2Self** зловмисник може **підтримувати стійкість на будь-якій доменній машині** доти, поки сертифікат ЦС дійсний.\
|
||||
Більше того, **сертифікати, згенеровані** цим методом, **не можуть бути відкликані**, оскільки ЦС не знає про них.
|
||||
Цей підроблений сертифікат буде **дійсним** до вказаної дати завершення та доти, поки дійсний кореневий сертифікат CA (зазвичай від 5 до **10+ років**). Він також дійсний для **машин**, тож у поєднанні з **S4U2Self** атакуючий може **підтримувати персистентність на будь-якій машині домену** стільки, скільки дійсний сертифікат CA.
|
||||
Крім того, **сертифікати, згенеровані** цим методом **не можна відкликати**, оскільки CA про них не знає.
|
||||
|
||||
## Довіра до підроблених сертифікатів ЦС - DPERSIST2
|
||||
### Робота під суворим застосуванням відображення сертифікатів (2025+)
|
||||
|
||||
Об'єкт `NTAuthCertificates` визначено для містити один або кілька **сертифікатів ЦС** в атрибуті `cacertificate`, який використовує Active Directory (AD). Процес перевірки з боку **контролера домену** включає перевірку об'єкта `NTAuthCertificates` на наявність запису, що відповідає **ЦС, зазначеному** в полі Видавець аутентифікуючого **сертифіката**. Аутентифікація продовжується, якщо знайдено відповідність.
|
||||
З 11 лютого 2025 року (після розгортання KB5014754) контролери домену за замовчуванням перейшли у **Full Enforcement** для відображень сертифікатів. Практично це означає, що ваші підроблені сертифікати мають або:
|
||||
|
||||
Сертифікат ЦС з самопідписом може бути доданий до об'єкта `NTAuthCertificates` зловмисником, якщо він має контроль над цим об'єктом AD. Зазвичай лише члени групи **Enterprise Admin**, разом з **Domain Admins** або **Administrators** в **домена кореня лісу**, мають право змінювати цей об'єкт. Вони можуть редагувати об'єкт `NTAuthCertificates`, використовуючи `certutil.exe` з командою `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA126`, або за допомогою [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
- Містити міцне прив'язування до цільового облікового запису (наприклад, SID security extension), або
|
||||
- Бути поєднаними з міцним, явним відображенням на атрибуті `altSecurityIdentities` цільового об'єкта.
|
||||
|
||||
Ця можливість особливо актуальна, коли використовується разом з раніше описаним методом, що включає ForgeCert для динамічної генерації сертифікатів.
|
||||
Надійний підхід для персистентності — випустити підроблений сертифікат, зв'язаний з викраденим Enterprise CA, а потім додати сильне явне відображення до цільового principal:
|
||||
```powershell
|
||||
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
|
||||
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
|
||||
$SerialR = '1200000000AC11000000002B' # serial in reversed byte order
|
||||
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
Примітки
|
||||
- Якщо ви можете створити підроблені сертифікати, що містять розширення безпеки SID, вони відобразяться імпліцитно навіть під Full Enforcement. В іншому випадку надавайте перевагу явним та строгим відповідностям. Див. [account-persistence](account-persistence.md) для детальнішої інформації про явні відповідності.
|
||||
- Відкликання не допомагає захисникам у цьому випадку: підроблені сертифікати невідомі базі даних CA і тому не можуть бути відкликані.
|
||||
|
||||
## Trusting Rogue CA Certificates - DPERSIST2
|
||||
|
||||
The `NTAuthCertificates` object is defined to contain one or more **CA certificates** within its `cacertificate` attribute, which Active Directory (AD) utilizes. The verification process by the **domain controller** involves checking the `NTAuthCertificates` object for an entry matching the **CA specified** in the Issuer field of the authenticating **certificate**. Authentication proceeds if a match is found.
|
||||
|
||||
A self-signed CA certificate can be added to the `NTAuthCertificates` object by an attacker, provided they have control over this AD object. Normally, only members of the **Enterprise Admin** group, along with **Domain Admins** or **Administrators** in the **forest root’s domain**, are granted permission to modify this object. They can edit the `NTAuthCertificates` object using `certutil.exe` with the command `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, or by employing the [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
|
||||
Additional helpful commands for this technique:
|
||||
```bash
|
||||
# Add/remove and inspect the Enterprise NTAuth store
|
||||
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
|
||||
certutil -enterprise -viewstore NTAuth
|
||||
certutil -enterprise -delstore NTAuth <Thumbprint>
|
||||
|
||||
# (Optional) publish into AD CA containers to improve chain building across the forest
|
||||
certutil -dspublish -f C:\Temp\CERT.crt RootCA # CN=Certification Authorities
|
||||
certutil -dspublish -f C:\Temp\CERT.crt CA # CN=AIA
|
||||
```
|
||||
Ця можливість особливо актуальна при використанні разом із раніше описаним методом за участю ForgeCert для динамічної генерації сертифікатів.
|
||||
|
||||
> Post-2025 mapping considerations: placing a rogue CA in NTAuth only establishes trust in the issuing CA. To use leaf certificates for logon when DCs are in **Full Enforcement**, the leaf must either contain the SID security extension or there must be a strong explicit mapping on the target object (for example, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
||||
|
||||
## Зловмисна неправильна конфігурація - DPERSIST3
|
||||
|
||||
Можливості для **стійкості** через **модифікації дескрипторів безпеки компонентів AD CS** численні. Модифікації, описані в розділі "[Domain Escalation](domain-escalation.md)", можуть бути зловмисно реалізовані зловмисником з підвищеним доступом. Це включає додавання "прав контролю" (наприклад, WriteOwner/WriteDACL/тощо) до чутливих компонентів, таких як:
|
||||
Можливості для **персистенції** через **зміни дескрипторів безпеки компонентів AD CS** численні. Зміни, описані в розділі "[Domain Escalation](domain-escalation.md)", можуть бути зловмисно реалізовані атакуючим із підвищеними правами. Це включає додавання "control rights" (наприклад, WriteOwner/WriteDACL/etc.) до чутливих компонентів, таких як:
|
||||
|
||||
- Об'єкт комп'ютера **CA сервера в AD**
|
||||
- **RPC/DCOM сервер CA сервера**
|
||||
- Будь-який **потомок об'єкта або контейнера AD** в **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (наприклад, контейнер Шаблонів Сертифікатів, контейнер Сертифікаційних Органів, об'єкт NTAuthCertificates тощо)
|
||||
- **Групи AD, яким делеговані права контролю AD CS** за замовчуванням або організацією (такі як вбудована група Cert Publishers та будь-які її члени)
|
||||
- Об'єкт **AD computer** сервера **CA**
|
||||
- RPC/DCOM сервер **CA server’а**
|
||||
- Будь-який **нащадковий об'єкт AD або контейнер** у **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (наприклад, контейнер Certificate Templates, контейнер Certification Authorities, об'єкт NTAuthCertificates тощо)
|
||||
- **AD групи**, яким делеговано права контролю AD CS за замовчуванням або організацією (наприклад, вбудована група Cert Publishers та будь-які її члени)
|
||||
|
||||
Приклад зловмисної реалізації може включати зловмисника, який має **підвищені права** в домені, що додає **дозвіл `WriteOwner`** до шаблону сертифіката за замовчуванням **`User`**, при цьому зловмисник є основним для цього права. Щоб скористатися цим, зловмисник спочатку змінить право власності на шаблон **`User`** на себе. Після цього **`mspki-certificate-name-flag`** буде встановлено на **1** на шаблоні, щоб активувати **`ENROLLEE_SUPPLIES_SUBJECT`**, що дозволяє користувачу надати альтернативну назву суб'єкта в запиті. Потім зловмисник може **зареєструватися** за допомогою **шаблону**, вибравши ім'я **доменного адміністратора** як альтернативну назву, і використовувати отриманий сертифікат для аутентифікації як DA.
|
||||
Приклад шкідливої реалізації: атакуючий із **підвищеними правами** в домені додає право **`WriteOwner`** до шаблону сертифіката за замовчуванням **`User`**, призначаючи себе як принципала для цього права. Щоб скористатися цим, атакуючий спочатку змінює власника шаблону **`User`** на себе. Далі на шаблон встановлюється прапорець **mspki-certificate-name-flag** зі значенням **1** для ввімкнення **`ENROLLEE_SUPPLIES_SUBJECT`**, що дозволяє користувачу вказати Subject Alternative Name у запиті. Після цього атакуючий може **зареєструватися** за допомогою цього **шаблону**, обравши ім'я **domain administrator** як альтернативне ім'я, і використовувати отриманий сертифікат для автентифікації як DA.
|
||||
|
||||
Практичні параметри, які можуть встановити зловмисники для довгострокової стійкості в домені (див. {{#ref}}domain-escalation.md{{#endref}} для повних деталей та виявлення):
|
||||
|
||||
- Прапори політики CA, що дозволяють SAN від заявників (наприклад, увімкнення `EDITF_ATTRIBUTESUBJECTALTNAME2`). Це зберігає шляхи типу ESC1 експлуатованими.
|
||||
- DACL або налаштування шаблону, які дозволяють випуск сертифікатів, придатних для автентифікації (наприклад, додавання EKU Client Authentication, ввімкнення `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Контроль над об'єктом `NTAuthCertificates` або контейнерами CA для постійного повторного введення зловмисних емітерів, якщо захисники намагаються очищувати середовище.
|
||||
|
||||
> [!TIP]
|
||||
> У захищених середовищах після KB5014754 поєднання цих неправильних налаштувань із явними строгими відображеннями (`altSecurityIdentities`) забезпечує придатність ваших виданих або підроблених сертифікатів навіть коли DCs застосовують строгі відображення.
|
||||
|
||||
|
||||
|
||||
## References
|
||||
|
||||
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user