Português (Brasil)
  • SAML
  • SSO
  • authentication

Guia rápido de segurança SAML

Um guia de referência rápida sobre a Security Assertion Markup Language (SAML) e seus recursos de segurança. Entenda termos-chave, dicas de implementação e práticas recomendadas para proteger 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 troca de dados de autenticação e autorização entre partes, em particular, entre um provedor de identidade e um provedor de serviço. SAML é uma linguagem de marcação baseada em XML para afirmações de segurança que é usada para single sign-on (SSO) e federação de identidade. É comumente usada em ambientes empresariais para fins de autenticação e autorização.

Fluxo padrão de autenticação SAML

  1. O usuário solicita acesso a um aplicativo cliente, que atua como um provedor de serviço (SP).
  2. O SP envia uma solicitação de autenticação SAML SSO ao provedor de identidade (IdP) e redireciona o usuário para o IdP.
  3. O IdP solicita as credenciais do usuário se o usuário ainda não estiver autenticado.
  4. O usuário insere as credenciais e o IdP autentica o usuário.
  5. O IdP envia uma afirmação de resposta SAML para o SP, que inclui o status de autenticação e atributos do usuário. O IdP então redireciona o usuário de volta para o SP.
  6. O SP recebe a afirmação de resposta SAML, valida e concede acesso ao usuário.

Fatores de segurança no SAML

ID da entidade SP

Pense no ID da entidade SP como o crachá único de um SP no contexto de autenticação SAML. É como uma impressão digital que ajuda o IdP a reconhecer o SP durante suas interações. Este ID é uma parte crucial dos metadados do SP, compartilhada com o IdP para criar confiança e garantir comunicação segura.

Uso do ID da entidade SP:

  1. Registro de metadados: O atributo EntityID é parte dos metadados do SP, compartilhados 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. Solicitação de autenticação: O ID da entidade SP é incluído na solicitação de autenticação SAML enviada ao IdP, identificando claramente o SP solicitante. O IdP usa essa informação para validar a solicitação e determinar o contexto de autenticação apropriado.
  3. Público da afirmação: Após a autenticação bem-sucedida do usuário, o ID da entidade SP é incluído na afirmação SAML como uma restrição de público. Esta medida assegura que a afirmação é destinada exclusivamente ao SP designado e não pode ser usada de forma incorreta por outros SPs.

ID da entidade IdP

Por outro lado, o ID da entidade IdP é o rótulo especial para o IdP. Ele ajuda a identificar o IdP no ecossistema SAML, facilitando para o SP encontrá-lo. Este ID está incluído nos metadados do IdP e é compartilhado com o SP, promovendo uma relação de confiança e conexões seguras.

Uso do ID da entidade IdP:

  1. Registro de metadados: O atributo EntityID também está incluído nos metadados do IdP, compartilhados 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 que o SP valide as respostas SAML.
  2. Emissor da afirmação: Quando o IdP gera uma afirmação SAML, ele inclui seu ID de entidade como emissor. Este atributo indica a entidade que emitiu a afirmação e ajuda o SP a verificar a autenticidade e integridade da afirmaçã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ções de estado entre o SP e o IdP. Ele atua como uma ponte entre os fluxos de SSO iniciados pelo SP e pelo IdP, preservando o contexto do usuário e o estado da sessão durante o processo de autenticação.

Uso do estado de retransmissão:

  1. Manutenção do contexto do usuário: O estado de retransmissão permite que o SP passe informações adicionais para o IdP durante o processo de autenticação. Essas informações podem incluir o estado da sessão do usuário, contexto do aplicativo ou quaisquer outros dados relevantes que precisam ser preservados ao longo do fluxo SAML. Como a URL ou o ID da sessão do aplicativo que o usuário estava acessando antes da autenticação.
  2. Prevenção de ataques CSRF: O estado de retransmissão é crucial para prevenir ataques de falsificação de solicitação entre sites (CSRF) durante a autenticação SAML. Ao incluir um valor de estado de retransmissão único e imprevisível na solicitação de autenticação, o SP pode verificar a integridade da resposta SAML e garantir que ela corresponda à solicitação original.

Assinatura da afirmação

A assinatura da afirmação é um recurso de segurança crítico no SAML que garante a integridade, autenticidade e não-repúdio das afirmações SAML. Isso envolve assinar digitalmente a afirmação SAML usando a chave privada do IdP, permitindo que o SP verifique a origem da afirmação e detecte qualquer tentativa de adulteração.

