Источник: https://github.com/AnaktaCTF/CTF/blob/main — Misc/Kerberoasting.md

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

Почему Kerberoasting представляет угрозу?

  • Не требует эскалации привилегий - любой пользователь домена может выполнить атаку, если у него есть базовый доступ к Active Directory.
  • Использует штатный механизм Kerberos - злоумышленник не вызывает подозрительной активности, так как делает легитимные запросы на выдачу билетов.
  • Позволяет атакующему работать в офлайн-режиме - после получения хэша злоумышленник может бесконечно долго пытаться подобрать пароль без риска быть заблокированным системой.
  • Часто находит слабые пароли - многие сервисные учетные записи используют устаревшие или слабые пароли, которые легко поддаются атаке методом перебора.

Как атака может использоваться в реальной жизни?

  1. Внутренний злоумышленник (Insider Attack) - сотрудник организации с минимальными привилегиями может запросить TGS-билет для сервисного аккаунта и попытаться взломать его пароль.
  2. Пост-эксплуатация (Post-Exploitation) - если атакующий уже получил доступ к системе (например, через фишинг или эксплойт), он может использовать Kerberoasting для дальнейшего развития атаки и получения более привилегированных учетных записей.
  3. Автоматизация атак - инструменты, такие как Impacket и Kerbrute, позволяют злоумышленникам массово запрашивать билеты, анализировать учетные записи и автоматически проверять уязвимости.

2. Механизм атаки Kerberoasting

Атака Kerberoasting использует особенности работы протокола аутентификации Kerberos в Windows-доменах Active Directory (AD). Основная цель злоумышленника - получить билет на сервисный аккаунт (TGS - Ticket Granting Service), в котором хранится хэш пароля учетной записи, а затем расшифровать этот хэш в офлайн-режиме.

Как работает Kerberos в Active Directory?

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

1

  1. Запрос TGT (Ticket Granting Ticket)

    • Пользователь вводит учетные данные (логин и пароль).
    • Клиент шифрует пароль с использованием NTLM-хэша и отправляет запрос аутентификации в KDC (Key Distribution Center) - контроллер домена.
    • Если пароль верный, KDC возвращает TGT-билет, зашифрованный мастер-ключом KDC.
  2. Запрос TGS (Ticket Granting Service)

    • Когда пользователю нужно получить доступ к какому-либо сервису (например, MSSQL, Exchange, файловому серверу), он отправляет запрос в KDC с просьбой выдать TGS-билет для нужного сервиса.
    • KDC формирует билет, который зашифрован паролем сервисной учетной записи, и отправляет его пользователю.
    • Пользователь передает этот билет сервису, который расшифровывает его своим паролем и предоставляет доступ.

Как атакующий выполняет Kerberoasting?

Атака Kerberoasting использует тот факт, что билет TGS шифруется паролем сервисного аккаунта. Если атакующий получит этот билет, он сможет расшифровать его, подобрав пароль.

Шаги атаки

  1. Сбор учетных записей, доступных для Kerberoasting

    • Атакующий получает список сервисных учетных записей, у которых включен Service Principal Name (SPN).
    • Это можно сделать с помощью стандартных команд Windows или инструментов для пентеста, таких как Impacket, которые позволяют перейти сразу к шагу 3.
  2. Запрос TGS-билетов для сервисных учетных записей

    • Используя свой обычный пользовательский аккаунт в домене, злоумышленник отправляет легитимные запросы на получение TGS для сервисных учетных записей.
    • Эти запросы не требуют высоких привилегий, поэтому могут выполняться любым пользователем, имеющим доступ к домену.
  3. Извлечение хэшей из билетов

    • Полученные билеты содержат хэш пароля сервисного аккаунта.
    • Атакующий сохраняет билеты и извлекает хэши с помощью инструментов, таких как Impacket (GetUserSPNs.py).
  4. Атака на хэши офлайн

    • После получения хэша злоумышленник использует Hashcat или John the Ripper для расшифровки пароля.
    • Если пароль слабый, его можно быстро подобрать с помощью брутфорса или атак по словарю.
  5. Эскалация привилегий и дальнейшие атаки

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

3. Инструменты для атаки

3.1 Impacket – Получение TGS-билетов

Impacket - это набор Python-скриптов для работы с сетевыми протоколами, включая SMB, RPC и Kerberos. Он содержит утилиту GetUserSPNs.py, которая позволяет запрашивать TGS-билеты для учетных записей с SPN (Service Principal Name).

Установка Impacket на Kali Linux

Перед началом работы необходимо установить Impacket:

git clone https://github.com/fortra/impacket.git
cd impacket
python3 -m pipx install .

Сканирование домена на наличие учетных записей с SPN

Используем GetUserSPNs.py для поиска сервисных учетных записей:

