Az - AI Foundry, AI Hubs, Azure OpenAI & AI Search

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Why These Services Matter

Azure AI Foundry ist Microsofts Dachstruktur für den Aufbau von GenAI-Anwendungen. Ein Hub aggregiert AI-Projekte, Azure ML workspaces, Compute, Datenspeicher, Registries, Prompt Flow Assets und Verbindungen zu nachgelagerten Diensten wie Azure OpenAI und Azure AI Search. Jede Komponente exponiert typischerweise:

  • Long-lived API keys (OpenAI, Search, data connectors), die in Azure Key Vault oder Workspace-Connection-Objekten repliziert werden.
  • Managed Identities (MI), die Deployments, Vector-Indexing-Jobs, Model-Evaluations-Pipelines und Git/GitHub Enterprise-Operationen steuern.
  • Cross-service links (Storage Accounts, Container Registries, Application Insights, Log Analytics), die Hub-/Projekt-Berechtigungen erben.
  • Multi-tenant connectors (Hugging Face, Azure Data Lake, Event Hubs), die upstream credentials oder tokens leak können.

Die Kompromittierung eines einzelnen Hubs/Projekts kann daher die Kontrolle über nachgelagerte Managed Identities, Compute-Cluster, Online-Endpunkte sowie alle in Prompt Flows referenzierten Search-Indexes oder OpenAI-Deployments bedeuten.

Core Components & Security Surface

  • AI Hub (Microsoft.MachineLearningServices/hubs): Top-level Objekt, das Region, Managed Network, System Datastores, Default Key Vault, Container Registry, Log Analytics und Hub-Level Identities definiert. Ein kompromittierter Hub erlaubt einem Angreifer, neue Projekte, Registries oder user-assigned identities zu injizieren.
  • AI Projects (Microsoft.MachineLearningServices/workspaces): Hostet prompt flows, data assets, environments, component pipelines und online/batch endpoints. Projekte erben Hub-Ressourcen und können eigene storage, kv und MI überschreiben. Jeder Workspace speichert Secrets unter /connections und /datastores.
  • Managed Compute & Endpoints: Beinhaltet managed online endpoints, batch endpoints, serverless endpoints, AKS/ACI-Deployments und on-demand Inference-Server. Tokens, die aus dem Azure Instance Metadata Service (IMDS) in diesen Runtimes gezogen werden, tragen normalerweise die Workspace/Project MI-Rollen (häufig Contributor oder Owner).
  • AI Registries & Model Catalog: Erlauben region-gescopetes Sharing von Modellen, Environments, Komponenten, Daten und Evaluationsergebnissen. Registries können automatisch mit GitHub/Azure DevOps synchronisieren, wodurch PATs in Connection-Definitionen eingebettet sein können.
  • Azure OpenAI (Microsoft.CognitiveServices/accounts with kind=OpenAI): Stellt GPT-Familienmodelle bereit. Zugriff wird über Role Assignments + Admin/Query-Keys kontrolliert. Viele Foundry prompt flows behalten die generierten Keys als Secrets oder Environment-Variablen, die von Compute-Jobs zugreifbar sind.
  • Azure AI Search (Microsoft.Search/searchServices): Vector-/Index-Speicher, typischerweise verbunden über einen Search admin key, der in einer Projekt-Connection gespeichert ist. Index-Daten können sensitive Embeddings, abgerufene Dokumente oder rohe Trainingskorpora enthalten.

Security-Relevant Architecture

Managed Identities & Role Assignments

  • AI Hubs/Projekte können system-assigned oder user-assigned Identities aktivieren. Diese Identities halten üblicherweise Rollen auf Storage Accounts, Key Vaults, Container Registries, Azure OpenAI-Ressourcen, Azure AI Search Services, Event Hubs, Cosmos DB oder Custom APIs.
  • Online Endpoints erben die Project MI oder können pro Deployment mit einer dedizierten user-assigned MI überschrieben werden.
  • Prompt Flow Connections und Automated Agents können Tokens via DefaultAzureCredential anfordern; das Abgreifen des Metadata-Endpunkts von Compute gibt Tokens für laterale Bewegung.

Network Boundaries

  • Hubs/Projekte unterstützen publicNetworkAccess, private endpoints, Managed VNet und **managedOutbound**-Regeln. Fehlkonfigurierte allowInternetOutbound`-Einstellungen oder offene Scoring-Endpunkte ermöglichen direkte Exfiltration.
  • Azure OpenAI und AI Search unterstützen firewall rules, Private Endpoint Connections (PEC), shared private link resources und trustedClientCertificates. Wenn Public Access aktiviert ist, akzeptieren diese Dienste Requests von jeder Source IP, die den Key kennt.

Data & Secret Stores

  • Default Hub/Project-Deployments erstellen ein Storage Account, Azure Container Registry, Key Vault, Application Insights und ein Log Analytics Workspace in einer versteckten managed resource group (Pattern: mlw-<workspace>-rg).
  • Workspace datastores referenzieren Blob/Data Lake-Container und können SAS tokens, Service Principal-Secrets oder Storage Access Keys einbetten.
  • Workspace connections (für Azure OpenAI, AI Search, Cognitive Services, Git, Hugging Face, etc.) halten Credentials im Workspace Key Vault und stellen sie über die Management Plane beim Auflisten der Connection dar (Werte sind base64-codierte JSON).
  • AI Search admin keys bieten vollen Read/Write-Zugriff auf Indexes, Skillsets, Data Sources und können Dokumente abrufen, die RAG systems füttern.

Monitoring & Supply Chain

  • AI Foundry unterstützt GitHub/Azure DevOps-Integration für Code und Prompt Flow Assets. OAuth-Tokens oder PATs liegen im Key Vault + Connection-Metadata.
  • Model Catalog kann Hugging Face-Artefakte spiegeln. Wenn trust_remote_code=true, wird beim Deployment beliebiger Python-Code ausgeführt.
  • Data/Feature-Pipelines loggen zu Application Insights oder Log Analytics und exponieren dadurch Connection-Strings.

Enumeration with 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']"

Worauf bei der Bewertung achten

  • Identity scope: Projekte verwenden oft dieselbe leistungsstarke user-assigned identity, die mehreren Diensten zugewiesen ist. Das Erfassen von IMDS tokens von beliebigem managed compute überträgt diese Privilegien.
  • Connection objects: Base64-Payload enthält das Secret plus Metadaten (endpoint URL, API version). Viele Teams belassen OpenAI + Search admin keys hier, statt sie häufig zu rotieren.
  • Git & external source connectors: PATs oder OAuth refresh tokens können Push-Zugriff auf Code ermöglichen, der pipelines/prompt flows definiert.
  • Datastores & data assets: Stellen SAS tokens bereit, die monatelang gültig sind; data assets können auf customer PII, embeddings oder Trainingskorpora verweisen.
  • Managed Network overrides: allowInternetOutbound=true oder publicNetworkAccess=Enabled machen es trivial, Secrets aus jobs/endpoints zu exfiltrieren.
  • Hub-managed resource group: Enthält das storage account (<workspace>storage), container registry, KV und Log Analytics. Zugriff auf diese RG bedeutet oft vollständige Übernahme, selbst wenn das Portal es verbirgt.

References

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks