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.
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
- O usuário solicita acesso a um aplicativo cliente, que atua como um provedor de serviço (SP).
- O SP envia uma solicitação de autenticação SAML SSO ao provedor de identidade (IdP) e redireciona o usuário para o IdP.
- O IdP solicita as credenciais do usuário se o usuário ainda não estiver autenticado.
- O usuário insere as credenciais e o IdP autentica o usuário.
- 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.
- 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:
- 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. - 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.
- 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:
- 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. - 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:
- 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.
- 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:
- 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.
- 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.
- 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.
- 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:
- 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:
- 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.
- 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.
- 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:
- 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.
- 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.
- 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:
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.