Como a assinatura da afirmação funciona:

  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 afirmação SAML e a chave pública é compartilhada com o SP para verificação. Este esquema de criptografia assimétrica garante que apenas o IdP possa assinar a afirmação, enquanto o SP pode validá-la.
  2. Certificado compartilhado: O IdP fornece ao SP seu certificado de chave pública, que contém a chave pública usada para verificar a assinatura da afirmaçã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 da afirmação: Após autenticar o usuário, o IdP assina digitalmente a afirmação SAML usando sua chave privada. Essa assinatura é incluída na afirmação, junto com o certificado de chave pública, permitindo que o SP verifique a autenticidade da afirmação.
  4. Verificação da afirmação: Ao receber a afirmação SAML, o SP usa a chave pública do IdP para verificar a assinatura da afirmação. Se a assinatura for válida, o SP pode confiar na afirmação e conceder acesso ao usuário.

Criptografia da afirmação

Além de assinar, o SAML também suporta a criptografia de afirmação para proteger atributos de usuário sensíveis e dados transmitidos entre o IdP e o SP. Ao criptografar a afirmação, o IdP garante que apenas o destinatário pretendido (SP) possa descriptografar e acessar o conteúdo da afirmação, protegendo a privacidade e confidencialidade do usuário. A criptografia da afirmação é um recurso de segurança opcional no SAML que pode ser usado para aumentar a proteção de dados.

Uso da criptografia da afirmação:

  1. Proteção de atributos sensíveis: A criptografia de afirmação é particularmente útil para proteger atributos de usuário sensíveis, como informações pessoalmente identificáveis (PII), dados financeiros ou registros de saúde. Ao criptografar esses atributos dentro da afirmação, o IdP previne o acesso não autorizado e assegura a confidencialidade dos dados.

Como a criptografia da afirmação funciona:

  1. Troca de chaves: O IdP e o SP estabelecem um mecanismo seguro de troca de chaves para compartilhar as chaves de criptografia para proteger a afirmação SAML. Isso pode envolver o uso de chaves de criptografia simétrica ou esquemas de criptografia de chave pública, dependendo do algoritmo de criptografia e da estratégia de gerenciamento de chaves.
  2. Criptografia de atributos: Após gerar a afirmação SAML, o IdP criptografa os atributos de usuário sensíveis usando a chave de criptografia compartilhada. Os atributos criptografados são embutidos dentro da afirmação, garantindo que apenas o SP possa descriptografar e acessar os dados.
  3. Descriptografia da afirmação: Ao receber a afirmação criptografada, o SP descriptografa os atributos protegidos usando a chave de criptografia compartilhada. Este processo permite que o SP acesse os dados sensíveis do usuário de forma segura e os processe conforme necessário.

Métodos de associação

Os métodos de associação SAML definem como as mensagens SAML são transmitidas entre o SP e o IdP por diferentes protocolos de comunicação. Eles especificam a codificação, transporte e mecanismos de segurança usados para trocar afirmações e solicitações SAML, garantindo comunicação segura e confiável entre as partes envolvidas.

Tanto o SP quanto o IdP especificarão quais métodos de associação eles suportam em seus metadados, permitindo que negociem o método apropriado para interações SAML. A escolha do método de associação depende de fatores como tamanho da mensagem, requisitos de segurança e características do canal de comunicação.

Métodos de associação SAML:

  1. Redirecionamento HTTP: As mensagens SAML são codificadas como parâmetros de URL e transmitidas via redirecionamento HTTP. Essa associaçã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 solicitações POST HTTP. Essa associação é usada quando o tamanho da mensagem excede o limite de comprimento da URL ou quando medidas de segurança adicionais são necessárias.
  3. Artefato: As mensagens SAML são transmitidas usando tokens de vida curta chamados artefatos, que são trocados por um canal seguro entre o SP e o IdP. Esta associaçã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 associação mais comuns:

  • Solicitação de autenticação: A solicitação de autenticação do SP para o IdP é normalmente transmitida usando o redirecionamento HTTP devido à sua simplicidade e eficiência. O SP codifica a solicitação SAML como parâmetros de URL e redireciona o navegador do usuário para o IdP para autenticação. Isso é conhecido como o fluxo SSO iniciado pelo SP.
  • Resposta da afirmação: A afirmação de resposta SAML do IdP para o SP é geralmente transmitida usando o método de associação POST HTTP. O IdP codifica a afirmação SAML como parâmetros de formulário e a posta de volta para o SP para validação. Isso garante que a afirmação seja transmitida com segurança sem expor dados sensíveis na URL. Além disso, o método de associação POST HTTP pode lidar com tamanhos de mensagens maiores em comparação com o método de associação de redirecionamento HTTP.

