Az - Container Registry

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Azure Container Registry (ACR), Azure bulutunda konteyner görüntülerini depolamanıza, yönetmenize ve erişmenize olanak tanıyan güvenli, özel bir kayıttır. Birçok Azure hizmetiyle sorunsuz bir şekilde entegre olur ve ölçeklenebilir otomatik yapı ve dağıtım iş akışları sağlar. Coğrafi çoğaltma ve güvenlik açığı taraması gibi özelliklerle, ACR, konteynerleştirilmiş uygulamalar için kurumsal düzeyde güvenlik ve uyumluluk sağlamaya yardımcı olur.

İzinler

Container Registry üzerinde verilebilecek farklı izinler belgelere göre:

  • Erişim Kaynak Yöneticisi
  • Kayıt oluşturma/silme
  • Görüntü yükleme
  • Görüntü indirme
  • Görüntü verilerini silme
  • Politika değiştirme
  • Görüntü imzalama

Ayrıca atanabilecek bazı yerleşik roller vardır ve özel roller oluşturmak da mümkündür.

Kimlik Doğrulama

Warning

Kayıt adı büyük harfler içeriyorsa bile, her zaman küçük harfler kullanarak giriş yapmanız, görüntü yüklemeniz ve indirmeniz çok önemlidir.

ACR’ye kimlik doğrulamak için 4 yol vardır:

  • Entra ID ile: Bu, ACR’ye kimlik doğrulamak için varsayılan yoldur. ACR’ye kimlik doğrulamak için az acr login komutunu kullanır. Bu komut, ~/.docker/config.json dosyasında kimlik bilgilerini saklar. Ayrıca, bu komutu bir bulut kabuğu gibi bir docker soketine erişimi olmayan bir ortamda çalıştırıyorsanız, ACR’ye kimlik doğrulamak için --expose-token bayrağını kullanarak token almanız mümkündür. Ardından kimlik doğrulamak için kullanıcı adı olarak 00000000-0000-0000-0000-000000000000 kullanmalısınız: docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN
  • Bir yönetici hesabı ile: Yönetici kullanıcı varsayılan olarak devre dışıdır, ancak etkinleştirilebilir ve ardından kayıt defterine tam izinlerle yönetici hesabının kullanıcı adı ve şifresi ile erişim sağlanabilir. Bazı Azure hizmetleri bunu kullandığı için bu hala desteklenmektedir. Bu kullanıcı için 2 şifre oluşturulur ve her ikisi de geçerlidir. Bunu az acr update -n <acrName> --admin-enabled true ile etkinleştirebilirsiniz. Kullanıcı adının genellikle kayıt adı olduğunu unutmayın (ve admin değildir).
  • Bir token ile: Kayıt defterine erişmek için belirli bir scope map (izinler) ile bir token oluşturmak mümkündür. Ardından, token adını kullanıcı adı olarak ve oluşturulan şifrelerden birini kullanarak kayıt defterine kimlik doğrulamak için docker login -u <registry-name> -p <password> <registry-url> komutunu kullanabilirsiniz.
  • Bir Hizmet Prensibi ile: Bir hizmet prensibi oluşturmak ve görüntüleri indirmek için AcrPull gibi bir rol atamak mümkündür. Ardından, SP appId’sini kullanıcı adı olarak ve oluşturulan bir sırrı şifre olarak kullanarak kayıt defterine giriş yapmak mümkün olacaktır.

Kayıt defterine erişim sağlayan bir SP oluşturmak için belgelerden örnek bir betik:

#!/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"

Şifreleme

Sadece Premium SKU görüntüler ve diğer nesneler için veri dinleniminde şifreleme desteği sunar.

Sadece Premium SKU özel uç noktalar destekler. Diğerleri sadece genel erişim destekler. Genel bir uç nokta <registry-name>.azurecr.io formatındadır ve özel bir uç nokta <registry-name>.privatelink.azurecr.io formatındadır. Bu nedenle, kayıt defterinin adı tüm Azure genelinde benzersiz olmalıdır.

Microsoft Defender for Cloud

Bu, kayıt defterindeki görüntüleri zafiyetler için taramanıza olanak tanır.

Yumuşak silme

Yumuşak silme özelliği, belirtilen gün sayısı içinde silinmiş bir kayıt defterini geri yüklemenize olanak tanır. Bu özellik varsayılan olarak devre dışıdır.

Webhook’lar

Kayıt defterleri içinde webhook’lar oluşturmak mümkündür. Bu webhook’ta, bir push veya silme işlemi gerçekleştirildiğinde bir isteğin gönderileceği URL’yi belirtmek gerekir. Ayrıca, Webhook’lar etkilenecek depoları (görüntüleri) belirtmek için bir kapsam gösterebilir. Örneğin, ‘foo:*’ ‘foo’ deposu altındaki olayları ifade eder.

Saldırganlar açısından, kayıt defterinde herhangi bir işlem gerçekleştirmeden önce bunu kontrol etmek ve gerekirse geçici olarak kaldırmak ilginçtir, böylece tespit edilmekten kaçınılabilir.

Bağlı kayıt defterleri

Bu, bir kayıt defterinden diğerine, genellikle yerel olarak bulunan bir kayıt defterine görüntüleri yansıtmanıza olanak tanır.

2 modu vardır: Sadece Okuma ve Okuma-Yazma. İlkinde, görüntüler yalnızca kaynak kayıt defterinden çekilir, ikincisinde ise görüntüler kaynak kayıt defterine de itilebilir.

Müşterilerin Azure’dan kayıt defterine erişmesi için, bağlı kayıt defteri kullanıldığında bir token oluşturulur.

Çalışmalar & Görevler

Çalışmalar & Görevler, Azure’da genellikle yerel olarak veya bir CI/CD boru hattında yapmanız gereken konteynerle ilgili eylemleri gerçekleştirmenizi sağlar. Örneğin, kayıt defterinde görüntüleri oluşturabilir, itebilir ve çalıştırabilirsiniz.

Bir konteyneri oluşturmanın ve çalıştırmanın en kolay yolu, normal bir Çalışma kullanmaktır:

# 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

Ancak, bu, saldırganlar açısından çok ilginç olmayan çalışmaları tetikleyecektir çünkü onlara bağlı herhangi bir yönetilen kimlik yoktur.

Ancak, görevler bir sistem ve kullanıcı yönetilen kimliği ile ilişkilendirilebilir. Bu görevler, konteynerde yetki yükseltmek için faydalıdır. Yetki yükseltme bölümünde, görevlerin nasıl kullanılacağını görebilirsiniz.

Önbellek

Önbellek özelliği, harici bir depodan görüntüleri indirmeye ve yeni sürümleri kayıt defterinde saklamaya olanak tanır. Bunun için, Azure Vault’tan kimlik bilgilerini seçerek bazı kimlik bilgileri yapılandırılmış olmalıdır.

Bu, saldırganlar açısından çok ilginçtir çünkü yeterli izinlere sahiplerse harici bir platforma geçiş yapmalarına olanak tanır, harici bir depodan görüntüleri indirmek ve bir önbellek yapılandırmak da kalıcılık mekanizması olarak kullanılabilir.

Sayım

Warning

Kayıt defteri adı bazı büyük harfler içerse bile, ona erişmek için url’de yalnızca küçük harfler kullanmanız çok önemlidir.

# 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>

Kimlik Doğrulaması Olmadan Erişim

Az - Container Registry Unauth

Yetki Yükseltme & Sonrası İstismar

Az - Container Registry Privesc

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin