Constrained Delegation
La delegación restringida cuando está habilitada en una cuenta de servicio, permite el acceso solo a servicios específicos en computadoras específicas como usuario.
Un escenario típico donde se utiliza la delegación restringida: un usuario se autentica en un servicio web sin usar Kerberos y el servicio web realiza solicitudes a un servidor de base de datos para obtener resultados según la autorización del usuario.
Para hacerse pasar por el usuario, se utiliza la extensión Service for User (S4U) que proporciona dos extensiones:
Service for User to Self (S4U2self): permite que un servicio obtenga un TGS reenviable para sí mismo en nombre de un usuario.
Servicio de usuario a proxy (S4U2proxy): permite que un servicio obtenga un TGS para un segundo servicio en nombre de un usuario.
Para hacerse pasar por el usuario, se utiliza la extensión Service for User (S4U) que proporciona dos extensiones:
Service for User to Self (S4U2self): permite que un servicio obtenga un TGS reenviable para sí mismo en nombre de un usuario con solo el nombre principal del usuario sin proporcionar una contraseña. La cuenta de servicio debe tener el atributo TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION –T2A4D UserAccountControl.
Servicio de usuario a proxy (S4U2proxy): permite que un servicio obtenga un TGS para un segundo servicio en nombre de un usuario. ¿Qué segundo servicio? Esto está controlado por el atributo msDS-AllowedToDelegateTo. Este atributo contiene una lista de SPN a los que se pueden reenviar los tokens de usuario.

Un usuario -Joe, se autentica en el servicio web (que se ejecuta con la cuenta de servicio websvc) mediante un mecanismo de autenticación no compatible con Kerberos.
El servicio web solicita un ticket del Centro de distribución de claves (KDC) para la cuenta de Joe sin proporcionar una contraseña, como la cuenta websvc.
El KDC comprueba el valor websvcuserAccountControl para el atributo TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION y que la cuenta de Joe no está bloqueada para la delegación. Si está bien, devuelve un boleto reenviable para la cuenta de Joe (S4U2Self).
Luego, el servicio devuelve este vale al KDC y solicita un vale de servicio para el servicio CIFS/dcorp-mssql.dollarcorp.moneycorp.local.
El KDC comprueba el campo MSDS-AllowedToDelegateTo en la cuenta websvca. Si el servicio aparece en la lista, devolverá un vale de servicio para dcorp-mssql(S4U2Proxy).
El servicio web ahora puede autenticarse en CIFS en dcorp-mssql como Joe mediante el TGS suministrado.
Para abusar de la delegación restringida en el escenario anterior, necesitamos tener acceso a la cuenta web server. Si tenemos acceso a esa cuenta, es posible acceder a los servicios enumerados en msDS-AllowedToDelegateTo de la cuenta web server como CUALQUIER usuario.
Escenario 1: Uso de Servicios Especificados
PASO 1: Enumerar usuarios y equipos con delegación restringida habilitada
powerview-dev:


RSAT:

PASO 2: Solicitar TGTs
Se requiere contraseña de texto sin formato o hash NTLM. Ya tenemos acceso a websvc'shash desde dcorp-adminsrv
Usando asktgt de Kekeo, solicitamos un TGT (pasos 2 y 3 en el diagrama):

PASO 3: Solicitamos TGS
Usando s4u de Kekeo, solicitamos un TGS (pasos 4 y 5):

PASO 4: Usar mimikatz para injectar el ticket

PASO 2,PASO 3 y PASO 4 (Usando RUBEUS):
Para abusar de la delegación restringida usando Rubeus, podemos usar el siguiente comando (estamos solicitando un TGT y un TGS en un solo comando):
1:

2:

3:

4:

Escenario 2: Uso de Servicios Alternativos
Otro tema interesante en Kerberos es que la delegación ocurre no solo para el servicio especificado sino también para cualquier servicio que se ejecute bajo la misma cuenta. No hay validación para el SPN especificado. ¡Esto es enorme ya que permite el acceso a muchos servicios interesantes cuando la delegación puede ser para un servicio no intrusivo!
PASO 1: Usando asktgt de Kekeo, solicitamos un TGT:

PASO 2: Usando s4u de Kekeo_one (sin validación SNAME):

PASO 3: Usamos mimikatz para importar el ticket:

Por ultimo hacemos dcsync con los permisos de ldap:

PASO 1 y PASO 2 (Usando RUBEUS):
1:

2:

3:

4: Mimikatz

Last updated