Az - Container Registry
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Podstawowe informacje
Azure Container Registry (ACR) to bezpieczny, prywatny rejestr, który pozwala na przechowywanie, zarządzanie i uzyskiwanie dostępu do obrazów kontenerów w chmurze Azure. Integruje się bezproblemowo z wieloma usługami Azure, zapewniając zautomatyzowane procesy budowy i wdrażania na dużą skalę. Dzięki funkcjom takim jak geo-replikacja i skanowanie podatności, ACR pomaga zapewnić bezpieczeństwo i zgodność na poziomie przedsiębiorstwa dla aplikacji kontenerowych.
Uprawnienia
To są różne uprawnienia zgodnie z dokumentacją, które można przyznać w rejestrze kontenerów:
- Dostęp do Resource Manager
- Tworzenie/usuwanie rejestru
- Wysyłanie obrazu
- Pobieranie obrazu
- Usuwanie danych obrazu
- Zmiana polityk
- Podpisywanie obrazów
Istnieją również wbudowane role, które można przypisać, a także możliwe jest tworzenie niestandardowych ról.

Uwierzytelnianie
Warning
Bardzo ważne jest, aby nawet jeśli nazwa rejestru zawiera wielkie litery, zawsze używać małych liter do logowania, wysyłania i pobierania obrazów.
Istnieją 4 sposoby uwierzytelniania w ACR:
- Z Entra ID: To jest domyślny sposób uwierzytelniania w ACR. Używa polecenia
az acr logindo uwierzytelnienia w ACR. To polecenie przechowa dane logowania w pliku~/.docker/config.json. Ponadto, jeśli uruchamiasz to polecenie z środowiska bez dostępu do gniazda dockera, jak w cloud shell, możliwe jest użycie flagi--expose-tokendo uzyskania tokena do uwierzytelnienia w ACR. Następnie, aby się uwierzytelnić, musisz użyć jako nazwy użytkownika00000000-0000-0000-0000-000000000000, jak:docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN - Z kontem administratora: Użytkownik administratora jest domyślnie wyłączony, ale można go włączyć, a następnie będzie możliwe uzyskanie dostępu do rejestru za pomocą nazwa użytkownika i hasła konta administratora z pełnymi uprawnieniami do rejestru. To wciąż jest wspierane, ponieważ niektóre usługi Azure z tego korzystają. Zauważ, że dla tego użytkownika tworzone są 2 hasła i oba są ważne. Możesz to włączyć za pomocą
az acr update -n <acrName> --admin-enabled true. Zauważ, że nazwa użytkownika to zazwyczaj nazwa rejestru (a nieadmin). - Z tokenem: Możliwe jest utworzenie tokena z konkretną mapą zakresu (uprawnienia) do uzyskania dostępu do rejestru. Następnie można użyć nazwy tokena jako nazwy użytkownika i dowolnego z wygenerowanych haseł do uwierzytelnienia w rejestrze za pomocą
docker login -u <registry-name> -p <password> <registry-url> - Z Service Principal: Możliwe jest utworzenie service principal i przypisanie roli, takiej jak
AcrPull, do pobierania obrazów. Następnie będzie możliwe logowanie do rejestru przy użyciu appId SP jako nazwy użytkownika i wygenerowanego sekretu jako hasła.
Przykładowy skrypt z dokumentacji do wygenerowania SP z dostępem do rejestru:
#!/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"
Szyfrowanie
Tylko Premium SKU obsługuje szyfrowanie w spoczynku dla obrazów i innych artefaktów.
Sieć
Tylko Premium SKU obsługuje prywatne punkty końcowe. Pozostałe obsługują tylko publiczny dostęp. Publiczny punkt końcowy ma format <registry-name>.azurecr.io, a prywatny punkt końcowy ma format <registry-name>.privatelink.azurecr.io. Z tego powodu nazwa rejestru musi być unikalna w całym Azure.
Microsoft Defender for Cloud
To pozwala na skanowanie obrazów w rejestrze pod kątem luk.
Miękkie usuwanie
Funkcja miękkiego usuwania pozwala na odzyskanie usuniętego rejestru w ciągu wskazanej liczby dni. Ta funkcja jest domyślnie wyłączona.
Webhooki
Możliwe jest tworzenie webhooków wewnątrz rejestrów. W tym webhooku należy określić URL, na który żądanie będzie wysyłane za każdym razem, gdy wykonana zostanie akcja push lub delete. Ponadto, webhooki mogą wskazywać zakres, aby określić repozytoria (obrazy), które będą dotknięte. Na przykład, ‘foo:*’ oznacza zdarzenia w repozytorium ‘foo’.
Z perspektywy atakującego interesujące jest sprawdzenie tego przed wykonaniem jakiejkolwiek akcji w rejestrze i tymczasowe usunięcie go, jeśli to konieczne, aby uniknąć wykrycia.
Połączone rejestry
To zasadniczo pozwala na lustrację obrazów z jednego rejestru do drugiego, zazwyczaj zlokalizowanego lokalnie.
Ma 2 tryby: ReadOnly i ReadWrite. W pierwszym obrazy są tylko pobierane z rejestru źródłowego, a w drugim obrazy mogą być również wysyłane do rejestru źródłowego.
Aby klienci mogli uzyskać dostęp do rejestru z Azure, generowany jest token, gdy używany jest połączony rejestr.
Uruchomienia i zadania
Uruchomienia i zadania pozwalają na wykonywanie w Azure działań związanych z kontenerami, które zazwyczaj trzeba było wykonywać lokalnie lub w pipeline CI/CD. Na przykład, możesz budować, wysyłać i uruchamiać obrazy w rejestrze.
Najłatwiejszym sposobem na zbudowanie i uruchomienie kontenera jest użycie zwykłego uruchomienia:
# 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
Jednak to wywoła uruchomienia, które nie są zbyt interesujące z perspektywy atakującego, ponieważ nie mają do nich przypisanej żadnej zarządzanej tożsamości.
Jednak zadania mogą mieć przypisaną systemową i użytkownikową zarządzaną tożsamość. Te zadania są przydatne do eskalacji uprawnień w kontenerze. W sekcji eskalacji uprawnień można zobaczyć, jak używać zadań do eskalacji uprawnień.
Cache
Funkcja cache pozwala na pobieranie obrazów z zewnętrznego repozytorium i przechowywanie nowych wersji w rejestrze. Wymaga to skonfigurowania pewnych poświadczeń poprzez wybór poświadczeń z Azure Vault.
To jest bardzo interesujące z perspektywy atakującego, ponieważ pozwala na przejście do zewnętrznej platformy, jeśli atakujący ma wystarczające uprawnienia do uzyskania dostępu do poświadczeń, pobieranie obrazów z zewnętrznego repozytorium i konfigurowanie cache może być również użyte jako mechanizm utrzymywania dostępu.
Enumeration
Warning
Bardzo ważne jest, aby nawet jeśli nazwa rejestru zawiera wielkie litery, należy używać tylko małych liter w adresie URL, aby uzyskać do niego dostęp.
# 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>
Nieautoryzowany dostęp
Az - Container Registry Unauth
Eskalacja uprawnień i post eksploitacja
Az - Container Registry Privesc
Odniesienia
- 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
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

