Kerberos

TODO: - Diamond и Saphire Tickets

Принципы работы kerberos

Kerberos - это сетевой протокол аутентификации для распределенных сетей, основан на билетах, предотвращающий передачу паролей в открытом виде. Название протокола происходит от имени трехглавого пса Цербера из греческой мифологии, что символизирует три ключевых аспекта безопасности: AAA - Authentication, Authorization, Accounting.

Kerberos широко используется в корпоративных средах, особенно в доменах Windows Active Directory, где он является основным протоколом аутентификации. Он позволяет пользователям получать доступ к сетевым ресурсам без необходимости многократного ввода пароля, обеспечивая при этом высокий уровень безопасности.

[TODO: тут, видимо что-то про SSO]

Настроить авторизацию доменных пользователей на Unix-серверах с помощью Kerberos тоже можно.

Процесс аутентификации в Kerberos

Kerberos работает на основе билетов (tickets), которые выдаются центром распределения ключей (Key Distribution Center, KDC). KDC состоит из двух компонентов:

  • Authentication Server (AS): Отвечает за начальную аутентификацию пользователя и выдачу TGT (Ticket Granting Ticket).

  • Ticket Granting Service (TGS): Отвечает за выдачу сервисных билетов для доступа к конкретным ресурсам.

Процесс аутентификации в Kerberos состоит из нескольких этапов:

  1. Запрос TGT (AS-REQ и AS-REP):

    • Клиент отправляет запрос на аутентификацию в AS (Authentication Server).

    • AS проверяет учетные данные клиента и, если они верны, выдает TGT (Ticket Granting Ticket). TGT зашифрован с использованием ключа KDC (хеш пароля krbtgt) и содержит информацию о клиенте и сроке действия билета.

    • TGT возвращается клиенту, но он не может его расшифровать, так как не знает ключа KDC.

Учетная запись krbtgt — это специальная учетная запись в домене, которая используется для генерации и подписи TGT (Ticket Granting Ticket). Ключ этой учетной записи используется для шифрования всех TGT в домене. Если злоумышленник получает доступ к хэшу пароля учетной записи krbtgt, он может создавать поддельные TGT (Golden Tickets), что позволяет ему получать доступ к любым ресурсам в домене.

  1. Запрос сервисного билета (TGS-REQ и TGS-REP):

    • Клиент отправляет TGT в TGS (Ticket Granting Service) вместе с запросом на доступ к конкретному сервису.

    • TGS проверяет TGT и, если он действителен, выдает сервисный билет (Service Ticket). Сервисный билет зашифрован с использованием ключа целевого сервиса.

    • Сервисный билет возвращается клиенту.

SPN (Service Principal Name) — это уникальный идентификатор, который связывает службу с учетной записью в домене. SPN используется для идентификации служб в Kerberos и имеет следующий формат:

<тип службы>/<имя хоста>:<порт>/<дополнительные параметры>

Пример SPN для файлового и web-сервера:

cifs/fileserver.example.com
HTTP/web-server.domain

SPN позволяет клиентам находить нужные службы в домене и запрашивать сервисные билеты для доступа к ним.

  1. Аутентификация на целевом сервисе (AP-REQ и AP-REP):

    • Клиент отправляет сервисный билет целевому сервису.

    • Сервис расшифровывает билет с использованием своего ключа (хеша своего пароля) и проверяет его подлинность.

    • Если билет действителен, сервис предоставляет доступ клиенту.

Атаки на Kerberos

Pass-the-Ticket (PtT)

Атака, при которой злоумышленник перехватывает или крадет TGT (Ticket Granting Ticket) или сервисный билет и использует его для доступа к ресурсам от имени легитимного пользователя.

  • В Windows TGT (Ticket Granting Ticket) и сервисные билеты активных пользователей хранятся в памяти LSASS

  • в Linux/Unix — это файлы кэша (например, /tmp/krb5cc_*). Используется klist или ccache для работы с файлами кэша. Или Keytab-файлы (например, /etc/krb5.keytab), которые содержат ключи для аутентификации служб через Kerberos. Они используются в Linux/Unix системах для автоматической аутентификации без ввода пароля. Атакующий может и использовать файл для генерации сервисных билетов.

