Az - Container Registry
Reading time: 8 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundinformationen
Azure Container Registry (ACR) ist ein sicheres, privates Registry, das es Ihnen ermöglicht, Container-Images in der Azure-Cloud zu speichern, zu verwalten und darauf zuzugreifen. Es integriert sich nahtlos mit mehreren Azure-Diensten und bietet automatisierte Build- und Bereitstellungs-Workflows in großem Maßstab. Mit Funktionen wie Geo-Replikation und Schwachstellenscanning hilft ACR, die Sicherheit und Compliance auf Unternehmensniveau für containerisierte Anwendungen zu gewährleisten.
Berechtigungen
Dies sind die verschiedenen Berechtigungen laut den Dokumenten, die über ein Container Registry vergeben werden können:
- Zugriff auf den Resource Manager
- Erstellen/Löschen von Registries
- Bild hochladen
- Bild herunterladen
- Bilddaten löschen
- Richtlinien ändern
- Bilder signieren
Es gibt auch einige vordefinierte Rollen, die zugewiesen werden können, und es ist auch möglich, benutzerdefinierte Rollen zu erstellen.

Authentifizierung
warning
Es ist sehr wichtig, dass Sie, auch wenn der Registrierungsname einige Großbuchstaben enthält, immer Kleinbuchstaben verwenden, um sich anzumelden, Bilder hochzuladen und herunterzuladen.
Es gibt 4 Möglichkeiten, sich bei einem ACR zu authentifizieren:
- Mit Entra ID: Dies ist die Standard-Methode zur Authentifizierung bei einem ACR. Es verwendet den Befehl
az acr login, um sich beim ACR zu authentifizieren. Dieser Befehl speichert die Anmeldeinformationen in der~/.docker/config.json-Datei. Darüber hinaus, wenn Sie diesen Befehl aus einer Umgebung ohne Zugriff auf einen Docker-Socket wie in einer Cloud-Shell ausführen, ist es möglich, das--expose-token-Flag zu verwenden, um das Token zur Authentifizierung beim ACR zu erhalten. Um sich zu authentifizieren, müssen Sie den Benutzernamen00000000-0000-0000-0000-000000000000verwenden, wie:docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN - Mit einem Administratorkonto: Der Administratorkonto ist standardmäßig deaktiviert, kann jedoch aktiviert werden, und dann ist es möglich, auf die Registry mit dem Benutzernamen und Passwort des Administratorkontos mit vollständigen Berechtigungen für die Registry zuzugreifen. Dies wird weiterhin unterstützt, da einige Azure-Dienste es verwenden. Beachten Sie, dass 2 Passwörter für diesen Benutzer erstellt werden und beide gültig sind. Sie können es mit
az acr update -n <acrName> --admin-enabled trueaktivieren. Beachten Sie, dass der Benutzername normalerweise der Registrierungsname ist (und nichtadmin). - Mit einem Token: Es ist möglich, ein Token mit einem spezifischen
scope map(Berechtigungen) zu erstellen, um auf die Registry zuzugreifen. Dann ist es möglich, den Namen des Tokens als Benutzernamen und eines der generierten Passwörter zur Authentifizierung bei der Registry mitdocker login -u <registry-name> -p <password> <registry-url>zu verwenden. - Mit einem Service Principal: Es ist möglich, einen Service Principal zu erstellen und eine Rolle wie
AcrPullzuzuweisen, um Bilder herunterzuladen. Dann ist es möglich, sich mit der SP appId als Benutzernamen und einem generierten Geheimnis als Passwort bei der Registry anzumelden.
Beispielskript aus den Dokumenten zur Erstellung eines SP mit Zugriff auf eine Registry:
#!/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"
Verschlüsselung
Nur die Premium SKU unterstützt Verschlüsselung im Ruhezustand für die Images und andere Artefakte.
Netzwerk
Nur die Premium SKU unterstützt private Endpunkte. Die anderen unterstützen nur öffentlichen Zugriff. Ein öffentlicher Endpunkt hat das Format <registry-name>.azurecr.io und ein privater Endpunkt hat das Format <registry-name>.privatelink.azurecr.io. Aus diesem Grund muss der Name des Registrys in ganz Azure einzigartig sein.
Microsoft Defender für Cloud
Dies ermöglicht es Ihnen, die Images im Registry auf Schwachstellen zu scannen.
Soft-Delete
Die Soft-Delete-Funktion ermöglicht es Ihnen, ein gelöschtes Registry innerhalb der angegebenen Anzahl von Tagen wiederherzustellen. Diese Funktion ist standardmäßig deaktiviert.
Webhooks
Es ist möglich, Webhooks innerhalb von Registries zu erstellen. In diesem Webhook muss die URL angegeben werden, an die eine Anfrage gesendet wird, wann immer eine Push- oder Löschaktion durchgeführt wird. Darüber hinaus können Webhooks einen Scope angeben, um die Repositories (Images) zu kennzeichnen, die betroffen sein werden. Zum Beispiel bedeutet 'foo:*', dass Ereignisse unter dem Repository 'foo' stattfinden.
Aus der Perspektive eines Angreifers ist es interessant, dies vor der Durchführung einer Aktion im Registry zu überprüfen und es vorübergehend zu entfernen, wenn nötig, um eine Entdeckung zu vermeiden.
Verbundene Registries
Dies ermöglicht im Wesentlichen, die Images von einem Registry zu einem anderen, normalerweise lokal, zu spiegeln.
Es hat 2 Modi: ReadOnly und ReadWrite. Im ersten Modus werden die Images nur von dem Quell-Registry gezogen, und im zweiten Modus können Images auch in das Quell-Registry geschoben werden.
Damit Clients auf das Registry von Azure aus zugreifen können, wird ein Token generiert, wenn das verbundene Registry verwendet wird.
Ausführungen & Aufgaben
Ausführungen & Aufgaben ermöglichen es, in Azure containerbezogene Aktionen auszuführen, die Sie normalerweise lokal oder in einer CI/CD-Pipeline durchführen mussten. Zum Beispiel können Sie Images im Registry erstellen, pushen und ausführen.
Der einfachste Weg, einen Container zu erstellen und auszuführen, ist die Verwendung einer regulären Ausführung:
# 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
Allerdings wird dies Ausführungen auslösen, die aus der Perspektive eines Angreifers nicht besonders interessant sind, da ihnen keine verwaltete Identität zugeordnet ist.
Allerdings können Tasks eine System- und benutzerverwaltete Identität zugeordnet haben. Diese Tasks sind die nützlichsten, um Privilegien zu eskalieren im Container. Im Abschnitt zur Eskalation von Privilegien ist es möglich zu sehen, wie man Tasks zur Eskalation von Privilegien nutzen kann.
Cache
Die Cache-Funktion ermöglicht es, Bilder aus einem externen Repository herunterzuladen und die neuen Versionen im Registry zu speichern. Es erfordert, dass einige Anmeldeinformationen konfiguriert werden, indem die Anmeldeinformationen aus einem Azure Vault ausgewählt werden.
Dies ist aus der Perspektive eines Angreifers sehr interessant, da es ermöglicht, zu einer externen Plattform zu pivotieren, wenn der Angreifer genügend Berechtigungen hat, um auf die Anmeldeinformationen zuzugreifen. Bilder aus einem externen Repository herunterzuladen und einen Cache zu konfigurieren, könnte auch als Persistenzmechanismus verwendet werden.
Enumeration
warning
Es ist sehr wichtig, dass Sie, auch wenn der Registrierungsname einige Großbuchstaben enthält, nur Kleinbuchstaben in der URL verwenden, um darauf zuzugreifen.
# 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>
Unauthentifizierter Zugriff
Az - Container Registry Unauth
Privilegieneskalation & Post-Exploitation
Az - Container Registry Privesc
Referenzen
- 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
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud