Folha de referências rápidas de segurança SAML
Um guia de referência rápida para a Security Assertion Markup Language (SAML) e os seus recursos de segurança. Compreenda os termos chave, dicas de implementação e melhores práticas para garantir a autenticação e autorização baseadas em SAML em ambientes empresariais.
Introdução
A Security Assertion Markup Language (SAML) é um padrão aberto para a troca de dados de autenticação e autorização entre partes, em particular, entre um fornecedor de identidade e um fornecedor de serviço. O SAML é uma linguagem de marcação baseada em XML para assertions de segurança que é usada para sign-on único (SSO) e federação de identidade. É comumente usada em ambientes empresariais para fins de autenticação e autorização.
Fluxo de autenticação SAML padrão
- O utilizador solicita acesso a uma aplicação cliente, que atua como um fornecedor de serviço (SP).
- O SP envia um pedido de autenticação SAML SSO ao fornecedor de identidade (IdP) e redireciona o utilizador para o IdP.
- O IdP solicita ao utilizador as credenciais se o utilizador ainda não estiver autenticado.
- O utilizador introduz credenciais, e o IdP autentica o utilizador.
- O IdP envia uma assertção de resposta SAML para o SP, que inclui o status de autenticação e os atributos do utilizador. O IdP redireciona então o utilizador de volta para o SP.
- O SP recebe a assertção de resposta SAML, valida-a e concede acesso ao utilizador.
Fatores de segurança no SAML
ID da entidade SP
Pense no ID da entidade SP como o distintivo único de um SP no contexto da autenticação SAML. É como uma impressão digital que ajuda o IdP a reconhecer o SP durante as suas interações. Este ID é uma parte chave dos metadados do SP, partilhada com o IdP para construir confiança e garantir uma comunicação segura.
Uso do ID da entidade SP:
- Registo de metadados: O atributo
EntityID
é parte dos metadados do SP, partilhado com o IdP para estabelecer uma relação de confiança. Serve como um identificador único para localizar os metadados do SP e obter os detalhes de configuração necessários para interações SAML. - Pedido de autenticação: O ID da entidade SP é incluído no pedido de autenticação SAML enviado ao IdP, identificando claramente o SP que faz o pedido. O IdP utiliza esta informação para validar o pedido e determinar o contexto de autenticação apropriado.
- Audiência de assertção: Após a autenticação bem-sucedida do utilizador, o ID da entidade SP é incluído na assertção SAML como uma restrição de audiência. Esta medida garante que a assertção se destina exclusivamente ao SP designado e não pode ser utilizada indevidamente por outros SPs.
ID da entidade IdP
Por outro lado, o ID da entidade IdP é o rótulo especial para o IdP. Ajuda a identificar o IdP dentro do ecossistema SAML, tornando fácil para o SP encontrá-lo. Este ID está incluído nos metadados do IdP e é partilhado com o SP, fomentando uma relação de confiança e conexões seguras.
Uso do ID da entidade IdP:
- Registo de metadados: O atributo
EntityID
também está incluído nos metadados do IdP, partilhado com o SP para estabelecer uma relação de confiança. Serve como um identificador único para localizar os metadados do IdP e obter os detalhes de configuração necessários para o SP validar respostas SAML. - Emissor de assertção: Quando o IdP gera uma assertção SAML, inclui o seu ID de entidade como o emissor. Este atributo indica a entidade que emitiu a assertção e ajuda o SP a verificar a autenticidade e integridade da assertção.
Estado de retransmissão
O estado de retransmissão é um parâmetro usado na autenticação SAML que facilita a transferência de informação de estado entre o SP e o IdP. Atua como uma ponte entre os fluxos SSO iniciados pelo SP e pelo IdP, preservando o contexto e o estado de sessão do utilizador durante o processo de autenticação.
Uso do estado de retransmissão:
- Manutenção do contexto do utilizador: O estado de retransmissão permite que o SP passe informações adicionais para o IdP durante o processo de autenticação. Esta informação pode incluir o estado de sessão do utilizador, contexto da aplicação, ou quaisquer outros dados relevantes que precisam de ser preservados ao longo do fluxo SAML. Tais como o URL ou ID de sessão da aplicação que o utilizador estava a aceder antes da autenticação.
- Prevenção de ataques CSRF: O estado de retransmissão é crucial para prevenir ataques de falsificação de pedido entre sites (CSRF) durante a autenticação SAML. Ao incluir um valor de estado de retransmissão único e imprevisível no pedido de autenticação, o SP pode verificar a integridade da resposta SAML e assegurar que corresponde ao pedido original.
Assinatura de assertção
A assinatura de assertção é uma característica de segurança crítica no SAML que garante a integridade, autenticidade e não-repúdio das assertções SAML. Envolve assinar digitalmente a assertção SAML usando a chave privada do IdP, permitindo que o SP verifique a origem da assertção e detecte quaisquer tentativas de adulteração.
Como funciona a assinatura de assertção:
- Geração de par de chaves: O IdP gera um par de chaves pública-privada, onde a chave privada é usada para assinar a assertção SAML, e a chave pública é partilhada com o SP para verificação. Este esquema de encriptação assimétrica assegura que apenas o IdP pode assinar a assertção, enquanto o SP pode validá-la.
- Certificado partilhado: O IdP fornece ao SP o seu certificado de chave pública, que contém a chave pública usada para verificar a assinatura de assertção. Normalmente, este certificado fará parte dos metadados do IdP, ou o SP pode obtê-lo através de um processo de download seguro.
- Assinatura de assertção: Após a autenticação do utilizador, o IdP assina digitalmente a assertção SAML usando sua chave privada. Esta assinatura é incluída na assertção, juntamente com o certificado de chave pública, permitindo ao SP verificar a autenticidade da assertção.
- Verificação de assertção: Ao receber a assertção SAML, o SP utiliza a chave pública do IdP para verificar a assinatura da assertção. Se a assinatura for válida, o SP pode confiar na assertção e conceder acesso ao utilizador.
Encriptação de assertção
Além da assinatura, o SAML também suporta a encriptação de assertção para proteger atributos e dados do utilizador transmitidos entre o IdP e o SP. Ao encriptar a assertção, o IdP assegura que apenas o destinatário pretendido (SP) pode desencriptar e aceder ao conteúdo da assertção, salvaguardando a privacidade e confidencialidade do utilizador. A encriptação de assertção é uma característica de segurança opcional no SAML que pode ser usada para melhorar a proteção de dados.
Uso da encriptação de assertção:
- Proteção de atributos sensíveis: A encriptação de assertção é particularmente útil para proteger atributos sensíveis do utilizador, como Informações Pessoais Identificáveis (PII), dados financeiros ou registos de saúde. Ao encriptar esses atributos dentro da assertção, o IdP previne o acesso não autorizado e garante a confidencialidade dos dados.
Como funciona a encriptação de assertção:
- Troca de chaves: O IdP e o SP estabelecem um mecanismo seguro de troca de chaves para partilhar chaves de encriptação para proteger a assertção SAML. Isto pode envolver o uso de chaves de encriptação simétrica ou esquemas de encriptação de chave pública, dependendo do algoritmo de encriptação e da estratégia de gestão de chaves.
- Encriptação de atributos: Após gerar a assertção SAML, o IdP encripta os atributos sensíveis do utilizador usando a chave de encriptação partilhada. Os atributos encriptados são incorporados dentro da assertção, garantindo que apenas o SP pode desencriptar e aceder aos dados.
- Desencriptação de assertção: Ao receber a assertção encriptada, o SP desencripta os atributos protegidos usando a chave de encriptação partilhada. Este processo permite que o SP aceda aos dados sensíveis do utilizador de forma segura e os processe conforme necessário.
Métodos de ligação
Os métodos de ligação SAML definem como as mensagens SAML são transmitidas entre o SP e o IdP através de diferentes protocolos de comunicação. Especificam a codificação, transporte e mecanismos de segurança usados para trocar assertções e pedidos SAML, garantindo uma comunicação segura e fiável entre as partes envolvidas.
Tanto o SP quanto o IdP especificarão quais métodos de ligação suportam nos seus metadados, permitindo-lhes negociar o método apropriado para interações SAML. A escolha do método de ligação depende de fatores como o tamanho da mensagem, requisitos de segurança, e as características do canal de comunicação.
Métodos de ligação SAML:
- Redirecionamento HTTP: As mensagens SAML são codificadas como parâmetros de URL e transmitidas via redirecionamento HTTP. Esta ligação é adequada para cenários onde o tamanho da mensagem é limitado, e o canal de comunicação não é seguro.
- POST HTTP: As mensagens SAML são codificadas como parâmetros de formulário e transmitidas via pedidos POST HTTP. Esta ligação é usada quando o tamanho da mensagem excede o limite do comprimento do URL ou quando medidas adicionais de segurança são necessárias.
- Artefato: As mensagens SAML são transmitidas usando tokens de curta duração chamados artefatos, que são trocados sobre um canal seguro entre o SP e o IdP. Esta ligação é adequada para cenários onde a confidencialidade e integridade da mensagem são críticas, e o canal de comunicação é seguro.
Métodos de ligação mais comuns:
- Pedido de autenticação: O pedido de autenticação do SP para o IdP é tipicamente transmitido usando o Redirecionamento HTTP devido à sua simplicidade e eficiência. O SP codifica o pedido SAML como parâmetros de URL e redireciona o navegador do utilizador para o IdP para autenticação. Isto é conhecido como o fluxo de SSO iniciado pelo SP.
- Resposta de assertção: A assertção de resposta SAML do IdP para o SP é geralmente transmitida usando o método de ligação POST HTTP. O IdP codifica a assertção SAML como parâmetros de formulário e publica-a de volta para o SP para validação. Isto assegura que a assertção é transmitida de forma segura sem expor dados sensíveis no URL. Além disso, a ligação POST HTTP pode lidar com tamanhos de mensagem maiores em comparação com a ligação Redirecionamento HTTP.
Elementos e considerações de segurança em assertções SAML
Emissor
Como mencionado anteriormente, o emissor é um atributo chave em assertções SAML que identifica a entidade que emitiu a assertção. O emissor é tipicamente o IdP que autenticou o utilizador e gerou a assertção. Ao incluir o atributo emissor na assertção, o SP pode verificar a origem da assertção e garantir que vem de uma fonte confiável.
Assinatura
O elemento assinatura numa assertção SAML contém a assinatura digital gerada pelo IdP para garantir a integridade e autenticidade da assertção. A assinatura é criada utilizando a chave privada do IdP e incluída na assertção junto com o certificado de chave pública para verificação pelo SP. Ao validar a assinatura, o SP pode verificar que a assertção não foi adulterada e vem do IdP esperado.
Condições
O elemento condições numa assertção SAML define as restrições e limitações que se aplicam à validade e uso da assertção. Inclui condições como o período de validade da assertção, restrições de audiência, e outras restrições contextuais que o SP deve impor ao processar a assertção.
Declaração de autenticação
A declaração de autenticação (AuthnStatement) é um componente chave da assertção SAML que fornece informações sobre o status de autenticação do utilizador e o contexto. Inclui detalhes como o método de autenticação usado, o tempo de autenticação, e qualquer informação de contexto de autenticação relevante, permitindo ao SP tomar decisões de controlo de acesso informadas com base no estado de autenticação do utilizador.
Atributos de declaração de autenticação:
- AuthenticationContext: Descreve o método e o contexto de autenticação do utilizador, como nome de utilizador e senha, autenticação multifator ou sign-on único. Este atributo ajuda o SP a avaliar a força e a fiabilidade do processo de autenticação e determinar os controlos de acesso apropriados.
- AuthenticationInstant: Indica o momento em que o utilizador foi autenticado pelo IdP. Este timestamp é crucial para verificar a frescura da autenticação e prevenir ataques de repetição ou sequestro de sessão.
- SessionNotOnOrAfter: Especifica o tempo de expiração da sessão do utilizador, após o qual o utilizador deve re-autenticar-se para aceder ao serviço. Este atributo ajuda a impor políticas de gestão de sessão e mitigar o risco de acesso não autorizado.
Melhores práticas para a segurança SAML
- Use métodos de ligação seguros: Escolha métodos de ligação SAML apropriados com base nos seus requisitos de segurança e características do canal de comunicação. Use POST HTTP para transmitir dados sensíveis e Redirecionamento HTTP para pedidos simples.
- Valide assinaturas de assertção: Verifique as assinaturas digitais das assertções SAML para garantir a sua integridade e autenticidade. Utilize o certificado de chave pública do IdP para validar a assinatura e detectar tentativas de adulteração.
- Implemente restrições de audiência: Inclua restrições de audiência em assertções SAML para limitar o alcance da assertção ao SP pretendido. Isto previne ataques de repetição de assertção e acesso não autorizado por outros fornecedores de serviços.
- Proteja a troca de metadados: Proteja a troca de metadados entre o SP e o IdP para evitar adulterações e ataques de falsificação de metadados. Use canais seguros e mecanismos para partilhar metadados de forma segura.
- Implemente manuseio seguro de estado de retransmissão: Use valores de estado de retransmissão únicos e imprevisíveis para prevenir ataques CSRF durante a autenticação SAML. Valide o estado de retransmissão para garantir a sua integridade e autenticidade.
- Implemente a gestão de sessão: Defina políticas de expiração de sessão e imponha tempos limite de sessão para mitigar o risco de sequestro de sessão e acesso não autorizado. Utilize atributos relacionados à sessão em assertções SAML para gerir sessões de utilizador de forma segura.
- Encripte atributos sensíveis: Se necessário, encripte atributos sensíveis do utilizador em assertções SAML para proteger a privacidade e confidencialidade dos dados do utilizador. Utilize algoritmos de encriptação seguros e práticas de gestão de chaves para salvaguardar dados sensíveis.
Alternativas ao SAML
Embora o SAML continue a ser um padrão amplamente adotado para SSO e federação de identidade, oferecendo um conjunto robusto de funcionalidades e mecanismos de segurança, a sua idade pode representar desafios para atender às demandas de segurança e usabilidade em evolução de aplicações modernas. Quando comparado ao mais contemporâneo OAuth 2.0 baseado em OpenID Connect (OIDC), o SAML tende a ser mais complexo e carece de alguns dos recursos de segurança aprimorados que o OIDC fornece. Por exemplo, o fluxo de autorização de pedido multi-segurança do OIDC oferece uma abordagem mais segura do que o relativamente simples fluxo de troca de assertção SAML. Para organizações que procuram adotar uma solução de federação de identidade mais moderna e flexível, o OIDC pode ser uma alternativa viável ao SAML.