Active Directory Enumeration & Attacks (phần 1)

Xem thêm

1. External Recon and Enumeration Principles

1.1 Thu thập thông tin từ bên ngoài

Hay còn gọi là giai đoạn trinh sát và thu thập thông tin, là bước đầu tiên và rất quan trọng khi thực hiện tấn công từ góc nhìn bên ngoài môi trường mạng thông qua việc nghiên cứu, tìm kiếm các thông tin, tài liệu nhạy cảm vô tình bị rò rỉ công khai của tổ chức.

Những thông tin quan trọng và trở thành mục tiêu thu thập sẽ bao gồm:

Như vậy, chúng ta đã biết các thông tin quan trọng mà attacker sẽ thu thập trong giai đoạn trinh sát. Vậy các công cụ có thể được sử dụng là gì?

Mục đích của quá trình trinh sát và thu thập thông tin từ bên ngoài là có thể "chạm" vào mạng nội bộ của tổ chức, nơi có kết nối đến AD. Đối với góc nhìn từ bên ngoài mạng, truy cập được vào VPN của tổ chức là miếng mồi ngon. Ngoài ra, với các tổ chức có hạ tầng cloud, việc truy cập được vào hạ tầng này và chiếm một máy VM có thể truy cập vào mạng nội bộ.

Bên cạnh việc thu thập thụ động thông tin public, attacker có thể sử dụng các phương pháp chủ động như gửi phishing link đến user để lừa họ nhập thông tin đăng nhập email hoặc cài mã độc để chiếm quyền trên máy tính của user.

Sau khi đã vào được mạng nội bộ, các loại thông tin attacker có thể thu thập sẽ bao gồm:

Việc thu thập thông tin ở giai đoạn khi đã "chạm" vào được mạng nội bộ bao gồm các account domain user (nếu may mắn thì domain admin account) hoặc chiếm được quyền kiểm soát một máy domain-joined có quyền SYSTEM để tiến hành các cuộc tấn công khác liên quan sau này để lên được domain admin.

Các bước thu thập diễn ra như sau:

1.2 Xác định các host trong mạng

Để xác định các host/IP đang hoạt động trong mạng, có thể sử dụng kết hợp qua 2 phương pháp:

Công việc phía trên chỉ dừng lại ở việc thu thập địa chỉ IP/DNS name của các host đang hoạt động. Bước tiếp theo là thu thập các thông tin chi tiết hơn về các host như các port đang mở, các dịch chạy trên đó, OS version, service version,... Công cụ thường được sử dụng là nmap.


thune@htb[/htb]$ nmap -A 172.16.5.100