Как работает:

  • Злоумышленник получает билет (например, с помощью инструментов вроде Mimikatz, ProcDump).

  • Билет используется для аутентификации на целевом сервисе без знания пароля.

Последствия зависят от привилегий пользователя, чей билет был украден.

В целом не яляется атакой. Просто кража TGT пользователя должна приравниваться к краже пароля пользователя (ровно как и получение NTLM-хеша пользователя) - то есть компрометации пользователя.

Существует еще такое понятие как Overpass The Hash - возможность получения TGT пользователя при наличии хэша его пароля.

Kerberoasting

Атака, направленная на учетные записи служб (service accounts), которые используют Kerberos для аутентификации. Злоумышленник запрашивает сервисные билеты (TGS) и пытается взломать их офлайн, чтобы получить сервисной пароль учетной записи.

Как работает:

  • Злоумышленник запрашивает TGS для учетной записи службы (например, с помощью инструмента Rubeus).

  • Полученный TGS (зашифрованный хэш пароля) подвергается офлайн-брутфорсу.

Обнаружение:

  • Использование слабого шифрования 0x17- RC4 (необязательный артфеакт, но хороший индикатор)

Успешность атаки зависит от сложности пароля учетной записи службы.

AS-REP Roasting

Атака на учетные записи, у которых отключена предварительная аутентификация Kerberos (pre-authentication). Злоумышленник может запросить билет для таких учетных записей и попытаться взломать их офлайн.

Как работает:

  • Злоумышленник отправляет AS-REQ без предварительной аутентификации.

  • KDC возвращает AS-REP, содержащий зашифрованный хэш пароля.

  • Хэш подвергается офлайн-брутфорсу.

Обнаружение:

  • Мониторинг AS-REQ без предварительной аутентификации (Event ID 4768 с Result Code 0x0 и отсутствием Pre-Auth)

  • Выявление учетных записей с отключенной предварительной аутентификацией.

Последствия зависят от привилегий пользователя, чей билет был украден. Успешность атаки зависит от сложности пароля учетной записи службы.


Silver Ticket

Атака, при которой злоумышленник создает поддельный сервисный билет (Service Ticket) для конкретного сервиса. Это возможно, если злоумышленник знает пароль или хэш учетной записи службы. Например, может их получить в следствии атаки Kerberoasting.

Как работает:

  • Злоумышленник использует хэш пароля службы для создания сервисного билета.

  • Билет используется для доступа к сервису без взаимодействия с KDC.

Обнаружение:

  • Несоответствие SID и имени пользователя (Event ID 4624).

  • Получение TGS на несуществующих пользоватлей домена.

Обновление KB5008380 добавляет новую информацию о том, кто запросил билет в Privilege Attribute Certificate (PAC), которая записывается в TGT. Это дало возможность прекратить выпуск билетов для несуществующих пользователей.

Позволяет получить доступ к конкретному сервису с правами учетной записи службы или любого доменного пользователя, т.к. позволяет выписывать любые TGS для доступа к этйо службе.


Golden Ticket

Одна из самых опасных атак на Kerberos. Злоумышленник создает поддельный TGT (Ticket Granting Ticket), используя хэш пароля учетной записи krbtgt. Это позволяет получить доступ к любому ресурсу в домене.

Как работает:

  • Злоумышленник получает хэш пароля учетной записи krbtgt (например, с помощью DCSync).

  • Создается поддельный TGT с неограниченным сроком действия.

Мониторинг DCSync: Настройте аудит для обнаружения подозрительных запросов DCSync (Event ID 4662).

Обнаружение:

  • В тоерии обнаружить Golden Ticket можно мониторингом запросов TGS без предшествующего TGT. Хотя на практике это не тривиально реализовать и такой детект может сильно фолзить.

В результате атакующий получает полный контроль над доменом.

