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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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 preko Container Registry:
- Pristup Resource Manager-u
- Kreiranje/brisanje registracije
- Postavljanje slike
- Preuzimanje 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, postavljanje i preuzimanje 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 č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 ime00000000-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 registar. 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 neadmin
). - Sa tokenom: Moguće je kreirati token sa specifičnom
scope map
(dozvole) za pristup registru. Zatim, moguće je koristiti ime tokena kao korisničko ime i bilo koju od generisanih lozinki za autentifikaciju na registar sadocker login -u <registry-name> -p <password> <registry-url>
- Sa Service Principal: Moguće je kreirati service principal i dodeliti ulogu kao
AcrPull
za preuzimanje slika. Zatim, biće moguće prijaviti se u registar koristeći SP appId kao korisničko ime i generisanu tajnu kao lozinku.
Primer skripte iz dokumentacije za generisanje SP sa pristupom preko registra:
#!/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ža
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 za ranjivosti.
Soft-delete
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 je potrebno navesti URL na koji ć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'.
Sa stanovišta 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 lokalnoj mreži.
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.
Kako bi klijenti pristupili registru iz Azure, token se generiše 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:
# 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 pridruženu njima.
Međutim, tasks mogu imati sistemsku i korisničku upravljanu identitet pridruženu 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 ime registra sadrži neka velika slova, treba koristiti samo mala slova u URL-u za pristup.
# 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>
Neautentifikovani Pristup
Az - Container Registry Unauth
Eskalacija Privilegija & Post Eksploatacija
Az - Container Registry Privesc
Reference
- 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
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.