Kerberos /kɛərbərəs/ es un protocolo de autenticación de red que ofrece un mecanismo para la autenticación mutua de un cliente y un servidor antes de establecer una conexión entre ellos. Kerberos realiza la autenticación como un servicio de autenticación de terceros de confianza mediante un secreto criptográfico compartido, siempre que un atacante pueda interceptar, modificar y utilizar los paquetes que viajan a través de una red insegura. Kerberos se basa en criptografía de claves simétricas y requiere un centro de distribución de claves. Las extensiones de Kerberos pueden proporcionar el uso de criptografía de clave pública en ciertos pasos de autenticación.
La primera versión del protocolo Kerberos se creó en 1983 en el Instituto Tecnológico de Massachusetts (MIT) como parte del proyecto Athena.. El objetivo principal del proyecto era desarrollar un plan para la introducción de computadoras en el proceso educativo del MIT y software relacionado. El proyecto fue educativo, pero el resultado final incluyó varios productos de software que todavía se usan ampliamente en la actualidad (como el sistema X Window ). Este protocolo está disponible públicamente desde la versión 4.
Describamos el concepto básico del protocolo Kerberos. Supongamos que hay dos personas que conocen el mismo secreto, conocido solo por estos dos. Entonces cualquiera de ellos puede estar seguro de que está tratando con su pareja. Para ello, solo tiene que comprobar si su interlocutor conoce el secreto compartido.
Ejemplo.
Artículo 1. Acuerdo sobre la contraseña. Deja que Alice se comunique con Bob. En este caso, Bob usa la información solo cuando está seguro de que Alice la recibió. Para evitar la falsificación, acordaron entre ellos una contraseña que solo ellos dos conocen. Al recibir un mensaje, Bob puede deducir de la carta si su interlocutor conoce la contraseña. Si el interlocutor de Bob conoce la contraseña, se puede argumentar que su interlocutor es Alice.
Ítem 2. La ocurrencia de un problema de transmisión de contraseña. Ahora determinemos cómo mostrarle a Alice y Bob el conocimiento de la contraseña. Por supuesto, simplemente puede incluir la contraseña en el cuerpo del correo electrónico. Por ejemplo: “Hola Bob. Nuestra contraseña. Si Bob y Alice estuvieran seguros de que nadie lee sus cartas, entonces se podría usar este método. Pero, por desgracia, el correo se transmite a través de una red en la que trabajan otros usuarios, entre los que se encuentra una curiosa Eva. Eve se impuso la tarea de encontrar la contraseña, conocida solo por Bob y Alice, con la que intercambian mensajes entre ellos. Ahora está bastante claro que no puede especificar la contraseña simplemente en el cuerpo de la carta. Esto significa que no puede hablar abiertamente sobre la contraseña, pero al mismo tiempo debe informarle al interlocutor que conoce la contraseña.
Punto 3. Solucionar el problema de la transmisión de contraseñas. El protocolo Kerberos resuelve el problema de la transmisión de contraseñas mediante criptografía de clave secreta. En lugar de decirse una contraseña, los participantes en una sesión de comunicación intercambian una clave criptográfica, cuyo conocimiento confirma la identidad del interlocutor. Pero para que tal tecnología sea posible, es necesario que la clave compartida sea simétrica , es decir, la clave debe proporcionar tanto el cifrado como el descifrado del mensaje.
Punto 4. El problema del intercambio de contraseñas. Hay un problema importante cuando se utilizan protocolos simples como el descrito anteriormente. En el caso de Bob y Alice, debe comprender cómo acuerdan una clave secreta para comunicarse entre sí. Por supuesto, las personas pueden reunirse y ponerse de acuerdo, pero las máquinas también participan en las negociaciones de la red. Si Alice se entiende como un programa cliente y Bob como un servicio en un servidor de red, entonces no pueden encontrarse de ninguna manera. El problema es que cuando un cliente necesita enviar un mensaje a varios servidores, en este caso tendrá que adquirir una clave separada para cada servidor. Y luego el servidor necesitará tantas claves secretas como clientes tenga. La necesidad de almacenar tantas claves en cada ordenador supone un riesgo para todo el sistema de seguridad.
Punto 5. Solucionar el problema del intercambio de contraseñas. Para resolver estos problemas, el proyecto Athena desarrolló un protocolo especial: Kerberos. Por analogía con la mitología griega antigua, este protocolo recibió su nombre del perro de tres cabezas que protegía la salida del reino de Hades : Cerberus , o más precisamente, Cerberus. Las tres cabezas de Cerberus en el protocolo corresponden a tres participantes en la comunicación segura: un cliente, un servidor y un intermediario de confianza entre ellos. El papel de intermediario aquí lo desempeña el Centro de distribución de claves, KDC.
Un Centro de distribución de claves (KDC) es un servicio que se ejecuta en un servidor físicamente seguro. El Centro mantiene una base de datos con información sobre las cuentas de todos los clientes de la red. Junto con la información sobre cada suscriptor, la base de datos del centro de distribución de claves almacena una clave criptográfica conocida únicamente por este suscriptor y el servicio del centro. Esta clave se utiliza para conectar al cliente con el centro.
Cliente a servidor a través de KDC
Si el cliente quiere ponerse en contacto con el servidor, envía un mensaje al centro de distribución de claves. El Centro envía a cada participante de la sesión copias de la clave de sesión válida por un corto período de tiempo. El propósito de estas claves es autenticar al cliente y al servidor. Una copia de la clave de sesión enviada al servidor se cifra con la clave a largo plazo del servidor y se envía al cliente con la clave a largo plazo del cliente. Teóricamente, para realizar las funciones de un intermediario de confianza, basta con que un centro de distribución de claves envíe claves de sesión directamente a los suscriptores de seguridad. Sin embargo, es extremadamente difícil implementar tal esquema en la práctica. Por lo tanto, en la práctica, se utiliza un esquema de administración de contraseñas diferente, lo que hace que el protocolo Kerberos sea mucho más eficiente.
Entradas de sesión
En respuesta a una solicitud de un cliente que intenta conectarse al servidor, el servicio KDC envía ambas copias de la clave de sesión al cliente. El mensaje destinado al cliente se cifra con una clave a largo plazo compartida entre el cliente y el KDC, y la clave de sesión para el servidor, junto con la información sobre el cliente, se integra en un bloque de datos denominado ticket de sesión. A continuación, el ticket de sesión completo se cifra con una clave a largo plazo que solo conocen el servicio KDC y este servidor. A partir de ahí, toda la responsabilidad del procesamiento del ticket, que lleva la clave de sesión cifrada, recae en el cliente, que debe entregarlo al servidor. Al recibir la respuesta del KDC, el cliente extrae el ticket y su copia de la clave de sesión, que coloca en un almacenamiento seguro (no se encuentra en el disco, sino en la RAM ). Cuando necesita comunicarse con un servidor, el cliente le envía un mensaje que consiste en un ticket, aún encriptado con la clave a largo plazo del servidor, y su propio autenticador, encriptado con la clave de sesión. Esta credencial, combinada con el autenticador, constituye la credencial mediante la cual el servidor determina la "identidad" del cliente. El servidor, después de haber recibido la "tarjeta de identidad" del cliente, en primer lugar, utilizando su clave secreta, descifra el ticket de sesión y extrae la clave de sesión, que luego utiliza para descifrar el autenticador del cliente. Si todo va bien, se concluye que la identidad del cliente fue emitida por un intermediario de confianza, es decir, por el servicio KDC. El cliente puede requerir que el servidor realice la autenticación mutua. En este caso, el servidor, utilizando su copia de la clave de sesión, cifra la marca de tiempo del autenticador del cliente y la envía al cliente como su propio autenticador. Una ventaja de utilizar las credenciales de sesión es que el servidor no necesita almacenar claves de sesión para comunicarse con los clientes. Se almacenan en la "caché de credenciales" del cliente, que reenvía el ticket al servidor cada vez que quiere contactarlo. El servidor, por su parte, habiendo recibido el ticket del cliente, lo descifra y extrae la clave de sesión. Cuando ya no se necesita la clave, el servidor simplemente puede borrarla de su memoria. Este método tiene otra ventaja: el cliente no necesita ponerse en contacto con el KDC antes de cada sesión con un servidor específico. Las credenciales de sesión se pueden reutilizar. En caso de robo de los mismos, se fija la fecha de caducidad del ticket, que el KDC indica en la propia estructura de datos. Este tiempo está determinado por la política de Kerberos específica del dominio. Por lo general, el período de validez de los boletos no supera las ocho horas, es decir, la duración estándar de una sesión en la red. Cuando un usuario cierra sesión, la memoria caché de credenciales se restablece y todas las credenciales de sesión, junto con las claves de sesión, se destruyen.
MIT desarrolló Kerberos para proteger los servicios de red proporcionados por el proyecto Athena. El protocolo lleva el nombre del personaje mitológico griego Kerberos (o Cerberus ), conocido en la mitología griega como el monstruoso perro guardián de tres cabezas Hades. Hay varias versiones del protocolo. Las primeras versiones de Kerberos (1 a 3) fueron creadas internamente por el MIT y se utilizaron con fines de prueba. Estas implementaciones contenían limitaciones significativas y solo eran útiles para explorar nuevas ideas e identificar problemas que pudieran surgir durante el desarrollo.
Steve Miller y Clifford Neuman , los principales diseñadores de la versión 4 de Kerberos (que usaba el algoritmo de cifrado DES con claves de 56 bits), publicaron esta versión en 1989, aunque todavía la estaban planeando principalmente en ese momento en el proyecto Athena.
Kerberos 4 se publicó por primera vez el 24 de enero de 1989 . Fue la primera versión distribuida fuera del MIT, preparada para que varios proveedores la incluyeran en sus sistemas operativos. Además, otros grandes proyectos de sistemas distribuidos (por ejemplo, Andrew File System ) utilizaron las ideas de Kerberos 4 para sus sistemas de autenticación.
Los cimientos de lo que se convertiría en Kerberos 4 se describieron en el documento técnico de Athena [1] y la versión final se consolidó en el código fuente de la implementación de referencia publicada por el MIT.
Sin embargo, debido a las restricciones del gobierno de EE. UU. sobre la exportación de software cifrado, Kerberos 4 no se pudo distribuir fuera de los Estados Unidos. Dado que Kerberos 4 usaba el algoritmo DES para el cifrado , las organizaciones fuera de los Estados Unidos no podían usar el software legalmente. En respuesta, el equipo de desarrollo del MIT creó una versión especial de Kerberos 4, excluyendo todo el código relacionado con el cifrado. Estas medidas permitieron eludir la restricción a las exportaciones.
Posteriormente, Errol Young de la Universidad Bond de Australia agregó su propia implementación de DES a esta versión. Se llamó "E-Bones" (abreviatura de "huesos encriptados" [2] ) y se distribuyó gratuitamente fuera de los Estados Unidos.
En 2006, se anunció la compatibilidad con Kerberos 4 [3] .
Para superar los problemas de seguridad de la versión anterior, John Kohl y Clifford Neuman desarrollaron la versión 5 del protocolo, que se publicó en 1993 en RFC 1510 . Con el tiempo, en 2005, el grupo de trabajo de IETF Kerberos comenzó a trabajar con la especificación. Los documentos que han publicado incluyen:
En junio de 2006, se introdujo el RFC 4556 que describía una extensión para la versión 5 denominada PKINIT (criptografía de clave pública para autenticación inicial en Kerberos ) . Este RFC describe cómo utilizar el cifrado asimétrico durante la fase de autenticación del cliente .
Al año siguiente (2007), el MIT formó el Consorcio Kerberos para promover un mayor desarrollo.
La distribución de la implementación de Kerberos se realiza bajo derechos de autor, de forma similar a los derechos de BSD.
Actualmente, muchos sistemas operativos admiten este protocolo, incluidos:
Kerberos 4 se basa en gran medida en el protocolo Needham-Schroeder , pero con dos cambios significativos.
Como resultado, el protocolo Kerberos 4 contiene dos componentes lógicos:
Por lo general, estos componentes se entregan como un solo programa que se ejecuta en un centro de distribución de claves (KDC: contiene una base de datos de inicios de sesión/contraseñas para usuarios y servicios que utilizan Kerberos).
El servidor de autenticación realiza una función: recibe una solicitud que contiene el nombre del cliente que solicita la autenticación y le devuelve un boleto encriptado para obtener un boleto (TGT). Luego, el usuario puede usar este boleto para solicitar boletos posteriores para otros servicios. En la mayoría de las implementaciones de Kerberos, la vida útil de TGT es de 8 a 10 horas. Después de eso, el cliente debe volver a solicitarlo al servidor de autenticación.
El primer mensaje enviado al centro de distribución de claves es una solicitud al servidor de autenticación, también conocido como AS_REQ. Este mensaje se envía en texto no cifrado y contiene la identidad del cliente, la marca de tiempo del cliente y el identificador del servidor de concesión de tickets (TGS).
Cuando el centro de distribución de claves recibe un mensaje AS_REQ, verifica que el cliente del que proviene la solicitud exista y que su marca de tiempo esté cerca de la hora local del centro (generalmente ± 5 minutos). Esta verificación no se realiza para protegerse contra las repeticiones (el mensaje se envía en texto claro), sino para verificar el tiempo. Si al menos una de las comprobaciones falla, se envía un mensaje de error al cliente y no se autentica.
Si tiene éxito, el servidor de autenticación genera una clave de sesión aleatoria que se compartirá entre el cliente y el vale o el servidor de concesión (esta clave protege futuras solicitudes de vales para otros servicios). El Centro de distribución de claves crea 2 copias de la clave de sesión: una para el cliente y otra para el servidor de concesión de tickets.
Luego, el centro de distribución de claves responde al cliente con un mensaje del servidor de autenticación (AS_REP) encriptado con la clave a largo plazo del cliente. Este mensaje incluye el TGT encriptado con la clave TGS, una copia de la clave de sesión del cliente, la vigencia del ticket y el ID de TGS (el TGT contiene: una copia de la clave de sesión del TGS, la ID del cliente, la vigencia del ticket, Marca de tiempo del centro de distribución de claves (KDC), cliente de dirección IP).
Cuando el usuario quiera acceder al servicio, preparará un mensaje para TGS_REQ que constará de 3 partes: el identificador del servicio, la copia de la TGT recibida anteriormente y el autenticador (el autenticador consiste en un sello de tiempo encriptado con la clave de sesión recibida del servidor de autenticación y sirve para proteger contra repeticiones).
Al recibir una solicitud de ticket de un cliente, el KDC genera una nueva clave de sesión para la interacción cliente/servicio. Luego envía un mensaje de respuesta (TGS_REP) encriptado con la clave de sesión recibida del servidor de autenticación. Este mensaje contiene la nueva clave de sesión, el ticket de servicio cifrado con la clave de servicio a largo plazo, la ID del servicio y la vigencia del ticket (contiene una copia de la nueva clave de sesión, la ID del cliente, la vigencia del ticket, la hora local del centro de distribución de claves, la dirección IP del cliente ).
Kerberos 4 no estandariza los detalles del último paso, el envío del ticket de servicio al servidor de aplicaciones, por lo que su implementación depende completamente de la aplicación.
Kerberos 5 es un desarrollo de la cuarta versión, incluye toda la funcionalidad anterior y contiene muchas extensiones. Sin embargo, desde el punto de vista de la implementación, Kerberos 5 es un protocolo completamente nuevo.
La razón principal de la aparición de la quinta versión fue la imposibilidad de expansión. Con el tiempo, un ataque de fuerza bruta al DES utilizado en Kerberos 4 se volvió relevante, pero los campos utilizados en los mensajes tenían un tamaño fijo y no era posible utilizar un algoritmo de cifrado más fuerte.
Para solucionar este problema, se decidió crear un protocolo extensible que se pueda utilizar en varias plataformas basado en la tecnología ASN.1. Esto permitió el uso de varios tipos de cifrado en las transacciones. Gracias a esto, se implementó la compatibilidad con la versión anterior. Además, el KDC tiene la capacidad de elegir el protocolo de cifrado más seguro admitido por las partes participantes.
Además, el protocolo Kerberos 4 original está sujeto a enumeración de diccionario. Esta vulnerabilidad está relacionada con el hecho de que el KDC emite un TGT encriptado bajo demanda a cualquier cliente. La importancia de este problema también se enfatiza por el hecho de que los usuarios suelen elegir contraseñas simples.
Para dificultar este ataque, Kerberos 5 introdujo la autenticación previa. En esta etapa, el KDC requiere que el usuario verifique su identidad antes de que se le pueda emitir un boleto.
La política de KDC es responsable de la autenticación previa, si es necesaria, el usuario recibirá un mensaje KRB_ERROR en la primera solicitud al servidor de autenticación. Este mensaje le indicará al cliente que envíe una solicitud AS_REQ con sus credenciales para autenticarse. Si el KDC no los reconoce, el usuario recibirá otro mensaje KRB_ERROR que indica un error y no se emitirá ningún TGT.
Descripción formalIdentificadores de Alice ( Alice ), la iniciadora de la sesión | |
Identificador de Bob ( Bob ), el lado desde el que se establece la sesión | |
Identificador de Trent ( Trent ), una parte intermediaria de confianza | |
Las claves públicas de Alice, Bob y Trent | |
Claves secretas de Alice, Bob y Trent | |
Cifrado de datos con la clave de Alice o la clave conjunta de Alice y Trent | |
Cifrado de datos con la clave de Bob o la clave conjunta de Bob y Trent | |
Cifrado de datos con claves secretas de Alice, Bob (firma digital) | |
Número de secuencia de la sesión (para evitar ataques de reproducción) | |
Clave de sesión aleatoria que se utilizará para el cifrado de datos simétrico | |
Cifrado de datos con una clave de sesión temporal | |
Marcas de tiempo añadidas a los mensajes por Alice y Bob respectivamente | |
Números aleatorios ( nonce ) que fueron elegidos por Alice y Bob respectivamente |
El protocolo utiliza solo cifrado simétrico y supone que cada corresponsal (Alice y Bob) comparte una clave secreta con un tercero de confianza (Trent).
Alice envía su identificación y Bob a la parte de confianza (Trent):
Trent genera dos mensajes. El primero incluye la marca de tiempo , la vigencia de la clave , la nueva clave de sesión para Alice y Bob , y la ID de Bob . Este mensaje está encriptado con la clave compartida de Alice y Trent. El segundo mensaje contiene lo mismo, excepto por el identificador: se reemplazó con el identificador de Alice . El mensaje en sí está encriptado con la clave compartida de Trent y Bob:
Alice genera un mensaje a partir de su propia ID y una marca de tiempo , luego cifra el mensaje con la clave de sesión y se lo envía a Bob junto con el segundo mensaje de Trent:
Para su propia autenticación, Bob cifra la marca de tiempo modificada con una clave de sesión compartida y se la envía a Alice:
Una suposición importante es que los relojes de todos los participantes del protocolo están sincronizados. Sin embargo, en la práctica, la sincronización se utiliza con una precisión de varios minutos, con el historial de transmisión almacenado (para detectar repeticiones) durante algún tiempo.
Descripción detalladaLa forma en que Kerberos 5 funciona actualmente es la siguiente:
Inicio de sesión de usuario:
Autenticación del cliente:
De lo contrario, el cliente recibe un nuevo mensaje que indica que se ha producido un error.
Autorización de clientes en TGS:
Solicitud de servicio por cliente:
La extensión PKINIT afectó la etapa de preautenticación del cliente, luego de lo cual comenzó a ocurrir de la siguiente manera:
Los pasos adicionales ocurren de acuerdo con la descripción estándar de Kerberos V5.
El cifrado DES se puede usar con Kerberos, sin embargo, ya no es un estándar de Internet porque es vulnerable. Sin embargo, existen vulnerabilidades en muchos productos que utilizan Kerberos que no se han actualizado para reemplazar DES con cifrados más nuevos, como AES, por ejemplo.
En noviembre de 2014, Microsoft lanzó un parche (MS14-068) para corregir una vulnerabilidad en la implementación de Windows del servidor KDC. La vulnerabilidad, según el comunicado, permitía a los usuarios "elevar" sus privilegios al nivel del dominio.
Protocolos de autenticación e intercambio de claves | |
---|---|
Con algoritmos simétricos | |
Con algoritmos simétricos y asimétricos | |
Protocolos y servicios utilizados en Internet |