Indice
1. Introducción
2. ¿Qué hace Kerberos?
3. ¿Porqué toda esta información en el ticket?
4. Autenticación mutua
5. Administración
6. Bibliografía
Internet es un lugar inseguro. Muchos de los protocolos utilizados actualmente carecen de seguridad. Además, existen crackers que con frecuencia interceptan contraseñas, razón por la cual aplicaciones que mandan una contraseña no encriptada en la red son extremadamente vulnerables. Peor aun, algunas aplicaciones cliente/servidor asumen que el cliente proveerá su identificación correctamente, y otras confían en que el cliente restringirá sus actividades a aquellas que están autorizadas sin ningún otro refuerzo del servidor.
Algunos sitios utilizan firewalls para solucionar los problemas de seguridad en redes. Pero los firewalls asumen que las personas que desean hacer daño están del lado de afuera, cuando en realidad esta aseveración suele ser falsa.
Kerberos es un personaje de la mitología griega que por ser quien cuidaba las puertas del infierno, representa seguridad. Se podría decir que como servicio de autenticación, ahora cuida las puertas de la red, impidiendo que entren personas indeseadas.
Kerberos es un servicio de autenticación desarrollado en MIT (Massachusetts Institute of Technology) y diseñado por Miller y Neuman en el contexto del Proyecto Athena en 1987. Esta basado en el protocolo de distribución de claves presentado por Needham y Schroeder en 1978.
Motivación
En una red con usuarios que solicitan servicios desde muchas terminales, hay tres enfoques básicos que se pueden utilizar para dar control de acceso:
En un ambiente cerrado, donde las máquinas tienen un control estricto, se podría utilizar el primer enfoque. En ambientes más abiertos, se podría usar la segunda opción. En ambientes como el de Athena, en el cual cada usuario debe probar su identidad a cada servicio que desee utilizar el tercer enfoque es el más adecuado.
El entorno tendrá ciertos requerimientos sobre el sistema de identificación:
1) Seguridad. Un atacante no debe encontrar el punto débil en la autenticación.
Alguien que observa la red no debe obtener la información necesaria para hacerse pasar por otro usuario.
2) Confiabilidad. El acceso a muchos servicios dependerá del servicio de autenticación y si éste no es confiable, el sistema de servicios tampoco lo será.
3) Transparencia. El usuario no debe percatarse de que se está autentificando.
4) Escalabilidad. El entorno no debe colapsar si aumenta el número de aplicaciones kerberizadas.
En una red de usuarios en la que se requieren servicios de distintas computadoras, si la red tiene miles de usuarios y decenas de servidores, no es deseable que cada servidor guarde las contraseñas de todos los usuarios. En ese caso, habría tantos puntos de ataque como servidores. Además, por ejemplo si un usuario quisiera cambiar su contraseña, debería contactar a todos los servidores y notificarles del cambio. Es para evitar estos problemas que surge la idea de tener un servicio de autenticación.
Kerberos es el resultado de satisfacer estos requerimientos. La seguridad de Kerberos descansa en la seguridad de varios servidores de autenticación, pero no en el sistema que se "loguea" o en los servidores finales que se utilicen.
Cada usuario tendrá una clave y cada servidor tendrá una clave, y Kerberos tiene una base de datos que las contendrá a todas. En el caso de ser de un usuario, su clave será derivada de su contraseña y estará encriptada, mientras que en el caso del servidor, la clave se generará aleatoriamente. Los servicios de red que requieren autenticación y los usuarios que requieran estos servicios, se deben registrar con Kerberos. Las claves privadas se negocian cuando se registran.
Como Kerberos sabe todas las claves privadas, puede crear mensajes que convenzan a un servidor de que un usuario es realmente quien dice ser y viceversa. La otra función de Kerberos es generar las llamadas claves de sesión, que serán compartidas entre un cliente y un servidor, y nadie más. La clave de sesión podrá ser usada para encriptar mensajes que serán intercambiados entre ambas partes. El almacenamiento de la base de datos y la generación de claves, se lleva a cabo en un servidor que se denomina Servidor de Autenticación (AS por las siglas en inglés de Authentication Server).
Kerberos provee tres niveles distintos de protección. El programador de la aplicación determinará cual es apropiado, de acuerdo a los requerimientos de la aplicación.
Autenticación:
Prueba que el usuario es quien dice ser. Puede ser que la autenticidad se establezca al inicio de la conexión de red y luego se asuma que los siguientes mensajes de una dirección de red determinada se originan desde la parte autenticada.
Integridad de datos:
Asegura que los datos no se modifican en tránsito. Se requiere autenticación de cada mensaje, sin importar el contenido del mismo. Éstos se denominan mensajes seguros.
Privacidad de datos:
Asegura que los datos no son leídos en tránsito. En este caso no sólo se autentica cada mensaje sino que también se encripta. Éstos son mensajes privados.
Especificación técnica
Hay tres fases básicas para el procedimiento de autenticación:
Hay dos tipos de credenciales que se utilizan en el modelo de autenticación de Kerberos: Tickets y Autenticadores. Aunque ambos se basan en encriptado de clave privada, se encriptan con claves diferentes. El ticket se usa para pasarle al servidor final la identidad de la persona para la que fue emitido. El autenticador es una prueba de que el ticket fue creado para el usuario y no fue robado; contiene información que al ser comparada contra la que está en el ticket prueba que el usuario que lo presenta es el mismo al que le fue emitido.
Notación:
c = cliente
s = servidor
addr = dirección de red del cliente
Kx = Clave privada de x
Kx,y = Clave de sesión de x e y
{info}Kx = Información encriptada con la clave privada de x
Tx,y = Ticket de x para usar y
Ax = Autenticador para x
Conexión inicial
Cuando el usuario entra a una estación de trabajo lo único que puede probar su identidad es su contraseña. El intercambio inicial con el AS está diseñado para minimizar la posibilidad de comprometer la contraseña, impidiendo a su vez que el usuario se autentique sin conocerla. Para el usuario, el proceso de "loguearse" al sistema será igual que el de "loguearse" a una red clásica. Sin embargo lo que ocurre por detrás es muy diferente.
Al usuario se le pide el nombre de usuario. El nombre del usuario tiene tres componentes básicos:
|
Nombre primario |
- |
Nombre del usuario |
|
Instancia |
- |
Se usa para distinguir entre variantes del nombre primario o bien para determinar privilegios, como ser "root" o admin. |
|
Dominio (Realm) |
- |
Es el nombre de una entidad administrativa que mantiene datos de autenticación. |
Una vez obtenido, se envía una solicitud al AS que consiste de el nombre de usuario y el nombre de un servicio especial
llamado ticket-granting service, el cual se encuentra en un servidor que se llamará ticket-granting server (TGS). Este es el servicio que permitirá al cliente autenticarse con los servicios de red.
El AS chequea la información sobre el cliente. Si sabe quién es, genera una clave de sesión aleatoria que se usará luego entre el cliente y el TGS. Luego crea un ticket para el TGS que se llama ticket-granting ticket (TGT) y que deberá ser presentado al TGS cada vez que se solicite un servicio.
TGT ={Tc,tgs}Ktgs={c,tgs,addr,timestamp,lifetime,Kc,tgs}Ktgs
El TGT, al igual que cualquier otro ticket tiene 6 componentes:
Esta información se encripta con la clave privada del TGS, que sólo conocen el TGS y el AS. El AS envía el ticket al cliente, junto con una copia de la clave de sesión. La respuesta que recibe éste, está encriptada con la clave privada del cliente, que se deriva de la contraseña del usuario y que conocen sólo el AS y el cliente.
Una vez que la respuesta ha sido recibida por el cliente, se le pide la contraseña al usuario. La contraseña se convierte a una clave DES y se usa para desencriptar la respuesta del AS. El ticket y la clave de sesión se guardan para usar en el futuro, mientras que la contraseña del usuario y la clave DES se borran de la memoria. Así, si el cliente posee el ticket es porque el usuario conocía la contraseña correcta y por tanto debe ser quien dice ser.
3. ¿Porqué toda esta información en el ticket?
Un ticket sirve para un solo servidor y para un solo cliente pero una vez emitido, puede ser utilizado muchas veces por el cliente para tener acceso a ese servidor, hasta que el ticket expira. Como el ticket está encriptado con la clave del servidor no se pierde seguridad al permitir que el usuario le pase el ticket al servidor, ya que no podrá modificarlo.
Servicios
Como un ticket sirve para un solo servidor, es necesario obtener un nuevo ticket para cada servicio que el usuario quiera utilizar. Los tickets para los distintos servidores se pueden obtener a través del TGS.
La idea del TGS surge para evitar que el usuario deba entrar su contraseña más de una vez. Aunque pueden convivir en la misma máquina, el TGS es lógicamente distinto del AS. A veces se refiere a ambos como KDC ("Key Distribution Center").
Cuando un programa requiere un ticket que no ha sido solicitado aún, envía una solicitud al TGS. La solicitud contiene el nombre del servidor para el que se solicita el ticket, el TGT y un autenticador. A diferencia del ticket, el autenticador sólo se puede utilizar una vez. De lo contrario, sería posible robar el ticket y el autenticador juntos y hacer el "replay" de todas formas. Se debe generar uno nuevo cada vez que el cliente quiere utilizar un servicio, pero esto no presenta un problema porque como el cliente tiene toda la información necesaria, puede construir el autenticador por sí mismo. Un autenticador contiene el nombre del cliente, la dirección IP de la estación de trabajo, y el tiempo actual, y está encriptado con la clave de sesión que es parte del ticket; en este caso, la que comparten el cliente y el TGS.
El TGS chequea el autenticador y el TGT. Si son válidos genera una nueva clave de sesión aleatoria a ser usada entre el cliente y el nuevo servidor. Luego construye un ticket para el nuevo servidor con el nombre del cliente, el nombre del servidor, el tiempo actual, la dirección IP del cliente y la nueva clave de sesión. El tiempo de vida del nuevo ticket será el mínimo entre lo que queda de vida del TGT y el tiempo de vida por defecto del servicio.
Luego, el TGS envía el ticket junto con la clave de sesión nuevamente al cliente. Esta vez, sin embargo, la respuesta está encriptada con la clave de sesión que había en el TGT. De este modo, no hay necesidad para el usuario de volver a entrar su contraseña una vez más.
Solicitud de Servicios
Cuando el cliente tiene el ticket para el servidor deseado lo envía al servidor junto con el autenticador:
Una vez que el servidor recibió el ticket y el autenticador, desencripta el ticket con su clave privada. Si éste no expiró usa la clave de sesión que se encuentra dentro para desencriptar el autenticador y compara la información del ticket con la del autenticador. Si todo está bien, permite el acceso porque después de este intercambio, el servidor está seguro que de acuerdo a Kerberos, el usuario es quien dice ser.
Se asume que los relojes están sincronizados. Si el tiempo de la solicitud está muy lejos en el futuro o en el pasado, el servidor considera que la solicitud es un intento de hacer un "replay" de una solicitud anterior. Además, el servidor mantiene un registro de todas las solicitudes pasadas con sellos de tiempo aún válidos y si recibe una solicitud con el mismo ticket y el mismo sello de tiempo que una anterior, la descarta.
Finalmente, el cliente puede querer que el servidor pruebe su identidad también. Entonces, el servidor le suma uno al sello de tiempo que el cliente envió en el autenticador, encripta el resultado con la clave de sesión y envía el resultado de vuelta al cliente.
{timestamp +1}Kc,s
Esto demuestra que el servidor pudo leer el sello de tiempo del autenticador y para ello debió obtener la clave de sesión que se encontraba en el ticket encriptado con su clave privada. Entonces el cliente se cerciora de que el servidor es auténtico. Además, el cliente y el servidor comparten un secreto que nadie más sabe, y pueden asumir que un mensaje relativamente reciente encriptado con esa clave fue originado por el otro.
A los ojos del usuario
Para el usuario la presencia de Kerberos es casi imperceptible. El TGT se obtiene como parte del proceso de "login". Y los tickets son destruidos automáticamente cuando el usuario termina la sesión. El usuario notará la presencia de Kerberos si su sesión dura más de 8 horas. En ese caso, si intenta acceder a algún servicio que utilice autenticación por medio de Kerberos el intento fallará porque el ticket habrá expirado.
Administración General
Para el administrador del sistema, la presencia de Kerberos implica cierto mantenimiento.
El administrador debe inicializar la base de datos de Kerberos al instalarlo. Además en caso de tener la base de datos replicada (con slaves), también será necesario administrarlas para que se mantengan consistentes. Esto implica tener que sincronizar las bases de datos replicadas con la base de datos principal cada cierto tiempo.
Se debe tener especial cuidado con la administración de las máquinas que tienen la base de datos Kerberos, pues el sistema podría volverse inseguro si alguien obtiene el control de alguna de estas máquinas.
El administrador también debe asegurarse de que la fecha y hora de todas máquinas del sistema estén medianamente sincronizadas.
Cuando una aplicación Kerberos es agregada al sistema, el administrador debe realizar varias operaciones para dejarla funcional. El servidor kerberizado debe ser registrado en la base de datos, y se le debe asignar una clave privada. Luego algunos datos deben ser transferidos al nuevo servidor.
Además se aconseja tener la base de datos principal resguardada, en caso de que el disco en el que reside falle.
Administración entre sistemas Kerberos
Cada sistema Kerberos contiene como parte de su nombre el realm (dominio) asociado. Esto permite que distintos sistemas Kerberos se comuniquen entre sí para brindarse servicios.
Cuando un usuario se autentica con un sistema Kerberos, lo hace a un realm específico. Las aplicaciones kerberizadas generalmente reconocen credenciales de un realm particular; pero los usuarios pueden obtener credenciales de otros realms distintos del realm local. Para ello deben estar autenticados con el sistema Kerberos local, y los dos sistemas Kerberos (el local y el remoto) deben ponerse de acuerdo para brindar las credenciales necesarias en el sistema Kerberos remoto.
Los administradores de cada par de sistemas Kerberos que desean cooperar deben ponerse de acuerdo en la clave privada a utilizar para que los sistemas se comuniquen entre ellos.
Kerberos soporta la transitividad de la confianza; la idea es que si un sistema Kerberos confía en un segundo, y ese segundo confía en un tercer sistema Kerberos, entonces hay automáticamente una relación de confianza entre el primer y el tercer realm. La transitividad de la confianza asegura que los sistemas Kerberos sólo necesitan compartir una contraseña con los sistemas Kerberos de los realms inmediatamente encima y debajo de ellos en la jerarquía de realms (Kerberos se encarga del resto).
Windows 2000
En Microsoft NT 4.0, el protocolo primario para la seguridad es NTLM (Windows NT LAN Manager). Para Windows 2000, Microsoft eligió un nuevo protocolo de seguridad: Kerberos, por tener algunas ventajas como ser un estándar, más eficiente en el uso de la red y permitir autenticación mutua.
Para permitir interoperabilidad con otras implementaciones, Kerberos en Windows 2000 soporta DES (Data Encription Standard), pero por defecto usa como algoritmo para encriptación RC4 (fue elegido porque es más rápido y seguro que DES). En Estados Unidos usa claves de 128-bits, mientras que en las versiones internacionales soporta claves de solamente 56-bits.
El protocolo de tickets de Kerberos fue adoptado y extendido por Microsoft, agregando un certificado de privilegios a los tickets (relacionado con el identificador único de NT, así como la lista de los grupos a los que el usuario pertenece).
Windows 2000 lo renovará automáticamente mientras el usuario permanezca "logueado". La primera vez que un usuario pide un ticket a Kerberos es cuando se "loguea" en alguna cuenta en el dominio de Windows 2000.
El KDC rechaza cualquier autenticador cuya timestamp sea demasiado vieja (por defecto 5 minutos máximo). Esto implica que los relojes de las máquinas que usen Kerberos deben estar sincronizados, por eso Windows 2000 usa el protocolo SNTP (Simple Network Time Protocol) de la IETF para sincronización.
Jennifer G. Steiner, Clifford Neuman, Jeffrey I. Schiller.
Kerberos: An Authentication Service for Open Network Systems
ftp://athena-dist.mit.edu/pub/Kerberos/doc/usenix.txt (10 Mayo 2001, 15:36)
Bill Bryant.
Designing an Authentication System: a Dialogue in Four Scenes http://web.mit.edu/Kerberos/www/dialogue.html (10 Mayo 2001, 21:52)
Brian Tung.
The Moron’s Guide to Kerberos
http://www.isi.edu/gost/brian/security/Kerberos.html (11 Mayo 2001, 10:19)
Steven M. Bellovin, Michael Merritt.
Limitations of the Kerberos Authentication System
ftp://research.att.com/dist/internet_security/kerblimit.usenix.ps (10 Mayo 2001 15:40)
Roger M. Needham, Michael D. Schroeder.
Using Encryption for Authentication in Large Networks of Computers
Communications of the ACM 21(12) pp. 993-999 (Diciembre 1978)
John Kohl, Clifford Neuman.
RFC 1510
http://rfc.net/rfc1510.html (10 Mayo 2001, 22:00)
FAQ about Kerberos
http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html (10 Mayo 2001, 22:03)
Kerberos explained
http://www.microsoft.com/TechNet/win2000/kerberos.asp?a=printable (10 Mayo 2001, 22:07)
Exploring Kerberos, the protocol for distributed security in Windows 2000 http://www.microsoft.com/msj/0899/kerberos/kerberos.htm (10 Mayo 2001, 22:10)
Trabajo enviado por:
Tali Kimelman
tali[arroba]internet.com.uy
Estudiante de 5º año
Facultad de Ingeniería
Universidad de la República Oriental del Uruguay
Trabajos relacionados
Ver mas trabajos de Redes |
|
Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo en formato DOC desde el menú superior.