Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
PSPKIAudit — Инструментарий PowerShell для аудита AD CS на основе инструментария PSPKI. | Kitploit
Инструменты/GitHubGitHub/ghostpack/pspkiaudit
Повышение привилегийТестирование на Проникновение
GitHubghostpack/pspkiaudit

PSPKIAudit

Инструментарий PowerShell для аудита AD CS на основе инструментария PSPKI.

Репозиторий
941130272 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PSPKIAudit

Набор инструментов PowerShell для аудита служб сертификации Active Directory (AD CS).

Он построен на основе набора инструментов PSPKI от PKISolution (лицензия Microsoft Public License). Этот репозиторий содержит более новую версию PSPKI, чем доступна в PSGallery (см. каталог PSPKI). Vadims Podans (создатель PSPKI) любезно предоставил эту версию, так как она содержит исправления нескольких ошибок.

Этот README предназначен только в качестве отправной точки — полные сведения и рекомендации по защите см. в техническом документе «Certified Pre-Owned».

Модуль содержит следующие основные функции:

  1. Invoke-PKIAudit — выполняет аудит настроек AD CS текущего леса, в первую очередь анализируя сервер ЦС и опубликованные шаблоны на предмет потенциальных возможностей повышения привилегий.
  2. Get-CertRequest — проверяет выданные центром сертификации сертификаты, запрашивая базу данных ЦС. Основная цель — обнаружение запросов на сертификаты, которые могли использовать уязвимость повышения привилегий в шаблоне сертификата. Кроме того, если пользователь или компьютер скомпрометированы, специалисты по реагированию на инциденты могут использовать его для поиска сертификатов, которые ЦС выдал скомпрометированному пользователю/компьютеру (затем их следует отозвать).

ПРЕДУПРЕЖДЕНИЕ: Этот код находится в стадии бета-тестирования! Мы уверены, что Invoke-PKIAudit не повлияет на среду, поскольку объем запрашиваемых данных довольно ограничен. Мы не проводили тщательного тестирования Get-CertRequest на типичных рабочих нагрузках ЦС. Get-CertRequest напрямую запрашивает базу данных ЦС и может обрабатывать тысячи результатов, что может повлиять на производительность.

ЕСЛИ РЕЗУЛЬТАТОВ НЕТ, ЭТО НЕ ГАРАНТИРУЕТ БЕЗОПАСНОСТЬ ВАШЕЙ СРЕДЫ!!

А ТАКЖЕ МЫ НЕ МОЖЕМ ГАРАНТИРОВАТЬ, ЧТО НАШИ РЕКОМЕНДАЦИИ ПО УСТРАНЕНИЮ УЯЗВИМОСТЕЙ СДЕЛАЮТ ВАШУ СРЕДУ БЕЗОПАСНОЙ ИЛИ НЕ НАРУШАТ РАБОТУ!

Ваша обязанность — проконсультироваться с вашими командами Active Directory/PKI/Архитектуры, чтобы определить лучшие меры по устранению уязвимостей для вашей среды.

Если код сломается или мы что-то упустили, отправьте issue или pull request для исправления!

  • Установка
  • Аудит неправильных конфигураций AD CS
    • Объяснение вывода
    • ESC1 — Неправильно настроенные шаблоны сертификатов
    • ESC2 — Неправильно настроенные шаблоны сертификатов
    • ESC3 — Неправильно настроенные шаблоны агентов регистрации
    • ESC4 — Уязвимый контроль доступа к шаблону сертификата
    • ESC5 — Уязвимый контроль доступа к объектам PKI AD
    • ESC6 — EDITF_ATTRIBUTESUBJECTALTNAME2
    • ESC7 — Уязвимый контроль доступа к центру сертификации
    • ESC8 — NTLM Relay к HTTP-конечным точкам AD CS
    • Разное — Явное сопоставление
  • Трианжирование существующих выданных запросов на сертификаты

Установка

Требования

Установите следующее на машине Windows с помощью повышенной командной строки PowerShell (версия PowerShell 5.1 или выше):

  • Средства RSAT — функции Certificate Services и Active Directory. Установите с помощью следующей команды:``` Get-WindowsCapability -Online -Name "Rsat.*" | where Name -match "CertificateServices|ActiveDirectory" | Add-WindowsCapability -Online
root@kitploit:~
* Модуль [PSPKI PowerShell](https://github.com/PKISolutions/PSPKI). Установите с помощью следующей команды:```
Install-Module -Name PSPKI

