Расширение привилегий через Kerberos: Атака Kerberoasting
Kerberoasting – эффективный метод для извлечения служебных учетных записей из Active Directory от имени обычного пользователя и без отсылки пакеты в целевую систему

Kerberoasting – эффективный метод для извлечения служебных учетных записей из Active Directory от имени обычного пользователя и без отсылки пакеты в целевую систему. Изюминка данного метода заключается в том, у нас нет задачи найти уязвимость. Мы будем использовать протокол Kerberos именно так, как задумывали создатели, что привлекает злоумышленников и осложняет защиту системы, поскольку трудно обнаружить нечто подозрительное среди обычных событий.
Схема реализации атаки
Чтобы осуществить атаку Kerberoasting нам нужно как минимум получить обычный доступ под обычным пользователем (расширенные привилегии не требуются). Вначале мы делаем запрос к контроллеру домена на предмет доступных SPN (Service Principal Names; Основные имена службы). После получения перечня SPN вместе со служебной учетной записью мы можем запросить билет у контроллера домена. Далее билет выгружается из памяти на диск и выполняется брутфорс с целью получения пароля служебной учетной записи.
Для демонстрации атаки Kerberoasting будет использоваться сеть из следующих элементов:
· Контроллер домена (Windows Server 2012).
· Сервер MSSQL (Windows Server 2012).
· Два клиента с Windows 10 и Kali Linux (система злоумышленника), находящихся в одной подсети.
Kerberos, используемый в качестве аутентификационного протокола в ОС Windows, определяет, как клиенты взаимодействуют с сетевой аутентификационной службой. Клиенты получают билеты от KDC (Key Distribution Centre; Центр распределения ключей), который обычно является контроллером домена. Полученные билеты используются во время установления соединений с серверами. Билеты, используемые протоколом Kerberos, хранят сетевую учетную запись клиента.
Более подробная информация доступна по следующим ссылкам:
SPN (Основное имя службы) – уникальный идентификатор экземпляра службы. SPN’ы используются во время Kerberos-аутентификации для связи экземпляра службы с учетной записью, что позволяет клиентскому приложению запрашивать аутентификацию даже без наличия имени аккаунта.
Демонстрация атаки Kerberosting
Предполагается, что у нас уже есть первоначальный доступ к целевой машине.
Как показано на рисунке ниже, у нас есть сессия в PowerShell на базе непривилегированной учетной записи «Bob» на машине с Windows 10.
Рисунок 1: Сессия пользователя домена
Далее запускаем команду klist для получения списка доступных билетов в текущей сессии.
По результатам выполнения команды выясняется, что доступные билеты отсутствуют.
Рисунок 2: Результат выполнения команды klist
Теперь попробуем поискать доступные SPN’ы в текущей среде при помощи следующей команды:
Рисунок 3: Запрос доступных SPN’ов
По результатам выполнения предыдущей команды мы обнаружили SPN служебной учетной записи:
Вновь воспользуемся средствами PowerShell для запроса билетов при помощи следующих двух команд:
Рисунок 4: Запрос билета
Повторно запускаем команду klist и убеждаемся, что билет службы MSSQL загружен в память!
Рисунок 5: Повторный запрос билетов
Теперь воспользуемся Mimikatz для выгрузки билета из памяти при помощи скрипта «Invoke-Mimikatz», который можно найти в репозитории PowerSploit.
Рисунок 6: Запуск Invoke-Mimikatz
Примечание: использование Mimikatz подобным образом может быть обнаружено антивирусом. Существует множество способов обхода детектирования, с которыми вы можете ознакомиться в сети. Для начала я бы рекомендовал прочитать с статью AMSI Bypass With a Null Character.
Все предыдущие манипуляции мы проделали от имени обычного пользователя домена без расширенных привилегий!
После запуска Mimikatz и получения списка билетов доступных в памяти сделаем выгрузку на диск:
Invoke-Mimikatz –Command ‘» kerberos::list»‘ /export
Рисунок 7: Выгрузка билета на диск
Теперь скопируем билет на нашу машину для последующего взлома пароля.
Рисунок 8: Загрузка билета
Для взлома билета удаленной службы воспользуемся скриптом tgsrepcrack.py из репозитория Kerberoast.
python tgsrepcrack.py wordlist.txt 1-40a10000-Bob@MSSQLSERVER
Рисунок 9: Взлом билета
По результатам взлома обнаружилось, что у служебной учетной записи «SQLSVC» пароль «Password1».
После взлома пароля посмотрим, какие привилегии есть у этой учетной записи:
net user SQLSVC /domain
Рисунок 10: Параметры учетной записи
В итоге мы расширили привилегии с обычного пользователя до администратора домена. Попробуем подключиться к контроллеру домена и запросить список директорий на диске С:
net group «Domain Controllers» /domain
net use \\WIN-4QHPFSI8002\c$ /user:SQLSVC Password1
Рисунок 11: Перечень директорий на диске C: контроллера домена
Поскольку в этой атаке Kerberos используется обычным образом, наилучшая мера защиты от атак Kerberoasting – использование сложных паролей для служебный учетных записей, связанных с Kerberos и SPN. Кроме того, не лишним будет сконфигурировать MSSQL сервер или любую другую службу без использования учетных записей с привилегиями, что довольно сложно для ленивых администраторов J.
Kerberos с именем субъекта-службы (SPN)
область применения: Windows server 2022, Windows server 2019, Azure Stack хЦи, версии 21H2 и 20H2
Сетевой контроллер поддерживает несколько методов проверки подлинности для взаимодействия с клиентами управления. Вы можете использовать проверку подлинности на основе Kerberos, аутентификацию X509 на основе сертификата. Вы также можете использовать проверку подлинности без аутентификации для тестовых развертываний.
System Center Virtual Machine Manager использует проверку подлинности на основе Kerberos. При использовании проверки подлинности на основе Kerberos необходимо настроить имя участника-службы (SPN) для сетевого контроллера в Active Directory. Имя участника-службы — это уникальный идентификатор экземпляра службы сетевого контроллера, который используется проверкой подлинности Kerberos для связывания экземпляра службы с учетной записью входа службы. Дополнительные сведения см. в разделе имена субъектов-служб.
Настройка имен субъектов-служб (SPN)
Сетевой контроллер автоматически настраивает имя субъекта-службы. Все, что нужно сделать, — предоставить разрешения на компьютеры сетевого контроллера для регистрации и изменения имени участника-службы.
На контроллере домена запустите Пользователи и компьютеры Active Directory.
ВыберитеВид Дополнительно.
В разделе Компьютерынайдите одну из учетных записей компьютера сетевого контроллера, а затем щелкните ее правой кнопкой мыши и выберите пункт свойства.
Перейдите на вкладку Безопасность и нажмите кнопку Дополнительно.
Для каждой учетной записи компьютера сетевого контроллера или одной группы безопасности, содержащей учетные записи компьютера сетевого контроллера:
а. Выберите учетную запись или группу и нажмите кнопку изменить.
b. В разделе «Разрешения» выберите Проверить запись servicePrincipalName.
Г. Выполните прокрутку вниз и в разделе Свойства выберите:
Чтение servicePrincipalName
Запись servicePrincipalName
д) Щелкните дважды ОК.
Повторите шаг 3-6 для каждого компьютера сетевого контроллера.
Закройте окно Пользователи и компьютеры Active Directory.
Не удалось предоставить разрешения для регистрации или изменения имени участника-службы
в новом развертывании Windows Server 2019, если вы выбрали Kerberos для проверки подлинности клиента restful и не предоставите разрешение на узлы сетевого контроллера для регистрации или изменения имени участника-службы, операции restful на сетевом контроллере не позволяют управлять SDN.
для обновления с Windows Server 2016 до Windows Server 2019 и выбора протокола Kerberos для проверки подлинности клиента restful операции restful не блокируются, что обеспечивает прозрачность для существующих рабочих развертываний.
если вы использовали IP-адрес для операций restful вместе с проверкой подлинности Kerberos в Windows Server 2016, фактическое взаимодействие потребовалось бы через проверку подлинности NTLM. в таком развертывании после обновления до Windows Server 2019 продолжает использоваться проверка подлинности на основе NTLM. Чтобы перейти на проверку подлинности на основе Kerberos, необходимо использовать DNS-имя сетевого контроллера для операций RESTFUL и предоставить разрешение узлам сетевого контроллера зарегистрировать SPN.
Создание SPN и Keytab файла
Содержание
Введение [ править ]
Создание SPN [ править ]
DC Windows [ править ]
Для начала необходимо создать на контроллере домена (DC) пользователя к которому впоследствии мы привяжем SPN.
Например создадим пользователя squid: 
Далее необходимо запретить пользователю смену пароля и не ограничивать срок действия пароля. Последнее важно, так как иначе при истечении срока действия пароля придется не только менять пароль, но и заново генерировать keytab-файлы привязанные к этому пользователю: 
В целях безопасности рекомендуется исключить сервисного пользователя из доменных групп.
Создадим SPN для прокси-сервера squid HTTP/sqserver.domg.testg и привяжем его к пользователю squid.
Для этого в командной строке на контроллере домена выполним следующую команду:
Проверить привязанные SPN у пользователя можно командой:
DC FreeIPA [ править ]
Для добавления SPN зайдите в web-интерфейс сервера FreeIPA->Identity->Services->Add:
В открывшемся окне необходимо выбрать имя сервиса и имя хоста, к которому будет привязан сервис:
Чтобы добавить SPN с коротким именем хоста (например это необходимо для samba), выполните команду:
Генерирование keytab-файла [ править ]
Создать keytab-файл можно разными способами.
Рассмотрим некоторые из них.
На контроллере домена Windows 2008 R2 [ править ]
Необходимо выполнить следующую команду:
Рассмотрим параметры команды подробнее:
На машине с ALT [ править ]
С помощью ktutil [ править ]
Этот способ работает если SPN предварительно были созданы и привязаны.
Установим необходимый пакет:
Запустим ktutil и создадим keytab-файл:
С помощью Samba [ править ]
Для создания keytab-файла с помощью samba, необходима работающая kerberos-аутентификация.
При использовании этого метода нет необходимости генерировать и привязывать SPN на контроллере домена.
Приведите файл настроек /etc/samba/smb.conf к следующему виду:
Введите машину в домен:
Проверить ввод в домен можно командой:
После этого в домене будет создан аккаунт компьютера к которому можно будет привязать SPN.
Создадим keytab-файл для компьютера:
Добавим в keytab-файл принципала сервиса «HTTP»:
Далее можно поменять права на keytab и отредактировать его утилитой kutil.
С помощью Samba DC [ править ]
При использовании этого метода kerberos ни при чём, а все действия выполняются на машине с домен-контроллером.
Создадим пользователя, с которым будем связывать создаваемые SPN:
Привяжем к нему SPN:
(возможно несколько раз для разных сервисов)
(выполняем несколько раз для всех spn, которые хотим поместить в keytab)
С помощью FreeIPA Client [ править ]
Для этого способа необходимо ввести машину в домен FreeIPA [[1]]
Для генерации keytab-файла используется команда:
Проверка keytab-файла [ править ]
Для проверки keytab-файла необходима настроенная Kerberos-аутентификация.
Это можно проверить командой:
Она должна запрашивать пароль и получать билет:
Попробуем зарегистрироваться с помощью keytab-файла:
Проверить версию ключей на сервере можно, предварительно получив билет, с помощью команды:
Проверить версию kvno и список ключей в keytab-файле можно с помощью команды:
После всех проверок желательно удалить полученные билеты командой:
Что такое атака Kerberoasting?
Мы перевели для вас статью об атаках Kerberoasting и других методах использования аутентификации Kerberos. Однако перед этим следует понять, как работает проверка подлинности Kerberos в режиме клиент-сервер.
«Kerberos предназначен для аутентификации, а не для авторизации, это упущение позволяет воспользоваться атакой Kerberoasting»
Содержание статьи
Раздел 1: процедура прохождения аутентификации Kerberos
Раздел 2: Имя субъекта службы SPN
Раздел 3: Пошаговое руководство по атаке Kerberoasting
Часть 1: Старая процедура осуществления Kerberoasting в операционной системе
Часть 2: Новая процедура осуществления Kerberoasting в операционной системе
Часть 3: Старая процедура осуществления Kerberoasting дистанционно
Часть 4: Новая процедура осуществления Kerberoasting дистанционно
Раздел 1: процедура прохождения аутентификации Kerberos
Kerberos и его основные компоненты
Протокол Kerberos определяет способ того, как клиенты взаимодействуют со службой сетевой аутентификации. Пользователи получают билеты из центра распространения ключей Kerberos (KDC) и отправляют их на серверы приложения при установлении соединения. По умолчанию используется UDP-порт номер 88, и вся процедура зависит от процесса шифрования с помощью симметричной криптографии.
«Kerberos использует билеты для аутентификации пользователя и избегает отправки паролей по сети»
Есть несколько ключевых компонентов прохождения аутентификации Kerberos, которые играют важную роль в процессе проверки подлинности.
Kerberos: система сообщений
В домене Active Directory каждый контроллер домена запускает службу KDC (центр выдачи ключей Kerberos), которая обрабатывает запросы на билеты в Kerberos. Для билетов Kerberos AD использует учетную запись KRBTGT в домене AD.
На рисунке ниже показано, что основная роль, которую играет KDC в установлении безопасного соединения между сервером и клиентом, заключается в использовании некоторых специальных компонентов, указанных в таблице выше.
Как уже упоминалось выше, Kerberos использует симметричную криптографию для шифрования и дешифрования. Стоит разобраться подробнее и понять, как зашифрованные сообщения отправляются друг другу. Здесь используются три цвета для различения хэшей:
Шаг 1. Отправив запрос в KDC, клиент устанавливает связь следующим образом:
KRB_AS_REQ содержит в себе такие данные, как:
Все сообщения шифруются с помощью хэша пользователя NTLM (защищенного синим ключом) для проверки подлинности данных пользователя и предотвращения повторных атак.
Шаг 2. KDC использует базу данных, состоящую из хэшей Users / Krbtgt / Services, для расшифровки сообщения (синий ключ), за счет которого производится аутентификация пользователя.
Затем KDC генерирует TGT (Ticket Granting Ticket) для клиента, данные которого зашифрованы с помощью хэша Krbtgt (желтый ключ) и сообщения с использованием хэша пользователя.
KRB_AS_REP содержит в себе следующие данные:
Шаг 3. KRB_TGT будет храниться в памяти Kerberos компьютера, так как пользователь уже имеет KRB_TGT, который используется для идентификации своего устройства для запроса TGS. Клиент отправляет копию TGT с зашифрованными данными в KDC.
KRB_TGS_REQ содержит в себе следующие данные:
Шаг 4. KDC получает сообщение KRB_TGS_REQ и расшифровывает его с помощью хэша Krbtgt для проверки TGT (желтый ключ), затем KDC возвращает TGS как KRB_TGS_REP, который зашифрован с помощью запрошенного служебного хэша (красный ключ) и зашифрованного сообщения с использованием пользовательского хэша.
KRB_TGS_REP содержит в себе следующие данные:
Шаг 5. Пользователь отправляет копию TGS на сервер приложения.
Шаг 6. Приложение пытается расшифровать сообщение с помощью своего хэша NTLM и проверить PAC от KDC, чтобы определить привилегию пользователя (необязательно)
Шаг 7. KDC проверяет PAC (необязательно)
Шаг 8. Пользователь получает доступ к сервису на определенный период времени.
Раздел 2: Имя субъекта службы SPN
Имя субъекта службы SPN
Имя субъекта службы SPN — это уникальный идентификатор экземпляра сервиса. Доменные службы Active Directory и Windows обеспечивают поддержку имен субъектов служб (SPN), которые являются ключевыми компонентами механизма Kerberos, позволяющие клиенту проходить аутентификацию.
Важные моменты:
Синтаксис SPN состоит из четырех элементов
Вид SPN
Раздел 3: Пошаговое руководство по атаке Kerberoasting
Часть 1: Старая процедура осуществления Kerberoasting в операционной системе
Часть 2: Новая процедура осуществления Kerberoasting в операционной системе
Часть 3: Старая процедура осуществления Kerberoasting дистанционно
Часть 4: Новая процедура осуществления Kerberoasting дистанционно
Что такое Kerberoasting
Kerberoasting — это метод, который позволяет злоумышленнику украсть билет KRB_TGS, зашифрованный с помощью RC4, чтобы перебить хэш приложения для получения пароля.
Как было упомянуто выше, Kerberos использует хэш NTLM запрашиваемой службы для шифрования билета KRB_TGS для заданных имен участников службы (SPN). Когда пользователь домена отправляет запрос на билет TGS контроллеру домена KDC для любой службы, которая зарегистрировала SPN, KDC генерирует KRB_TGS без идентификации данных для авторизации пользователя запрашиваемой службы.
Злоумышленник может использовать этот билет в автономном режиме для подбора пароля учетной записи службы, так как билет был зашифрован в RC4 с помощью NTLM-хэша учетной записи службы.
Последовательность действий при атаке Kerberoasting
Атака представляет собой многоэтапный процесс, как показано ниже на картинке.
Шаг 0. Получение доступа к клиентской системе доменной сети всеми правдами и неправдами.
Шаг 1. Обнаружение или сканирование зарегистрированного SPN.
Шаг 5: Использование словаря для лобовой атаки.
Есть старые и новые способы атаки Kerberoasting на локальном компьютере или дистанционно.
Старая процедура: это методы, в которых выполняется несколько шагов Kerberoasting.
Новая процедура: это одношаговый метод, используемый для осуществления Kerberoasting.
Часть 1: Старая процедура осуществления Kerberoasting в операционной системе
Метод 1. Скрипт Powershell.
Шаг 1. Обнаружение SPN.
Нужно скачать Find-PotentiallyCrackableAccounts.ps1 и Export-PotentiallyCrackableAccounts.ps1 по ссылке на компьютер. Эти скрипты найдут SPN и сохранят выходные данные в формате CSV.
Другой скрипт PowerShell Getuserspn. ps1, скачать который можно здесь, будет запрашивать домен, чтобы обнаружить SPN, которые используют учетные записи пользователей. Как можно заметить, было найдено имя SPN с помощью следующей команды.
Для того чтобы импортировать модуль в PowerShell, выполняется команда, которая пронумерована именем субъекта службы SQL.
Шаг 2. Извлечение, сброс TGS_ticket и получение хэша
На картинке происходит попытка извлечения KRB_TGS из внутренней памяти хоста с помощью другого сценария PowerShell под названием TGSCipher. ps1, который можно скачать здесь и одновременно преобразовать вывод запроса в формат John.
В результате получена хэш-строка для службы SQL.
Шаг 3. Обработка хэша с помощью лобовой атаки.
Это последняя и самая важная фаза, когда используется словарь для лобовой атаки хэша, поэтому сохраняется вышеупомянутый хэш в текстовом файле и выполняется следующая команда.
Ура! Ура! Была успешно осуществлена атака Kerberoasting и получен пароль для службы SQL.
Метод 2. Mimikatz
Аналогично можно использовать mimikatz для проведения всей атаки, что означает, что программа может быть применена для обнаружения SPN и сброса билета TGS.
Шаг 1. Обнаружение SPN
Загрузите и выполните команды mimikatz и Kerberos::list для обнаружения SPN.
Шаг 2. Сброс билета TGS
Шаг 3. Преобразование Кирби в хэш и его лобовая атака
Полученное имя файла переименовано в raj.kirbi и в формат для взлома с помощью kirbi2john.py (/usr / share/john/). Получено имя kirbihash, затем используется John для лобовой атаки, как и в 1-м методе.
Часть 2: Новая процедура осуществления Kerberoasting в операционной системе
Метод 1. Rubeus.exe
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (за один шаг)
Rebeus.exe — это потрясающая утилита, поскольку она идет в паре с модулем kerberoast, который обнаруживает SPN, извлекает и сбрасывает TGS и хэш службы. Это можно сделать с помощью следующей команды.
Шаг 2. Лобовое нападение на хэш
Итак, служебный хэш был сохранен в текстовом файле hash.txt и теперь используется словарь для лобовой атаки на хэш и извлечения пароля с помощью инструмента hashcat.
В результате был получен пароль от сервиса.
Метод 2. Скрипт Kerberoast PowerShell
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (все за один шаг)
Kerberoast. ps1 – это скрипт PowerShell, который аналогичен приведенному выше модулю, его можно скачать по ссылке. Он обнаруживает SPN, извлекает TGS и сбрасывает служебный хэш. Это делается с помощью следующих команд.
Как только служебный хэш получен, нужно следовать приведенному выше методу подбора пароля.
Шаг 2. Лобовая атака хэша
Процедура повторяется для лобовой атаки хэша.
Часть 3: Старая процедура осуществления Kerberoasting дистанционно
Метод 1. Metasploit
Шаг 1. Обнаружение SPN
Можно скачать Find-PotentiallyCrackableAccounts.ps1 и Export-PotentiallyCrackableAccounts.ps1 здесь на локальный компьютер и загрузить его на хост-компьютер через сеанс meterpreter. После следует запустить PowerShell для получения удаленного доступа.
Эти скрипты выявят SPN и сохранят выходные данные в формате CSV.
Скачивание Report.csv на локальный компьютер.
Файл report.csv будет содержать список SPN, доступных в хост-системе.
SPN Discovery Utility
Другой метод – организации сеанса meterpreter путем компрометации компьютера-хоста и загрузки PowerShell. Использование утилиты setspn поможет пронумеровать все имена в домене.
Как можно заметить, снова обнаружены SPN для службы SQL.
Шаг 2. Определение, сбрс TGS_ticket и получение хэша
Скачивание скрипта PowerShell TGSCipher.ps1 и одновременное преобразование выходного запроса в формат John.
В результате получена хэш-строка для службы SQL.
Шаг 3. Лобовая атака хэша
Повторяется такая же процедура лобовой атаки хэша.
Mimikatz с помощью Metasploit
После того, как у вас настроен сеанс meterpreter хост-системы, можно попробовать загрузить mimikatz.exe, а затем выполнить все шаги, описанные в первой части третьего раздела.
Шаг 1. Обнаружение SPN
Скачивание и выполнение команд mimikatz и Kerberos::list для обнаружения SPN.
Шаг 2. Взлом билета TGS
Шаг 3. Преобразование Кирби в хэш и его лобовая атака
Снова полученное имя фала 2-40a5000…..kirbi было переименовано в raj.kirbi с помощью kirbi2john.py (/usr / share/john/) для использования во время взлома под названием localhash. Затем применяется John для лобовой атаки, как это делалось и в других методах.
Метод 2. PowerShell Empire
Шаг 1. Обнаружение SPN с помощью setspn, как было указано ранее (необязательно для этого модуля)
Шаг 2. Извлечение, сброс TGS_ticket и получение хэша
Шаг 3. Преобразование Kirbi в хэш, а затем использование лобовой атаки
Часть 4: Новая процедура осуществления Kerberoasting дистанционно
Метод 1. PowerShell Empire
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (все за один шаг)
Как только у пользователя появляется Empire / agent, нужно загрузите модуль invoke_kerberoast. Это эффективный модуль, поскольку он обнаруживает SPN, извлекает билет и взламывает служебный хэш из шифра TGS.
Как можно наглядно увидеть, он сбросил хэш сервиса в течение секунды.
Шаг 2. Лобовая атака хэша
Процедура лобовой атаки хэша повторяется еще один раз.
Метод 2. Metasploit
Шаг 1. Обнаружение SPN, взлом TGS, получение хэша (все за один шаг)
Любители интерфейса Metasploit после получения доступа к сеансу meterpreter могут загрузить PowerShell и скачать скрипт kerberoast.ps1 по этой ссылке. Он находит SPN, извлекает билет TGS, а затем взламывает служебный хэш из шифра TGS.
Шаг 2. Лобовая атака хэша
Процедура лобовой атаки хэша повторяется еще раз.
Метод 3. Impacket
Шаг 1. Обнаружение SPN, сброс TGS, получение хэша (все за один шаг)
Используется встроенный модуль Impacket GetUSerSPNs.py, это особый скрипт для python, который находит SPN, извлекает TGS и сбрасывает служебный хэш. Сделать это можно с помощью следующей команды:
Он будет взламывать служебный хэш, и с помощью словаря появится возможность подобрать необходимый пароль.
Шаг 2. Лобовая атака хэша
Повтор процедуры лобовой атаки хэша еще раз.
Читать подробнее из источника на английском можно по ссылке.
Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.















































