hacktricks/pentesting-web/saml-attacks/saml-basics.md

185 lines
13 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
# 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/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)**. Αυτή είναι μια περίληψη:
2021-06-09 17:02:14 +00:00
Η διαδικασία αυθεντικοποίησης SAML περιλαμβάνει αρκετά βήματα, όπως απεικονίζεται στο σχήμα:
2021-06-09 17:02:14 +00:00
2024-02-04 16:10:29 +00:00
![https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg](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. **Παραχώρηση Πρόσβασης σε Πόρο**: Η πρόσβαση στον αρχικά ζητούμενο πόρο παραχωρείται.
2021-06-09 17:02:14 +00:00
# SAML Request Example
2021-06-09 17:02:14 +00:00
Σκεφτείτε το σενάριο όπου ένας χρήστης ζητά πρόσβαση σε έναν ασφαλή πόρο στο [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/). Ο SP αναγνωρίζει την έλλειψη αυθεντικοποίησης και δημιουργεί ένα Αίτημα SAML:
```
2021-06-09 17:02:14 +00:00
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
2024-02-04 16:10:29 +00:00
...
2021-06-09 17:02:14 +00:00
```
Η αρχική SAML Αίτηση φαίνεται έτσι:
2024-02-04 16:10:29 +00:00
```xml
2021-06-09 17:02:14 +00:00
<?xml version="1.0"?>
2024-02-04 16:10:29 +00:00
<samlp:AuthnRequest ...
2021-06-09 17:02:14 +00:00
</samlp:AuthnRequest>
```
Key elements of this request include:
- **AssertionConsumerServiceURL**: Καθορίζει πού θα στείλει ο IdP την SAML Response μετά την αυθεντικοποίηση.
2024-02-10 22:40:18 +00:00
- **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
2021-06-09 17:02:14 +00:00
You can find a [full SAML response here](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/). The key components of the response include:
2021-06-09 17:02:14 +00:00
- **ds:Signature**: Αυτή η ενότητα, μια XML Signature, διασφαλίζει την ακεραιότητα και την αυθεντικότητα του εκδότη της δήλωσης. Η SAML response στο παράδειγμα περιέχει δύο στοιχεία `ds:Signature`, ένα για το μήνυμα και το άλλο για τη δήλωση.
- **saml:Assertion**: Αυτή η ενότητα περιέχει πληροφορίες σχετικά με την ταυτότητα του χρήστη και πιθανώς άλλες ιδιότητες.
- **saml:Subject**: Καθορίζει το κύριο υποκείμενο όλων των δηλώσεων στη δήλωση.
- **saml:StatusCode**: Αντιπροσωπεύει την κατάσταση της λειτουργίας σε απάντηση στο αντίστοιχο αίτημα.
- **saml:Conditions**: Λεπτομέρειες για τις συνθήκες όπως η χρονική εγκυρότητα της δήλωσης και ο καθορισμένος Παροχέας Υπηρεσιών.
- **saml:AuthnStatement**: Επιβεβαιώνει ότι ο IdP αυθεντικοποίησε το υποκείμενο της δήλωσης.
- **saml:AttributeStatement**: Περιέχει χαρακτηριστικά που περιγράφουν το υποκείμενο της δήλωσης.
2021-06-09 17:02:14 +00:00
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.
2021-06-09 17:02:14 +00:00
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.
2021-06-09 17:02:14 +00:00
# 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:
2024-02-10 22:40:18 +00:00
```xml
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
```
Κάθε `Reference` στοιχείο σηματοδοτεί μια συγκεκριμένη πηγή που υπογράφεται, αναγνωρίσιμη από την ιδιότητα URI.
2021-06-09 17:02:14 +00:00
### Τύποι Υπογραφών XML
2021-06-09 17:02:14 +00:00
1. **Ενσωματωμένη Υπογραφή**: Αυτός ο τύπος υπογραφής είναι απόγονος της πηγής που υπογράφει, πράγμα που σημαίνει ότι η υπογραφή περιέχεται μέσα στην ίδια δομή XML με το υπογεγραμμένο περιεχόμενο.
2024-02-10 22:40:18 +00:00
Παράδειγμα:
```xml
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
```
2021-06-09 17:02:14 +00:00
Σε μια ενσωματωμένη υπογραφή, το στοιχείο `ds:Transform` καθορίζει ότι είναι ενσωματωμένο μέσω του αλγορίθμου `enveloped-signature`.
2. **Ενσωματωτική Υπογραφή**: Σε αντίθεση με τις ενσωματωμένες υπογραφές, οι ενσωματωτικές υπογραφές τυλίγουν την πηγή που υπογράφεται.
2024-02-10 22:40:18 +00:00
Παράδειγμα:
```xml
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
```
3. **Αποσπασμένη Υπογραφή**: Αυτός ο τύπος είναι ξεχωριστός από το περιεχόμενο που υπογράφει. Η υπογραφή και το περιεχόμενο υπάρχουν ανεξάρτητα, αλλά διατηρείται μια σύνδεση μεταξύ των δύο.
2024-02-10 22:40:18 +00:00
Παράδειγμα:
2024-02-04 16:10:29 +00:00
```xml
2024-02-10 22:40:18 +00:00
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
```
Συμπερασματικά, οι Υπογραφές XML παρέχουν ευέλικτους τρόπους για την ασφάλιση εγγράφων XML, με κάθε τύπο να εξυπηρετεί διαφορετικές δομικές και ασφαλιστικές ανάγκες.
2024-02-10 22:40:18 +00:00
## Αναφορές
2024-02-04 16:10:29 +00:00
* [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}