В домене Active Directory TGT (Ticket Granting Ticket) могут быть подписаны как текущим, так и предыдущим паролем учетной записи krbtgt. Это сделано для обеспечения отказоустойчивости: если пароль krbtgt меняется, старые TGT, выданные с предыдущим паролем, остаются действительными в течение некоторого времени.

Если злоумышленник получил хэш пароля krbtgt и создал Golden Ticket, то даже после смены пароля krbtgt Golden Ticket, созданный с использованием старого пароля, останется действительным. Чтобы полностью нейтрализовать такие билеты, необходимо выполнить двойную смену пароля.

SamAccountName Spoofing (CVE-2021-42278 и CVE-2021-42287)

Уязвимости, позволяющие злоумышленнику подделать SamAccountName и получить TGS для учетной записи с повышенными привилегиями (например, контроллера домена). Используя этот билет, атакующий может провести атаку DCSync и получить полный контроль над доменом.

Машинные учетные записи с $ на конце, такие же учетные записи домена, как и пользовательские. Они также используют Kerberos для авторизации.

Как работает:

  1. Злоумышленник создает новую машинную учетную запись в домене: имя совпадает с контроллером домена, но без суффикса $.

  2. Запрашивает TGT для этой учетной записи.

  3. Удаляет учетную запись, для которой запрошен TGT.

  4. Запрашивает TGS для удаленной записи по валидному TGT.

  5. Kerberos выписывает TGS на настоящую машинную учетную запись в $ на конце (так как не находи в домене учетную запись без $ на конце).

Обнаружение:

  • Создание и модификация машинных учетных записей (Event ID 4742) без $.

  • Запросы TGT для учетных записей, имя которых совпадает в именами контроллеров домена.

Позволяет получить права администратора домена.

Инструменты

Обнаруживать атаки на Kerberos лучше по артефактам конкретных инструментов. Можно поизучать работу следующих:

  • Pass-the-Ticket (PtT):

    • Mimikatz: Извлечение TGT и сервисных билетов из памяти LSASS.

    • Rubeus: Передача и использование билетов (Pass-the-Ticket).

    • Kekeo: Работа с билетами Kerberos, включая их создание и использование.

    • Impacket (ticketer.py): Создание поддельных билетов (Golden Ticket, Silver Ticket).

  • Kerberoasting:

    • Rubeus: Запрос TGS для учетных записей служб и экспорт хэшей.

    • Impacket (GetUserSPNs.py): Запрос TGS и экспорт хэшей для офлайн-брутфорса.

    • Invoke-Kerberoast: PowerShell-скрипт для проведения атаки Kerberoasting.

  • AS-REP Roasting:

    • Rubeus: Запрос AS-REP для учетных записей с отключенной предварительной аутентификацией.

    • Kerbrute: Перебор учетных записей и проведение AS-REP Roasting.

  • Silver Ticket, Golden Ticket, DCSync:

    • Mimikatz: Создание Golden Ticket с использованием хэша krbtgt.

    • Impacket (ticketer.py): Генерация поддельных TGT.

    • Rubeus: Эксплуатация уязвимостей для повышения привилегий.

Ключевые события Windows для мониторинга

  • 4768 (TGT Request): Аномальные запросы (например, без предварительной аутентификации и с Result Code 0x0). Старые версии mimikatz оставляли очень специфичные артефакты в имени и домене пользователя при запросе билетов.

  • 4769 (TGS Request): Большое количество запросов для одной учетной записи (Kerberoasting). Несовпадение SID и имени доменного пользователя. Или запрос билета на несуществующего пользователя.

  • 4771 (Kerberos Pre-Auth Failed): Подозрительные попытки входа.

  • 4770 (TGS Renewal): Отслеживайте аномальное количество запросов на обновление. TGS можно обновлять без повторного ввода пароля (до 7 дней по умолчанию). Это удобно для пользователей, но продлевает жизнь украденных билетов. Уменьшите максимальное время жизни TGT через GPO (например, до 10 часов).

Last updated

Was this helpful?