Найти тему

Domain Persistence: атака Golden Certificate

 Изображение: olia danilevich (Pexels)
Изображение: olia danilevich (Pexels)

В данной статье пойдет речь об атаке Golden Certificate. Читатели узнают особенности ее осуществления, возможности которые она предоставляет хакерам.

Введение

Аналитики в сфере ИБ, которые знакомы с Active Directory и тестированием на проникновение, должны понимать «концепцию билетов». Kerberos, механизм аутентификации по умолчанию в AD, использует аутентификацию на основе «билетов», при которой Key Distribution Center (KDC) предоставляет пользователю, запрашивающему доступ к службе или учетной записи, Ticket-Granting Ticket (TGT). Его затем можно использовать для создания Service Ticket (ST) для получения доступа к определенной службе, например аккаунту SQL. Атаки, такие как Golden Ticket, дают возможность хакеру сохранить за собой доступ к аккаунту администратора домена, заполучив NTLM-хеш учетной записи “krbtgt”. Сохранение постоянного доступа к аккаунту админа необходимо аналитикам ИБ в случае изменения пароля. Domain Persistence может быть осуществлено и с помощью проверки подлинности на основе сертификатов, развернутой в Active Directory Certificate Service.

Одной из таких методик является атака Golden Certificate. При ее осуществлении используется аутентификация на основе сертификатов в AD, включенная по умолчанию при установке ADCS (Active Directory Certificate Services). Хакер создает новый сертификат с использованием специального ключа для сертификата CA. Эта атака была на практике осуществлена Benjamin Delpy в Mimikatz. Теоретические основы осуществления атаки можно почитать в работе Will Schroeder и Lee Christensen.

Особенности работы ADCS и что собой представляет Certificate

ADCS обеспечивает аутентификацию в лесу. Она повышает общий уровень безопасности во время идентификации (учетной записи пользователя или службы), привязывая данный процесс к соответствующему ключу. Certificate – это документ с цифровой подписью в формате X.509, используемый для шифрования, подписи сообщений и аутентификации. Он содержит в себе следующие данные:

  • Subject – владелец сертификата
  • Public Key – связывает Subject со специальным конфиденциальным ключом, хранящимся отдельно
  • NotBefore и NotAfter dates – определяют срок действия сертификата
  • Serial Number – идентификатор сертификата, присвоенный центром сертификации
  • Issuer – указывает на того, кто выдал сертификат (обычно – на центр сертификации)
  • SubjectAlternativeName – включает в себя одно или несколько альтернативных имен, которыми может обозначаться Subject
  • Basic Constraints – указывает на тип сертификата, существуют ли какие-либо ограничения при его использовании
  • Extended Key Usages (EKUs) – идентификаторы объектов (OID), которые указывают на то, как будет использоваться сертификат
  • Signature Algorithm – определяет алгоритм, используемый для подписи сертификата
  • Signature – подпись центра сертификации, которая создается с использованием конфиденциального ключа

Центры сертификации (CA) отвечают за выдачу сертификатов. После установки ADCS, CA создает свою собственную пару публичного и конфиденциального ключей и подписывает root CA, используя конфиденциальный ключ. Хосты добавляют этот root CA в свои системы для создания системы доверия.

Регистрация сертификата (Certificate Enrollment) – это процесс получения клиентом сертификата от ADCS. При этом осуществляются следующие шаги:

  1. Клиент генерирует пару публичного и конфиденциального ключей.
  2. Клиент помещает публичный ключ в Certificate Signing Request, который содержит в себе такие сведения, как название и имя шаблона сертификата.
  3. Клиенты подписывают CSR с помощью конфиденциального ключа и отправляют его на корпоративный сервер CA.
  4. Сервер CA проверяет шаблон запрошенного клиентом сертификата.
  5. CA генерирует сертификат и подписывает его, используя свой собственный конфиденциальный ключ.

В данной статье можно встретить следующие расширения сертификатов:

  • .p12 – представляет собой двоичный формат для хранения сертификата сервера, любых промежуточных сертификатов и конфиденциального ключа в одном зашифрованном файле. Всякий раз, когда пользователь экспортирует сертификат с помощью msc, он выводится в формате .p12.
  • .pfx – также является двоичными сертификатами формата PKCS#12. Разница лишь в том, что .pdx был разработан Microsoft, а .p12 — Netscape. Можно конвертировать файл в формате .p12 в .pfx.
  • .pem – представляет собой сертификат в кодировке Base64 + пару конфиденциальных ключей в этом контексте. В целом, .pem может содержать все, что угодно, в зависимости от нужд создателя файла.

Установка ADCS в локальной среде AD