Импорт

Загрузите модуль и извлеките его в папку. Затем импортируйте модуль с помощью следующих команд:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File

Import-Module .\PSPKIAudit.psd1

root@kitploit:~
# Аудит неправильных конфигураций AD CS

Запуск `Invoke-PKIAudit` выполнит все проверки аудита AD CS в текущем домене, включая перечисление различных настроек Центра сертификации и Шаблонов сертификатов. Для аудита конкретного ЦС можно выполнить `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` или `Invoke-PKIAudit -CAName X-Y-Z`.

Любые неправильные конфигурации (ESC1-8) будут отображаться в виде свойств в результатах ЦС/шаблонов, чтобы определить конкретную найденную проблему.

Если вы хотите изменить группы/пользователей, используемые для проверки прав на enrollment/доступ, измените регулярное выражение `$CommonLowprivPrincipals` в начале файла `Invoke-PKIAudit.ps1`.

Если вы хотите экспортировать всю информацию о ЦС в CSV, выполните: `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`

Если вы хотите экспортировать ВСЕ опубликованные шаблоны в CSV (а не только уязвимые), выполните: `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`


## Пояснение к выводу

Вывод содержит два основных раздела: сведения об обнаруженных ЦС и сведения о потенциально уязвимых шаблонах.

Для результатов по центрам сертификации:

| Свойство центра сертификации | Описание                                                                    |
| ---------------------------- | --------------------------------------------------------------------------- |
| ComputerName                 | Система, на которой работает ЦС.                                            |
| CAName                       | Имя ЦС.                                                                     |
| ConfigString                 | Полная строка конфигурации КОМПЬЮТЕР\ИМЯ_ЦС.                               |
| IsRoot                       | Является ли ЦС корневым.                                                    |
| AllowsUserSuppliedSans       | Установлен ли для ЦС флаг `EDITF_ATTRIBUTESUBJECTALTNAME2`.                  |
| VulnerableACL                | Имеет ли ЦС уязвимые настройки ACL.                                         |
| EnrollmentPrincipals         | Участники, имеющие привилегию `Enroll` на уровне ЦС.                        |
| EnrollmentEndpoints          | Конечные точки регистрации веб-служб ЦС.                                    |
| NTLMEnrollmentEndpoints      | Конечные точки регистрации веб-служб ЦС с включенным NTLM.                  |
| DACL                         | Полная информация об управлении доступом.                                   |
| Misconfigurations            | ESCX, указывающая на конкретную неправильную конфигурацию (если есть).      |

Для результатов по шаблонам сертификатов:

| Свойство              | Описание                                                                                         |
| --------------------- | ------------------------------------------------------------------------------------------------ |
| CA                    | Полная строка ConfigString ЦС, на котором опубликован шаблон (null, если не опубликован).        |
| Name                  | Имя шаблона.                                                                                     |
| SchemaVersion         | Версия схемы (1/2/3) шаблона.                                                                    |
| OID                   | Уникальный идентификатор объекта для шаблона.                                                    |
| VulnerableTemplateACL | True, если шаблон имеет уязвимые настройки ACL.                                                  |
| LowPrivCanEnroll      | True, если непривилегированные пользователи могут записываться на шаблон.                        |
| EnrolleeSuppliesSubject | True, если присутствует флаг `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` (т.е. пользователи могут указывать произвольные SAN). |
| EnhancedKeyUsage      | Используемые EKU в шаблоне.                                                                      |
| HasAuthenticationEku  | True, если шаблон содержит EKU, разрешающий аутентификацию.                                      |
| HasDangerousEku       | True, если шаблон содержит "опасный" EKU (Any Purpose или null).                                 |
| EnrollmentAgentTemplate | True, если шаблон содержит EKU "Certificate Request Agent".                                     |
| CAManagerApproval     | True, если требуется утверждение менеджером для регистрации.                                     |
| IssuanceRequirements  | Информация об авторизованных подписях.                                                           |
| ValidityPeriod        | Срок действия сертификата.                                                                       |
| RenewalPeriod         | Период обновления сертификата.                                                                   |
| Owner                 | Владелец сертификата.                                                                            |
| DACL                  | Полная информация об управлении доступом.                                                         |
| Misconfigurations     | ESCX, указывающая на конкретную неправильную конфигурацию (если есть).                            |


