Sau bài mở đầu giới thiệu về cách setup một Active Directory Lab cơ bản (https://sec.vnpt.vn/2022/10/build-a-basic-active-directory-lab-for-penetration-testing/), mình sẽ tiếp tục thực hành attack trên con lab này.

Bài viết này mình sẽ giới thiệu về Kerberos Unconstrained Delegation Attack, được sử dụng trong các đợt RedTeam, về cơ bản nó lợi dụng việc computer lưu trữ TGT (Ticket Granting Ticket) trong bộ nhớ LSASS để thay mặt người dùng truy cập tài nguyên. Nếu attacker có được TGT này thì có thể chiếm quyền điều khiển Domain.

Hãy tìm hiểu xem TGT hay Unconstrained Delegation là gì.

Tổng quan về bài viết

  • Sơ lược về giao thức Kerberos
  • Unconstrained Delegation
  • Attack lab

Giao thức Kerberos

Để hiểu rõ được bài này, mọi người cần phải nắm rõ được nguyên lý hoạt động của giao thức xác thực Kerberos, như đã được giới thiệu từ bài trước https://sec.vnpt.vn/2023/01/ky-thuat-attacking-kerberos-as-rep-roasting/, mình sẽ nói qua về tác dụng của Ticket Granting Ticket (TGT).

 

Về cơ bản ở bước 3 client sẽ yêu cầu một TGT ticket từ AS (Authentication Server) , sau đó KDC sẽ tạo TGT và gửi lại cho client ở bước 5. Ticket này cho phép user yêu cầu 1 dịch vụ mà không cần gửi thông tin đăng nhập mỗi khi user muốn sử dụng.

Ở bước 7, Với TGT vừa nhận được, client sẽ gửi nó cho Ticket Granting Server (TGS) để yêu cầu ticket cho phép truy cập 1 dịch vụ cụ thể. TGS sẽ  phản hồi lại với Client một TGS ticket.

Bước 10, TGS ticket sau đó có thể được gửi đến Application Server mỗi khi người dùng muốn kết nối trực tiếp tới 1 dịch vụ trong mạng như Website hoặc Database.

Unconstrained Delegation

Delegation (ủy quyền) là sự cho phép 1 tài khoản hoặc một máy tính trong domain có thuộc tính Delegate được tùy chọn để ủy quyền máy tính khác truy cập tài nguyên trong mạng. Trong Active Directory, nếu một máy tính được tùy chọn “Trust This user/computer for delegation to any service”, nó có thể thay mặt các máy tính khác truy cập dịch vụ.

Để hiểu rõ hơn, hãy lấy một ví dụ về người dùng xác thực với 1 Web server và muốn yêu cầu dữ liệu từ 1 Database server được lưu trữ trên một máy chủ khác.

Nếu thuộc tính Delegation được tùy chọn, Web Server có thể mạo danh người dùng đã xác thực và chuyển thông tin xác thực của họ để yêu cầu dữ liệu từ database.

Nếu 1 Attacker có thể dump TGT tickets của tất cả các tài khoản được xác thực từ Unconstrained Delegation Server và một trong những tài khoản này là Domain Admin, Attacker có thể mạo danh để truy cập bất kỳ dịch vụ nào trong Domain với quyền Domain Admin.

Delegation flow with the Kerberos Authentication

1 – User xác thực với KDC bằng cách gửi một request được mã hóa với thông tin xác thực. KDC xác minh danh tính của họ và gửi lại cho người dùng 1 TGT ticket.

2 – User nhận được TGT Ticket và gửi lại KDC để yêu cầu Service ticket cho một dịch vụ cụ thể, ví dụ Web Service. KDC sẽ kiểm tra TGT có hợp hệ hay không và gửi lại Service ticket (TGS) cho dịch vụ được yêu cầu.

3 – Tại thời điểm đó, user có thể sử dụng service ticket (TGS) để truy cập dịch vụ Web được yêu cầu. Tuy nhiên, nếu dịch vụ được yêu cầu như trên ví dụ cần truy cập 1 dịch vụ khác như SQL thì người dùng phải gửi TGT ticket tới Web Service cùng với TGS ticket.

 

4 – Web server sẽ lưu trữ cục bộ (cached) TGT vừa được gửi từ user và sử dụng nó để yêu cầu vé TGS từ KDC để truy cập SQL service thay mặt cho người dùng.

Sau đó, KDC sẽ xác minh TGT được gửi và cung cấp cho Web Server một TGS – SQL để truy cập SQL Server với tư cách là người dùng.

Attack lab

Yêu cầu attack

  • 1 Domain Computer với option “Trust This computer for delegation to any service”
  • Quyền Local admin trên Delegated Computer để có thể truy xuất TGT ticket.

Tool sử dụng

  • Mimikatz
  • PowerSploit
  • Active Directory Module
  • Rubeus, spoolsample

Mô hình lab

Trước tiên, để có thể attack mình thực hiện join 2 máy IISSERVER và APPSERVER vào domain covid.inc. Sau đó, tại Máy DC mình thực hiện cấu hình enable “Trust This computer for delegation to any service” cho IISSERVER, máy này mình cũng thực hiện cấu hình IIS Web Service luôn.

Xác định Delegation server

Chúng ta có thể sử dụng PowerView script từ công cụ PowerSploit hoặc module AD để xác định xem tùy chọn ủy quyền Delegation có được enable hay không bằng cách kiểm tra Trusted delegation property được đặt là True.

Với PowerView, mình sử dụng command sau : Get-NetComputer -UnConstrained

Và với Module ActiveDirectory , sử dụng command Get-ADComputer với filter TrustedForDelegation property:

Get-ADComputer -Filter {TrustedForDelegation -eq $true} -Properties trustedfordelegation,serviceprincipalname,description

Như ví dụ trên trên chúng ta thấy, command trả về 3 kết quả là Domain Controller Computer (DT-Server)

IIS SERVER (IISServer) và máy PC01, lí do là ở đây mình cấu hình cả 3 máy đều enable Trust Delegation.

Compromise Identity Server

Mục tiêu là chúng ta cần truy cập được Delegation Computer với quyền quản trị viên ở đây là IISSERVER. Trong bài này, mình giả sử đã chiếm được quyền quản trị bằng cách sử dụng iisserver-admin hash có được nhờ việc dumps hash ở trên một máy tính khác. Sau đó, bằng cách sử dụng pass the hash để truy cập vào máy chủ IISSERVER với tư cách là người dùng iisserver-admin.

Trên APPSERVER, sử dụng công cụ Mimikatz để dump credentials

Sau khi lấy được NTLM hash của user iisserver-admin, sử dụng pass the hash để run powershell với user iisserver-admin

Export TGT ticket

Khi đã chiếm được quyền local admin trên IISSERVER, thực hiện upload script Invoke-Mimikatz với PS Remoting và truy xuất toàn bộ cached TGT Ticket. Bằng cách sử dụng cmdlet sau:

Copy-Item C:\Users\appserver-admin\Desktop\Invoke-Mimikatz.ps \\IISSERVER\C$\Users\iisserver-admin\Desktop\

Thực hiện Import script và export TGT tickets

Import-Module .\Invoke-Mimikatz.ps1

Invoke-Mimikatz –Command ‘”sekurlsa::tickets /export”‘

Như ví dụ bên dưới, mình có thể dump TGT của Domain Admin vì DA đã đăng nhập vào máy iisserver-admin hoặc truy cập dịch vụ IIS WebService và IISSERVER lưu trữ cached TGT nên chúng ta có thể export ticket.

Khi đã có TGT ticket của user DA, có thể sử dụng Invoke-Mimikatz hoặc Rubeus để request Service Ticket từ KDC tới bất kỳ dịch vụ nào với quyền Domain Admin. Sử dụng command sau:

Kerberos::ptt Administrator@kbrtgt-covid.inc.kirbi

Sử dụng pass the ticket trên Mimikatz, user account hiện tại sẽ leo quyền lên Domain Controller.  Điều này có thể được xác minh bằng cách sử dụng DCSync để dump NTLM hash của tài khoản Domain Admin sau đó thực thi command với kỹ thuật pass the hash.

Sử dụng command Enter-PSSession để tạo session trên DT-SERVER (Domain Controller)

Như vậy, chúng ta đã có thể chiếm quyền điều khiển DC với quyền với Domain Admin.

Một công cụ khác mình cũng có thể sử dụng là Rubeus được dùng để bắt ticket khi machine Account của Domain Controller xác thực với hệ thống IISServer. Đầu tiên, trên máy IISServer run rubeus ở chế độ monitor với target user là DT-Server$

Thực thi printerbug với Spoolsample, lỗi này sẽ buộc Domain Controller xác thực với server được cấu hình Unconstrained Delegation. Sử dụng command sau:

Spoolsample.exe  target-server  delegation-server

TGT ticket của Domain Controller sẽ được rubeus ghi lại dưới dạng Base64:

Với TGT vừa có được, mình sử dụng Powershell để convert từ base64 -> .kirbi, sau đó sử dụng mimikatz để import ticket.

______________________

Ngoài những tool được sử dụng như Mimikatz , Powerview, Rubeus script trong powersploit … Còn 1 vài tool khác cũng được sử dụng để Attack AD như Impactket , Bloodhoundv.v..

Vậy là mình đã giới thiệu sơ qua về một vài khái niệm cơ bản như Unconstrained Delegation là gì , xây dựng 1 bài lab cơ bản để thực hành attack Active Directory.

Cảm ơn mọi người đã đọc bài.

duytoi

928 lượt xem