Содержание статьи
- Центр сертификации
- Сертификаты
- В поисках сертификатов
- Атаки на AD CS
- Лаборатория
- Сбор информации
- Modifiable SAN. ESC1
- Any or None Purpose Attack. ESC2
- Enrollment Agent. ESC3
- Certificate ACL Abuse. ESC4
- Manage CA & Manage Certificate. ESC7
- Relay на AD CS Web Enrollment. ESC8
- dNSHostName Spoofing
- Golden Certificate
- Сопоставление сертификатов
- StrongCertificateBindingEnforcement. Kerberos
- CertificateMappingMethods. Schannel
- ESC9. Jump to DA
- ESC10. Nameless accounts
- Выводы
В Windows Server присутствует роль под названием Active Directory Certification Services (AD CS), которая нужна для реализации инфраструктуры открытых ключей (PKI) в сетях с контроллером домена. AD CS предназначена для выдачи сертификатов пользователям и компьютерам. Сертификаты могут использоваться для шифрования, подписи, аутентификации и тому подобного, и в целом эта роль выглядит как сервис для повышения безопасности в домене.
Чаще всего при пентесте домена Active Directory конечной целью ставится перехват учетной записи администратора. Получив админа, можно шифровать систему сдавать отчет и заканчивать проект. Есть множество способов добиться указанной цели, и один из них — эксплуатация неправильных конфигураций шаблонов, по которым выпускаются сертификаты.
На пути к получению администратора домена нам понадобится настоящий швейцарский нож в мире сертификатов — Certipy. Он позволяет искать информацию о шаблонах, запрашивать сертификаты и аутентифицироваться при помощи сертификатов, но самое главное — проводить атаки.
Центр сертификации
В рамках Active Directory центр сертификации реализует функцию инфраструктуры открытых ключей. В свою очередь, инфраструктура открытых ключей (PKI) — это набор служб и компонентов, позволяющих управлять ключами и сертификатами в сети.
Основная цель центра сертификации состоит в выдаче, отзыве, перевыпуске сертификатов и тому подобном. Центр сертификации, развернутый первым, является корнем инфраструктуры открытых ключей. Далее можно развертывать подчиненные ЦС, расположенные в иерархии инфраструктуры открытых ключей, в верхней части которой находится корневой ЦС.
Сертификаты
Cертификат в общем смысле — это документ формата X.509, содержащий информацию о своем владельце. Может использоваться как средство идентификации и аутентификации.
Сертификаты включают в себя некоторые параметры. Вот наиболее интересные из них:
- Subject — владелец сертификата;
- SAN (SubjectAlternativeName) определяет одно или несколько альтернативных имен, которые может использовать владелец (это нам пригодится в атаках);
- Extended/Enhanced Key Usages — набор идентификаторов, которые определяют, как будет использоваться сертификат.
Сертификаты выпускаются по определенным шаблонам, описывающим параметры, с которыми будет выпущен сертификат, например:
- Кто может запрашивать сертификат по данному шаблону?
- Кто может изменять шаблон?
- Какие EKU (значения Extended Key Usage) будут определены?
- На какой период будет выпущен сертификат?
Проще говоря, шаблоны сертификатов определяют порядок запроса и использования сертификатов, выданных центром сертификации.
В поисках сертификатов
Шаблоны сертификатов хранятся в следующем контейнере:
CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=com
Соответственно, получить шаблоны можно при помощи следующей команды PowerShell, используя модуль AD:
PS > Get-ADObject -SearchBase "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=com" -Filter * -Properties *
Также в Windows есть предустановленный инструмент certutil
, который может вывести все шаблоны для сертификатов в более удобном и подробном виде.
$ certutil -v -template
Инструмент Certipy позволит сделать это с Linux и сразу выгрузить данные, которые можно загрузить в BloodHound.
$ certipy find 'contoso/john:Passw0rd@contoso.com'
Чтобы выпустить сертификат, нужно, чтобы наш пользователь состоял в доменной группе, у которой есть права на выпуск этого сертификата. Еще необходима возможность аутентифицироваться в домене. В совокупности эти два требования дадут максимальный импакт для атакующего.
Значения поля EKU, позволяющие аутентифицироваться в домене:
- Client Authentication (
1.
);3. 6. 1. 5. 5. 7. 3. 2 - PKINIT Client Authentication (
1.
);3. 6. 1. 5. 2. 3. 4 - Smart Card Logon (
1.
);3. 6. 1. 4. 1. 311. 20. 2. 2 - Any Purpose EKU (
2.
);5. 29. 37. 0 - SubCA (
-
).
Атаки на AD CS
Лаборатория
Для проведения тестов нам потребуется лабораторный стенд, состоящий из двух виртуальных машин: Windows Server 2016 и Kali Linux. Перечислим общие требования для всех атак:
- сертификат может выпускаться группой, в которую входит ваш пользователь;
- Manager Approval должен быть отключен;
- подпись CSR не требуется.
Последние два требования выполняются в Windows Server по умолчанию, и на них можно не обращать внимания (привет, админы!). Еще нам потребуется возможность аутентификации в домене с выпущенным сертификатом. На нашем лабораторном стенде мы будем использовать пользователя Kent.
.
Сбор информации
Сбор информации о цели — первый этап тестирования на проникновение. Для сбора информации и визуализации можно использовать Certipy + BloodHound. Перед этим нужно загрузить подготовленные разработчиками Certipy запросы на свой хост.
wget -O ~/.config/bloodhound/customqueries.json https://raw.githubusercontent.com/ly4k/Certipy/main/customqueries.json
Получить информацию из центра сертификации позволяет модуль find
:
$ certipy find 'contoso.com/Kent.Jill:P@ssw0rd'@DC01.contoso.com
BloodHound дает возможность визуализировать информацию по объектам AD CS и правам на них, а также определить векторы повышения привилегий.
Modifiable SAN. ESC1
Это атака основывается на изменении параметра SAN, который позволяет указать альтернативное имя пользователя. Это позволит нам выпустить сертификат на другого пользователя, даже администратора домена. Чтобы атака прошла успешно, шаблон сертификата должен иметь установленный флаг ENROLLEE_SUPPLIES_SUBJECT
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»