## ESC1 – Неправильная конфигурация шаблонов сертификатов

### Детали <!-- omit in toc -->

Этот сценарий повышения привилегий возникает при выполнении следующих условий:

1. **Корпоративный ЦС предоставляет непривилегированным пользователям права на регистрацию.** Конфигурация корпоративного ЦС должна разрешать непривилегированным пользователям запрашивать сертификаты. Дополнительную информацию см. в разделе "Основы – Регистрация" в начале технической документации.

2. **Отключено утверждение менеджером.** Этот параметр требует, чтобы пользователь с разрешениями "менеджера" сертификатов проверил и утвердил запрошенный сертификат перед его выпуском. Дополнительную информацию см. в разделе "Основы – Требования к выдаче" в начале технической документации.

3. **Не требуются авторизованные подписи.** Этот параметр требует, чтобы любой CSR был подписан существующим авторизованным сертификатом. Дополнительную информацию см. в разделе "Основы – Требования к выдаче" в начале технической документации.

4. **Излишне разрешительный дескриптор безопасности шаблона сертификата предоставляет права на регистрацию непривилегированным пользователям.** Наличие прав на регистрацию позволяет непривилегированному злоумышленнику запросить и получить сертификат на основе этого шаблона. Права на регистрацию предоставляются через дескриптор безопасности объекта AD шаблона сертификата.

5. **Шаблон сертификата определяет EKU, разрешающие аутентификацию.** Применимые EKU включают Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (OID 1.3.6.1.5.2.3.4) или Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2).

6. **Шаблон сертификата позволяет запрашивающему указать subjectAltName (SAN) в CSR.** Если запрашивающий может указать SAN в CSR, он может запросить сертификат от имени любого пользователя (например, администратора домена). Объект AD шаблона сертификата указывает, может ли запрашивающий указать SAN в своем свойстве mspki-certificate-name-flag. Свойство mspki-certificate-name-flag является битовой маской, и если присутствует флаг CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT, запрашивающий может указать SAN.

**Кратко:** Эта ситуация означает, что непривилегированный пользователь может запросить сертификат, пригодный для аутентификации в домене, в котором он может указать произвольное альтернативное имя (например, администратора домена). Это может привести к получению рабочего сертификата для привилегированного пользователя, например администратора домена!


### Пример <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:

CA                      : dc.theshire.local\theshire-DC-CA
Name                    : ESC1Template
SchemaVersion           : 2
OID                     : ESC1 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
VulnerableTemplateACL   : False
LowPrivCanEnroll        : True
EnrolleeSuppliesSubject : True
EnhancedKeyUsage        : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4)
HasAuthenticationEku    : True
HasDangerousEku         : False
EnrollmentAgentTemplate : False
CAManagerApproval       : False
IssuanceRequirements    : [Issuance Requirements]
                            Authorized signature count: 0
                            Reenrollment requires: same criteria as for enrollment.
