Az - AI Foundry, AI Hubs, Azure OpenAI & AI Search
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Чому ці сервіси важливі
Azure AI Foundry — це парасолька Microsoft для побудови GenAI додатків. Хаб агрегує AI projects, Azure ML workspaces, compute, data stores, registries, prompt flow assets і з’єднання до downstream сервісів, таких як Azure OpenAI і Azure AI Search. Кожен компонент зазвичай експонує:
- Довгострокові API keys (OpenAI, Search, data connectors), які реплікуються всередині Azure Key Vault або об’єктів підключень workspace.
- Managed Identities (MI), що контролюють deployments, vector indexing jobs, model evaluation pipelines і Git/GitHub Enterprise операції.
- Cross-service links (storage accounts, container registries, Application Insights, Log Analytics), які успадковують permissions хабу/проекту.
- Multi-tenant connectors (Hugging Face, Azure Data Lake, Event Hubs), які можуть leak upstream credentials or tokens.
Компрометація одного хабу/проєкту може отже означати контроль над downstream managed identities, compute clusters, online endpoints, і будь-якими search indexes або OpenAI deployments, на які посилаються prompt flows.
Основні компоненти та поверхня безпеки
- AI Hub (
Microsoft.MachineLearningServices/hubs): Об’єкт верхнього рівня, що визначає регіон, managed network, system datastores, default Key Vault, Container Registry, Log Analytics і hub-level identities. Компрометація хабу дозволяє атакуючому інжектити нові projects, registries або user-assigned identities. - AI Projects (
Microsoft.MachineLearningServices/workspaces): Містять prompt flows, data assets, environments, component pipelines та online/batch endpoints. Projects успадковують hub ресурси і також можуть перевизначати їх власним storage, kv і MI. Кожен workspace зберігає секрети під/connectionsі/datastores. - Managed Compute & Endpoints: Включає managed online endpoints, batch endpoints, serverless endpoints, AKS/ACI deployments і on-demand inference servers. Токени, витягнуті з Azure Instance Metadata Service (IMDS) всередині цих рантаймів, зазвичай мають призначені workspace/project MI role assignments (commonly
ContributororOwner). - AI Registries & Model Catalog: Дозволяють шарити моделі, environments, компоненти, дані та evaluation results у межах регіону. Registries можуть автоматично синхронізуватися з GitHub/Azure DevOps, тобто PATs можуть бути вбудовані всередині визначень підключень.
- Azure OpenAI (
Microsoft.CognitiveServices/accountswithkind=OpenAI): Забезпечує моделі сімейства GPT. Доступ контролюється через role assignments + admin/query keys. Багато Foundry prompt flows зберігають згенеровані ключі як секрети або змінні оточення, доступні з compute jobs. - Azure AI Search (
Microsoft.Search/searchServices): Vector/index storage зазвичай підключено через Search admin key, збережений всередині project connection. Дані індекса можуть містити чутливі embeddings, витягнуті документи або сирі навчальні корпуси.
Аспекти архітектури, релевантні для безпеки
Managed Identities & Role Assignments
- AI hubs/projects можуть увімкнути system-assigned або user-assigned identities. Ці identities зазвичай мають ролі на storage accounts, key vaults, container registries, Azure OpenAI resources, Azure AI Search services, Event Hubs, Cosmos DB або custom APIs.
- Online endpoints успадковують project MI або можуть бути перевизначені на окремий user-assigned MI для кожного deployment.
- Prompt Flow connections і Automated Agents можуть запитувати токени через
DefaultAzureCredential; перехоплення metadata endpoint з compute дає токени для lateral movement.
Мережеві межі
- Hubs/projects підтримують
publicNetworkAccess, private endpoints, Managed VNet і **managedOutbound** правила. Неправильно налаштованийallowInternetOutbound` або відкриті scoring endpoints дозволяють прямий ексфільтр. - Azure OpenAI і AI Search підтримують firewall rules, Private Endpoint Connections (PEC), shared private link resources і
trustedClientCertificates. Коли публічний доступ увімкнений, ці сервіси приймають запити з будь-якої source IP, яка знає ключ.
Дані та сховища секретів
- За замовчуванням хаб/проект розгортатиме storage account, Azure Container Registry, Key Vault, Application Insights і Log Analytics workspace всередині прихованої managed resource group (шаблон:
mlw-<workspace>-rg). - Workspace datastores посилаються на blob/data lake контейнери і можуть вбудовувати SAS tokens, service principal secrets або storage access keys.
- Workspace connections (для Azure OpenAI, AI Search, Cognitive Services, Git, Hugging Face тощо) зберігають credentials у workspace Key Vault і відображають їх через management plane під час переліку connection (values are base64-encoded JSON).
- AI Search admin keys дають повний read/write доступ до indexes, skillsets, data sources і можуть витягувати документи, які живлять RAG systems.
Моніторинг та ланцюжок постачання
- AI Foundry підтримує інтеграцію з GitHub/Azure DevOps для коду і prompt flow assets. OAuth tokens або PATs зберігаються в Key Vault + connection metadata.
- Model Catalog може віддзеркалювати Hugging Face артефакти. Якщо
trust_remote_code=true, під час deployment виконується довільний Python. - Data/feature pipelines логують в Application Insights або Log Analytics, що виявляє connection strings.
Перерахування за допомогою az
# Install the Azure ML / AI CLI extension (if missing)
az extension add --name ml
# Enumerate AI Hubs (workspaces with kind=hub) and inspect properties
az ml workspace list --filtered-kinds hub --resource-group <RG> --query "[].{name:name, location:location, rg:resourceGroup}" -o table
az resource show --name <HUB> --resource-group <RG> \
--resource-type Microsoft.MachineLearningServices/workspaces \
--query "{location:location, publicNetworkAccess:properties.publicNetworkAccess, identity:identity, managedResourceGroup:properties.managedResourceGroup}" -o jsonc
# Enumerate AI Projects (kind=project) under a hub or RG
az resource list --resource-type Microsoft.MachineLearningServices/workspaces --query "[].{name:name, rg:resourceGroup, location:location}" -o table
az ml workspace list --filtered-kinds project --resource-group <RG> \
--query "[?contains(properties.hubArmId, '/workspaces/<HUB>')].{name:name, rg:resourceGroup, location:location}"
# Show workspace level settings (managed identity, storage, key vault, container registry)
az ml workspace show --name <WS> --resource-group <RG> \
--query "{managedNetwork:properties.managedNetwork, storageAccount:properties.storageAccount, containerRegistry:properties.containerRegistry, keyVault:properties.keyVault, identity:identity}"
# List workspace connections (OpenAI, AI Search, Git, data sources)
az ml connection list --workspace-name <WS> --resource-group <RG> --populate-secrets -o table
az ml connection show --workspace-name <WS> --resource-group <RG> --name <CONNECTION>
# For REST (returns base64 encoded secrets)
az rest --method GET \
--url "https://management.azure.com/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.MachineLearningServices/workspaces/<WS>/connections/<CONN>?api-version=2024-04-01"
# Enumerate datastores and extract credentials/SAS
az ml datastore list --workspace-name <WS> --resource-group <RG>
az ml datastore show --name <DATASTORE> --workspace-name <WS> --resource-group <RG>
# List managed online/batch endpoints and deployments (capture identity per deployment)
az ml online-endpoint list --workspace-name <WS> --resource-group <RG>
az ml online-endpoint show --name <ENDPOINT> --workspace-name <WS> --resource-group <RG>
az ml online-deployment show --name <DEPLOYMENT> --endpoint-name <ENDPOINT> --workspace-name <WS> --resource-group <RG> \
--query "{identity:identity, environment:properties.environmentId, codeConfiguration:properties.codeConfiguration}"
# Discover prompt flows, components, environments, data assets
az ml component list --workspace-name <WS> --resource-group <RG>
az ml data list --workspace-name <WS> --resource-group <RG> --type uri_folder
az ml environment list --workspace-name <WS> --resource-group <RG>
az ml job list --workspace-name <WS> --resource-group <RG> --type pipeline
# List hub/project managed identities and their role assignments
az identity list --resource-group <RG>
az role assignment list --assignee <MI-PRINCIPAL-ID> --all
# Azure OpenAI resources (filter kind==OpenAI)
az resource list --resource-type Microsoft.CognitiveServices/accounts \
--query "[?kind=='OpenAI'].{name:name, rg:resourceGroup, location:location}" -o table
az cognitiveservices account list --resource-group <RG> \
--query "[?kind=='OpenAI'].{name:name, location:location}" -o table
az cognitiveservices account show --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account keys list --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account deployment list --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account network-rule list --name <AOAI-NAME> --resource-group <RG>
# Azure AI Search services
az search service list --resource-group <RG>
az search service show --name <SEARCH-NAME> --resource-group <RG> \
--query "{sku:sku.name, publicNetworkAccess:properties.publicNetworkAccess, privateEndpoints:properties.privateEndpointConnections}"
az search admin-key show --service-name <SEARCH-NAME> --resource-group <RG>
az search query-key list --service-name <SEARCH-NAME> --resource-group <RG>
az search shared-private-link-resource list --service-name <SEARCH-NAME> --resource-group <RG>
# AI Search data-plane (requires admin key in header)
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/indexes?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/datasources?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/indexers?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
# Linkage between workspaces and search / openAI (REST helper)
az rest --method GET \
--url "https://management.azure.com/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.MachineLearningServices/workspaces/<WS>/connections?api-version=2024-04-01" \
--query "value[?properties.target=='AzureAiSearch' || properties.target=='AzureOpenAI']"
На що звертати увагу під час оцінки
- Identity scope: Проєкти часто повторно використовують потужну користувацьку призначену identity, прикріплену до кількох сервісів. Перехоплення IMDS токенів з будь‑якого керованого обчислювального ресурсу дає ці привілеї.
- Connection objects: Base64 payload містить секрет разом із метаданими (endpoint URL, API version). Багато команд залишають тут OpenAI + Search admin keys замість частого їх обертання.
- Git & external source connectors: PATs або OAuth refresh tokens можуть надати push‑доступ до коду, який визначає pipelines/prompt flows.
- Datastores & data assets: Можуть видавати SAS tokens з терміном дії в кілька місяців; data assets можуть вказувати на customer PII, embeddings або навчальні корпуси.
- Managed Network overrides:
allowInternetOutbound=trueабоpublicNetworkAccess=Enabledробить тривіальним exfiltrate секретів з jobs/endpoints. - Hub-managed resource group: Містить storage account (
<workspace>storage), container registry, KV і Log Analytics. Доступ до цього RG часто означає повний takeover навіть якщо портал його приховує.
Посилання
- Azure AI Foundry architecture
- Azure Machine Learning CLI v2
- Azure OpenAI security controls
- Azure AI Search security
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud

