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

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 login do 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-token do uzyskania tokena do uwierzytelnienia w ACR. Następnie, aby się uwierzytelnić, musisz użyć jako nazwy użytkownika 00000000-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 nie admin).
  • 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

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