Elementos e considerações de segurança nas afirmações SAML

Emissor

Como mencionado anteriormente, o emissor é um atributo-chave nas afirmações SAML que identifica a entidade que emitiu a afirmação. O emissor é tipicamente o IdP que autenticou o usuário e gerou a afirmação. Ao incluir o atributo emissor na afirmação, o SP pode verificar a origem da afirmação e garantir que ela venha de uma fonte confiável.

Assinatura

O elemento de assinatura em uma afirmação SAML contém a assinatura digital gerada pelo IdP para garantir a integridade e autenticidade da afirmação. A assinatura é criada usando a chave privada do IdP e incluída na afirmação junto com o certificado de chave pública para verificação pelo SP. Ao validar a assinatura, o SP pode verificar que a afirmação não foi adulterada e vem do IdP esperado.

Condições

O elemento de condições em uma afirmação SAML define as restrições e limitações que se aplicam à validade e uso da afirmação. Inclui condições como o período de validade da afirmação, restrições de público e outras limitações contextuais que o SP deve impor ao processar a afirmação.

Declaração de autenticação

A declaração de autenticação (AuthnStatement) é um componente-chave da afirmação SAML que fornece informações sobre o status de autenticação do usuário e o contexto. Inclui detalhes como o método de autenticação usado, o tempo de autenticação e quaisquer informações de contexto de autenticação relevantes, permitindo que o SP tome decisões informadas sobre controle de acesso com base no estado de autenticação do usuário.

Atributos da declaração de autenticação:

  1. AuthenticationContext: Descreve o método e o contexto da autenticação do usuário, como senha de usuário, autenticação multifator ou single sign-on. Este atributo ajuda o SP a avaliar a força e a confiabilidade do processo de autenticação e determinar os controles de acesso apropriados.
  2. AuthenticationInstant: Indica o momento em que o usuário foi autenticado pelo IdP. Este carimbo de tempo é crucial para verificar a atualização 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 usuário, após o qual o usuário deve se reautenticar para acessar o serviço. Este atributo ajuda a impor políticas de gerenciamento de sessão e mitigar o risco de acesso não autorizado.

Melhores práticas para segurança SAML

  1. Use métodos de associação seguros: Escolha métodos de associação SAML apropriados com base em 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 solicitações simples.
  2. Valide assinaturas de afirmações: Verifique as assinaturas digitais das afirmações SAML para garantir sua integridade e autenticidade. Use o certificado de chave pública do IdP para validar a assinatura e detectar tentativas de adulteração.
  3. Imponha restrições de público: Inclua restrições de público nas afirmações SAML para limitar o escopo da afirmação ao SP pretendido. Isso previne ataques de repetição de afirmação e acesso não autorizado por outros provedores de serviços.
  4. Proteja a troca de metadados: Proteja a troca de metadados do SP e do IdP para prevenir adulteração de metadados e ataques de falsificação. Use canais e mecanismos seguros para compartilhar metadados com segurança.
  5. Implemente manipulação segura 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 sua integridade e autenticidade.
  6. Imponha o gerenciamento de sessão: Defina políticas de expiração de sessão e imponha limites de tempo de sessão para mitigar o risco de sequestro de sessão e acesso não autorizado. Use atributos relacionados à sessão nas afirmações SAML para gerenciar as sessões de usuário de forma segura.
  7. Criptografe atributos sensíveis: Se necessário, criptografe atributos de usuário sensíveis dentro das afirmações SAML para proteger a privacidade do usuário e a confidencialidade dos dados. Use algoritmos de criptografia seguros e práticas de gerenciamento de chaves para proteger 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 recursos e mecanismos de segurança, sua idade pode representar desafios para atender às demandas de segurança e usabilidade em evolução das aplicações modernas. Em comparação com o mais contemporâneo OpenID Connect (OIDC) baseado em OAuth 2.0, o SAML tende a ser mais complexo e carece de alguns dos recursos de segurança aprimorados que o OIDC oferece. Por exemplo, o fluxo de autorização de código de várias solicitações seguras do OIDC oferece uma abordagem mais segura do que o fluxo de troca de afirmação SAML relativamente direto. 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.