SAML Basics

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Pregled SAML-a

Security Assertion Markup Language (SAML) omogućava korišćenje provajdera identiteta (IdP) za slanje autorizacionih podataka servis provajderima (SP), olakšavajući jednokratnu prijavu (SSO). Ovaj pristup pojednostavljuje upravljanje višestrukim prijavama omogućavajući korišćenje jednog seta podataka za prijavu na više veb sajtova. Koristi XML za standardizovanu komunikaciju između IdP-a i SP-a, povezujući autentifikaciju korisničkog identiteta sa autorizacijom servisa.

Poređenje između SAML-a i OAuth-a

  • SAML je prilagođen pružanju veće kontrole nad sigurnošću prijave jednokratne prijave (SSO) za preduzeća.

  • OAuth je dizajniran da bude prilagođen mobilnim uređajima, koristi JSON i rezultat je saradnje kompanija poput Google-a i Twitter-a.

SAML Autentifikacioni tok

Za dodatne detalje pogledajte ceo post na https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/. Ovo je sažetak:

Proces autentifikacije SAML-a uključuje nekoliko koraka, kako je prikazano na dijagramu:

  1. Pokušaj pristupa resursu: Korisnik pokušava da pristupi zaštićenom resursu.

  2. Generisanje SAML zahteva: SP ne prepoznaje korisnika i generiše SAML zahtev.

  3. Preusmeravanje na IdP: Korisnik se preusmerava na IdP, pri čemu SAML zahtev prolazi kroz korisnikov pretraživač.

  4. IdP prima zahtev: IdP prima SAML zahtev.

  5. Autentifikacija na IdP-u: IdP autentifikuje korisnika.

  6. Provera korisnika: IdP proverava legitimnost korisnika za pristup traženom resursu.

  7. Generisanje SAML odgovora: IdP generiše SAML odgovor koji sadrži neophodne tvrdnje.

  8. Preusmeravanje na SP-ov ACS URL: Korisnik se preusmerava na SP-ov Assertion Consumer Service (ACS) URL.

  9. Provera SAML odgovora: ACS proverava SAML odgovor.

  10. Pristup resursu odobren: Pristup traženom resursu je odobren.

Primer SAML zahteva

Razmotrite scenario u kojem korisnik zahteva pristup bezbednom resursu na https://shibdemo-sp1.test.edu/secure/. SP prepoznaje nedostatak autentifikacije i generiše SAML zahtev:

GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
...

Sirovi SAML zahtev izgleda ovako:

<?xml version="1.0"?>
<samlp:AuthnRequest ...
</samlp:AuthnRequest>

Ključni elementi ovog zahteva uključuju:

  • AssertionConsumerServiceURL: Određuje gde IdP treba da pošalje SAML odgovor nakon autentifikacije.

  • Destination: Adresa IdP-a na koju se zahtev šalje.

  • ProtocolBinding: Definiše način prenosa poruka SAML protokola.

  • saml:Issuer: Identifikuje entitet koji je pokrenuo zahtev.

Nakon generisanja SAML zahteva, SP odgovara sa 302 preusmerenjem, usmeravajući pregledač na IdP sa SAML zahtevom kodiranim u zaglavlju HTTP odgovora Location. Parametar RelayState održava informacije o stanju tokom transakcije, osiguravajući da SP prepozna početni zahtev resursa prilikom primanja SAML odgovora. Parametar SAMLRequest je komprimirana i kodirana verzija sirovog XML isečka, koristeći Deflate kompresiju i base64 kodiranje.

Primer SAML odgovora

Možete pronaći potpuni SAML odgovor ovde. Ključni delovi odgovora uključuju:

  • ds:Signature: Ova sekcija, XML potpis, osigurava integritet i autentičnost izdavača tvrdnje. SAML odgovor u primeru sadrži dva ds:Signature elementa, jedan za poruku i drugi za tvrdnju.

  • saml:Assertion: Ovaj deo sadrži informacije o identitetu korisnika i eventualno druge atribute.

  • saml:Subject: Ovde se navodi glavni subjekt svih izjava u tvrdnji.

  • saml:StatusCode: Predstavlja status operacije u odgovoru na odgovarajući zahtev.

  • saml:Conditions: Detalji o uslovima kao što su važnost tvrdnje i određeni pružalac usluga.

  • saml:AuthnStatement: Potvrđuje da je IdP autentifikovao subjekt tvrdnje.

  • saml:AttributeStatement: Sadrži atribute koji opisuju subjekt tvrdnje.

Nakon SAML odgovora, proces uključuje 302 preusmerenje od strane IdP-a. To dovodi do POST zahteva ka URL-u Assertion Consumer Service (ACS) pružaoca usluga. POST zahtev uključuje parametre RelayState i SAMLResponse. ACS je odgovoran za obradu i validaciju SAML odgovora.

Nakon što se primi POST zahtev i validira SAML odgovor, pristup se odobrava zaštićenom resursu koji je korisnik prvobitno zahtevao. To se ilustruje sa GET zahtevom ka /secure/ endpointu i 200 OK odgovorom, što ukazuje na uspešan pristup resursu.

XML Potpisi

XML potpisi su svestrani i mogu potpisivati celo XML stablo ili određene elemente unutar njega. Mogu se primeniti na bilo koji XML objekat, ne samo na elemente odgovora. Ovo su ključne vrste XML potpisa:

Osnovna struktura XML potpisa

XML potpis se sastoji od osnovnih elemenata kako je prikazano:

<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>

Svaki Reference element označava određeni resurs koji se potpisuje, prepoznatljiv preko atributa URI.

Vrste XML potpisa

  1. Enveloped Signature: Ova vrsta potpisa je potomak resursa koji se potpisuje, što znači da se potpis nalazi unutar iste XML strukture kao i potpisani sadržaj.

Primer:

<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>

U enveloped potpisu, element ds:Transform specificira da je potpis omotan kroz algoritam enveloped-signature.

  1. Enveloping Signature: Za razliku od enveloped potpisa, enveloping potpisi obuhvataju resurs koji se potpisuje.

Primer:

<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
  1. Detached Signature: Ova vrsta je odvojena od sadržaja koji se potpisuje. Potpis i sadržaj postoje nezavisno, ali se održava veza između njih.

Primer:

<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>

Zaključno, XML potpisi pružaju fleksibilne načine za obezbeđivanje XML dokumenata, pri čemu svaka vrsta služi različitim strukturnim i sigurnosnim potrebama.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated