Pentesting Active Directory: использование неправильно настроенных шаблонов (ESC1) (FINAL)
Службы сертификации Active Directory
ADCS используется для управления инфраструктурой открытых ключей в среде Active Directory. Он широко используется на предприятиях для управления сертификатами для систем, пользователей и приложений.
В 2021 году компания SpecterOps опубликовала технический документ с подробным описанием ADCS, ее неправильных конфигураций и уязвимостей, которые могут привести к краже учетных данных, эскалации домена и сохранению доступа. В этом документе подробно рассматриваются методы атак и предлагаются рекомендации по предотвращению, обнаружению и реагированию.
В этой статье не будут рассмотрены все приемы из белой книги. Для более глубокого понимания изучите техническую статью и сокращенную запись в блоге Уилла Шредера и Ли Кристенсена. Ссылки на эти ресурсы приведены в конце этого поста.
Инструменты
За время, прошедшее с момента выхода "Белой книги", было разработано несколько инструментов для поиска и эксплуатации уязвимостей ADCS, а также для помощи специалистам "синих команд" в решении этих проблем.
Эта запись в блоге начинает серию статей об атаках на ADCS, посвященную использованию Certipy (https://github.com/ly4k/Certipy), инструмента на базе Python для перечисления и эксплуатации уязвимых ADCS. Certipy - мой основной инструмент, но есть и другие:
- PKINITtools: https://github.com/dirkjanm/PKINITtools
- PyWhisker: https://github.com/ShutdownRepo/pywhisker
- Certi: https://github.com/zer1t0/certi
- Impacket: https://github.com/fortra/Impacket
- Certify: https://github.com/GhostPack/Certify
Использование неправильно настроенных шаблонов
Шаблоны сертификатов в ADCS определяют политики сертификатов, включая то, кто может запрашивать сертификат и для чего он может быть использован. Эти шаблоны могут быть настроены с такими параметрами, как тема, срок действия и авторизованные пользователи.
Чтобы перечислить информацию о шаблонах ADCS, вам нужны действительные учетные данные домена. Обычно достаточно любых доменных учетных данных.
Примерный сценарий
Предположим, что вы получили доступ к учетной записи пользователя под именем "billy" в сети целевой компании. Вы хотите проверить конфигурацию ADCS для домена "foobar.com".
Используя Certipy, вы можете перечислить конфигурации ADCS с помощью команды:
certipy find -u 'billy@foobar.com' -p <password> -dc-ip <DC_IP> -vulnerable -enabled
Certipy выводит подробную информацию в файлы JSON и TXT. Он также запускает коллекторы BloodHound, которые помогают визуализировать потенциальные пути повышения привилегий в домене.
Поиск уязвимых шаблонов
Чтобы найти возможности эскалации, вы можете поискать в выходном TXT-файле Certipy такие термины, как "ESC1".
Уязвимость ESC1
Уязвимость ESC1 позволяет низкопривилегированным пользователям запрашивать сертификаты от имени любого объекта домена, включая администраторов домена. Шаблоны с этой уязвимостью имеют следующие настройки:
- Client Authentication: True
- Enabled: True
- Enrollee Supplies Subject: True
- Requires Management Approval: False
- Authorized Signatures Required: 0
Если "billy" входит в группу Domain Users, он может запросить сертификат для администратора домена, например "DA_Dan@foobar.com", с помощью команды:
certipy req -u 'billy@foobar.com' -p '<PASSWORD>' -dc-ip '10.10.1.100' -target 'foobar-CA.foobar.com' -ca 'foobar-CA' -template 'FOO_Templ' -upn 'DA_Dan@foobar.com'
Если вы столкнулись с ошибкой SMB SessionError, попробуйте использовать аутентификацию Kerberos. Используйте модуль Impacket getTGT для получения сервисного билета для вашего пользователя:
python3 getTGT.py 'foobar.com/billy'
Экспортируйте полученный файл CCache и измените команду Certipy, чтобы использовать аутентификацию Kerberos:
certipy req -u 'billy@foobar.com' -k -no-pass -dc-ip '10.10.1.100' -target 'foobar-CA.foobar.com' -ca 'foobar-CA' -template 'FOO_Templ' -upn 'DA_Dan@foobar.com'
Предотвращение и обнаружение
- Отключить ненужные шаблоны.
- Ограничение прав доступа к шаблонам.
- Требовать ручного утверждения сертификатов.
- Отключите флаг "Enrollee Supplies Subject".
- По возможности удалите "Аутентификация клиента".
Мониторинг
Отслеживайте события регистрации сертификатов, чтобы обнаружить, когда сертификаты запрашиваются и выдаются. Полезные идентификаторы событий включают:
- 4886 - Запрос на получение сертификата
- 4887 - Сертификат выдан
- 4768 - Запрос на получение билета Kerberos (TGT)
Оригинальная статья | Перевод: THREAD