tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao š¬ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter š¦ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Visão Geral do SAML
Security Assertion Markup Language (SAML) permite que provedores de identidade (IdP) sejam utilizados para enviar credenciais de autorização para provedores de serviço (SP), facilitando o single sign-on (SSO). Essa abordagem simplifica a gestão de múltiplos logins ao permitir 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 de serviço.
Comparação entre SAML e OAuth
- SAML é voltado para fornecer às empresas maior controle sobre a segurança do 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, consulte o post completo 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 da Solicitação SAML: O SP não reconhece o usuÔrio e gera uma Solicitação SAML.
- Redirecionamento para o 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 da Resposta SAML: O IdP gera uma Resposta SAML contendo as afirmações necessÔrias.
- Redirecionamento para a URL ACS do SP: O usuƔrio Ʃ redirecionado para a URL do ServiƧo Consumidor de AfirmaƧƵes (ACS) do SP.
- Validação da Resposta SAML: O ACS valida a Resposta SAML.
- Acesso ao Recurso Concedido: O 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
...
A solicitação SAML bruta se parece com isto:
<?xml version="1.0"?>
<samlp:AuthnRequest ...
</samlp:AuthnRequest>
Elementos-chave desta solicitação incluem:
- AssertionConsumerServiceURL: Especifica onde o IdP deve enviar a SAML Response após a autenticação.
- Destination: O endereço do IdP para o qual a solicitação é enviada.
- ProtocolBinding: Define o método de transmissão das mensagens do protocolo SAML.
- saml:Issuer: Identifica a entidade que iniciou a solicitação.
Após a geração da SAML Request, o SP responde com um 302 redirect, direcionando o navegador para o IdP com a SAML Request 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 SAML Response. O parâmetro SAMLRequest é uma versão comprimida e codificada do trecho XML bruto, utilizando compressão Deflate e codificação base64.
Exemplo de SAML Response
VocĆŖ pode encontrar uma resposta SAML completa aqui. Os componentes-chave da resposta incluem:
- ds:Signature: Esta seção, uma Assinatura XML, garante a integridade e autenticidade do emissor da asserção. A SAML response no exemplo contém dois elementos
ds:Signature
, um para a mensagem e o outro para a asserçã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 asserçã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 Asserção e o Provedor de Serviço especificado.
- saml:AuthnStatement: Confirma que o IdP autenticou o sujeito da Asserção.
- saml:AttributeStatement: Contém atributos que descrevem o sujeito da Asserção.
Após a SAML Response, o processo inclui um 302 redirect do IdP. Isso leva a uma solicitação POST para o URL do Serviço de Consumo de Asserção (ACS) do Provedor de Serviço. A solicitação POST inclui os parâmetros RelayState
e SAMLResponse
. O ACS Ʃ responsƔvel por processar e validar a SAML Response.
Após a solicitação POST ser recebida e a SAML Response ser validada, 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 a elementos de Resposta. Abaixo estĆ£o os principais tipos de Assinaturas XML:
Estrutura BƔsica da Assinatura XML
Uma Assinatura XML consiste em 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, significando que a assinatura estĆ” contida dentro da 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 Envelopadora: Contrastando com assinaturas envelopadas, assinaturas envelopadoras 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 Destacada: Este tipo é separado do conteúdo que assina. A assinatura e o conteúdo existem de forma independente, 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, Assinaturas XML fornecem maneiras flexĆveis de proteger documentos XML, com cada tipo atendendo a diferentes necessidades estruturais e de seguranƧa.
ReferĆŖncias
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao š¬ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter š¦ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.