ValidityPeriod          : 1 years
RenewalPeriod           : 6 weeks
Owner                   : THESHIRE\localadmin
DACL                    : NT AUTHORITY\Authenticated Users (Allow) - Read
                          THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
                          THESHIRE\Domain Users (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
                          THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations       : ESC1

Меры по смягчению

Есть несколько вариантов. Во-первых, щёлкните правой кнопкой мыши по затронутому шаблону сертификата в консоли «Шаблоны сертификатов» (certtmpl.msc) и выберите «Свойства»

  1. Удалите флаг CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT через вкладку «Имя субъекта», сняв флажок «Предоставить в запросе».
    • Это предотвращает произвольное указание SAN в CSR. Если альтернативные имена действительно не нужны для этого шаблона, это, вероятно, лучшее исправление.
  2. Удалите EKU «Проверка подлинности клиента» и/или «Вход со смарт-картой» через вкладку «Расширения» -> «Политики приложений».
    • Это предотвращает проверку подлинности в домене с помощью этого шаблона.
  3. Включите «Утверждение менеджером сертификатов ЦС» в разделе «Требования к выдаче».
    • Это помещает запросы для этого шаблона в очередь «Ожидающие запросы», которая должна быть вручную утверждена менеджером сертификатов.
  4. Включите Авторизованные подписи" в разделе «Требования к выдаче» (если вы знаете, что делаете).
    • Это заставляет CSR быть подписанными совместно сертификатом агента регистрации.
  5. Удалите возможность для непривилегированных пользователей регистрироваться в этом шаблоне через вкладку «Безопасность» и удалите соответствующее привилегию Регистрация.

ESC2 - Неправильно настроенные шаблоны сертификатов

Подробности

Этот сценарий повышения привилегий возникает при выполнении следующих условий:

  1. ЦС предприятия предоставляет права регистрации непривилегированным пользователям. Подробности такие же, как в ESC1.

  2. Утверждение менеджером отключено. Подробности такие же, как в ESC1.

  3. Авторизованные подписи не требуются. Подробности такие же, как в ESC1.

  4. Излишне разрешающий дескриптор безопасности шаблона сертификата предоставляет права регистрации сертификатов непривилегированным пользователям. Подробности такие же, как в ESC1.

  5. Шаблон сертификата определяет EKU «Любое назначение» или не имеет EKU. Любое назначение (OID 2.5.29.37.0) может использоваться (сюрприз!) для любых целей, включая проверку подлинности клиента. Если EKU не указаны — т.е. pkiextendedkeyusage пуст или атрибут отсутствует — то сертификат эквивалентен сертификату подчиненного ЦС и может использоваться для чего угодно.

TL;DR Это очень похоже на ESC1, однако при использовании «Любого назначения» или отсутствии EKU флаг CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT не обязательно должен присутствовать.

Пример ```

[!] Potentially vulnerable Certificate Templates:

CA : dc.theshire.local\theshire-DC-CA Name : ESC2Template SchemaVersion : 2 OID : ESC2 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.7730030.4389735) VulnerableTemplateACL : False LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : HasAuthenticationEku : True HasDangerousEku : True EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC2

root@kitploit:~
### Смягчающие меры <!-- omit in toc -->

Есть несколько вариантов. Во-первых, щелкните правой кнопкой мыши затронутый шаблон сертификата в оснастке "Certificate Templates Console" (certtmpl.msc) и выберите "Properties".

1. Удалите возможность для пользователей с низкими привилегиями регистрироваться в этом шаблоне через вкладку "Security", убрав соответствующие права **Enroll**.
   * Это, вероятно, лучшее исправление, так как эти чувствительные EKU не должны быть доступны пользователям с низкими привилегиями!
2. Включите **"CA Certificate Manager Approval"** в разделе "Issuance Requirements".
   * Это помещает запросы на этот шаблон в очередь "Pending Requests", которые должны быть вручную одобрены менеджером сертификатов.
3. Включите **Authorized Signatures"** в разделе "Issuance Requirements" (если вы знаете, что делаете).
   * Это заставляет CSR быть подписанными совместно сертификатом агента регистрации.

## ESC3 - Неправильно настроенные шаблоны агентов регистрации

### Подробности <!-- omit in toc -->

Этот сценарий повышения привилегий возникает при выполнении следующих условий:

1. **Центр сертификации предприятия предоставляет права регистрации пользователям с низкими привилегиями.** Подробности те же, что и в ESC1.

2. **Одобрение менеджера отключено.** Подробности те же, что и в ESC1.

3. **Авторизованные подписи не требуются.** Подробности те же, что и в ESC1.

4. **Дескриптор безопасности чрезмерно разрешающего шаблона сертификата предоставляет права регистрации сертификата пользователям с низкими привилегиями.** Подробности те же, что и в ESC1.

5. **Шаблон сертификата определяет EKU агента запроса сертификата.** EKU агента запроса сертификата (OID 1.3.6.1.4.1.311.20.2.1) позволяет субъекту регистрироваться для _другого_ шаблона сертификата от имени другого пользователя.

6. **Ограничения для агентов регистрации не реализованы в центре сертификации.**

**TL;DR** Любой, у кого есть сертификат агента запроса сертификата (он же агента регистрации), может регистрироваться для получения других сертификатов от имени любого пользователя в домене, для любого шаблона схемы версии 1 или любого шаблона схемы версии 2+, который требует соответствующего требования выдачи "Authorized Signatures/Application Policy", если только ограничения для агентов регистрации не реализованы на уровне центра сертификации.

### Пример <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:

CA                      : dc.theshire.local\theshire-DC-CA
Name                    : ESC3Template
SchemaVersion           : 2
OID                     : ESC3 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.4300342.10028552)
VulnerableTemplateACL   : False
LowPrivCanEnroll        : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage        : Certificate Request Agent (1.3.6.1.4.1.311.20.2.1)
HasAuthenticationEku    : False
HasDangerousEku         : False
EnrollmentAgentTemplate : True
CAManagerApproval       : False
IssuanceRequirements    : [Issuance Requirements]
                            Authorized signature count: 0
                            Reenrollment requires: same criteria as for enrollment.
ValidityPeriod          : 1 years
RenewalPeriod           : 6 weeks
Owner                   : THESHIRE\localadmin
DACL                    : NT AUTHORITY\Authenticated Users (Allow) - Read
                          THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
                          THESHIRE\Domain Users (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
                          THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations       : ESC3

Меры по смягчению

Есть несколько вариантов. Первый: щелкните правой кнопкой мыши по затронутому шаблону сертификата в оснастке «Шаблоны сертификатов» (certtmpl.msc) и выберите «Свойства».

  1. Удалите возможность регистрации низкопривилегированных пользователей в этом шаблоне через вкладку «Безопасность», убрав соответствующее разрешение Регистрация.
    • Вероятно, это лучшее исправление, так как этот чувствительный EKU не должен быть доступен низкопривилегированным пользователям!
  2. Включите «Утверждение менеджером сертификатов ЦС» в разделе «Требования к выдаче».
    • Это помещает запросы на этот шаблон в очередь «Ожидающие запросы», которые должны быть вручную одобрены менеджером сертификатов.

Вы также можете внедрить «Ограничения агентов регистрации» через оснастку «Центр сертификации» (certsrv.msc). На затронутом ЦС щелкните правой кнопкой мыши по имени ЦС и выберите «Свойства» -> «Агенты регистрации». Дополнительная информация об этом подходе доступна здесь.

ESC4 - Уязвимый контроль доступа к шаблонам сертификатов

Подробности

Шаблоны сертификатов являются защищаемыми объектами в Active Directory, то есть они имеют дескриптор безопасности, который указывает, какие субъекты Active Directory имеют определенные разрешения на шаблон. Шаблоны с уязвимым контролем доступа предоставляют нежелательным субъектам возможность изменять настройки шаблона. Имея права на изменение, злоумышленник может установить уязвимые EKU (ESC1-ESC3), изменить параметры, такие как CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT (ESC1), и/или удалить «Требования к выдаче», такие как утверждение менеджером или авторизованные подписи.

Пример ```

[!] Potentially vulnerable Certificate Templates:

CA : dc.theshire.local\theshire-DC-CA Name : ESC4Template SchemaVersion : 2 OID : ESC4 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1768738.6205646) VulnerableTemplateACL : True LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4) HasAuthenticationEku : True HasDangerousEku : False EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read, Write THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC4

