Az - Container Registry

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

Azure Container Registry (ACR) je sigurna, privatna registracija koja vam omogućava da čuvate, upravljate i pristupate slikama kontejnera u Azure oblaku. Besprekorno se integriše sa nekoliko Azure usluga, pružajući automatizovane tokove izgradnje i implementacije na velikoj skali. Sa funkcijama kao što su geo-replikacija i skeniranje ranjivosti, ACR pomaže da se obezbedi sigurnost i usklađenost na nivou preduzeća za aplikacije u kontejnerima.

Dozvole

Ovo su različite dozvole prema dokumentaciji koje se mogu dodeliti nad Container Registry:

  • Pristup Resource Manager-u
  • Kreiranje/brisanje registracije
  • Push slike
  • Pull slike
  • Brisanje podataka o slici
  • Promena politika
  • Potpisivanje slika

Takođe postoje neke ugrađene uloge koje se mogu dodeliti, a moguće je i kreirati prilagođene uloge.

Autentifikacija

warning

Veoma je važno da, čak i ako ime registracije sadrži neka velika slova, uvek koristite mala slova za prijavu, push i pull slika.

Postoje 4 načina za autentifikaciju na ACR:

  • Sa Entra ID: Ovo je podrazumevani način autentifikacije na ACR. Koristi az acr login komandu za autentifikaciju na ACR. Ova komanda će sačuvati akreditive u ~/.docker/config.json datoteci. Štaviše, ako pokrećete ovu komandu iz okruženja bez pristupa docker socket-u, kao u cloud shell, moguće je koristiti --expose-token flag za dobijanje tokena za autentifikaciju na ACR. Zatim, da biste se autentifikovali, treba da koristite kao korisničko ime 00000000-0000-0000-0000-000000000000 kao: docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN
  • Sa administratorskim nalogom: Administratorski korisnik je podrazumevano onemogućen, ali može biti omogućen i tada će biti moguće pristupiti registru sa korisničkim imenom i lozinkom administratorskog naloga sa punim dozvolama za registraciju. Ovo je još uvek podržano jer neke Azure usluge to koriste. Imajte na umu da su za ovog korisnika kreirane 2 lozinke i obe su važeće. Možete ga omogućiti sa az acr update -n <acrName> --admin-enabled true. Imajte na umu da je korisničko ime obično ime registracije (a ne admin).
  • Sa tokenom: Moguće je kreirati token sa specifičnom scope map (dozvole) za pristup registru. Zatim, moguće je koristiti ovo ime tokena kao korisničko ime i neku od generisanih lozinki za autentifikaciju na registru sa docker login -u <registry-name> -p <password> aregistry-url>
  • Sa Service Principal: Moguće je kreirati service principal i dodeliti ulogu kao AcrPull za povlačenje slika. Zatim, biće moguće prijaviti se na registraciju koristeći SP appId kao korisničko ime i generisanu tajnu kao lozinku.

Primer skripte iz dokumentacije za generisanje SP sa pristupom nad registracijom:

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"

Enkripcija

Samo Premium SKU podržava enkripciju u mirovanju za slike i druge artefakte.

Mrežno povezivanje

Samo Premium SKU podržava privatne krajnje tačke. Ostali samo podržavaju javne pristupe. Javna krajnja tačka ima format <registry-name>.azurecr.io, a privatna krajnja tačka ima format <registry-name>.privatelink.azurecr.io. Iz tog razloga, ime registra mora biti jedinstveno u celoj Azure.

Microsoft Defender za Cloud

Ovo vam omogućava da skenirate slike u registru na ranjivosti.

Soft-deletion

Funkcija soft-delete vam omogućava da opravite obrisani registar unutar naznačenog broja dana. Ova funkcija je onemogućena po defaultu.

Webhook-ovi

Moguće je kreirati webhook-ove unutar registara. U ovom webhook-u potrebno je navesti URL gde će zahtev biti poslat svaki put kada se izvrši push ili delete akcija. Štaviše, Webhook-ovi mogu označiti opseg kako bi ukazali na repozitorijume (slike) koji će biti pogođeni. Na primer, 'foo:*' znači događaje pod repozitorijumom 'foo'.

Iz perspektive napadača, zanimljivo je proveriti ovo pre nego što se izvrši bilo kakva akcija u registru, i privremeno ga ukloniti ako je potrebno, kako bi se izbeglo otkrivanje.

Povezani registri

Ovo u suštini omogućava ogledanje slika iz jednog registra u drugi, obično smešten u lokalnom okruženju.

Ima 2 moda: ReadOnly i ReadWrite. U prvom, slike se samo preuzimaju iz izvornog registra, a u drugom, slike se takođe mogu gurnuti u izvorni registar.

Da bi klijenti pristupili registru iz Azure, generiše se token kada se koristi povezani registar.

Izvršenja i zadaci

Izvršenja i zadaci omogućavaju izvršavanje akcija vezanih za kontejnere u Azure koje ste obično morali raditi lokalno ili u CI/CD pipeline-u. Na primer, možete izgraditi, gurnuti i pokrenuti slike u registru.

Najlakši način za izgradnju i pokretanje kontejnera je korišćenje redovnog izvršenja:

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

Međutim, to će pokrenuti izvršenja koja nisu previše zanimljiva iz perspektive napadača jer nemaju nijednu upravljanu identitet.

Međutim, tasks mogu imati system and user managed identity pridružene njima. Ovi zadaci su korisni za escalate privileges u kontejneru. U odeljku o eskalaciji privilegija moguće je videti kako koristiti zadatke za eskalaciju privilegija.

Cache

Funkcija keširanja omogućava download images from an external repository i čuvanje novih verzija u registru. Zahteva da se konfigurišu neki credentials odabirom kredencijala iz Azure Vault-a.

Ovo je veoma zanimljivo iz perspektive napadača jer omogućava pivot to an external platform ako napadač ima dovoljno dozvola za pristup kredencijalima, download images from an external repository i konfigurisanje keša može se takođe koristiti kao persistence mechanism.

Enumeration

warning

Veoma je važno da, čak i ako naziv registra sadrži neka velika slova, treba koristiti samo mala slova u URL-u za pristup.

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>

Eskalacija privilegija i post eksploatacija

Az - Automation Accounts Privesc

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks