the_open_door
café
ESEN
← Volver al índice

GPP cpassword (MS14-025)

ATT&CKT1552.006

Group Policy Preferences (GPP) fue una extensión de las directivas de grupo que permitía, entre otras cosas, crear usuarios locales o cambiar contraseñas de forma centralizada desde el dominio. Esos ajustes se guardan en ficheros XML dentro del SYSVOL (Groups.xml, Services.xml, ScheduledTasks.xml, DataSources.xml...), y el SYSVOL se replica a todos los controladores y lo puede leer cualquier miembro del dominio.

El fallo. Cuando una directiva fija una contraseña, esta se almacena en el atributo cpassword, cifrada en AES-256. El problema no es el algoritmo: es que Microsoft publicó la clave AES en su documentación para desarrolladores (MSDN). Una clave de cifrado pública convierte el cifrado en codificación. Cualquiera que lea el Groups.xml puede descifrar el cpassword en claro:

<Groups ...>
  <User name="active.htb\SVC_TGS" ...>
    <Properties cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" .../>
  </User>
</Groups>
gpp-decrypt '<cpassword>'          # aplica la clave AES publicada y devuelve el texto claro

gpp-decrypt (o el módulo equivalente de impacket/metasploit) aplica esa clave conocida y devuelve la contraseña. No hay fuerza bruta: es descifrado directo.

Por qué importa. Es un vector clásico de Active Directory porque encadena dos descuidos: un SYSVOL legible (por diseño) y una contraseña que el algoritmo ya no protege. Suele dar una credencial de cuenta de servicio del dominio, el primer punto de apoyo autenticado desde el que pivotar a Kerberoasting u otros ataques.

Cómo detectarlo. El descifrado es offline (imposible de ver), así que la detección está en el acceso al fichero: leer Groups.xml u otros *.xml de GPP en \\<dc>\SYSVOL\...\Policies\... deja un Event ID 4663 (se intentó acceder a un objeto) en el DC si hay auditoría de acceso a objetos con una SACL sobre esas rutas del SYSVOL, y un 5145 (se comprobó el acceso a un recurso compartido de red) para el acceso vía SMB. Como el fichero legítimo casi no se lee tras el despliegue, cualquier lectura masiva del SYSVOL buscando cpassword (netexec --gpp-password, Get-GPPPassword) destaca. En modo proactivo, un barrido periódico del propio SYSVOL en busca de cpassword residual es a la vez detección y remediación.

Defensa. Microsoft retiró GPP como mecanismo para fijar contraseñas y publicó el parche MS14-025, que impide crear nuevas preferencias con cpassword. Pero el parche no borra los XML ya existentes: hay que buscar y eliminar manualmente cualquier cpassword heredado en el SYSVOL. La regla de fondo: no distribuir contraseñas por directiva de grupo. Relacionado con la enumeración SMB sin credenciales que suele exponer el recurso.

Herramientasgpp-decryptSnaffler

Máquinas donde se aplica