root@kitploit:~
### Mitigations <!-- omit in toc -->

Щелкните правой кнопкой мыши по затронутому шаблону сертификата в консоли «Шаблоны сертификатов» (certtmpl.msc) и выберите «Свойства».

Перейдите на вкладку «Безопасность» и удалите уязвимую запись управления доступом.


## ESC5 - Уязвимый контроль доступа к объектам PKI AD

### Подробности <!-- omit in toc -->

Ряд объектов, помимо шаблонов сертификатов и самого центра сертификации, могут оказывать влияние на безопасность всей системы AD CS.

Эти возможности включают (но не ограничиваются):
- Объект компьютера AD сервера ЦС (т.е. компрометация через RBCD)
- Сервер RPC/DCOM сервера ЦС
- Объекты AD, связанные с PKI. Любой дочерний объект AD или контейнер в контейнере CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> (например, контейнер «Шаблоны сертификатов», контейнер «Центры сертификации», объект NTAuthCertificates и т.д.)

*Из-за широкого охвата данной конкретной неправильной конфигурации мы в настоящее время не проверяем ESC5 по умолчанию в этом наборе инструментов.*

Пути доступа к самому серверу ЦС можно найти в текущей коллекции BloodHound.

Безопасность сервера RPC/DCOM сервера ЦС требует ручного анализа.

Следующие команды выводят список пользователей и права управления/редактирования, которыми пользователь обладает над объектом AD, связанным с PKI.```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers

Убедитесь, что все субъекты в результатах абсолютно требуют перечисленных прав. Часто учетные записи non-tier 0 (будь то малопривилегированные пользователи/группы или менее привилегированные администраторы серверов, не входящих в AD) имеют контроль над объектами AD, связанными с PKI.

Пример ```

