Az - Container Registry
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Basic Information
Το Azure Container Registry (ACR) είναι ένα ασφαλές, ιδιωτικό μητρώο που σας επιτρέπει να αποθηκεύετε, διαχειρίζεστε και έχετε πρόσβαση σε εικόνες κοντέινερ στο Azure cloud. Ενσωματώνεται απρόσκοπτα με πολλές υπηρεσίες Azure, παρέχοντας αυτοματοποιημένες ροές εργασίας κατασκευής και ανάπτυξης σε κλίμακα. Με δυνατότητες όπως η γεωγραφική αναπαραγωγή και η σάρωση ευπαθειών, το ACR βοηθά στην εξασφάλιση ασφάλειας επιπέδου επιχείρησης και συμμόρφωσης για εφαρμογές κοντέινερ.
Permissions
Αυτές είναι οι διαφορετικές άδειες σύμφωνα με τα έγγραφα που μπορούν να δοθούν σε ένα 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 <acrName> --admin-enabled true. Σημειώστε ότι το όνομα χρήστη είναι συνήθως το όνομα του μητρώου (και όχιadmin). - Με ένα token: Είναι δυνατή η δημιουργία ενός token με έναν συγκεκριμένο
scope map(άδειες) για πρόσβαση στο μητρώο. Στη συνέχεια, είναι δυνατή η χρήση του ονόματος του token ως όνομα χρήστη και οποιουδήποτε από τους παραγόμενους κωδικούς πρόσβασης για να αυθεντικοποιηθείτε στο μητρώο μεdocker login -u <registry-name> -p <password> <registry-url> - Με έναν Service Principal: Είναι δυνατή η δημιουργία ενός service principal και η ανάθεση ενός ρόλου όπως
AcrPullγια να κάνετε pull εικόνες. Στη συνέχεια, θα είναι δυνατή η σύνδεση στο μητρώο χρησιμοποιώντας το appId του SP ως όνομα χρήστη και έναν παραγόμενο μυστικό ως κωδικό πρόσβασης.
Παράδειγμα script από τα έγγραφα για τη δημιουργία ενός SP με πρόσβαση σε ένα μητρώο:
#!/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. Για παράδειγμα, μπορείτε να κατασκευάσετε, να ωθήσετε και να εκτελέσετε εικόνες στο μητρώο.
Ο ευκολότερος τρόπος για να κατασκευάσετε και να εκτελέσετε ένα κοντέινερ είναι χρησιμοποιώντας μια κανονική Εκτέλεση:
# 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 για να έχετε πρόσβαση σε αυτό.
# 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>
Μη Αυθεντικοποιημένη Πρόσβαση
Az - Container Registry Unauth
Κλιμάκωση Δικαιωμάτων & Μετά την Εκμετάλλευση
Az - Container Registry Privesc
Αναφορές
- 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
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

