Kerberos

Kerberos es un protocolo de autenticación, pero no de autorización. Esto significa que su función es verificar la identidad de un usuario mediante una contraseña conocida solo por él, sin definir a qué recursos o servicios puede acceder.
En entornos Active Directory, Kerberos juega un papel clave al proporcionar información sobre los privilegios de los usuarios autenticados. Sin embargo, la responsabilidad de verificar si estos privilegios son suficientes para acceder a determinados recursos recae en los propios servicios.
El protocolo Kerberos opera a través de los puertos UDP/88
y TCP/88
, los cuales deben estar a la escucha en el Key Distribution Center (KDC)
para garantizar el correcto funcionamiento del sistema de autenticación.
Kerberos involucra varios componentes encargados de gestionar la autenticación de los usuarios. Los principales son:
- Cliente o usuario: La entidad que desea acceder a un servicio.
- Application Server (AP): El servidor donde se encuentra el servicio al que el usuario quiere acceder.
- Key Distribution Center (KDC): Servicio central de Kerberos responsable de distribuir tickets a los clientes. Se ejecuta en el Controlador de Dominio (DC) e incluye:
- Authentication Service (AS): Emite los Ticket Granting Tickets (TGTs), que permiten solicitar acceso a servicios sin necesidad de volver a introducir credenciales.
Para garantizar la seguridad, Kerberos cifra y firma varias estructuras, como los tickets, evitando que sean manipuladas por terceros. En Active Directory, se manejan las siguientes claves de cifrado:
- Clave del KDC (krbtgt): Derivada del hash NTLM de la cuenta krbtgt.
- Clave de usuario: Derivada del hash NTLM del propio usuario.
- Clave de servicio: Basada en el hash NTLM del propietario del servicio, que puede ser una cuenta de usuario o del servidor.
- Clave de sesión: Generada dinámicamente entre el cliente y el KDC para asegurar la comunicación.
- Clave de sesión de servicio: Establecida entre el cliente y el AP para proteger la comunicación con el servicio.
Tickets
Kerberos utiliza tickets, estructuras que permiten a los usuarios autenticados realizar acciones dentro del dominio de Kerberos sin necesidad de volver a introducir credenciales. Existen dos tipos principales:
- Ticket Granting Ticket (TGT): Se presenta ante el KDC para solicitar otros tickets de servicio (TGS). Está cifrado con la clave del KDC.
- Ticket Granting Service (TGS): Se presenta ante un servicio para obtener acceso a sus recursos. Está cifrado con la clave del servicio correspondiente.
PAC
El Privilege Attribute Certificate (PAC) es una estructura incluida en la mayoría de los tickets, que contiene los privilegios del usuario. Está firmada con la clave del KDC, lo que garantiza su integridad.
Si bien los servicios pueden verificar el PAC comunicándose con el KDC, esto no es una práctica común. En cualquier caso, esta verificación solo consiste en comprobar la firma del PAC, sin validar si los privilegios del usuario son correctos.
Además, un cliente puede evitar que el PAC se incluya en su ticket especificándolo en el campo KERB-PA-PAC-REQUEST
de la solicitud.
Mensajes
Kerberos permite la comunicación entre sus agentes mediante distintos tipos de mensajes, entre los más relevantes se encuentran:
- KRB_AS_REQ: Enviado por el usuario para solicitar un TGT al KDC.
- KRB_AS_REP: Respuesta del KDC, que entrega el TGT al usuario.
- KRB_TGS_REQ: Enviado por el usuario para solicitar un TGS al KDC, utilizando su TGT.
- KRB_TGS_REP: Respuesta del KDC, que envía el TGS solicitado al usuario.
- KRB_AP_REQ: (Opcional) Utilizado por un servicio para autenticarse frente al usuario.
- KRB_ERROR: Usado por los distintos agentes para notificar errores en la comunicación.
Adicionalmente, aunque no forma parte del protocolo Kerberos sino de NRPC, el Application Server (AP) puede utilizar el mensaje KERB_VERIFY_PAC_REQUEST
para enviar la firma del PAC al KDC y verificar su validez.
A continuación se muestra un resumen de los mensajes siguiendo la secuencia de autenticación.