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

183 lines
9.5 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin<strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
# SAML Genel Bakış
2024-02-10 18:14:16 +00:00
**Security Assertion Markup Language (SAML)**, kimlik sağlayıcıların (IdP) yetkilendirme kimlik bilgilerini hizmet sağlayıcılara (SP) göndermek için kullanılmasını sağlayarak tek oturum açma (SSO) işlemini kolaylaştırır. Bu yaklaşım, tek bir kimlik bilgisi kümesinin birden çok web sitesinde kullanılmasına izin vererek çoklu oturum açma yönetimini basitleştirir. Kimlik sağlayıcılar ve hizmet sağlayıcılar arasında standartlaştırılmış iletişim için XML'yi kullanır ve kullanıcı kimliğinin kimlik doğrulamasını hizmet yetkilendirmesiyle bağlar.
2024-02-10 18:14:16 +00:00
## SAML ve OAuth Karşılaştırması
2024-02-10 18:14:16 +00:00
- **SAML**, SSO oturum açma güvenliği üzerinde daha fazla kontrol sağlamak için kurumlara yöneliktir.
- **OAuth**, daha mobil dostu olacak şekilde tasarlanmıştır, JSON kullanır ve Google ve Twitter gibi şirketlerin işbirliğiyle geliştirilmiştir.
2024-02-10 18:14:16 +00:00
# SAML Kimlik Doğrulama Akışı
2024-02-10 18:14:16 +00:00
**Daha fazla ayrıntı için [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/)** adresindeki tam yazıya bakın. İşte bir özet:
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
SAML kimlik doğrulama süreci, şemada gösterildiği gibi birkaç adımdan oluşur:
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)
2024-02-10 18:14:16 +00:00
1. **Kaynak Erişim Denemesi**: Kullanıcı, korumalı bir kaynağa erişmeye çalışır.
2. **SAML İstemi Oluşturma**: SP, kullanıcıyı tanımaz ve bir SAML İsteği oluşturur.
3. **IdP'ye Yönlendirme**: Kullanıcı, SAML İsteği tarayıcısı aracılığıyla geçerek IdP'ye yönlendirilir.
4. **IdP İstemi Alır**: IdP, SAML İsteğini alır.
5. **IdP'de Kimlik Doğrulama**: IdP, kullanıcının kimliğini doğrular.
6. **Kullanıcı Doğrulaması**: IdP, kullanıcının istenen kaynağa erişim yetkisini doğrular.
7. **SAML Yanıtı Oluşturma**: IdP, gerekli bildirimleri içeren bir SAML Yanıtı oluşturur.
8. **SP'nin ACS URL'sine Yönlendirme**: Kullanıcı, SP'nin Assertion Consumer Service (ACS) URL'sine yönlendirilir.
9. **SAML Yanıtı Doğrulama**: ACS, SAML Yanıtını doğrular.
10. **Kaynak Erişimi Onaylandı**: İlk olarak istenen kaynağa erişim sağlanır.
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
# SAML İstemi Örneği
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
Bir kullanıcının [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/) adresindeki güvenli bir kaynağa erişim isteğini düşünelim. SP, kimlik doğrulamasının eksik olduğunu tespit eder ve bir SAML İsteği oluşturur:
```
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
```
2024-02-10 18:14:16 +00:00
SAML İsteği şu şekilde görünür:
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>
```
2024-02-10 18:14:16 +00:00
Bu isteğin temel unsurları şunlardır:
- **AssertionConsumerServiceURL**: IdP'nin SAML Yanıtını kimlik doğrulamasından sonra göndermesi gereken yerin belirlendiği yerdir.
- **Destination**: İsteğin gönderildiği IdP'nin adresidir.
- **ProtocolBinding**: SAML protokolü mesajlarının iletim yöntemini tanımlar.
- **saml:Issuer**: İsteği başlatan varlığı tanımlar.
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
SAML İsteği oluşturulduktan sonra, SP, tarayıcıyı SAML İsteğini HTTP yanıtının **Location** başlığında kodlanmış olarak içeren IdP'ye yönlendiren bir **302 yönlendirmesi** ile yanıt verir. **RelayState** parametresi, işlem boyunca durum bilgisini korur ve SP, SAML Yanıtını aldığında başlangıç kaynağı isteğini tanır. **SAMLRequest** parametresi, ham XML parçacığının sıkıştırılmış ve kodlanmış bir sürümüdür ve Deflate sıkıştırma ve base64 kodlama kullanır.
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
# SAML Yanıtı Örneği
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
[İşte tam bir SAML yanıtı](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/) bulabilirsiniz. Yanıtın temel bileşenleri şunları içerir:
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
- **ds:Signature**: Bu bölüm, bir XML İmzasıdır ve beyanın yayıncısının bütünlüğünü ve otantikliğini sağlar. Örnekteki SAML yanıtı, mesaj için bir `ds:Signature` öğesi ve beyan için başka bir `ds:Signature` öğesi içerir.
- **saml:Assertion**: Bu bölüm, kullanıcının kimlik bilgilerini ve olası diğer öznitelikleri içerir.
- **saml:Subject**: Beyanda yer alan tüm ifadelerin temel konusunu belirtir.
- **saml:StatusCode**: İlgili isteğe yanıt olarak işlemin durumunu temsil eder.
- **saml:Conditions**: Beyanın geçerlilik zamanlaması ve belirtilen Hizmet Sağlayıcı gibi koşulları ayrıntılandırır.
- **saml:AuthnStatement**: Beyanın konusunun IdP tarafından kimlik doğrulandığını onaylar.
- **saml:AttributeStatement**: Beyanın konusunu tanımlayan öznitelikleri içerir.
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
SAML Yanıtını takiben, süreç IdP'den bir 302 yönlendirmesi içerir. Bu, Hizmet Sağlayıcının Assertion Consumer Service (ACS) URL'sine bir POST isteği yapılmasına yol açar. POST isteği, `RelayState` ve `SAMLResponse` parametrelerini içerir. ACS, SAML Yanıtını işlemek ve doğrulamakla sorumludur.
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
POST isteği alındıktan ve SAML Yanıtı doğrulandıktan sonra, kullanıcının başlangıçta istediği korumalı kaynağa erişim sağlanır. Bu, `/secure/` uç noktasına bir `GET` isteği ve başarılı erişimi gösteren bir `200 OK` yanıtı ile gösterilir.
2021-06-09 17:02:14 +00:00
2024-02-10 18:14:16 +00:00
# XML İmzaları
2024-02-10 18:14:16 +00:00
XML İmzaları çok yönlüdür ve bir XML ağacının tamamını veya belirli öğelerini imzalayabilir. Bunlar yalnızca Yanıt öğelerine değil, herhangi bir XML Nesnesine uygulanabilir. Aşağıda XML İmzalarının temel türleri bulunmaktadır:
2024-02-10 18:14:16 +00:00
### XML İmzasının Temel Yapısı
Bir XML İmzası, aşağıdaki temel öğelerden oluşur:
2024-02-04 16:10:29 +00:00
```xml
<Signature>
2024-02-10 18:14:16 +00:00
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
```
2024-02-10 18:14:16 +00:00
Her bir `Reference` öğesi, URI özniteliği ile belirlenen belirli bir kaynağın imzalandığını gösterir.
### XML İmzalarının Türleri
1. **Kapsayan İmza**: Bu tür bir imza, imzalanan içeriğin bir alt öğesi olup, imza, imzalanan içerikle aynı XML yapısı içinde bulunur.
Örnek:
```xml
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
```
Kapsayan bir imzada, `ds:Transform` öğesi, `enveloped-signature` algoritmasıyla kapsandığını belirtir.
2024-02-10 18:14:16 +00:00
2. **Kapsayan İmza**: Kapsayan imzalar, imzalanan kaynağı saran imzalardır.
Örnek:
```xml
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
```
3. **Ayrı İmza**: Bu tür, imzaladığı içerikten ayrıdır. İmza ve içerik bağımsız olarak var olsa da, ikisi arasındaki bir bağlantı korunur.
Örnek:
```xml
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
```
Sonuç olarak, XML İmzaları, farklı yapısal ve güvenlik ihtiyaçlarını karşılayan esnek yöntemler sunar.
## Referanslar
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
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>AWS hackleme konusunda sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>'ı öğrenin!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'i desteklemenin diğer yolları:
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* Şirketinizi HackTricks'te **reklamınızı yapmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live).
* Hacking hilelerinizi [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.
2022-04-28 16:01:33 +00:00
</details>