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)
Support 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)
Support 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.