Kerberos es un protocolo para la autenticación de usuarios y recursos dentro de una red Windows, éste es utilizado por los controladores de dominio para proporcionar información sobre los privilegios de cada usuario y determinar a que recursos tiene acceso. Con Kerberos, el cliente y el servidor verifican la identidad uno del otro, los mensajes entre el cliente y el servidor están protegidos con clave simétrica y requiere un tercero de confianza (KDC, Key Distribution Center) que es quien proporciona los servicios de autenticación.

Kerberos utiliza TCP o UDP para comunicarse, es responsable de proporcionar un cifrado para la comunicación y los puertos por los que el KDC esta a la escucha son el 88 TCP y 88 UDP.

Para la gestión de las identidades de los usuarios Kerberos usa tickets, existen dos tipos de ticktes:

TGT : (Ticket Granting Ticket) es el ticket que se presenta al KDC para solicitar los ticket TGS o nuevos ticket TGT. Se cifra con la clave del KDC.

TGS : (Ticket Granting Service) es el ticket que se presenta ante un servicio para poder acceder a sus recursos (una intranet por ejemplo). Se cifra con la clave del servicio correspondiente.

Estos tickets llevan unas claves de cifrado para evitar ser manipulados, las claves usadas para cifrar son:

  1. KDC o clave krbtgt > hash NTLM de la cuenta krbtgt.
  2. Clave de usuario > hash NTLM del usuario.
  3. Clave de servicio > hash NTLM del propietario del servicio, que puede ser una cuenta de usuario o equipo.
  4. Clave de sesión que se negocia entre el usuario y KDC.
  5. Clave de sesión de servicio a utilizar entre usuario y servicio.

Para que Kerberos pueda crear tickets y emitirlos a los usuarios se produce una comunicación entre estos y el KDC, intercambian una serie de mensajes para autenticar el usuario, solicitar tickets, etc…

Mensajes: 

  • KRB_AS_REQ : se utiliza para solicitar el TGT al KDC.
  • KRB_AS_REP : se utiliza para entregar el TGT por el KDC.
  • KRB_TGS_REQ : se utiliza para solicitar el TGS al KDC, utilizando el TGT.
  • KRB_TGS_REP : se utiliza para entregar el TGS por el KDC.
  • KRB_AP_REQ : se utiliza para autenticar a un usuario contra un servicio utilizando el TGS.
  • KRB_AP_REP : (Opcional) Utilizado por el servicio para identificarse contra el usuario.
  • KRB_ERROR : Mensaje para comunicar las condiciones de error.

 

En una auditoría de seguridad o un ejercicio de redteam dentro de una red windows el objetivo principal es el controlador de dominio, y Kerberos es una de las cosas que hay que atacar para conseguir credenciales de usuario.

 

Esto son los ataques mas conocidos a Kerberos:

  • Overpass The Hash o Pass The Key (PTK) :  Si un atacante consigue hacerse con hash de usuario puede hacerse pasar por este mismo frente al KDC y obtener los permisos y privilegios del usuario suplantado.
  • Pass The Ticket (PTT) : Un atacante que este en la red podría interceptar un ticket y usarlo para suplantar al usuario, pero el atacante debe de tener la clave de sesión del usuario, de lo contrario no podría usar el ticket.
  • (Golden Ticket) : Para cifrar los tickets TGT se usa la clave del servicio KDC, si un atacante consigue el hash NTLM de la cuenta krbtgt podrá construir un ticket TGT valido y con privilegios personalizados, además si se cambiara la contraseña del usuario krbtgt, el ticket seguiría siendo valido hasta que caduque.
  • Kerberoastin y ASREPRoast : Estos dos son ataques que intentan descifrar las contraseñas fuera de línea haciendo fuerza bruta.