# Az - Key Vault

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

## Basiese Inligting

**Azure Key Vault** is 'n wolkdienste wat deur Microsoft Azure verskaf word om sensitiewe inligting soos **geheime, sleutels, sertifikate en wagwoorde** veilig te stoor en te bestuur. Dit dien as 'n gesentraliseerde berging, wat veilige toegang en fynbeheer bied deur middel van Azure Active Directory (Azure AD). Vanuit 'n sekuriteits perspektief bied Key Vault **hardeware sekuriteitsmodule (HSM) beskerming** vir kriptografiese sleutels, verseker dat geheime beide in rus en in oordrag geënkripteer is, en bied robuuste toegangsbestuur deur middel van **rolgebaseerde toegangsbeheer (RBAC)** en beleide. Dit beskik ook oor **auditskryf**, integrasie met Azure Monitor vir die opsporing van toegang, en outomatiese sleutelrotasie om risiko van langdurige sleutelblootstelling te verminder.

Sien [Azure Key Vault REST API oorsig](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) vir volledige besonderhede.

Volgens die [**dokumentasie**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), ondersteun Vaults die stoor van sagteware en HSM-ondersteunde sleutels, geheime, en sertifikate. Gemanagte HSM-poele ondersteun slegs HSM-ondersteunde sleutels.

Die **URL-formaat** vir **vaults** is `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}` en vir gemanagte HSM-poele is dit: `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`

Waar:

- `vault-name` is die wêreldwyd **unieke** naam van die sleutelkluis
- `object-type` kan "sleutels", "geheime" of "sertifikate" wees
- `object-name` is die **unieke** naam van die objek binne die sleutelkluis
- `object-version` is stelsels gegenereer en opsioneel gebruik om 'n **unieke weergawe van 'n objek** aan te dui.

Om toegang te verkry tot die geheime wat in die kluis gestoor is, is dit moontlik om tussen 2 toestemmingsmodelle te kies wanneer die kluis geskep word:

- **Kluis toegang beleid**
- **Azure RBAC** (mees algemeen en aanbeveel)
- Jy kan al die fyn toegangsregte wat ondersteun word, vind in [https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault)

### Toegangsbeheer <a href="#access-control" id="access-control"></a>

Toegang tot 'n Key Vault hulpbron word deur twee vlakke beheer:

- Die **bestuursvlak**, waarvan die teiken [management.azure.com](http://management.azure.com/) is.
- Dit word gebruik om die sleutelkluis en **toegang beleide** te bestuur. Slegs Azure rolgebaseerde toegangsbeheer (**RBAC**) word ondersteun.
- Die **datavlak**, waarvan die teiken **`<vault-name>.vault.azure.com`** is.
- Dit word gebruik om die **data** (sleutels, geheime en sertifikate) **in die sleutelkluis** te bestuur en toegang te verkry. Dit ondersteun **sleutelkluis toegang beleide** of Azure **RBAC**.

'n Rol soos **Bydraer** wat toestemming het in die bestuursvlak om toegang beleide te bestuur, kan toegang tot die geheime verkry deur die toegang beleide te wysig.

### Key Vault RBAC Gebou-in Rolle <a href="#rbac-built-in-roles" id="rbac-built-in-roles"></a>

<figure><img src="../../../images/image (27).png" alt=""><figcaption></figcaption></figure>

### Netwerktoegang

In Azure Key Vault kan **vuurmuur** reëls opgestel word om **slegs datavlak operasies vanaf gespesifiseerde virtuele netwerke of IPv4 adresreekse toe te laat**. Hierdie beperking beïnvloed ook toegang deur die Azure administrasiepaneel; gebruikers sal nie in staat wees om sleutels, geheime of sertifikate in 'n sleutelkluis te lys as hul aanmeld IP-adres nie binne die gemagtigde reeks is nie.

Vir die analise en bestuur van hierdie instellings, kan jy die **Azure CLI** gebruik:
```bash
az keyvault show --name name-vault --query networkAcls
```
Die vorige opdrag sal die f**irewall instellings van `name-vault`** vertoon, insluitend geaktiveerde IP-reekse en beleide vir geweier verkeer.

Boonop is dit moontlik om 'n **private eindpunt** te skep om 'n private verbinding met 'n vault toe te laat.

### Verwyderingsbeskerming

Wanneer 'n sleutelvault geskep word, is die minimum aantal dae wat toegelaat word vir verwydering 7. Dit beteken dat wanneer jy probeer om daardie sleutelvault te verwyder, dit **ten minste 7 dae sal neem om verwyder te word**.

Dit is egter moontlik om 'n vault met **verwyderingsbeskerming gedeaktiveer** te skep, wat toelaat dat sleutelvault en voorwerpe gedurende die retensieperiode verwyder word. Alhoewel, sodra hierdie beskerming geaktiveer is vir 'n vault, kan dit nie gedeaktiveer word nie.

## Enumerasie

{{#tabs }}
{{#tab name="az" }}
```bash
# 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" }}
```bash
# 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" }}
```bash
#!/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 }}

## Privilege Escalation

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

## Post Exploitation

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

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