12 dic 2014

Explotar MS14-068 y validarse como administrador de dominio

El 18 de noviembre Microsoft anunció en el boletín MS14-068 una vulnerabilidad crítica en Kerberos que permite elevación de privilegios. A grandes rasgos es un fallo en el Servicio de Kerberos del Controlador de Dominio (KDC) que permite a cualquier usuario del dominio validarse contras los DCs como administradores de dominio (o cualquier otro grupo que especifiquemos).

Validación Kerberos

Para para saber en qué consiste la vulnerabilidad primero debemos entender un poco cómo funciona Kerberos. En resumen el proceso de validación de un usuario es el siguiente:
  1. Cuando un usuario se valida se genera un ticket TGT (Kerberos service ticket) con una petición AS-REQ que contiene un Timestamp cifrado y el hash de la contraseña.
  2. El Servicio de Kerberos del Controlador de Dominio o KDC recibe la petición, valida los datos y responde con un AS-REP. El TGT ahora contiene un PAC con todos los grupos a los que pertenece el usuario.
  3. Cuando el usuario quiere acceder a un recurso del Directorio, el TGT generado se presenta al KDC junto con ese recurso específico (Service Principal Name).
  4. El Controlador de Dominio determina si el TGT es válido y, si lo es, genera un TGS (Resource Access Ticket) cifrado/firmado con una parte de la clave de sesión (hash NTLM de la contraseña del usuario o clave privada de un certificado válido) y con la cuenta KRBTGT, una cuenta especial que reside en todos los DCs que nunca no debe ser borrada ni renombrada.
  5. El TGS luego se envía al KDC para validar la sesión (comprueba si puede descifrarlo con la clave de sesión) y los grupos del PAC para determinar los derechos de acceso del usuario.

Por defecto el TGT es válido 10 horas y puede ser renovado automáticamente por 7 días. Este ticket no permite el acceso directo a un servicio en particular, sino que "representa" la identidad del usuario actual que ha sido validado por el KDC. El propio TGT está cifrado por el KDC vía el hash de la cuenta KRBTGT. El cliente no puede descifrarlo, lo usa "tal cual".

Tickets de Oro

A partir de información específica, desde hace tiempo Mimikatz es capaz de crear un TGT muy especial de la cuenta de administrador de dominio. Esta información es:
  • Nombre de la cuenta de Administrador (Administrator)
  • Nombre completo del dominio (domain.local)
  • Dominio SID ( S-1-5-21-1723555596-1415287819-2705645101 )
  • Hash de la Cuenta NTLM krbtgt ( 6194bd1a5bf3ecd542e8aac9860bddf0 )
Eso es todo.
El ticket de oro se puede generar desde cualquier máquina, incluso fuera del dominio... Eso sí, el atacante tiene que tener acceso al hash de la contraseña de la cuenta KRBTGT y para ello tiene que ejecutar con privilegios Mimikatz en el servidor de dominio, es decir, que esta tarea es un "lujo" post-explotación.

Tickets de plata

Los tickets de plata en Kerberos son Tickets de Acceso a Recursos o TGS válidos firmados/cifrados por la cuenta configurada con un Service Principal Name en cada servidor que corre el servicio de autenticación de Kerberos. Es decir, mientras que los tickets de oro son firmados/cifrados por la cuenta KRBTGT, los tickets de plata son firmados por las cuentas de servicio (cuenta de equipo extraída de la SAM local o credenciales del servicio).

Sabemos que con los Tickets de Oro no se validan los PACs o grupos hasta que no pasan 20 minutos desde su creación. La mayoría de los servicios no validan el PAC (enviando el TGS al Controlador de Dominio) por lo que un TGS generado con una contraseña de una cuenta de servicio puede incluir un PAC que es ficticio completamente, lo que significa que podemos crear tickets de plata con PACs en los que el usuario pertenece al grupo de administradores de dominio ...

Todo lo que necesitamos es crear un ticket con el mismo formato TGT pero con un nombre de servicio diferente y el RC4 (NTLM hash) de la contraseña de la cuenta.

Explotar la vulnerabilidad MS14-068 (CVE-2014-6324)

Explotar la vulnerabilidad supone la posibilidad de crear o modificar un ticket Kerberos con un PAC modificado y un checksum no válido que, sin embargo, es validado correctamente por el KDC de un Controlador de Dominio. Ese es el fallo descrito en el boletín MS14-068: el KDC no verifica correctamente la firma del ticket y es posible incluir en el PAC grupos con privilegios elevados, haciendo posible que cualquier cuenta del dominio virtualmente pertenezca al grupo de administradores de dominio y, por lo tanto, llegando a comprometer el dominio e incluso el bosque por completo.

Sylvain Monné ha creado PyKEK (Python Kerberos Exploitation Kit), una librería en Python (todavía en desarrollo) para manipular datos KRB5 y crear un ticket de plata en el que cualquier cuenta de usuario del dominio puede pertenecer a los siguientes grupos:
  • Usuarios del dominio (513)
  • Administradores del dominio (512)
  • Administradores del esquema (518)
  • Administradores de la empresa (519)
  • Propietarios del creador de directivas de grupo(520)
Antes de nada descargaremos el ZIP de su proyecto en Github, lo descomprimiremos y nos situaremos dentro del directorio.

Continuar leyendo en fuente original HackPlayers

Suscríbete a nuestro Boletín

0 Comments:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info.

Gracias por comentar!