8.3 KiB
Az - Key Vault
{{#include ../../../banners/hacktricks-training.md}}
Información Básica
Azure Key Vault es un servicio en la nube proporcionado por Microsoft Azure para almacenar y gestionar de forma segura información sensible como secretos, claves, certificados y contraseñas. Actúa como un repositorio centralizado, ofreciendo acceso seguro y control detallado utilizando Azure Active Directory (Azure AD). Desde una perspectiva de seguridad, Key Vault proporciona protección de módulo de seguridad de hardware (HSM) para claves criptográficas, asegura que los secretos estén encriptados tanto en reposo como en tránsito, y ofrece una gestión de acceso robusta a través de control de acceso basado en roles (RBAC) y políticas. También cuenta con registro de auditoría, integración con Azure Monitor para rastrear el acceso, y rotación automática de claves para reducir el riesgo de exposición prolongada de claves.
Consulte Azure Key Vault REST API overview para obtener detalles completos.
Según la documentación, los Vaults admiten el almacenamiento de claves, secretos y certificados respaldados por software y HSM. Los grupos de HSM administrados solo admiten claves respaldadas por HSM.
El formato de URL para vaults es https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version} y para grupos de HSM administrados es: https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}
Donde:
vault-namees el nombre único global del key vaultobject-typepuede ser "keys", "secrets" o "certificates"object-namees el nombre único del objeto dentro del key vaultobject-versiones generado por el sistema y se utiliza opcionalmente para dirigirse a una versión única de un objeto.
Para acceder a los secretos almacenados en el vault, es posible seleccionar entre 2 modelos de permisos al crear el vault:
- Política de acceso al vault
- Azure RBAC (el más común y recomendado)
- Puede encontrar todos los permisos granulares admitidos en https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault
Control de Acceso
El acceso a un recurso de Key Vault se controla mediante dos planos:
- El plano de gestión, cuyo objetivo es management.azure.com.
- Se utiliza para gestionar el key vault y las políticas de acceso. Solo se admite el control de acceso basado en roles de Azure (RBAC).
- El plano de datos, cuyo objetivo es
<vault-name>.vault.azure.com. - Se utiliza para gestionar y acceder a los datos (claves, secretos y certificados) en el key vault. Esto admite políticas de acceso al vault o Azure RBAC.
Un rol como Contributor que tiene permisos en el plano de gestión para gestionar políticas de acceso puede acceder a los secretos modificando las políticas de acceso.
Roles Integrados de RBAC de Key Vault

Acceso a la Red
En Azure Key Vault, se pueden establecer reglas de firewall para permitir operaciones del plano de datos solo desde redes virtuales específicas o rangos de direcciones IPv4. Esta restricción también afecta el acceso a través del portal de administración de Azure; los usuarios no podrán listar claves, secretos o certificados en un key vault si su dirección IP de inicio de sesión no está dentro del rango autorizado.
Para analizar y gestionar estas configuraciones, puede utilizar el Azure CLI:
az keyvault show --name name-vault --query networkAcls
El comando anterior mostrará la configuración del firewall de name-vault, incluyendo rangos de IP habilitados y políticas para tráfico denegado.
Además, es posible crear un punto final privado para permitir una conexión privada a un vault.
Protección contra Eliminación
Cuando se crea un key vault, el número mínimo de días para permitir la eliminación es 7. Lo que significa que cada vez que intentes eliminar ese key vault necesitará al menos 7 días para ser eliminado.
Sin embargo, es posible crear un vault con protección contra purga deshabilitada, lo que permite que el key vault y los objetos sean purgados durante el período de retención. Aunque, una vez que esta protección está habilitada para un vault, no se puede deshabilitar.
Enumeración
{{#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>
# 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>
{{#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 }}
Escalación de Privilegios
{{#ref}} ../az-privilege-escalation/az-key-vault-privesc.md {{#endref}}
Post Explotación
{{#ref}} ../az-post-exploitation/az-key-vault-post-exploitation.md {{#endref}}
{{#include ../../../banners/hacktricks-training.md}}