Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-services/az-keyvault.md

8.7 KiB

Az - Key Vault

{{#include ../../../banners/hacktricks-training.md}}

Grundinformationen

Azure Key Vault ist ein Cloud-Dienst von Microsoft Azure zum sicheren Speichern und Verwalten sensibler Informationen wie Geheimnisse, Schlüssel, Zertifikate und Passwörter. Es fungiert als zentrales Repository, das sicheren Zugriff und feingranulare Kontrolle über Azure Active Directory (Azure AD) bietet. Aus sicherheitstechnischer Sicht bietet Key Vault Schutz durch Hardware-Sicherheitsmodule (HSM) für kryptografische Schlüssel, stellt sicher, dass Geheimnisse sowohl im Ruhezustand als auch während der Übertragung verschlüsselt sind, und bietet robustes Zugriffsmanagement durch rollenbasierte Zugriffskontrolle (RBAC) und Richtlinien. Es verfügt auch über Audit-Logging, eine Integration mit Azure Monitor zur Verfolgung des Zugriffs und automatisierte Schlüsselrotation zur Reduzierung des Risikos durch längere Schlüsselexposition.

Siehe Azure Key Vault REST API-Übersicht für vollständige Details.

Laut den Docs unterstützen Tresore das Speichern von Software- und HSM-gestützten Schlüsseln, Geheimnissen und Zertifikaten. Verwaltete HSM-Pools unterstützen nur HSM-gestützte Schlüssel.

Das URL-Format für Tresore ist https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version} und für verwaltete HSM-Pools ist es: https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}

Wo:

  • vault-name ist der global eindeutige Name des Key Vault
  • object-type kann "keys", "secrets" oder "certificates" sein
  • object-name ist der eindeutige Name des Objekts innerhalb des Key Vault
  • object-version wird systemgeneriert und optional verwendet, um eine eindeutige Version eines Objekts anzusprechen.

Um auf die im Tresor gespeicherten Geheimnisse zuzugreifen, ist es möglich, zwischen 2 Berechtigungsmodellen bei der Erstellung des Tresors zu wählen:

Zugriffskontrolle

Der Zugriff auf eine Key Vault-Ressource wird durch zwei Ebenen gesteuert:

  • Die Management-Ebene, deren Ziel management.azure.com ist.
  • Sie wird verwendet, um den Key Vault und Zugriffsrichtlinien zu verwalten. Nur die rollenbasierte Zugriffskontrolle von Azure (RBAC) wird unterstützt.
  • Die Datenebene, deren Ziel <vault-name>.vault.azure.com ist.
  • Sie wird verwendet, um die Daten (Schlüssel, Geheimnisse und Zertifikate) im Key Vault zu verwalten und darauf zuzugreifen. Dies unterstützt Zugriffsrichtlinien für den Tresor oder Azure RBAC.

Eine Rolle wie Contributor, die Berechtigungen in der Management-Ebene hat, um Zugriffsrichtlinien zu verwalten, kann auf die Geheimnisse zugreifen, indem sie die Zugriffsrichtlinien ändert.

Key Vault RBAC Eingebaute Rollen

Netzwerkzugang

In Azure Key Vault können Firewall-Regeln eingerichtet werden, um Datenebenenoperationen nur von bestimmten virtuellen Netzwerken oder IPv4-Adressbereichen zuzulassen. Diese Einschränkung wirkt sich auch auf den Zugriff über das Azure-Verwaltungsportal aus; Benutzer können keine Schlüssel, Geheimnisse oder Zertifikate in einem Key Vault auflisten, wenn ihre Anmelde-IP-Adresse nicht im autorisierten Bereich liegt.

Zur Analyse und Verwaltung dieser Einstellungen können Sie die Azure CLI verwenden:

az keyvault show --name name-vault --query networkAcls

Der vorherige Befehl zeigt die Firewall-Einstellungen von name-vault an, einschließlich aktivierter IP-Bereiche und Richtlinien für abgelehnten Datenverkehr.

Darüber hinaus ist es möglich, einen privaten Endpunkt zu erstellen, um eine private Verbindung zu einem Tresor zu ermöglichen.

Löschschutz

Wenn ein Schlüssel-Tresor erstellt wird, beträgt die Mindestanzahl an Tagen, die für die Löschung zulässig sind, 7. Das bedeutet, dass, wann immer Sie versuchen, diesen Schlüssel-Tresor zu löschen, mindestens 7 Tage benötigt werden, um gelöscht zu werden.