Чтобы настроить ADCS в тестовой среде, нужно выполнить следующие действия:

  • Перейти в Server Manager и выбрать параметр «Add roles and features»
-2
  • Здесь следует ознакомиться с предустановками Windows, выполнить их и нажать на кнопку «Next»
-3
  • Теперь нужно выбрать сервер из пула серверов. Пользователь выбирает DC1.ignite.local
-4
  • В разделе «Server Roles» пользователь отмечает галочкой «Active Directory Certificate Services» и нажимает на кнопку «Next»
-5
  • Можно нажать на кнопку «Next» или добавить некоторые функции. Для данного практического примера доп. функции не нужны
-6
  • Пользователь выбирает роль – «Certificate Authority». CA является основным средством для подписывания сертификатов пользователей и предоставляет доступ к ресурсам в соответствии со схемой аутентификации на основе сертификатов
-7
  • Пользователь кликает на кнопку «Install»
-8
  • Теперь следует нажать на кнопку «Configure Active Directory Certificate Services on the server»
-9
  • Далее нужно указать учетную запись администратора, которую следует использовать в качестве CA
-10
  • Следует отметить «Certification Authority»
-11
  • Выбрать «Enterprise CA»
-12
  • Выбрать «Root CA», так как администратор домена находится на вершине структуры PKI
-13
  • Необходимо создать новый конфиденциальный ключ. Как уже было сказано выше, для подписи любого сертификата пользователя, включая Root CA, необходим конфиденциальный ключ. Его можно использовать для подделки Golden Certificate
-14
  • В следующем окне можно изменить настройки (по своему усмотрению). В данном практическом примере они остаются по умолчанию
-15
  • Далее можно добавить общее имя для установленного СA Сertificate
-16
  • После этого указывается срок действия сертификата. В данном практическом примере срок действия не будет изменен
-17
  • Пользователь изменяет путь сохранения на свое усмотрение
-18
  • Кликает на «Configure»
-19
  • СA был успешно настроен
-20

Теперь, когда пользователь настроил ADCS и аутентификацию на основе сертификатов, пора приступать к атаке.

Есть следующая архитектура для тестирования:

  • Контроллер домена – DC1@ignite.local – администратор
  • Пользователь (Клиент) – harshit@ignite.local – подключенный клиент Windows 10
  • Атакующая машина – Kali Linux (автономная)

Извлечение CA Certificate

Хакер уже скомпрометировал компьютер жертвы и получил права администратора домена. Теперь он хочет, чтобы его соединение сохранялось в течение длительного периода времени. Вот тут-то ему и потребуется Golden Certificate. Чтобы подделать его, хакер сначала извлекает CA Certificate + конфиденциальный ключ, используя файл с конфиденциальным ключом. Будет создан новый сертификат для конкретного пользователя (в данном случае, DC), а затем хакер использует этот сертификат для запроса «билетов», дампа хешей.

Первый шаг – извлечение CA. Можно использовать команду «certsrv.msc» в скомпрометированной системе администратора домена.

-21

Откроется окно со списком всех CA в пуле сервера. Следует выбрать параметр «Back up CA», а потом кликнуть на «Next».

-22
-23

В следующем окне пользователь отметит пункт «Private Key and CA certificate» и укажет каталог, в котором он хочет создать резервную копию этого сертификата.

-24

Можно также добавить пароль для защиты этой резервной копии. Это необязательно, но пользователь указывает самый простой пароль – «12345».

-25

Сертификат был успешно извлечен. Существуют и другие способы извлечения CA Certificate. Это можно сделать и с помощью mimikatz.

Создание нового CA Certificate

Как можно заметить, извлеченный сертификат имеет формат .p12. Он эквивалентен формату .pfx, и теоретически простое изменение расширения должно было преобразовать .p12 в .pfx, но из-за некоторых ошибок пользователю пришлось использовать openssl для корректной конвертации.

Во-первых, нужно скачать Openssl. После установки следует перейти в папку, в которой была создана резервная копия сертификата, и выполнить следующую команду, чтобы преобразовать файл .p12 в файл .pem:

"C:\Program Files\OpenSSL-Win64\bin\openssl.exe" pkcs12 -in ignite-DC1-CA.p12 -out newfile.pem

Нужно также ввести пароль для импорта – «12345». Пользователь может установить новый пароль для этого файла .pem. Хакер оставил его прежним для простоты. Как можно увидеть, был создан «newfile.pem».

-26

Теперь нужно выполнить другую команду openssl, чтобы преобразовать этот .pem в .pfx:

"C:\Program Files\OpenSSL-Win64\bin\openssl.exe" pkcs12 -in newfile.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

