8.6 KiB
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Visão Geral do SAML
A Security Assertion Markup Language (SAML) permite que provedores de identidade (IdP) sejam utilizados para enviar credenciais de autorização para provedores de serviços (SP), facilitando o logon único (SSO). Essa abordagem simplifica o gerenciamento de vários logins, permitindo que um único conjunto de credenciais seja usado em vários sites. Ela utiliza XML para comunicação padronizada entre IdPs e SPs, vinculando a autenticação da identidade do usuário com a autorização do serviço.
Comparação entre SAML e OAuth
- SAML é direcionado a fornecer às empresas maior controle sobre a segurança de login SSO.
- OAuth é projetado para ser mais amigável para dispositivos móveis, usa JSON e é um esforço colaborativo de empresas como Google e Twitter.
Fluxo de Autenticação SAML
Para mais detalhes, confira a postagem completa em https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/. Este é um resumo:
O processo de autenticação SAML envolve várias etapas, conforme ilustrado no esquema:
- Tentativa de Acesso ao Recurso: O usuário tenta acessar um recurso protegido.
- Geração de Solicitação SAML: O SP não reconhece o usuário e gera uma Solicitação SAML.
- Redirecionamento para IdP: O usuário é redirecionado para o IdP, com a Solicitação SAML passando pelo navegador do usuário.
- IdP Recebe a Solicitação: O IdP recebe a Solicitação SAML.
- Autenticação no IdP: O IdP autentica o usuário.
- Validação do Usuário: O IdP valida a legitimidade do usuário para acessar o recurso solicitado.
- Criação de Resposta SAML: O IdP gera uma Resposta SAML contendo as assertivas necessárias.
- Redirecionamento para a URL ACS do SP: O usuário é redirecionado para a URL do Serviço de Consumidor de Assertivas (ACS) do SP.
- Validação da Resposta SAML: O ACS valida a Resposta SAML.
- Acesso ao Recurso Concedido: Acesso ao recurso inicialmente solicitado é concedido.
Exemplo de Solicitação SAML
Considere o cenário em que um usuário solicita acesso a um recurso seguro em https://shibdemo-sp1.test.edu/secure/. O SP identifica a falta de autenticação e gera uma Solicitação SAML:
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
...
O pedido SAML bruto se parece com isto:
<?xml version="1.0"?>
<samlp:AuthnRequest ...
</samlp:AuthnRequest>
Os principais elementos desta solicitação incluem:
- AssertionConsumerServiceURL: Especifica para onde o IdP deve enviar a Resposta SAML pós-autenticação.
- Destination: O endereço do IdP para o qual a solicitação é enviada.
- ProtocolBinding: Define o método de transmissão de mensagens do protocolo SAML.
- saml:Issuer: Identifica a entidade que iniciou a solicitação.
Após a geração da Solicitação SAML, o SP responde com um redirecionamento 302, direcionando o navegador para o IdP com a Solicitação SAML codificada no cabeçalho Location da resposta HTTP. O parâmetro RelayState mantém as informações de estado durante a transação, garantindo que o SP reconheça a solicitação de recurso inicial ao receber a Resposta SAML. O parâmetro SAMLRequest é uma versão comprimida e codificada do trecho XML bruto, utilizando compressão Deflate e codificação base64.
Exemplo de Resposta SAML
Você pode encontrar uma resposta SAML completa aqui. Os principais componentes da resposta incluem:
- ds:Signature: Esta seção, uma Assinatura XML, garante a integridade e autenticidade do emissor da declaração. A resposta SAML no exemplo contém dois elementos
ds:Signature
, um para a mensagem e outro para a declaração. - saml:Assertion: Esta parte contém informações sobre a identidade do usuário e possivelmente outros atributos.
- saml:Subject: Especifica o sujeito principal de todas as declarações na afirmação.
- saml:StatusCode: Representa o status da operação em resposta à solicitação correspondente.
- saml:Conditions: Detalha condições como o tempo de validade da Declaração e o Provedor de Serviço especificado.
- saml:AuthnStatement: Confirma que o IdP autenticou o sujeito da Declaração.
- saml:AttributeStatement: Contém atributos que descrevem o sujeito da Declaração.
Após a Resposta SAML, o processo inclui um redirecionamento 302 do IdP. Isso leva a uma solicitação POST para o URL do Serviço de Consumidor de Declarações (ACS) do Provedor de Serviços. A solicitação POST inclui os parâmetros RelayState
e SAMLResponse
. O ACS é responsável por processar e validar a Resposta SAML.
Após receber a solicitação POST e validar a Resposta SAML, o acesso é concedido ao recurso protegido inicialmente solicitado pelo usuário. Isso é ilustrado com uma solicitação GET
para o endpoint /secure/
e uma resposta 200 OK
, indicando acesso bem-sucedido ao recurso.
Assinaturas XML
As Assinaturas XML são versáteis, capazes de assinar uma árvore XML inteira ou elementos específicos dentro dela. Elas podem ser aplicadas a qualquer Objeto XML, não apenas elementos de Resposta. Abaixo estão os principais tipos de Assinaturas XML:
Estrutura Básica da Assinatura XML
Uma Assinatura XML consiste nos elementos essenciais conforme mostrado:
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
Cada elemento Reference
significa um recurso específico sendo assinado, identificável pelo atributo URI.
Tipos de Assinaturas XML
- Assinatura Envelopada: Este tipo de assinatura é um descendente do recurso que assina, o que significa que a assinatura está contida na mesma estrutura XML que o conteúdo assinado.
Exemplo:
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
Em uma assinatura envelopada, o elemento ds:Transform
especifica que está envelopada através do algoritmo enveloped-signature
.
- Assinatura Envelopante: Em contraste com as assinaturas envelopadas, as assinaturas envelopantes envolvem o recurso sendo assinado.
Exemplo:
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
- Assinatura Separada: Este tipo é separado do conteúdo que assina. A assinatura e o conteúdo existem independentemente, mas uma ligação entre os dois é mantida.
Exemplo:
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
Em conclusão, as Assinaturas XML fornecem maneiras flexíveis de proteger documentos XML, com cada tipo atendendo a diferentes necessidades estruturais e de segurança.