Es ist jedoch möglich, einen Tresor mit deaktiviertem Löschschutz zu erstellen, der es ermöglicht, Schlüssel-Tresore und Objekte während der Aufbewahrungsfrist zu löschen. Sobald dieser Schutz jedoch für einen Tresor aktiviert ist, kann er nicht mehr deaktiviert werden.

Enumeration

{{#tabs }} {{#tab name="az" }}

# List all Key Vaults in the subscription
az keyvault list
# List Key Vaults in a specific Resource Group
az keyvault list --resource-group <ResourceGroupName>
az keyvault list --query '[].{name:name}' -o tsv # Get just the names
# Show details of a specific Key Vault
az keyvault show --name <KeyVaultName> # If accessPolicies, you can see them here
# List all keys in a Key Vault
az keyvault key list --vault-name <KeyVaultName>
# List all secrets in a Key Vault
az keyvault secret list --vault-name <KeyVaultName>
# Get versions of a secret
az keyvault secret list-versions --vault-name <KeyVaultName> --name <SecretName>
# List all certificates in a Key Vault
az keyvault certificate list --vault-name <KeyVaultName>
# List all deleted Key Vaults in the subscription
az keyvault list-deleted
# Get properties of a deleted Key Vault
az keyvault show-deleted --name <KeyVaultName>
# Get assigned roles
az role assignment list --include-inherited --scope "/subscriptions/<subscription-uuid>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>"

# Get secret value
az keyvault secret show --vault-name <KeyVaultName> --name <SecretName>
# Get old versions secret value
az keyvault secret show --id https://<KeyVaultName>.vault.azure.net/secrets/<KeyVaultName>/<idOldVersion>

# List deleted key vaults
az keyvault secret list-deleted --vault-name <vault-name>

{{#endtab }}

{{#tab name="Az Powershell" }}

# Get keyvault token
curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER

# Connect with PS AzureAD
## $token from management API
Connect-AzAccount -AccessToken $token -AccountId 1937ea5938eb-10eb-a365-10abede52387 -KeyVaultAccessToken $keyvaulttoken

# Get details of a specific Key Vault
Get-AzKeyVault -VaultName <KeyVaultName>
# List all keys in a Key Vault
Get-AzKeyVaultKey -VaultName <KeyVaultName>
# List all secrets in a Key Vault
Get-AzKeyVaultSecret -VaultName <KeyVaultName>
# List all certificates in a Key Vault
Get-AzKeyVaultCertificate -VaultName <KeyVaultName>
# List all deleted Key Vaults in the subscription
Get-AzKeyVault -InRemovedState
# Get properties of a deleted Key Vault
Get-AzKeyVault -VaultName <KeyVaultName> -InRemovedState
# Get secret values
Get-AzKeyVaultSecret -VaultName <vault_name> -Name <secret_name> -AsPlainText

{{#endtab }}

{{#tab name="az script" }}

#!/bin/bash

# Dump all keyvaults from the subscription

# Define Azure subscription ID
AZ_SUBSCRIPTION_ID="your-subscription-id"

# Specify the filename for output
CSV_OUTPUT="vault-names-list.csv"

# Login to Azure account
az login

# Select the desired subscription
az account set --subscription $AZ_SUBSCRIPTION_ID

# Retrieve all resource groups within the subscription
AZ_RESOURCE_GROUPS=$(az group list --query "[].name" -o tsv)

# Initialize the CSV file with headers
echo "Vault Name,Associated Resource Group" > $CSV_OUTPUT

# Iterate over each resource group
for GROUP in $AZ_RESOURCE_GROUPS
do
# Fetch key vaults within the current resource group
VAULT_LIST=$(az keyvault list --resource-group $GROUP --query "[].name" -o tsv)

# Process each key vault
for VAULT in $VAULT_LIST
do
# Extract the key vault's name
VAULT_NAME=$(az keyvault show --name $VAULT --resource-group $GROUP --query "name" -o tsv)

# Append the key vault name and its resource group to the file
echo "$VAULT_NAME,$GROUP" >> $CSV_OUTPUT
done
done

{{#endtab }} {{#endtabs }}

Privilegienerhöhung

{{#ref}} ../az-privilege-escalation/az-key-vault-privesc.md {{#endref}}

Nach der Ausnutzung

{{#ref}} ../az-post-exploitation/az-key-vault-post-exploitation.md {{#endref}}

{{#include ../../../banners/hacktricks-training.md}}