ESC13. Как группа без участников может дать права администратора
ESC13 — это атака на инфраструктуру Active Directory Certificate Services (AD CS), при которой злоумышленник получает привилегии, если в домене включен AMA (authentication mechanism assurance), а в шаблоне сертификата задан OID, связанный с группой AD через атрибут msDS-OIDToGroupLink. При получении такого сертификата пользователь автоматически добавляется в указанную (часто высокопривилегированную) группу, что приводит к эскалации прав.
Чтобы смоделировать технику ESC13 и понять, как она работает, нужно настроить определенную конфигурацию в инфраструктуре Active Directory и AD CS. Вот как это делается шаг за шагом.
Сначала создается универсальная группа безопасности. Это необходимо, потому что AMA работает только с группами типа Universal. Выполните следующие действия:
- Откройте Active Directory Users and Computers и создайте группу с параметрами:
- название: ESC13Group;
- тип: Security;
- область: Universal.

- По желанию сделайте группу Domain Admins членом ESC13Group — так эскалация прав будет заметна в лабораторных условиях.
Нужно создать объект OID в конфигурационной области Active Directory и связать его с группой безопасности, которая будет автоматически добавляться в токен пользователя при выпуске сертификата.
Создайте объект OID:
- Откройте шаблон сертификата ESC13 в
certtmpl.msc. - На вкладке Extensions выделите Issuance Policies и нажмите Edit → Add → New.
- Задайте имя новой политики — ESC13OID.
- В поле Object identifier укажите
1.3.6.1.4.1.311.21.8.9999999.1234(если OID уже существует, выберите его из списка). Поле CPS location оставьте пустым. Подтвердите изменения (OK → Apply).
Скопируйте distinguished name (DN) группы: CN=ESC13Group,CN=Users,DC=GOOD,DC=EXPERT.
Откройте ADSI Edit:
- Создайте подключение к Configuration.
- Перейдите по пути:
CN=Services→CN=Public Key Services→CN=OID. - Найдите объект, начинающийся на
CN=1234(последние цифры вашего OID). - Откройте свойства, атрибут
msDS‑OIDToGroupLinkи вставьте скопированный DN группы ESC13Group. Нажмите OK и Apply.
Опубликуйте шаблон на сервере CA:
- На сервере сертификации откройте Certification Authority.
- Кликните правой кнопкой по Certificate Templates: New → Certificate Template to Issue.
- Выберите ESC13 и нажмите OK.
Теперь шаблон ESC13 опубликован, связан с OID 1.3.6.1.4.1.311.21.8.9999999.1234 и группой ESC13Group. При выпуске сертификата по этому шаблону членство в ESC13Group автоматически добавляется пользователю на время Kerberos‑аутентификации.
Необходимо создать или скопировать шаблон сертификата и настроить в нем нужные поля. Для этого откройте Certificate Templates Console certtmpl.msc, скопируйте шаблон, например User, и назовите его ESC13.
Настройте шаблон:
- Security. Дайте пользователю
ESC13Userправо Enroll:
- Extensions → Issuance Policies. Добавляем политику с OID (уже добавили).
- Extensions → Application Policies. Убедитесь, что присутствует Client Authentication (
1.3.6.1.5.5.7.3.2). - Issuance Requirements. Уберите галочку CA certificate manager approval (если стоит) и оставьте This number of authorized signatures = 0:

Теперь добавьте шаблон в список доступных на конкретном сервере сертификации. Для этого:
- Откройте Certification Authority → папка Certificate Templates.
- Кликните правой кнопкой: New → Certificate Template to Issue.
- Выберите ESC13 и нажмите OK.