Важно, что были добавлены следующие параметры:

  • keyex – указывает на то, должен ли конфиденциальный ключ использоваться для обмена ключами или просто для подписи;
  • CSP – криптопровайдер; указывает, что выходной файл имеет подходящий формат для Microsoft CSP. Подробнее об этом можно прочитать здесь.

Можно увидеть, что «cer.pfx» теперь экспортирован в нужный каталог.

-27

Используя конфиденциальный ключ, доступный в файле «cert.pfx», пользователь подделает сертификат. Инструмент, который он будет использовать, — это ForgeCert. Эту программу можно скомпилировать в Visual Studio 2022, просто импортировав файл .sln и создав исполняемый файл. Стоит отметить, что вместе с exe-файлом понадобится BouncyCastle.dll и некоторые другие конфигурационные файлы. Эти файлы будут выведены в папку проекта «/bin/debug». Следует скопировать эти файлы так, как они есть в C:\cert.

Теперь пользователь будет подделывать сертификат с помощью следующей команды:

ForgeCert.exe --CaCertPath cert.pfx --CaCertPassword 12345 --Subject CN=User --SubjectAltName DC1@ignite.local --NewCertPath admincert.pfx --NewCertPassword ignite@123

Можно использовать сложный пароль здесь, но пользователь сохраняет простой – «ignite@123».

Теперь Golden Certificate сроком действия 1 год получен! Это означает, что у хакера есть доступ к домену на протяжении следующего года.

-28

Получение TGT администратора домена

Теперь, когда хакер подделал Golden Certificate, он может выполнить ряд атак. Хакер моделирует сценарий, при котором пароль администратора был изменен. Он больше не сможет получить доступ к аккаунту администратора домена, но у него все еще есть в распоряжении пользовательская система (клиент Windows 10). Кроме того, у хакера все еще есть с собой Golden Certificate! Он может использовать Rubeus, чтобы получить TGT администратора:

Rubeus.exe asktgt /user:DC1 /certificate:admincert.pfx /password:ignite@123

Так будет получен билет .kirby, который представляет собой TGT в кодировке base64.

-29

Таким образом, пользователь может преобразовать его в декодированный формат base64 с помощью команды в Kali:

echo "<ticket value>" | base64 --decode > ticket.kirb

-30

Получение NTLM-хеша администратора

Имея на руках билет .kirby, пользователь может извлечь NTLM-хеш. Поскольку сейчас он не знает новый пароль администратора, следует попытаться извлечь его учетные данные.

Для этого хакер запустит mimikatz (скомпрометированная система Windows 10), импортирует билет .kirby с помощью модуля «Kerberos::ptt», а затем выполнит атаку DCSync. Поскольку билет является билетом администратора домена, хакер может выполнять функции в системе, которые требуют высоких привилегий.

kerberos::ptt ticket.kirbi
lsadump::dcsync /domain:ignite.local /user:administrator

После выполнения команды хакер получает NTLM-хеш администратора.

-31

Осуществление атаки PtH (Pass the Hash)

В дальнейшем можно выполнить хеш-атаку с использованием этих учетных данных или взломать аккаунт с помощью john / hashcat. Пользователь открывает свой терминал Kali и использует двоичный файл «pth-winexe», который является частью набора инструментов для передачи хеша от byt3bl33d3r.

pth-winexe -U Administrator%00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 //192.168.1.188 cmd.exe

Как можно увидеть, пользователь добавил нули перед полученным хешем. Начиная с Windows 10, Microsoft внесла изменения в свою ОС, согласно которым хеши LM больше не используются. Но инструменты, которые пользователь использует в практическом примере, существуют еще со старых времен NT и LM. Итак, в этих инструментах следует использовать строку из 32 нулей вместо хеша LM.

Следует отметить, что когда речь идет о NTLM, имеется в виду NTHash. NTLM – это просто распространенное название.

-32

Итак, как можно увидеть, используя Golden Certificate, хакер смог извлечь билеты администратора, осуществить дамп хешей и выполнить атаки.

Заключение

95% компаний из списка Fortune 500 так или иначе используют Active Directory. Специалисты ИБ часто осуществляют тестирование на проникновение. Атака Golden Certificate – это атака на сохранение доступа к домену; с помощью нее можно иметь доступ к домену долгое время, даже если пароль администратора был изменен или были добавлены новые администраторы. Применение данной практики в дальнейшем может привести к появлению целого ряда новых атак с задействованием Active Directory.

Автор переведенной статьи: Raj Chandel.

Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.

Больше интересного материала на cisoclub.ru. Подписывайтесь на нас: Facebook | VK | Twitter | Instagram | Telegram | Дзен | Мессенджер | ICQ New | YouTube | Pulse.