impacket-GetUserSPNs DOMAIN/USER:PASSWORD -dc-ip 192.168.1.10

Где:

  • DOMAIN/USER:PASSWORD - учетные данные любого пользователя домена.
  • -dc-ip 192.168.1.10 - IP-адрес контроллера домена.

Вывод:

2

Теперь у нас есть учетные записи, для которых можно запросить билеты.

Запрос билетов TGS для атакуемых учетных записей

impacket-GetUserSPNs DOMAIN/USER:PASSWORD -request -dc-ip 192.168.1.10

Вывод:

3

Эта строка - хэш пароля учетной записи, зашифрованный с её паролем. Он готов для офлайн-взлома.

3.2 Hashcat – Взлом хэшей билетов

После получения Kerberos-хэшей с помощью Impacket, можно попытаться их расшифровать с помощью Hashcat.

Установка Hashcat

sudo apt install hashcat

Проверка типа хэша

Kerberos-хэши имеют формат $krb5tgs$, который в Hashcat соответствует режиму 13100.

Атака на хэш с помощью словарного метода

hashcat -m 13100 hashes.list rockyou.txt --force

Где:

  • -m 13100 - режим Kerberos TGS для Hashcat.
  • hashes.list - файл с хэшами.
  • rockyou.txt - словарь паролей.

Вывод:

4

5

6

Если пароль слабый (например, password123), он будет найден в течение нескольких минут, а то и секунд.

Брутфорс атака

Если словарь не сработал, можно попробовать брутфорс:

hashcat -m 13100 hashes.list -a 3 ?a?a?a?a?a?a?a

Где:

  • -a 3 - метод перебора (маска).
  • ?a?a?a?a?a?a?a - маска на 7 символов (маленькие, большие буквы, цифры, спецсимволы).

4. Способы защиты от атаки Kerberoasting

4.1 Использование надежных паролей

Основной уязвимостью является слабый пароль сервисной учетной записи. Если пароль короткий или легко угадываемый, его можно взломать с помощью атаки по словарю или брутфорса.

Лучшие практики для паролей сервисных учетных записей:

  • Минимальная длина - 25+ символов.

  • Использование букв (верхний и нижний регистр), цифр, спецсимволов.

  • Генерация паролей с помощью менеджеров паролей или скриптов:

    -join ((33..126) | Get-Random -Count 30 | ForEach-Object { [char]$_ })
    
  • Запрет использования слабых паролей (включая P@ssw0rd, Admin123!, Welcome2024).

  • Регулярная смена паролей (не реже раз в 90 дней).

  • Запрет повторного использования старых паролей.

4.2 Ограничение прав сервисных учетных записей

Многие сервисные учетные записи имеют избыточные привилегии, что делает их взлом особенно опасным.

Как уменьшить риски:

  • Использовать обычные учетные записи вместо сервисных там, где это возможно.

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

    Set-ADUser -Identity SERVICEACCOUNT -TrustedForDelegation $false
    
  • Не использовать сервисные учетные записи с правами Domain Admin.

  • Применить групповые управляемые учетные записи (gMSA), которые автоматически меняют пароли и исключают необходимость статических учетных записей.

4.3 Мониторинг подозрительных запросов Kerberos

Хотя в целом Kerberoasting-атаку очень сложно отличить от легитимного запроса, её можно попробовать обнаружить с помощью анализа количества запросов Kerberos билетов за короткий промежуток времени. Это можно сделать с помощью SIEM-систем и журналов событий Windows.

Что отслеживать в логах Windows?

Событие 4769 (Event ID 4769) - Запрос билета TGS

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

PowerShell-команда для поиска подозрительных запросов:

Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4769 } | Format-Table TimeCreated, Message -AutoSize

Настройка SIEM (Splunk, ELK, Microsoft Sentinel) для обнаружения атак
Пример запроса в Splunk:

index=security EventCode=4769 
| stats count by Account_Name, Client_Address 
| where count > 10

4.4 Ограничение времени жизни билетов Kerberos

Чем меньше времени атакующий имеет на взлом пароля, тем выше уровень защиты.

Настройка политики билетов Kerberos в Active Directory

В редакторе групповых политик (GPO) gpedit.msc
Конфигурация компьютера → Настройки Windows → Параметры безопасности → Политики учетной записи → Политика Kerberos

7

  • Максимальный срок жизни билета службы (TGS): 4–8 часов
  • Максимальный срок жизни билета TGT: 10 часов
  • Включить AES-шифрование для Kerberos-билетов

Также можно изменить настройки через PowerShell:

Set-KerberosTicketPolicy -MaxServiceTicketLifetime 4h -MaxTicketLifetime 10h

Автор: Дейникин Максим Юрьевич