Теперь шаблон сертификата доступен для пользователей с правами Enroll и содержит ссылку на ESC13OID. Этот OID, в свою очередь, связан с объектом группы по адресу CN=ESC13Group,CN=Users,DC=GOOD,DC=EXPERT, что является DN универсальной группы типа Security.
Таким образом, получив сертификат по такому шаблону, пользователь временно получает членство в этой группе. А если эта группа обладает высокими правами (например, административными), то и пользователь, в нашем случае ESC13User, на время аутентификации наследует эти права.
От имени пользователя ESC13User атакующий запрашивает сертификат по шаблону ESC13 с помощью Certify:
Certify.exe request /ca:GOODEX-SERVER.GOOD.EXPERT\GOOD-GOODEX-SERVER-CA-1 /template:ESC13
Сертификат автоматически выпускается, если нет требований ручного подтверждения.
Злоумышленник сохраняет закрытый ключ как esc13.key и сертификат как esc13.pem, а затем создает версию сертификата esc13.pfx с помощью встроенного инструмента Windows — certutil:
certutil -MergePFX ESC13.pem ESC13.pfx
Атакующий проверяет сертификат на наличие требуемых расширений:
certutil -Dump -v ESC13.pfx
Сертификат должен содержать:
- Client Authentication EKU (
1.3.6.1.5.5.7.3.2); - политику выдачи с OID, привязанным к группе ESC13Group.

Злоумышленник запрашивает Kerberos TGT с помощью инструмента Rubeus:
Rubeus.exe asktgt /user:ESC13User /certificate:ESC13.pfx /nowrap
KDC проверяет сертификат и обнаруживает привязку OID к группе безопасности ESC13Group.
Злоумышленник расшифровывает TGT для подтверждения того, что пользователь получил права группы ESC13Group:
Rubeus.exe describe /ticket:<полученный_base64_TGT> /servicekey:<ключ_krbtgt>
Если SID группы ESC13Group присутствует в PAC билета Kerberos, пользователь ESC13User получил соответствующие привилегии.
Таким образом, пользователь ESC13User, исходно не входящий в привилегированную группу ESC13Group, временно приобретает ее привилегии при использовании полученного сертификата. Это может привести к компрометации всей инфраструктуры, если целевая группа обладает административными правами.
Рекомендуем ознакомиться с отчетом Certified Pre‑Owned от SpecterOps. В разделах DETECT1 и DETECT2 подробно описаны методы обнаружения неправомерных техник в инфраструктуре AD CS. Изложим их суть кратко.
DETECT1. Мониторинг запросов и выдачи сертификатов
Этот раздел посвящен мониторингу процессов запроса и выдачи сертификатов в инфраструктуре AD CS.
Ключевые события
- Event ID 4886 — поступление запроса на сертификат.
- Event ID 4887 — выдача сертификата.
- Event ID 4898 — изменение расширений запроса, включая
msPKI-Certificate-Policy(OID).
Что можно получить из этих событий
- Кто именно запрашивал сертификат (контекст пользователя).
- С какого хоста поступил запрос.
- Какие параметры использовались в CSR (частично).
- В случае события 4898 — какой OID был применен. Это критически важно при обнаружении атак типа ESC13.
Ограничения подхода
- Не отображаются все поля CSR (например, Subject Alternative Name).
- Часто отсутствует имя шаблона сертификата.
- Некоторые расширения, которые могут быть критичны для анализа, не логируются.
DETECT2. Мониторинг аутентификации по сертификатам
Здесь рассказывается о выявлении использования сертификатов после их получения, то есть разбирается мониторинг аутентификации по ним в AD.
Ключевое событие
Event ID 4769 — запрос Kerberos TGS, включая вход по сертификату. С его помощью можно отследить:
- когда пользователь впервые использовал сертификат;
- имперсонацию: если субъект сертификата не совпадает с логином текущей сессии.
Почему важно мониторить события
- Атаки через уязвимые шаблоны (например, ESC13) могут быть невидимыми, если не настроен правильный аудит.
- Сбор и анализ событий 4886, 4887, 4898, 4769 позволяют построить цепочку «запрос → выдача → использование».
Рекомендации
- Включите логирование событий на сервере CA.
- Извлекайте OID из события 4898.
- Сопоставьте OID с группами и субъектами.
- Создайте поведенческий профиль: кто, когда и зачем получает сертификаты.
Уязвимый шаблон должен иметь следующие настройки:
- Права Enroll у группы или пользователя без административных прав.
- Включено расширение Issuance Policies с OID, который:
- зарегистрирован в AD в контейнере OID;
- связан с группой через атрибут
msDS-OIDToGroupLink.
- Группа из
msDS-OIDToGroupLinkдолжна:- быть универсальной (Universal Group);
- иметь высокие привилегии (Domain Admins, Enterprise Admins).
- Включен EKU Client Authentication (
1.3.6.1.5.5.7.3.2) в расширении Application Policies. Это позволяет использовать сертификат для аутентификации в домене. - В разделе Issuance Requirements:
- отключено требование CA certificate manager approval (нет необходимости в ручном утверждении заявки);
- отсутствует настройка обязательных подписей (This number of authorized signatures = 0).
- Шаблон опубликован на сервере CA и доступен для выдачи сертификатов.
- Уровень функциональности домена поддерживает AMA (не ниже Windows Server 2008 R2).
При анализе потенциально уязвимых шаблонов сертификатов, которые могут быть доступны для запроса пользователям без административных прав, учитывайте и сценарии, описанные в рамках других атак серии ESC. Однако в контексте ESC13 особое внимание уделяйте атрибуту msDS-OIDToGroupLink.
Ключевая задача — определить, какие шаблоны сертификатов связаны с группами через этот атрибут. Интерес представляют только универсальные группы, обозначенные как Security. Это основной фильтр, с которого следует начинать поиск.
Информация об OID шаблонов хранится в кеше шаблонов сертификатов в реестре Windows по следующему пути: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\CertificateTemplateCache.
Внутри каждого шаблона смотрите на значение атрибута msPKI-Certificate-Policy, которое содержит его OID.
Возможный алгоритм проверки
- Получить список всех OID‑объектов из конфигурационного раздела Active Directory.
- Проверить:
- связан ли каждый OID с какой-либо группой через атрибут
msDS-OIDToGroupLink; - установлен ли нестандартный владелец (Owner) у OID;
- имеются ли нестандартные права доступа (ACE), позволяющие изменять объект.
- связан ли каждый OID с какой-либо группой через атрибут
- Если OID связан с группой, определить ее параметры: тип, область действия и уровень привилегий.
- Получить список всех шаблонов сертификатов (Certificate Templates) и извлечь те, которые содержат политику с соответствующим OID (
msPKI-Certificate-Policy). - Проверить, не могут ли обычные пользователи (не администраторы) запросить эти шаблоны. Это дает потенциальную возможность автоматического вступления в группу.
Ниже — пример скрипта, который собирает и анализирует данные. Он извлекает OID из Active Directory, находит те, которые связаны с группами, проверяет владельцев и разрешения, а также определяет, какие шаблоны сертификатов могут использовать эти OID.
Запускаем скрипт:

Скрипт нашел следующую информацию:
- Два OID, которые:
- связаны с одной и той же группой — ESC13Group;
- зарегистрированы в Active Directory как
msPKI-Cert-Template-OID; - являются частью политики шаблонов сертификатов.
- Шаблон сертификата ESC13, который:
- использует один из этих OID;
- может быть использован для автоматического включения в группу ESC13Group.
Это типичная конфигурация, уязвимая для атаки ESC13, если выполнены еще два условия:
- Шаблон сертификата ESC13 доступен для запроса обычным пользователям (например, Authenticated Users).
- У злоумышленника есть возможность запросить сертификат на основе этого шаблона, например, с помощью Certipy, certreq.
Если шаблон выдает сертификат, который включает нужный OID, и этот OID связан с группой, то пользователь, получивший такой сертификат, автоматически добавляется в группу. Это и есть суть техники ESC13.
Что проверить дальше
1. Права на запрос шаблона ESC13
Откройте certtmpl.msc (или проверьте через Get-CATemplate) и посмотрите, кто может читать или запрашивать этот шаблон:
- Authenticated Users — повод для беспокойства;
- обычные пользователи — критично.
2. Привилегии группы ESC13Group
Проверьте членство и назначение группы. Если она входит в Domain Admins, Server Operators, Backup Operators или администрирует важные ресурсы — это открывает прямой путь к эскалации привилегий.
3. Настройки шаблона
В шаблоне ESC13 посмотрите:
- тип: User или Computer;
- поддерживает ли он Client Authentication;
- можно ли использовать шаблон для Kerberos-аутентификации. Если да, то его можно использовать в атаке типа S4U2Self + ESC13.
4. Политика публикации в CA
Проверьте, опубликован ли шаблон ESC13 на одном из корпоративных серверов CA (certutil -catemplates на сервере CA).
Если хотя бы одно из условий из таблицы ниже выполняется, злоумышленник может получить сертификат и автоматически попасть в ESC13Group. Это может привести к полной компрометации AD, если группа обладает высокими правами.
| Условие | Риск |
|---|---|
| Шаблон доступен для всех |
Критический |
| Шаблон выдает сертификаты с OID, который связан с группой |
Критический |
| Группа ESC13Group привилегированная |
Критический |
| Шаблон опубликован на CA |
Высокий |
Описанный выше скрипт также можно взять за основу, дополнив его функциональностью, при которой в случае обнаружения шаблона сертификата, связанного с группой через OID, автоматически выводится детальная информация об этом шаблоне. Для удобства последующего анализа особенно целесообразно выводить именно ключевые параметры конфигурации, требующие внимания со стороны специалистов.
Логика такого сбора может иметь вид:
Import-Module ActiveDirectory
# Connect to AD root
$rootDSE = Get-ADRootDSE
$configNC = $rootDSE.configurationNamingContext
# Define OID and Template containers
$oidContainer = "CN=OID,CN=Public Key Services,CN=Services,$configNC"
$templateContainer = "CN=Certificate Templates,CN=Public Key Services,CN=Services,$configNC"
# Retrieve all OIDs
$oids = Get-ADObject -SearchBase $oidContainer -Filter * `
-Properties DisplayName, Name, 'msPKI-Cert-Template-OID', 'msDS-OIDToGroupLink', nTSecurityDescriptor
# Retrieve all certificate templates that have a msPKI-Certificate-Policy
$templates = Get-ADObject -SearchBase $templateContainer -Filter * `
-Properties * | Where-Object { $_.'msPKI-Certificate-Policy' }
if (-not $oids) {
Write-Host "Error: No OID objects found."
exit
}
Write-Host "=== Enumerating OIDs ==="
foreach ($oid in $oids) {
if ($oid.'msDS-OIDToGroupLink') {
Write-Host "`n[OID -> GroupLink] $($oid.Name) -> $($oid.'msDS-OIDToGroupLink')"
Write-Host " DistinguishedName: $($oid.DistinguishedName)"
Write-Host " Template-OID: $($oid.'msPKI-Cert-Template-OID')"
}
if ($oid.nTSecurityDescriptor.Owner -notlike "*\Enterprise Admins") {
Write-Host "`n[OID -> Non-default owner] $($oid.Name) : $($oid.nTSecurityDescriptor.Owner)"
}
foreach ($ace in $oid.nTSecurityDescriptor.Access) {
if (
$ace.IdentityReference -like "*\Domain Admins" -or
$ace.IdentityReference -like "*\Enterprise Admins" -or
$ace.IdentityReference -like "*\SYSTEM"
) { continue }
if (
$ace.IdentityReference -like "*\Authenticated Users" -and
$ace.ActiveDirectoryRights -eq 'GenericRead'
) { continue }
Write-Host "`n[OID -> Non-default ACE] $($oid.Name)"
$ace | Format-List
}
}
Write-Host "`n=== Enumerating Certificate Templates ==="
foreach ($template in $templates) {
# Find any OID linked to a group that matches this template's policy list
$matchingOid = $oids | Where-Object {
$_.'msDS-OIDToGroupLink' -and
($template.'msPKI-Certificate-Policy' -contains $_.'msPKI-Cert-Template-OID')
}
if ($matchingOid) {
Write-Host "`n[Template -> GroupLink] $($template.Name) can issue membership in $($matchingOid.'msDS-OIDToGroupLink')"
Write-Host " OID DistinguishedName: $($matchingOid.DistinguishedName)"
Write-Host " OID Template-OID: $($matchingOid.'msPKI-Cert-Template-OID')"
# Full verbose output
Write-Host "`n[Detailed template info for '$($template.Name)' via certutil:]"
& certutil.exe -v -template $template.Name
# Selected properties
Write-Host "`n========== Selected Template Properties for '$($template.Name)' =========="
$props = @(
@{ Name = 'TemplatePropCommonName'; Context = 0 },
@{ Name = 'TemplatePropEKUs'; Context = 4 },
@{ Name = 'TemplatePropCertificatePolicies'; Context = 6 },
@{ Name = 'TemplatePropRASignatureCount'; Context = 0 },
@{ Name = 'TemplatePropEnrollmentFlags'; Context = 4 },
@{ Name = 'TemplatePropSecurityDescriptor'; Context = 10 }
)
foreach ($p in $props) {
Write-Host "`n--- $($p.Name) ---"
& certutil.exe -v -template $template.Name |
Select-String -Pattern "^\s*$($p.Name)\s*=" -Context 0,$($p.Context) |
ForEach-Object { $_.Line; $_.Context.PostContext }
}
Write-Host "========================================"
}
}
# At the end, re-print only the linked-OID blocks in original format
Write-Host "`n=== Linked OID Summary ==="
foreach ($oid in $oids | Where-Object { $_.'msDS-OIDToGroupLink' }) {
Write-Host "`n[OID -> GroupLink] $($oid.Name) -> $($oid.'msDS-OIDToGroupLink')"
Write-Host " DistinguishedName: $($oid.DistinguishedName)"
Write-Host " Template-OID: $($oid.'msPKI-Cert-Template-OID')"
}
Write-Host "`nDone."
При выполнении этот скрипт выводит всю подробную информацию о шаблонах сертификатов, а в конце предоставляет ключевые поля, которые необходимы для проведения аудита конфигураций и безопасности:
========== Selected Template Properties for 'ESC13' ==========
--- TemplatePropCommonName ---
TemplatePropCommonName = ESC13
--- TemplatePropEKUs ---
TemplatePropEKUs =
3 ObjectIds:
1.3.6.1.5.5.7.3.2 Client Authentication
1.3.6.1.5.5.7.3.4 Secure Email
1.3.6.1.4.1.311.10.3.4 Encrypting File System
--- TemplatePropCertificatePolicies ---
TemplatePropCertificatePolicies =
6 ObjectIds:
1.3.6.1.4.1.311.21.8.12938231.2904612.12930709.15673653.2588256.202.5641051.3556330 ESC13OID
1.3.6.1.4.1.311.21.8.9999999.1234 ESC13OID
1.3.6.1.4.1.311.21.8.12938231.2904612.12930709.15673653.2588256.202.1.402 High Assurance
0.4.0.1862.1.1 European Qualified Certificate
1.3.6.1.4.1.311.21.32 Endorsement Key Trusted on Use
--- TemplatePropRASignatureCount ---
TemplatePropRASignatureCount = 0
--- TemplatePropEnrollmentFlags ---
TemplatePropEnrollmentFlags = 2b (43)
CT_FLAG_INCLUDE_SYMMETRIC_ALGORITHMS -- 1
CT_FLAG_PEND_ALL_REQUESTS -- 2
CT_FLAG_PUBLISH_TO_DS -- 8
CT_FLAG_AUTO_ENROLLMENT -- 20 (32)
--- TemplatePropSecurityDescriptor ---
TemplatePropSecurityDescriptor = O:S-1-5-21-3912521324-1417072855-2443496624-1113G:S-1-5-21-3912521324-1417072855-2443496624-519D:PAI(OA;;CR;0e10c968-78fb-11d2-90d4-00c04f79dc55;;S-1-
5-21-3912521324-1417072855-2443496624-1114)(OA;;RPWPCR;0e10c968-78fb-11d2-90d4-00c04f79dc55;;DA)(OA;;RPWPCR;0e10c968-78fb-11d2-90d4-00c04f79dc55;;DU)(OA;;RPWPCR;0e10c968-78fb-11d2-90d4-
00c04f79dc55;;S-1-5-21-3912521324-1417072855-2443496624-519)(A;;CCDCLCSWRPWPDTLOSDRCWDWO;;;DA)(A;;CCDCLCSWRPWPDTLOSDRCWDWO;;;S-1-5-21-3912521324-1417072855-2443496624-519)(A;;CCDCLCSWRP
WPDTLOSDRCWDWO;;;S-1-5-21-3912521324-1417072855-2443496624-1113)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;AU)
Allow Enroll GOOD\ESC13User
Allow Enroll GOOD\Domain Admins
Allow Enroll GOOD\Domain Users
Allow Enroll GOOD\Enterprise Admins
Allow Full Control GOOD\Domain Admins
Allow Full Control GOOD\Enterprise Admins
Allow Full Control GOOD\testeradm
Allow Full Control NT AUTHORITY\Authenticated Users
========================================
=== Linked OID Summary ===
[OID -> GroupLink] 1234.40FF221FB930C9E794EF7833A470BFB7 -> CN=ESC13Group,CN=Users,DC=GOOD,DC=EXPERT
DistinguishedName: CN=1234.40FF221FB930C9E794EF7833A470BFB7,CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=GOOD,DC=EXPERT
Template-OID: 1.3.6.1.4.1.311.21.8.9999999.1234
[OID -> GroupLink] 5926351.814B4C2227F0343DC936D5F278A6B57F -> CN=ESC13Group,CN=Users,DC=GOOD,DC=EXPERT
DistinguishedName: CN=5926351.814B4C2227F0343DC936D5F278A6B57F,CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=GOOD,DC=EXPERT
Template-OID: 1.3.6.1.4.1.311.21.8.12938231.2904612.12930709.15673653.2588256.202.3117937.5926351
Done.
Представленные здесь ключевые поля включают:
- имя шаблона сертификата;
- возможные сценарии использования шаблона (enhanced key usage, EKU);
- наличие ограничений выпуска сертификатов со стороны администраторов или менеджеров (enrollment flags);
- дескрипторы безопасности (security descriptor), которые определяют перечень субъектов и групп, имеющих право на запрос сертификата по этому шаблону. Подробный разбор дескрипторов безопасности читайте в справочных материалах;
- cвязанные группы, указанные через OID, которые требуют дополнительной проверки.
Скрипт предоставляет исчерпывающий объем данных для детального анализа конфигурации сертификатов, однако для повседневного использования оптимизируйте его под конкретные задачи и требования безопасности вашей инфраструктуры.
Вся проверка — ручная и трудозатратная. Она не зависит от событий безопасности и потому особенно важна. Чтобы сократить время и снизить риски человеческого фактора, автоматизируйте такой анализ.
В решении BI.ZONE EDR логика инвентаризации и анализа шаблонов сертификатов включает сбор указанных выше данных, а также подробной информации о найденных шаблонах сертификатов и последующий анализ их конфигурации на предмет возможных ошибок и уязвимостей. Такой автоматический сбор инвентаризационных данных выполняется регулярно и полностью автономно, без необходимости ручного вмешательства администратора.
При наличии агента BI.ZONE EDR на хосте формируется актуальный результат инвентаризации, отражающий как уже существующие, так и потенциально уязвимые шаблоны — в реальном времени и без зависимости от журналов безопасности.

