July 5

Pentesting Active Directory: использование неправильно настроенных шаблонов (ESC1) (FINAL)

PART 6

Службы сертификации Active Directory

ADCS используется для управления инфраструктурой открытых ключей в среде Active Directory. Он широко используется на предприятиях для управления сертификатами для систем, пользователей и приложений.

В 2021 году компания SpecterOps опубликовала технический документ с подробным описанием ADCS, ее неправильных конфигураций и уязвимостей, которые могут привести к краже учетных данных, эскалации домена и сохранению доступа. В этом документе подробно рассматриваются методы атак и предлагаются рекомендации по предотвращению, обнаружению и реагированию.

В этой статье не будут рассмотрены все приемы из белой книги. Для более глубокого понимания изучите техническую статью и сокращенную запись в блоге Уилла Шредера и Ли Кристенсена. Ссылки на эти ресурсы приведены в конце этого поста.

Инструменты

За время, прошедшее с момента выхода "Белой книги", было разработано несколько инструментов для поиска и эксплуатации уязвимостей ADCS, а также для помощи специалистам "синих команд" в решении этих проблем.

Эта запись в блоге начинает серию статей об атаках на ADCS, посвященную использованию Certipy (https://github.com/ly4k/Certipy), инструмента на базе Python для перечисления и эксплуатации уязвимых ADCS. Certipy - мой основной инструмент, но есть и другие:

Использование неправильно настроенных шаблонов

Шаблоны сертификатов в 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