Português (Portugal)
  • SAML
  • SSO
  • autenticação

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.

Simeng
Simeng
Developer

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

  1. O utilizador solicita acesso a uma aplicação cliente, que atua como um fornecedor de serviço (SP).
  2. O SP envia um pedido de autenticação SAML SSO ao fornecedor de identidade (IdP) e redireciona o utilizador para o IdP.
  3. O IdP solicita ao utilizador as credenciais se o utilizador ainda não estiver autenticado.
  4. O utilizador introduz credenciais, e o IdP autentica o utilizador.
  5. 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.
  6. 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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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:

  1. 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.
  2. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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:

  1. 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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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.
  3. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.