Hoja de trucos de seguridad SAML
Una guía de referencia rápida sobre el Lenguaje de Marcado de Aserciones de Seguridad (SAML) y sus características de seguridad. Entiende términos clave, consejos de implementación y mejores prácticas para asegurar la autenticación y autorización basada en SAML en entornos empresariales.
Introducción
El Lenguaje de Marcado de Aserciones de Seguridad (SAML) es un estándar abierto para el intercambio de datos de autenticación y autorización entre partes, en particular, entre un proveedor de identidad y un proveedor de servicios. SAML es un lenguaje de marcado basado en XML para aserciones de seguridad que se utiliza para inicio de sesión único (SSO) y federación de identidad. Se usa comúnmente en entornos empresariales con fines de autenticación y autorización.
Flujo estándar de autenticación SAML
- El usuario solicita acceso a una aplicación cliente, que actúa como proveedor de servicios (SP).
- SP envía una solicitud de autenticación SSO SAML al proveedor de identidad (IdP) y redirige al usuario al IdP.
- IdP solicita al usuario sus credenciales si el usuario no ya está autenticado.
- El usuario ingresa sus credenciales y IdP autentica al usuario.
- IdP envía una aserción de respuesta SAML al SP, que incluye el estado de autenticación y atributos del usuario. Luego, IdP redirige al usuario de vuelta al SP.
- SP recibe la aserción de respuesta SAML, la valida y concede acceso al usuario.
Factores de seguridad en SAML
ID de entidad de SP
Piensa en el ID de entidad de SP como la identificación única para un SP en el contexto de autenticación SAML. Es como una huella dactilar que ayuda a que el IdP reconozca al SP durante sus interacciones. Este ID es una parte clave de los metadatos del SP, compartida con el IdP para construir confianza y asegurar una comunicación segura.
Uso del ID de entidad de SP:
- Registro de metadatos: El atributo
EntityID
es parte de los metadatos del SP, compartido con el IdP para establecer una relación de confianza. Sirve como un identificador único para localizar los metadatos del SP y obtener los detalles de configuración requeridos para las interacciones SAML. - Solicitud de autenticación: El ID de entidad del SP se incluye en la solicitud de autenticación SAML enviada al IdP, identificando claramente al SP solicitante. El IdP utiliza esta información para validar la solicitud y determinar el contexto de autenticación apropiado.
- Audiencia de la aserción: Después de la autenticación exitosa del usuario, el ID de entidad del SP se incluye en la aserción SAML como una restricción de audiencia. Esta medida asegura que la aserción esté destinada exclusivamente al SP designado y no pueda ser utilizada incorrectamente por otros SP.
ID de entidad de IdP
Por otro lado, el ID de entidad de IdP es la etiqueta especial para el IdP. Ayuda a identificar al IdP dentro del ecosistema SAML, facilitando al SP encontrarlo. Este ID se incluye en los metadatos del IdP y se comparte con el SP, fomentando una relación de confianza y conexiones seguras.
Uso del ID de entidad de IdP:
- Registro de metadatos: El atributo
EntityID
también se incluye en los metadatos del IdP, compartido con el SP para establecer una relación de confianza. Sirve como un identificador único para localizar los metadatos del IdP y obtener los detalles de configuración necesarios para que el SP valide las respuestas SAML. - Emisor de la aserción: Cuando el IdP genera una aserción SAML, incluye su ID de entidad como el emisor. Este atributo indica la entidad que emitió la aserción y ayuda al SP a verificar la autenticidad e integridad de la aserción.
Estado de retransmisión
El estado de retransmisión es un parámetro utilizado en la autenticación SAML que facilita la transferencia de información de estado entre el SP y el IdP. Actúa como un puente entre los flujos de SSO iniciados por el SP e IdP, preservando el contexto del usuario y el estado de sesión durante el proceso de autenticación.
Uso del estado de retransmisión:
- Mantener el contexto del usuario: El estado de retransmisión permite que el SP pase información adicional al IdP durante el proceso de autenticación. Esta información puede incluir el estado de sesión del usuario, el contexto de la aplicación o cualquier otro dato relevante que necesite ser preservado a través del flujo SAML. Como la URL o el ID de sesión de la aplicación que el usuario estaba accediendo antes de la autenticación.
- Prevenir ataques CSRF: El estado de retransmisión es crucial para prevenir ataques de falsificación de solicitudes entre sitios (CSRF) durante la autenticación SAML. Al incluir un valor de estado de retransmisión único e impredecible en la solicitud de autenticación, el SP puede verificar la integridad de la respuesta SAML y asegurar que corresponde a la solicitud original.
Firma de la aserción
La firma de la aserción es una característica de seguridad crítica en SAML que asegura la integridad, autenticidad y no repudio de las aserciones SAML. Implica firmar digitalmente la aserción SAML utilizando la clave privada del IdP, permitiendo que el SP verifique el origen de la aserción y detecte cualquier intento de manipulación.
Cómo funciona la firma de la aserción:
- Generación de par de claves: El IdP genera un par de claves públicas y privadas, donde la clave privada se utiliza para firmar la aserción SAML y la clave pública se comparte con el SP para la verificación. Este esquema de encriptación asimétrica asegura que solo el IdP puede firmar la aserción, mientras que el SP puede validarla.
- Certificado compartido: El IdP proporciona al SP su certificado de clave pública, que contiene la clave pública utilizada para verificar la firma de la aserción. Normalmente, este certificado será parte de los metadatos del IdP, o el SP puede obtenerlo a través de un proceso de descarga segura.
- Firma de la aserción: Después de autenticar al usuario, el IdP firma digitalmente la aserción SAML usando su clave privada. Esta firma se incluye en la aserción, junto con el certificado de clave pública, permitiendo al SP verificar la autenticidad de la aserción.
- Verificación de la aserción: Al recibir la aserción SAML, el SP utiliza la clave pública del IdP para verificar la firma de la aserción. Si la firma es válida, el SP puede confiar en la aserción y otorgar acceso al usuario.
Cifrado de aserción
Además de la firma, SAML también admite el cifrado de aserciones para proteger atributos de usuario sensibles y datos transmitidos entre el IdP y el SP. Al cifrar la aserción, el IdP asegura que solo el destinatario previsto (SP) pueda descifrar y acceder al contenido de la aserción, salvaguardando la privacidad y confidencialidad del usuario. El cifrado de aserciones es una característica de seguridad opcional en SAML que puede usarse para mejorar la protección de datos.
Uso del cifrado de aserciones:
- Protección de atributos sensibles: El cifrado de aserciones es particularmente útil para salvaguardar atributos de usuario sensibles, como Información Personalmente Identificable (PII), datos financieros o registros de salud. Al cifrar estos atributos dentro de la aserción, el IdP previene el acceso no autorizado y asegura la confidencialidad de los datos.
Cómo funciona el cifrado de aserciones:
- Intercambio de claves: El IdP y el SP establecen un mecanismo seguro de intercambio de claves para compartir claves de cifrado para proteger la aserción SAML. Esto puede involucrar el uso de claves de encriptación simétrica o esquemas de encriptación de clave pública, dependiendo del algoritmo de cifrado y la estrategia de gestión de claves.
- Cifrado de atributos: Después de generar la aserción SAML, el IdP cifra los atributos de usuario sensibles usando la clave de cifrado compartida. Los atributos cifrados se embeben dentro de la aserción, asegurando que solo el SP pueda descifrar y acceder a los datos.
- Descifrado de la aserción: Al recibir la aserción cifrada, el SP descifra los atributos protegidos usando la clave de cifrado compartida. Este proceso permite al SP acceder a los datos sensibles del usuario de manera segura y procesarlos según sea necesario.
Métodos de enlace
Los métodos de enlace SAML definen cómo se transmiten los mensajes SAML entre el SP y el IdP a través de diferentes protocolos de comunicación. Especifican la codificación, el transporte y los mecanismos de seguridad utilizados para intercambiar aserciones y solicitudes SAML, asegurando una comunicación segura y confiable entre las partes involucradas.
Tanto el SP como el IdP especificarán cuáles métodos de enlace admiten en sus metadatos, permitiéndoles negociar el método apropiado para las interacciones SAML. La elección del método de enlace depende de factores como el tamaño del mensaje, los requisitos de seguridad y las características del canal de comunicación.
Métodos de enlace SAML:
- HTTP Redirect: Los mensajes SAML se codifican como parámetros de URL y se transmiten a través de redireccionamiento HTTP. Este enlace es adecuado para escenarios donde el tamaño del mensaje es limitado y el canal de comunicación no es seguro.
- HTTP POST: Los mensajes SAML se codifican como parámetros de formulario y se transmiten a través de solicitudes HTTP POST. Este enlace se usa cuando el tamaño del mensaje supera el límite de longitud de la URL o cuando se requieren medidas de seguridad adicionales.
- Artifact: Los mensajes SAML se transmiten utilizando tokens de corta duración llamados artefactos, que se intercambian a través de un canal seguro entre el SP y el IdP. Este enlace es adecuado para escenarios donde la confidencialidad e integridad del mensaje son críticas y el canal de comunicación es seguro.
Métodos de enlace más comunes:
- Solicitud de autenticación: La solicitud de autenticación del SP al IdP se transmite típicamente utilizando redireccionamiento HTTP debido a su simplicidad y eficiencia. El SP codifica la solicitud SAML como parámetros de URL y redirecciona el navegador del usuario al IdP para la autenticación. Esto se conoce como flujo de SSO iniciado por el SP.
- Respuesta de aserción: La aserción de respuesta SAML del IdP al SP generalmente se transmite usando el método de enlace HTTP POST. El IdP codifica la aserción SAML como parámetros de formulario y la envía de vuelta al SP para su validación. Esto asegura que la aserción se transmita de manera segura sin exponer datos sensibles en la URL. Además, el enlace HTTP POST puede manejar tamaños de mensaje más grandes en comparación con el enlace HTTP Redirect.
Elementos de seguridad y consideraciones en las aserciones SAML
Emisor
Como se mencionó anteriormente, el emisor es un atributo clave en las aserciones SAML que identifica la entidad que emitió la aserción. El emisor es típicamente el IdP que autenticó al usuario y generó la aserción. Al incluir el atributo emisor en la aserción, el SP puede verificar el origen de la aserción y asegurar que proviene de una fuente confiable.
Firma
El elemento de firma en una aserción SAML contiene la firma digital generada por el IdP para asegurar la integridad y autenticidad de la aserción. La firma se crea usando la clave privada del IdP y se incluye en la aserción junto con el certificado de clave pública para su verificación por el SP. Al validar la firma, el SP puede verificar que la aserción no ha sido manipulada y proviene del IdP esperado.
Condiciones
El elemento de condiciones en una aserción SAML define las restricciones y limitaciones que se aplican a la validez y uso de la aserción. Incluye condiciones como el período de validez de la aserción, restricciones de audiencia y otras restricciones contextuales que el SP debe hacer cumplir al procesar la aserción.
Declaración de autenticación
La declaración de autenticación (AuthnStatement) es un componente clave de la aserción SAML que proporciona información sobre el estado de autenticación del usuario y el contexto. Incluye detalles como el método de autenticación utilizado, el momento de la autenticación y cualquier información de contexto de autenticación relevante, permitiendo al SP tomar decisiones informadas de control de acceso basadas en el estado de autenticación del usuario.
Atributos de la declaración de autenticación:
- AuthenticationContext: Describe el método y contexto de autenticación del usuario, como nombre de usuario-contraseña, autenticación multifactorial o inicio de sesión único. Este atributo ayuda al SP a evaluar la fortaleza y fiabilidad del proceso de autenticación y determinar los controles de acceso apropiados.
- AuthenticationInstant: Indica el momento en que el usuario fue autenticado por el IdP. Esta marca de tiempo es crucial para verificar la frescura de la autenticación y prevenir ataques de repetición o secuestro de sesión.
- SessionNotOnOrAfter: Especifica la hora de expiración de la sesión del usuario, después de la cual el usuario debe autenticarse nuevamente para acceder al servicio. Este atributo ayuda a hacer cumplir políticas de gestión de sesiones y mitigar el riesgo de acceso no autorizado.
Mejores prácticas para la seguridad SAML
- Usar métodos de enlace seguros: Elige métodos de enlace SAML apropiados basados en tus requisitos de seguridad y características del canal de comunicación. Usa HTTP POST para transmitir datos sensibles y HTTP Redirect para solicitudes simples.
- Validar firmas de aserciones: Verifica las firmas digitales de las aserciones SAML para asegurar su integridad y autenticidad. Usa el certificado de clave pública del IdP para validar la firma y detectar intentos de manipulación.
- Hacer cumplir restricciones de audiencia: Incluye restricciones de audiencia en las aserciones SAML para limitar el alcance de la aserción al SP destinatario. Esto previene ataques de repetición de aserciones y acceso no autorizado por otros proveedores de servicios.
- Protección del intercambio de metadatos: Protege el intercambio de metadatos de SP y IdP para prevenir la manipulación de metadatos y ataques de suplantación. Usa canales y mecanismos seguros para compartir metadatos de manera segura.
- Implementar manejo seguro del estado de retransmisión: Usa valores de estado de retransmisión únicos e impredecibles para prevenir ataques CSRF durante la autenticación SAML. Valida el estado de retransmisión para asegurar su integridad y autenticidad.
- Enforzar gestión de sesiones: Define políticas de expiración de sesiones y aplica tiempos de espera de sesiones para mitigar el riesgo de secuestro de sesión y acceso no autorizado. Usa atributos relacionados con la sesión en aserciones SAML para gestionar las sesiones de usuario de manera segura.
- Cifrar atributos sensibles: Si es necesario, cifra los atributos de usuario sensibles dentro de las aserciones SAML para proteger la privacidad y confidencialidad de los datos del usuario. Usa algoritmos de cifrado seguros y prácticas de gestión de claves para salvaguardar los datos sensibles.
Alternativas a SAML
Aunque SAML sigue siendo un estándar ampliamente adoptado para SSO y federación de identidad, ofreciendo un conjunto robusto de características y mecanismos de seguridad, su antigüedad puede presentar desafíos para satisfacer las demandas de seguridad y usabilidad de las aplicaciones modernas. En comparación con el más contemporáneo OpenID Connect (OIDC) basado en OAuth 2.0, SAML tiende a ser más complejo y carece de algunas de las características de seguridad mejoradas que proporciona OIDC. Por ejemplo, el flujo de autorización de código de solicitud multidimensional de OIDC ofrece un enfoque más seguro que el relativamente sencillo flujo de intercambio de aserciones SAML. Para las organizaciones que buscan adoptar una solución de federación de identidad más moderna y flexible, OIDC puede ser una alternativa viable a SAML.