Для предотвращения техники ESC13 внедрите следующие меры безопасности.
- Убедитесь, что только уполномоченные пользователи или группы могут использовать шаблон (права Enroll или Autoenroll).
- Исключите «широкие» группы вроде Authenticated Users из ACL шаблонов.
- Регулярно проверяйте объекты OID в AD и связанные с ними группы через атрибут
msDS-OIDToGroupLink. - Убедитесь, что у связанных групп нет привилегий (например, Domain Admins).
- Удалите EKU Client Authentication, если не требуется.
- Проверьте, включено ли требование CA certificate manager approval и активированы ли механизмы ручного утверждения.
- Включите и анализируйте события 4886, 4887, 4888, 4898 и 4769.
- Настройте SIEM или агент EDR на выявление подозрительных цепочек «запрос → выдача → использование».
Если в вашей инфраструктуре нет необходимости в authentication mechanism assurance, отключите его.
ESC13 — это мощная техника эскалации привилегий, основанная на ошибках конфигурации в инфраструктуре AD CS и связях OID с группой. Атака особенно опасна в сочетании с широким доступом к шаблону и привилегированной группой.
Только комплексный подход — автоматизация аудита, регулярная инвентаризация и постоянный мониторинг — позволяет защитить инфраструктуру от подобных атак.
Понимание риска, грамотная настройка шаблонов, контроль доступа и регулярный аудит — основа устойчивой безопасности Active Directory.