Ired.Team Kerberoasting (Credential Access)

Giải thích về các khái niệm

Kerberos trong Active Directory

  • Trong môi trường Windows Active Directory (AD), Kerberos là giao thức xác thực mặc định. Nó sử dụng các ticket để xác thực người dùng và dịch vụ mà không truyền mật khẩu qua mạng.

Các thành phần chính:

  • KDC (Key Distribution Center): Thường là Domain Controller (DC).
  • TGT (Ticket Granting Ticket): Cấp cho user sau khi đăng nhập thành công → dùng để xin ticket cho dịch vụ.
  • TGS (Ticket Granting Service ticket): Là service ticket cho một dịch vụ cụ thể → dùng để truy cập dịch vụ đó.

SPN là gì? (Service Principal Name)

  • SPN là một định danh duy nhất cho một dịch vụ trong domain.
  • Định dạng: ServiceClass/HostName[:Port]
  • SPN được lưu trong thuộc tính servicePrincipalName của đối tượng người dùng (user object).

TGS là gì?

  • TGS (Ticket Granting Service ticket) là ticket dùng để truy cập một dịch vụ cụ thể.
  • Khi user yêu cầu truy cập dịch vụ (ví dụ: IIS trên HTTP/dc-mantvydas.offense.local).
  • Tìm tài khoản nào sở hữu SPN đó → ví dụ: user svc_iis.
  • Tạo TGS, trong đó có phần "server ticket" được mã hóa bằng mật khẩu hash của svc_iis.
  • Gửi TGS cho client.

Kỹ thuật Kerberoasting là gì?

Lợi dụng việc TGS được mã hóa bằng mật khẩu hash của tài khoản dịch vụ để trích xuất ticket, rồi brute-force offline nhằm khôi phục mật khẩu gốc.

Mục tiêu của Kerberoasting?

  • Cho phép bất kỳ user hợp lệ nào trong domain trích xuất Ticket Granting Service (TGS) ticket dành cho các tài khoản dịch vụ có SPN (Service Principal Name).
  • Những TGS này được mã hóa bằng NTLM hash của mật khẩu gốc của tài khoản dịch vụ.
  • Kẻ tấn công có thể brute-force offline để lấy mật khẩu → không gây lockout tài khoản, vì không thực hiện xác thực sai.

Build lab và tiến hành phân tích tấn công

Dựa theo những máy AD đã được tạo ở lab trước bây giờ ta sẽ tiến hành tạo tài khoản service trên máy dc-mantvydas.offense.local ta dùng lệnh sau :

1
2
# Tạo user service
New-ADUser -Name "iis_svc" -SamAccountName "iis_svc" -AccountPassword (ConvertTo-SecureString "KerbP@ss123!" -AsPlainText -Force) -Enabled $true -Description "Service account for IIS"****

image

Sau đó ta tiến hành gán SPN kiểu HTTP cho user ta vừa mới add đó ta dùng lệnh :

1
setspn -S HTTP/dc-mantvydas.offense.local offense\iis_svc

image

Sau đó ta tiến hành kiểm tra lại với lệnh :

1
setspn -L offense\iis_svc

image

Thành công kết quả trả về là HTTP/dc-mantvydas.offense.local. Vậy là ta đã có được SPN hoạt động trong domain được tạo bởi Domain Controller.

Tiến hành Execution

image

Đầu tiên ta tiến hành liệt kê ra các SPN(Service Principle Name) ở đây ta dùng máy dc-red thay vì máy DC ta có được kết quả HTTP/dc-mantvydas.offense.local vậy là đáp ứng được điều kiện user account phải có thuộc tính servicePrincipalName.

image

Bây giờ ta sử dụng lệnh :

1
2
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "HTTP/dc-mantvydas.offense.local"

Để tiến hành request TGS ticket từ Kerberos.

image

Sau đó ta sẽ mở mimikatz để export ticket sau đó để đến với bước offline bruteforce.

image

Thành công thấy được ticket TGS.

Bây giờ ta sẽ đến với bước crack ticket để lấy được password.

image

Đưa file sang bên kali cho dễ crack.

image

Sử dụng script python có sẵn ta đã thành công crack ra password và nó là Passw0rd!.