jueves, 25 de junio de 2020

Kerberos: El perro de tres cabezas

Un entorno muy común que nos encontramos durante la realización de pentest internos es encontrarnos un Directorio Activo (DA). Es un servicio de directorio para su uso en un entorno de Windows Server. Se trata de una estructura de base de datos distribuida y jerárquica que comparte información de infraestructura para localizar, proteger, administrar y organizar los recursos del equipo y de la red.

Active Directory (AD) o Directorio Activo (DA) utiliza un protocolo llamado Kerberos para la autenticación de los clientes en la red.


¿Qué es Kerberos?

Kerberos es un protocolo de autenticación diseñado para aplicaciones de estilo cliente/servidor diseñado por el MIT (Massachusetts Institue of Technology). En la gran mayoría de sistemas y servicios las contraseñas son utilizadas para demostrar la identidad del usuario. Pero ¡qué ocurre cuando el medio donde se transmite esas contraseñas no es un medio seguro?


Aquí aparece la idea de Kerberos, es un protocolo diseñado para aportarnos esa capa de seguridad y seguir manteniendo la autenticación de los usuarios frente a cualquier sistema en cualquier momento.

Agentes implicados

En la metodología griega, Kerberos es un perro de tres cabezas. En este blog no vamos a hablar del animal, pero sí del protocolo que también tiene tres cabezas o tres agentes.

Agentes implicados en el protocolo Kerberos
  • El Usuario es el que solicita acceso al servicio.
  • El Key Distribution Server (KDC) ubicado en el Domain Controller (DC), consta de dos servidores, el Authentication Server (AS) encargado de comprobar la identidad del usuario y el Ticket Granting Server (TGS) encargado de expedir los tickets.
  • El Servicio expuesto, el cual el usuario ha solicitado el acceso.

Message Exchange

Kerberos utiliza los puertos 88/udp y 88/tcp para el intercambio de mensajes entre los tres agentes. El intercambio de mensajes consta de 5 fases donde el usuario quedará autenticado contra el servicio sin transmitir la contraseña por el medio inseguro, utilizando un tercer agente (KDC).

  1. KRB_AS_REQ: El cliente manda una petición para autenticarse contra el AS, afirmando la identidad del usuario (UserID) y solicitando acceso a un servicio. Esta petición está parcialmente cifrada. El usuario en lugar de mandar su contraseña en una red insegura, utiliza su hash NTLM para cifrar una parte del mensaje, de esta forma está utilizando la contraseña pero nunca viajará por la red.
  2. KRB_AS_REP (TGT): Cuando el AS recibe la petición del usuario, decrypta el mensaje con la contraseña asociada al UserID solicitado. Se utiliza la contraseña del usuario como clave compartida entre el AS y el Cliente. Una vez el usuario es verificado el (AS) envía el Ticket Granting Ticket (TGT) cifrado con otra clave compartida con el TGS.

  3. KRB_TGS_REQ(TGT): El cliente manda el ticket (TGT) al TGS, pidiendo acceso a un servicio. El TGS descifra el ticket con la clave compartida entre el TGS y el AS.

  4. KRB_TGS_REP(TGS): El TGS envía un Ticket Granting Service (TGS) que permite acceder al usuario al recurso, el cual va cifrado con una clave compartida entre el TGS y el Servicio.

  5. KRB_AP_REQ(TGS): El usuario envía el TGS recibido por el KDC al servicio, comprueba el correcto cifrado con la clave compartida entre el TGS y el Servicio.

  6. KRB_AP_REP(Opcional): El Servicio se autentica al usuario, este último paso no es de uso obligatorio.
Una vez realizado el proceso, el usuario tendrá acceso al recurso durante un tiempo determinado especificado en el TGS sin la necesidad de haber transmitido su contraseña por el medio inseguro como sería la red al Servicio.


Tener el conocimiento del funcionamiento de los protocolos y aplicaciones, ayudan a entender a un auditor, qué tipos de ataque se pueden realizar y que pueden llegar a conseguir. Próximamente se explicarán los ataques a realizar al perro de tres cabezas también conocido como Kerberos.

Referencias


Autor: Mario Valiente
Dpto. Auditoría