Az - Container Registry

Reading time: 7 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Основна інформація

Azure Container Registry (ACR) - це безпечний, приватний реєстр, який дозволяє вам зберігати, керувати та отримувати доступ до контейнерних зображень в хмарі Azure. Він безшовно інтегрується з кількома службами Azure, забезпечуючи автоматизовані робочі процеси збірки та розгортання в масштабах. Завдяки таким функціям, як гео-реплікація та сканування вразливостей, ACR допомагає забезпечити безпеку та відповідність корпоративного рівня для контейнеризованих додатків.

Дозволи

Це різні дозволи згідно з документацією, які можуть бути надані над реєстром контейнерів:

  • Доступ до Resource Manager
  • Створення/видалення реєстру
  • Завантаження зображення
  • Витягування зображення
  • Видалення даних зображення
  • Зміна політик
  • Підписування зображень

Існують також деякі вбудовані ролі, які можуть бути призначені, і також можливо створити кастомні ролі.

Аутентифікація

warning

Дуже важливо, що навіть якщо ім'я реєстру містить великі літери, ви завжди повинні використовувати малі літери для входу, завантаження та витягування зображень.

Існує 4 способи аутентифікації до ACR:

  • З Entra ID: Це за замовчуванням спосіб аутентифікації до ACR. Він використовує команду az acr login для аутентифікації до ACR. Ця команда зберігає облікові дані у файлі ~/.docker/config.json. Більше того, якщо ви виконуєте цю команду з середовища без доступу до сокета docker, як у хмарному терміналі, можливо використовувати прапорець --expose-token для отримання токена для аутентифікації до ACR. Потім для аутентифікації потрібно використовувати як ім'я користувача 00000000-0000-0000-0000-000000000000, наприклад: docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN
  • З обліковим записом адміністратора: Обліковий запис адміністратора за замовчуванням вимкнений, але його можна увімкнути, і тоді буде можливість отримати доступ до реєстру з ім'ям користувача та паролем облікового запису адміністратора з повними правами на реєстр. Це все ще підтримується, оскільки деякі служби Azure його використовують. Зверніть увагу, що для цього користувача створюються 2 паролі, і обидва є дійсними. Ви можете увімкнути його за допомогою az acr update -n <acrName> --admin-enabled true. Зверніть увагу, що ім'я користувача зазвичай є ім'ям реєстру (а не admin).
  • З токеном: Можливо створити токен з конкретною scope map (дозволами) для доступу до реєстру. Потім можливо використовувати це ім'я токена як ім'я користувача та деякий згенерований пароль для аутентифікації до реєстру за допомогою docker login -u <registry-name> -p <password> aregistry-url>
  • З сервісним принципалом: Можливо створити сервісний принципал і призначити роль, таку як AcrPull, для витягування зображень. Потім буде можливість увійти до реєстру, використовуючи appId SP як ім'я користувача та згенерований секрет як пароль.

Приклад скрипта з документації для генерації SP з доступом до реєстру:

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"

Шифрування

Тільки Premium SKU підтримує шифрування в спокої для зображень та інших артефактів.

Мережа

Тільки Premium SKU підтримує приватні кінцеві точки. Інші версії підтримують лише публічний доступ. Публічна кінцева точка має формат <registry-name>.azurecr.io, а приватна кінцева точка має формат <registry-name>.privatelink.azurecr.io. З цієї причини ім'я реєстру повинно бути унікальним у всьому Azure.

Microsoft Defender для Cloud

Це дозволяє вам сканувати зображення в реєстрі на наявність вразливостей.

М'яке видалення

Функція м'якого видалення дозволяє вам відновити видалений реєстр протягом вказаної кількості днів. Ця функція вимкнена за замовчуванням.

Вебхуки

Можливо створити вебхуки всередині реєстрів. У цьому вебхуці потрібно вказати URL, куди буде надіслано запит щоразу, коли виконується дія push або delete. Більше того, вебхуки можуть вказувати область, щоб вказати репозиторії (зображення), які будуть підлягати впливу. Наприклад, 'foo:*' означає події під репозиторієм 'foo'.

З точки зору атакуючого цікаво перевірити це перед виконанням будь-якої дії в реєстрі та тимчасово видалити його, якщо це необхідно, щоб уникнути виявлення.

Підключені реєстри

Це в основному дозволяє дзеркалити зображення з одного реєстру в інший, зазвичай розташований на місці.

Він має 2 режими: ReadOnly та ReadWrite. У першому з них зображення лише витягуються з вихідного реєстру, а в другому зображення також можуть бути додані до вихідного реєстру.

Для того, щоб клієнти могли отримати доступ до реєстру з Azure, токен генерується, коли використовується підключений реєстр.

Запуски та Завдання

Запуски та Завдання дозволяють виконувати в Azure дії, пов'язані з контейнерами, які зазвичай потрібно було виконувати локально або в CI/CD конвеєрі. Наприклад, ви можете будувати, додавати та запускати зображення в реєстрі.

Найпростіший спосіб побудувати та запустити контейнер - це використання звичайного Запуску:

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

Однак це викличе запуски, які не є надто цікавими з точки зору атакуючого, оскільки до них не прикріплено жодної керованої ідентичності.

Однак tasks можуть мати прикріплену системну та користувацьку керовану ідентичність. Ці завдання є корисними для ескалації привілеїв у контейнері. У розділі ескалації привілеїв можна побачити, як використовувати завдання для ескалації привілеїв.

Cache

Функція кешу дозволяє завантажувати зображення з зовнішнього репозиторію та зберігати нові версії в реєстрі. Це вимагає наявності деяких налаштованих облікових даних, вибравши облікові дані з Azure Vault.

Це дуже цікаво з точки зору атакуючого, оскільки це дозволяє переходити на зовнішню платформу, якщо атакуючий має достатні дозволи для доступу до облікових даних, завантажувати зображення з зовнішнього репозиторію та налаштування кешу також може бути використано як механізм збереження.

Enumeration

warning

Дуже важливо, що навіть якщо ім'я реєстру містить великі літери, ви повинні використовувати лише малі літери в URL для доступу до нього.

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>

Підвищення Привілеїв та Після Експлуатації

Az - Automation Accounts Privesc

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks