Kerberos es un protocolo de autenficación de red basado en tickets para permitir el acceso a servicios de forma segura. El nombre Kerberos procede de una criatura mitológica, el perro de Hades, un animal de tres cabezas que guardaba la puerta de Hades del Inframundo griego, asegurando que los vivos no pudieran entrar y los muertos no pudieran salir. Esto resulta ilustrativo, ya que en el proceso de autenficación Kerberos intervienen fundamentalmente tres componentes principales que podríamos asociar a las tres cabezas del guardian:
- Key Distribution Center (KDC)
- Cliente
- Servicio (al que se quiere Acceder).
El KDC es el núcleo de Autentificación y cuenta con dos agentes: Authentication Service (AS) y Ticket Granting Service (TGS). El Cliente suele ser el usuario que intenta a acceder al Servicio u otro servicio que actua como Cliente. Y el Servicio suele ser una aplicación o servicio al que se desea tener acceso.
En el uso de Kerberos tienen una importante relevancia los llamados Service Principal Names (SPNs). Un SPN es un identificador único que los clientes usan para solicitar los Tickets de acceso a los servicios y/o aplicaciones. Los SPNs suelen estar asociados a Servicios, Applications pools, etc. El KDC aloja una base de datos de SPNs y cuentas asociadas, y es a traves de ella como se identifica la Secrect Key con la que se encriptarán los Tickets requeridos para enviarselos posteriormente al Servicio al que desea acceder. Logicamente, si el SPN no existe en la base de datos del KDC no se podrán emitir Ticket para ese SPN, por mucho que lo soliciten los clientes. Por lo tanto, estos SPNs serán necesarios para habilitar la Autentificación Kerberos en las Aplicaciones/Servicios. Como veremos más adelante estos SPNs pueden añadirse al KDC.
La forma genérica que tiene un SPN es la siguiente:
<ServiceClass>/<Host>[:<Port>][/<Servicename>]
Algunos ejemplos de SPNs serían:
HTTP/wbiblioteca
HTTP/wbiblioteca.caracol.es
HOST/SES007700-110
MSSQLSvc/CES007700-030
Estos SPNs se vinculan a Cuentas de Usuario o de Equipo, y a partir de los password de esas cuentas se obtienen las Secret Keys asociadas que luego se usarán para encriptar los Tickets.
A continuación se muestra un diagrama que refleja a alto nivel como se lleva a cabo el proceso de autentificación para el acceso a un servicio mediante protocolo Kerberos:
Para facilitar la comprensión del proceso se han omitido algunos detalles de bajo nivel en el diagrama. Se trataría de otros mensajes y encriptaciones adicionales que intervienen en el proceso, pero que no son relevantes para comprender su funcionamiento. Siguiendo el diagrama, podemos ver que cuando un Cliente va a solicitar al TGS un Ticket para acceder a la Aplicación/Servicio que tiene habilitada autentificación Kerberos, tiene que presentar su Ticket TGT e indicar para que SPN solicita el Ticket, a continuación el TGS generará un Ticket donde irá información para generar un token del cliente que lo solicita, indicando SIDs de grupos de seguridad a los que pertenece y demás propiedades, y lo encriptará con la Secrect Key de la cuenta asociada al SPN para el que se solicita el Ticket.
Cuando el Cliente presente el Ticket obtenido a la Aplicacion/servicio (paso 5 del diagrama), ésta tendrá que desencriptarlo con su Secrect Key y generar el token del cliente que quiere acceder de cara a compararlo con la lista ACL (Access Control List) del servicio en cuestión. Si es una Aplicación/Servicio Windows y el SPN está vinculado con la cuenta del servicio o aplicación al que se intenta acceder, ya contará con la Secrect Key y podrá desencriptar el Ticket sin mayores problemas.
Si la Aplicación es No Windows (Linux, Unix, etc), y está usando la autentificación Kerberos, entonces deberá configurarse previamente la Secret Key que será capaz de desencriptar los Tickets que le van a presentar los Clientes cuando traten de acceder a ella. Para llevar a cabo esta configuración deberá contarse con un fichero .keytab (se generan con comando ktpass) que contendrá la Secrect Key encriptada con el algoritmo de encriptación adecuado (RC4-HMAC-NT, AES256-SHA1, etc) y este fichero deberá configurarse como Secrect Key de Kerberos en la Aplicación No Windows correspondiente.
Dejo links interesantes:
http://pst.libre.lu/...ec-idm-art.html
http://blogs.msdn.co...-exchanges.aspx
http://redmondmag.co...s-protocol.aspx
http://www.giac.org/...p-papers/47.pdf
http://es.wikipedia.org/wiki/Kerberos
http://www.zeroshell...eros-operation/
http://www.rfc-edito...rfc4120.txt.pdf
http://sqlmag.com/sq...delegation-ssrs