SAML Basics

Support HackTricks

SAML Overview

Η Γλώσσα Σημειώσεων Ασφαλείας (SAML) επιτρέπει στους παρόχους ταυτότητας (IdP) να χρησιμοποιούνται για την αποστολή διαπιστευτηρίων εξουσιοδότησης στους παρόχους υπηρεσιών (SP), διευκολύνοντας την ενιαία είσοδο (SSO). Αυτή η προσέγγιση απλοποιεί τη διαχείριση πολλαπλών συνδέσεων επιτρέποντας τη χρήση ενός μόνο συνόλου διαπιστευτηρίων σε πολλαπλές ιστοσελίδες. Εκμεταλλεύεται το XML για τυποποιημένη επικοινωνία μεταξύ IdPs και SPs, συνδέοντας την αυθεντικοποίηση της ταυτότητας του χρήστη με την εξουσιοδότηση υπηρεσίας.

Comparison between SAML and OAuth

  • SAML είναι προσαρμοσμένο για να παρέχει στις επιχειρήσεις μεγαλύτερο έλεγχο στην ασφάλεια σύνδεσης SSO.

  • OAuth έχει σχεδιαστεί για να είναι πιο φιλικό προς κινητές συσκευές, χρησιμοποιεί JSON και είναι μια συνεργατική προσπάθεια από εταιρείες όπως η Google και η Twitter.

SAML Authentication Flow

Για περισσότερες λεπτομέρειες δείτε την πλήρη ανάρτηση από https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/. Αυτή είναι μια περίληψη:

Η διαδικασία αυθεντικοποίησης SAML περιλαμβάνει αρκετά βήματα, όπως απεικονίζεται στο σχήμα:

https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg
  1. Απόπειρα Πρόσβασης σε Πόρο: Ο χρήστης προσπαθεί να αποκτήσει πρόσβαση σε έναν προστατευμένο πόρο.

  2. Δημιουργία Αιτήματος SAML: Ο SP δεν αναγνωρίζει τον χρήστη και δημιουργεί ένα Αίτημα SAML.

  3. Ανακατεύθυνση στον IdP: Ο χρήστης ανακατευθύνεται στον IdP, με το Αίτημα SAML να περνάει μέσω του προγράμματος περιήγησης του χρήστη.

  4. Λήψη Αιτήματος από τον IdP: Ο IdP λαμβάνει το Αίτημα SAML.

  5. Αυθεντικοποίηση στον IdP: Ο IdP αυθεντικοποιεί τον χρήστη.

  6. Επικύρωση Χρήστη: Ο IdP επικυρώνει τη νομιμότητα του χρήστη για πρόσβαση στον ζητούμενο πόρο.

  7. Δημιουργία Απόκρισης SAML: Ο IdP δημιουργεί μια Απόκριση SAML που περιέχει τις απαραίτητες δηλώσεις.

  8. Ανακατεύθυνση στη Διεύθυνση ACS του SP: Ο χρήστης ανακατευθύνεται στη Διεύθυνση Υπηρεσίας Καταναλωτή Δηλώσεων (ACS) του SP.

  9. Επικύρωση Απόκρισης SAML: Ο ACS επικυρώνει την Απόκριση SAML.

  10. Παραχώρηση Πρόσβασης σε Πόρο: Η πρόσβαση στον αρχικά ζητούμενο πόρο παραχωρείται.

SAML Request Example

Σκεφτείτε το σενάριο όπου ένας χρήστης ζητά πρόσβαση σε έναν ασφαλή πόρο στο https://shibdemo-sp1.test.edu/secure/. Ο SP αναγνωρίζει την έλλειψη αυθεντικοποίησης και δημιουργεί ένα Αίτημα SAML:

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

Η αρχική SAML Αίτηση φαίνεται έτσι:

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

Key elements of this request include:

  • AssertionConsumerServiceURL: Καθορίζει πού θα στείλει ο IdP την SAML Response μετά την αυθεντικοποίηση.

  • Destination: Η διεύθυνση του IdP στην οποία αποστέλλεται το αίτημα.

  • ProtocolBinding: Ορίζει τη μέθοδο μετάδοσης των μηνυμάτων πρωτοκόλλου SAML.

  • saml:Issuer: Αναγνωρίζει την οντότητα που ξεκίνησε το αίτημα.