THESHIRE\Cert Publishers (S-1-5-21-3022474190-4230777124-3051344698-517) GenericAll CN=THESHIRE-DC-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\DC$ (S-1-5-21-3022474190-4230777124-3051344698-1000) WriteOwner CN=THESHIRE-DC-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=KRA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\Domain Computers (S-1-5-21-3022474190-4230777124-3051344698-515) WriteDacl CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\Domain Users (S-1-5-21-3022474190-4230777124-3051344698-513) WriteAllProperties CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\john-sa (S-1-5-21-3022474190-4230777124-3051344698-1602) GenericAll CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

NT AUTHORITY\Authenticated Users (S-1-5-11) Owner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL WriteOwner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

root@kitploit:~
### Mitigations <!-- omit in toc -->

Удалите все уязвимые записи управления доступом через Active Directory Users and Computers (*dsa.msc*) или ADSIEdit (*adsiedit.msc*) для объектов конфигурации.


## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2 

### Details <!-- omit in toc -->

Если флаг **EDITF_ATTRIBUTESUBJECTALTNAME2** установлен в конфигурации Центра сертификации, *ЛЮБОЙ* запрос сертификата может указывать произвольные альтернативные имена субъектов (SAN). Это означает, что ЛЮБОЙ шаблон, настроенный для аутентификации в домене и также разрешающий регистрацию непривилегированным пользователям (например, шаблон **User** по умолчанию), может быть использован для получения сертификата, позволяющего аутентифицироваться как администратор домена (или любой другой активный пользователь/машина).

**ЭТОТ ПАРАМЕТР НИ В КОЕМ СЛУЧАЕ НЕ ДОЛЖЕН БЫТЬ УСТАНОВЛЕН В ВАШЕЙ СРЕДЕ.**

### Example <!-- omit in toc -->```
=== Certificate Authority ===


ComputerName            : dc.theshire.local
CAName                  : theshire-DC-CA
ConfigString            : dc.theshire.local\theshire-DC-CA
IsRoot                  : True
AllowsUserSuppliedSans  : True
VulnerableACL           : False
EnrollmentPrincipals    : THESHIRE\Domain Users
                          THESHIRE\Domain Computers
                          THESHIRE\certmanager
                          THESHIRE\certadmin
                          THESHIRE\Nested3
EnrollmentEndpoints     : 
NTLMEnrollmentEndpoints : 
DACL                    : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Users (Allow) - Read, Enroll
                          THESHIRE\Domain Computers (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
                          THESHIRE\certadmin (Allow) - ManageCA, Enroll
                          THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations       : ESC6

[!] The above CA is misconfigured!

...(snip)...

[!] EDITF_ATTRIBUTESUBJECTALTNAME2 set on this CA, the following templates may be vulnerable:

CA                      : dc.theshire.local\theshire-DC-CA
Name                    : User
SchemaVersion           : 1
OID                     : 1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1.1
VulnerableTemplateACL   : False
LowPrivCanEnroll        : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage        : Encrypting File System (1.3.6.1.4.1.311.10.3.4)|Secure Email (1.3.6.1.5.5.7.3.4)|Client Authentication (1.3.6.1.5.5.7.3.2)
HasAuthenticationEku    : True
HasDangerousEku         : False
EnrollmentAgentTemplate : False
CAManagerApproval       : False
IssuanceRequirements    : [Issuance Requirements]
                            Authorized signature count: 0
                            Reenrollment requires: same criteria as for enrollment.
ValidityPeriod          : 1 years
RenewalPeriod           : 6 weeks
Owner                   : THESHIRE\Enterprise Admins
DACL                    : NT AUTHORITY\Authenticated Users (Allow) - Read
                          THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
                          THESHIRE\Domain Users (Allow) - Read, Enroll
                          THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
Misconfigurations       :

Mitigations

Немедленно удалите этот флаг и перезапустите соответствующий центр сертификации из приглашения PowerShell с повышенными привилегиями на сервере CA:``` PS C:> certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2

PS C:> Get-Service -ComputerName CA_HOST certsvc | Restart-Service -Force

root@kitploit:~
## ESC7 - Уязвимый контроль доступа к центру сертификации

### Details <!-- omit in toc -->

Помимо шаблонов сертификатов, сам центр сертификации имеет набор разрешений, которые защищают различные действия ЦС. Эти разрешения можно просмотреть в certsrv.msc, щелкнув правой кнопкой мыши по ЦС, выбрав свойства и перейдя на вкладку «Безопасность».

Существует два права, которые являются критичными с точки зрения безопасности и опасны, если ими обладают непредусмотренные субъекты:

* **ManageCA** (также известный как "Администратор ЦС") - позволяет выполнять административные действия ЦС, включая (удаленное) переключение бита EDITF_ATTRIBUTESUBJECTALTNAME2, что приводит к ESC6.
* **ManageCertificates** (также известный как "Диспетчер/Офицер сертификатов") - позволяет субъекту утверждать ожидающие запросы сертификатов, отменяя требование/защиту выдачи "Утверждение менеджера".

### Пример <!-- omit in toc -->```
=== Certificate Authority ===


ComputerName            : dc.theshire.local
CAName                  : theshire-DC-CA
ConfigString            : dc.theshire.local\theshire-DC-CA
IsRoot                  : True
AllowsUserSuppliedSans  : False
VulnerableACL           : True
EnrollmentPrincipals    : THESHIRE\Domain Users
                          THESHIRE\Domain Computers
                          THESHIRE\certmanager
                          THESHIRE\certadmin
                          THESHIRE\Nested3
EnrollmentEndpoints     : 
NTLMEnrollmentEndpoints : 
DACL                    : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Users (Allow) - ManageCA, Read, Enroll
                          THESHIRE\Domain Computers (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
                          THESHIRE\certadmin (Allow) - ManageCA, Enroll
                          THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations       : ESC7

[!] The above CA is misconfigured!

Смягчение

Откройте консоль центра сертификации (certsrv.msc) на затронутом ЦС, щёлкните правой кнопкой мыши по имени ЦС и выберите «Свойства».

Перейдите на вкладку «Безопасность» и удалите уязвимую запись управления доступом.


ESC8 — NTLM-ретрансляция к HTTP-конечным точкам AD CS

ПРИМЕЧАНИЕ: эта конкретная проверка в PSPKIAudit проверяет только наличие NTLM для любых опубликованных конечных точек регистрации. Она НЕ проверяет, присутствует ли расширенная защита аутентификации для этих конечных точек с поддержкой NTLM, поэтому возможны ложные срабатывания!

[!IMPORTANT]
Аутентификация NTLM отключена для учётных записей из группы «Защищённые пользователи». Эта проверка может завершиться неудачей, если запускать PSPKIAudit, будучи вошедшим в систему как Защищённый пользователь.

Подробности

AD CS поддерживает несколько методов регистрации на основе HTTP через дополнительные роли сервера AD CS, которые администраторы могут установить. Все эти интерфейсы регистрации сертификатов на основе HTTP уязвимы к NTLM-ретрансляционным атакам.

Используя NTLM-ретрансляцию, злоумышленник на скомпрометированной машине может выдать себя за любую учётную запись AD, проходящую аутентификацию через входящий NTLM. Выдавая себя за учётную запись жертвы, злоумышленник может получить доступ к этим веб-интерфейсам и запросить сертификат аутентификации клиента на основе шаблонов сертификатов User или Machine.

Пример ```

=== Certificate Authority ===

ComputerName : dc.theshire.local CAName : theshire-DC-CA ConfigString : dc.theshire.local\theshire-DC-CA IsRoot : True AllowsUserSuppliedSans : False VulnerableACL : False EnrollmentPrincipals : THESHIRE\Domain Users THESHIRE\Domain Computers THESHIRE\certmanager THESHIRE\certadmin THESHIRE\Nested3 EnrollmentEndpoints : http://dc.theshire.local/certsrv/ NTLMEnrollmentEndpoints : http://dc.theshire.local/certsrv/ DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Domain Computers (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates THESHIRE\certmanager (Allow) - ManageCertificates, Enroll THESHIRE\certadmin (Allow) - ManageCA, Enroll THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll Misconfigurations : ESC8

[!] The above CA is misconfigured!

root@kitploit:~
### Меры по смягчению <!-- omit in toc -->

Либо удалите конечные точки регистрации HTTP(S), отключите NTLM для конечных точек, либо включите расширенную защиту аутентификации. См. **Защита конечных точек HTTP AD CS – PREVENT8** в техническом документе для получения более подробной информации.


## Разное - Явные сопоставления

Ещё одним возможным способом смягчения для некоторых ситуаций является принудительное применение явных сопоставлений для сертификатов. Это отключает использование альтернативных имён субъектов (SAN) в сертификатах при аутентификации в Active Directory.

Для Kerberos установка ключа **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** в значение 00000000 принудительно задаёт явное сопоставление. Дополнительные сведения приведены в [KB4043463](https://mskb.pkisolutions.com/kb/4043463).

Отключение явных сопоставлений для SChannel документально не описано, но, основываясь на наших исследованиях, установка значений 0x1 или 0x2 для ключа **HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods**, по-видимому, блокирует SAN, но требуется дополнительное тестирование.


# Анализ существующих выданных запросов на сертификаты

**ПРЕДУПРЕЖДЕНИЕ:** эта функция минимально протестирована в крупных средах!

**Примечание:** см. раздел "Мониторинг регистрации сертификатов пользователей/компьютеров - DETECT1" в техническом документе для получения дополнительной информации и инструкций по выполнению этих поисков с помощью certutil.

Если вы хотите проанализировать существующие выданные запросы на сертификаты, например, чтобы проверить, были ли указаны произвольные SAN в каких-либо запросах, или какие запросы были сделаны для определённых шаблонов/определёнными субъектами, функция `Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` расширяет различные функции PSPKI для предоставления более контекстной информации.

В частности, для каждого выданного в данный момент сертификата в домене извлекается необработанный запрос на подпись сертификата (CSR), а из запроса извлекается конкретная информация (например, был ли указан SAN, имя/компьютер/процесс запрашивающей стороны и т.д.) для обогащения объекта CSR.

Следующие флаги могут быть полезны:

| Флаг                        | Описание                                                                                   |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| **-HasSAN**                 | Возвращать только выданные сертификаты, в запросе которых указано альтернативное имя субъекта. |
| **-Requester DOMAIN\USER**  | Возвращать только выданные запросы на сертификаты для указанного запрашивающего пользователя. |
| **-Template TEMPLATE_NAME** | Возвращать только выданные запросы на сертификаты для указанного имени шаблона.               |

<br/>

Чтобы экспортировать ВСЕ выданные запросы на сертификаты в csv, используйте `Get-CertRequest | Export-CSV -NoTypeInformation requests.csv`.

Вот пример записи результата, показывающий ситуацию, когда с помощью Certify было указано альтернативное имя субъекта (SAN):```
CA                       : dc.theshire.local\theshire-DC-CA
RequestID                : 4602
RequesterName            : THESHIRE\cody
RequesterMachineName     : dev.theshire.local
RequesterProcessName     : Certify.exe
SubjectAltNamesExtension :
SubjectAltNamesAttrib    : Administrator
SerialNumber             : 55000011faef0fab5ffd7f75b30000000011fa
CertificateTemplate      : ESC1 Template
                           (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate              : 6/3/2021 5:54:51 PM
StartDate                : 6/3/2021 5:44:51 PM
EndDate                  : 6/3/2022 5:44:51 PM

CA                       : dc.theshire.local\theshire-DC-CA
RequestID                : 4603
RequesterName            : THESHIRE\cody
RequesterMachineName     : dev.theshire.local
RequesterProcessName     : Certify.exe
SubjectAltNamesExtension : Administrator
SubjectAltNamesAttrib    :
SerialNumber             : 55000011fb021b79cf7276c2de0000000011fb
CertificateTemplate      : ESC1 Template
                           (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate              : 6/3/2021 5:55:10 PM
StartDate                : 6/3/2021 5:45:10 PM
EndDate                  : 6/3/2022 5:45:10 PM

Свойство SubjectAltNamesExtension означает, что расширение x509 SubjectAlternativeNames использовалось для указания SAN, что происходит для шаблонов с флагом CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT. Свойство SubjectAttribNamesAttrib означает, что использовались пары x509 имя/значение, что происходит при указании SAN, когда установлен флаг CA EDITF_ATTRIBUTESUBJECTALTNAME2.

Существующие выданные сертификаты можно отозвать с помощью функции Revoke-Certificate из библиотеки PSPKI:

PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"

Допустимые значения для -Reason: "KeyCompromise", "CACompromise" и "Unspecified".

Скачать инструмент