Starting Nmap 7.92 ( https://nmap.org ) at 2022-04-08 13:42 EDT

Nmap scan report for 172.16.5.100

Host is up (0.071s latency).
Not shown: 989 closed tcp ports (conn-refused)
PORT      STATE SERVICE      VERSION

80/tcp    open  http         Microsoft IIS httpd 7.5
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Microsoft-IIS/7.5
| http-methods: 
|_  Potentially risky methods: TRACE

135/tcp   open  msrpc        Microsoft Windows RPC

139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn

443/tcp   open  https?
445/tcp   open  microsoft-ds Windows Server 2008 R2 Standard 7600 microsoft-ds

1433/tcp  open  ms-sql-s     Microsoft SQL Server 2008 R2 10.50.1600.00; RTM
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2022-04-08T17:38:25
|_Not valid after:  2052-04-08T17:38:25
|_ssl-date: 2022-04-08T17:43:53+00:00; 0s from scanner time.
| ms-sql-ntlm-info: 
|   Target_Name: INLANEFREIGHT
|   NetBIOS_Domain_Name: INLANEFREIGHT
|   NetBIOS_Computer_Name: ACADEMY-EA-CTX1
|   DNS_Domain_Name: INLANEFREIGHT.LOCAL
|   DNS_Computer_Name: ACADEMY-EA-CTX1.INLANEFREIGHT.LOCAL
|_  Product_Version: 6.1.7600

Host script results:
| smb2-security-mode: 
|   2.1: 
|_    Message signing enabled but not required
| ms-sql-info: 
|   172.16.5.100:1433: 
|     Version: 
|       name: Microsoft SQL Server 2008 R2 RTM
|       number: 10.50.1600.00
|       Product: Microsoft SQL Server 2008 R2
|       Service pack level: RTM
|       Post-SP patches applied: false
|_    TCP port: 1433
|_nbstat: NetBIOS name: ACADEMY-EA-CTX1, NetBIOS user: <unknown>, NetBIOS MAC: 00:50:56:b9:c7:1c (VMware)
| smb-os-discovery: 
|   OS: Windows Server 2008 R2 Standard 7600 (Windows Server 2008 R2 Standard 6.1)
|   OS CPE: cpe:/o:microsoft:windows_server_2008::-
|   Computer name: ACADEMY-EA-CTX1
|   NetBIOS computer name: ACADEMY-EA-CTX1\x00
|   Domain name: INLANEFREIGHT.LOCAL
|   Forest name: INLANEFREIGHT.LOCAL
|   FQDN: ACADEMY-EA-CTX1.INLANEFREIGHT.LOCAL
|_  System time: 2022-04-08T10:43:48-07:00

<SNIP>

Việc thấy các tổ chức có thể sử dụng các phiên bản outdated của OS là thường xuyên, vì nhiều doanh nghiệp có lịch sử phát triển lâu đời, việc urgrade/migrate các dịch vụ có thể là bài toán không có lời giải. Do đó, họ thường giữ nguyên các thành phần này và thêm vào một lớp vỏ cứng bên ngoài (firewall, IDS/IPS, SIEM).

1.3 Xác định các user

Attacker cần tìm được username và password dạng cleartext hoặc NTLM password hash, đạt được một phiên điều khiển từ xa (remote shell) với quyền SYSTEM trên một máy domain-joined hoặc dưới context của domain account.

Ban đầu, có thể attacker sẽ không có được các username của domain nhưng có thể sẽ có được thông tin về quy cách đặt tên như lastname.firstname từ giai đoạn trinh sát, thu thập thông tin ở các bước trước đây. Điều này sẽ giúp xây dựng wordlist chính xác, giảm phạm vi và thời gian tấn công brute-force.

Công cụ được sử dụng phổ biến là Kerbrute. Công cụ này lợi dụng việc Kerberos pre-authentication thất bại sẽ không lưu log hoặc alert (nếu không được cấu hình thu thập). Sử dụng Kerbrute kết hợp với một wordlist xây dựng từ username schema.

Cách hoạt động của Kerbrute dựa trên việc nó sẽ gửi yêu cầu TGT ticket đến KDC với danh sách username nằm trong wordlist:

1.4 Xác định các lỗ hổng tiềm ẩn

Account NT AUTHORITY\SYSTEM là account có quyền cao nhất trong hệ điều hành Windows. Các dịch vụ bên thứ ba thường chạy dưới context của user này theo mặc đinh. Nếu đạt được quyền SYSTEM trên một máy domain-joined, điều này tương đương với việc có domain user account.

Dưới đây là một số phương pháp attacker lựa chọn để đạt quyền SYSTEM trên một host:

Sau đó, attacker có thể tiến hành các tấn công nâng cao như:

2. Phát hiện và giành được Foothold

Ở phần 1.3, chúng ta biết rằng có thể sử dụng Kerberute - một công cụ sử dụng kỹ thuật brute-force để có được danh sách các user hợp lệ của domain mục tiêu. Tiếp theo, để giành được một chỗ đứng trong domain, cần có được cleartext password hoặc NTLM hash của một tài khoản domain user.

Hai kỹ thuật có thể được sử dụng bao gồm:

2.1 LLMNR/NBT-NS Poisoning

Mô tả

Một kỹ thuật dạng Man-in-the Middle lợi dụng 2 giao thức LLMNR (port 5355) hoặc NBT-NS (port 137).

Đây là hai giao thức phân giải DNS động, trong trường hợp DNS server trong mạng không hoạt động hoặc không có kết quả trả về, máy yêu cầu phân giải DNS sẽ tiến hành đi hỏi toàn bộ các máy còn lại trong mạng (broadcast). Nếu attacker nằm trong mạng lắng nghe được các yêu cầu này, giả mạo bản thân là máy hợp lệ bằng cách trả lời lại máy yêu cầu DNS, khiến máy này tin rằng attacker chính là máy nó đang tìm kiếm và tiến hành các phiên giao tiếp liên quan.

Khi nạn nhân cố gắng truy cập các dịch vụ như SMB, RDP, HTTP/HTTPS, LDAP hoặc Kerberos, quá trình xác thực NTLM sẽ diễn ra và attacker có thể thu thập NetNTLM hash (NTLMv1 hoặc NTLMv2) của nạn nhân. Các hash này có thể được crack offline bằng Hashcat hoặc được sử dụng trực tiếp trong các kỹ thuật tấn công như SMB Relay Attack, dẫn đến nguy cơ compromise hệ thống trong domain.

20260105145814.png

Công cụ được sử dụng là Responder, InveighMetasploit.

Khắc phục

Phát hiện tấn công

2.2 Password Spraying

Có cùng một concept với brute-force là xây dựng danh sách danh sách username/password và thử xác thực hàng loạt để tìm thông tin đăng nhập hợp lệ, nhưng Password Spraying tinh vi hơn rất nhiều. Có thể nói (hơi văn vẻ) nó là một môn nghệ thuật kết hợp sự sáng tạo, kỹ năng thu thập, phân tích thông tin.

Nếu như chỉ brute-force password một cách thuần tuý, khả năng cao attacker sẽ gặp phải rủi ro bị phát hiện và ngăn chặn từ sớm (quá ồn ào) khi kích hoạt các cảnh báo như:

Hoặc may mắn khi giả sử tổ chức thực sự không giám sát những hành vi trên, thì sau khi số lần thử đăng nhập thất bại đạt đến ngưỡng lock-out, sẽ phải chờ thêm khoảng thời gian 10-30 phút (tuỳ vào cấu hình) để tự động unlock. Nhiều tổ chức sẽ chỉ định phải liên hệ quản trị viên mới được unlock tài khoản, dẫn tới việc tấn công bị phát hiện.

Do đó, việc thu thập thông tin về password policy mang lại nhiều lợi ích và hiệu quả thời gian hơn trước khi thực hiện tấn công brute-force. Các thông tin này có thể bao gồm:

Để thu thập được thì attacker cần có domain account hoặc phiên SMB NULL hoặc LDAP anonymous bind.

3. Kerberoasting

Mô tả

Là kỹ thuật tấn công để di chuyển ngang (lateral movement) hoặc leo thang đặc quyền (privilege escalation) trong môi trường AD.

Mục tiêu của Kerberoasting là các Service Principal Name (SPN). SPN là định dạng duy nhất mà Kerberos sử dụng để tham chiếu một service với một service account dùng làm context để chạy service đó.

Trong môi trường Active Directory, domain user thường được sử dụng để chạy các dịch vụ chia sẻ tài nguyên và cần xác thực trong mạng thay vì tài khoản local NT AUTHORITY/LOCAL SERVICE cho phép bất kỳ domain user nào cũng có thể request TGS cho bất kỳ service nào trong cùng một domain.

Ví dụ: Giả sử SQL Server chạy trên máy sqlserver.thune.local, cổng mặc định 1433, và sử dụng service account svc-sql trong Active Directory để chạy dịch vụ SQL.

NT AUTHORITY/LOCAL SERVICENT AUTHORITY/SYSTEM là local account trên máy chủ hoặc máy trạm Windows. Khi một dịch vụ chạy bằng các tài khoản này, nó có thể truy cập tài nguyên trên máy cục bộ nhưng không thể xác thực vào các tài nguyên mạng như máy chủ file, SQL Server, hoặc máy chủ web trên một máy khác.

Tài khoản domain dùng để chạy service thường có quyền administrator trên máy chủ dịch vụ, hoặc trên nhiều máy chủ khác do đặc điểm phân tán của hệ thống. Đôi khi, nhiều dịch vụ yêu cầu các đặc quyền nâng cao trên nhiều hệ thống, nên service account được thêm vào các nhóm đặc quyền (privilege) như Domain Admins. Các service account cũng thường được đặt mật khẩu yếu và việc sử dụng lại mật khẩu cho nhiều service account nhằm đơn giản hoá công việc quản trị là phổ biến. Do đó, nếu có được mật khẩu của một service account, điều này có thể giúp attacker truy cập trên nhiều máy chủ khác, thậm chí là nhiều service account khác. Điều này đã thúc đẩy tấn công Kerberoasting.

Trong quá trình xác thực với Kerberos, TGS-REP trả về từ yêu cầu ticket của client sẽ được mã hoá với NTLM hash của service account, do đó mật khẩu dạng văn bản rõ có thể được lấy bằng cách thực hiện một cuộc tấn công brute-force ngoại tuyến với công cụ như Hashcat.

Để tấn công Kerberoasting, attacker cần có:

  1. Thông tin đăng nhập của một domain user trên một máy non-domain joined Linux.

    • Sử dụng GetUserSPNs.py trong công cụ impacket để liệt kê SPN và yêu cầu vé TGS.
  2. Máy domain-joined Linux với quyền root sau khi trích xuất keytab file. Keytab file một file chứa các khóa bí mật (Kerberos keys) của tài khoản, giúp xác thực mà không cần nhập mật khẩu.

    • Kiểm tra các ticket đã cấp bằng klist và yêu cầu cấp ticket lần nữa để lấy TGS.
  3. Máy domain-joined Windows đăng nhập bằng domain user

    • Tìm tài khoản có SPN
    Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
    
    • Sử dụng Ruberus để lấy ticket
  4. Máy domain-joined Windows với một shell chạy trong context của domain account.

    • User đã có shell trong ngữ cảnh tài khoản domain (vd: Remote Desktop, Meterpreter shell, PsExec).
    • Dùng Mimikatz hoặc Rubeus
  5. Máy domain-joined Windows với quyền SYSTEM

  6. Máy non-domain joined Windows sử dụng runas /netonly nhưng có domain account.

    • Dùng runas /netonly để chạy PowerShell với quyền domain và yêu cầu TGS.
    runas /netonly /user:DOMAIN\user powershell.exe
    
    • Dùng PowerShell để lấy vé TGS:
    Add-Type -AssemblyName System.IdentityModel  
    New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/sql.domain.local"
    

Ruberus hoạt động theo cách yêu cầu và trích xuất vé Kerberos, còn Mimikatz trích xuất ticket từ bộ nhớ (kết hợp các công cụ living-off the land như Powershell, setspn.exe khác để yêu cầu vé trước, ví dụ PowerShell)

Phát hiện tấn công

Attacker sẽ cố gắng yêu cầu ticket được mã hoá bằng RC4 thay vì AES để dễ dàng crack hơn.

Dựa vào Event ID 4769, 4770, phát hiện thông qua các RC4 ticket (lưu ý, một số hệ thống cũ có thể vẫn sử dụng RC4 ticket) với encryption type là 0x17

Các bước tấn công tiếp theo

Sau khi tấn công Kerberoasting thành công, attacker chiếm được một vài domain account có thể sử dụng cho các mục đích sau:

Còn nữa (mà chưa biết bao giờ có) ....