Following the SAML Request generation, the SP responds with a 302 redirect, directing the browser to the IdP with the SAML Request encoded in the HTTP response's Location header. The RelayState parameter maintains the state information throughout the transaction, ensuring the SP recognizes the initial resource request upon receiving the SAML Response. The SAMLRequest parameter is a compressed and encoded version of the raw XML snippet, utilizing Deflate compression and base64 encoding.

SAML Response Example

You can find a full SAML response here. The key components of the response include:

  • ds:Signature: Αυτή η ενότητα, μια XML Signature, διασφαλίζει την ακεραιότητα και την αυθεντικότητα του εκδότη της δήλωσης. Η SAML response στο παράδειγμα περιέχει δύο στοιχεία ds:Signature, ένα για το μήνυμα και το άλλο για τη δήλωση.

  • saml:Assertion: Αυτή η ενότητα περιέχει πληροφορίες σχετικά με την ταυτότητα του χρήστη και πιθανώς άλλες ιδιότητες.

  • saml:Subject: Καθορίζει το κύριο υποκείμενο όλων των δηλώσεων στη δήλωση.

  • saml:StatusCode: Αντιπροσωπεύει την κατάσταση της λειτουργίας σε απάντηση στο αντίστοιχο αίτημα.

  • saml:Conditions: Λεπτομέρειες για τις συνθήκες όπως η χρονική εγκυρότητα της δήλωσης και ο καθορισμένος Παροχέας Υπηρεσιών.

  • saml:AuthnStatement: Επιβεβαιώνει ότι ο IdP αυθεντικοποίησε το υποκείμενο της δήλωσης.

  • saml:AttributeStatement: Περιέχει χαρακτηριστικά που περιγράφουν το υποκείμενο της δήλωσης.

Following the SAML Response, the process includes a 302 redirect from the IdP. This leads to a POST request to the Service Provider's Assertion Consumer Service (ACS) URL. The POST request includes RelayState and SAMLResponse parameters. The ACS is responsible for processing and validating the SAML Response.

After the POST request is received and the SAML Response is validated, access is granted to the protected resource initially requested by the user. This is illustrated with a GET request to the /secure/ endpoint and a 200 OK response, indicating successful access to the resource.

XML Signatures

XML Signatures are versatile, capable of signing an entire XML tree or specific elements within it. They can be applied to any XML Object, not just Response elements. Below are the key types of XML Signatures:

Basic Structure of XML Signature

An XML Signature consists of essential elements as shown:

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

Κάθε Reference στοιχείο σηματοδοτεί μια συγκεκριμένη πηγή που υπογράφεται, αναγνωρίσιμη από την ιδιότητα URI.

Τύποι Υπογραφών XML

  1. Ενσωματωμένη Υπογραφή: Αυτός ο τύπος υπογραφής είναι απόγονος της πηγής που υπογράφει, πράγμα που σημαίνει ότι η υπογραφή περιέχεται μέσα στην ίδια δομή XML με το υπογεγραμμένο περιεχόμενο.

Παράδειγμα:

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

Σε μια ενσωματωμένη υπογραφή, το στοιχείο ds:Transform καθορίζει ότι είναι ενσωματωμένο μέσω του αλγορίθμου enveloped-signature.

  1. Ενσωματωτική Υπογραφή: Σε αντίθεση με τις ενσωματωμένες υπογραφές, οι ενσωματωτικές υπογραφές τυλίγουν την πηγή που υπογράφεται.

Παράδειγμα:

<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
  1. Αποσπασμένη Υπογραφή: Αυτός ο τύπος είναι ξεχωριστός από το περιεχόμενο που υπογράφει. Η υπογραφή και το περιεχόμενο υπάρχουν ανεξάρτητα, αλλά διατηρείται μια σύνδεση μεταξύ των δύο.

Παράδειγμα:

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

Συμπερασματικά, οι Υπογραφές XML παρέχουν ευέλικτους τρόπους για την ασφάλιση εγγράφων XML, με κάθε τύπο να εξυπηρετεί διαφορετικές δομικές και ασφαλιστικές ανάγκες.

Αναφορές

Support HackTricks

Last updated