# Az - Key Vault

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

## Osnovne informacije

**Azure Key Vault** je cloud usluga koju pruža Microsoft Azure za sigurno čuvanje i upravljanje osetljivim informacijama kao što su **tajne, ključevi, sertifikati i lozinke**. Deluje kao centralizovani repozitorijum, nudeći siguran pristup i preciznu kontrolu koristeći Azure Active Directory (Azure AD). Sa bezbednosnog aspekta, Key Vault pruža **zaštitu hardverskog sigurnosnog modula (HSM)** za kriptografske ključeve, osigurava da su tajne šifrovane i u mirovanju i u prenosu, i nudi robusno upravljanje pristupom kroz **kontrolu pristupa zasnovanu na ulogama (RBAC)** i politike. Takođe sadrži **evidenciju revizije**, integraciju sa Azure Monitor-om za praćenje pristupa, i automatsku rotaciju ključeva kako bi se smanjio rizik od dugotrajnog izlaganja ključeva.

Pogledajte [Azure Key Vault REST API overview](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) za potpune detalje.

Prema [**docs**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), Vaults podržavaju čuvanje softverskih i HSM-podržanih ključeva, tajni i sertifikata. Upravljani HSM bazeni podržavaju samo HSM-podržane ključeve.

**URL format** za **vaults** je `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}` a za upravljane HSM bazene je: `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`

Gde:

- `vault-name` je globalno **jedinstveno** ime key vault-a
- `object-type` može biti "keys", "secrets" ili "certificates"
- `object-name` je **jedinstveno** ime objekta unutar key vault-a
- `object-version` je sistemski generisan i opcionalno se koristi za adresiranje **jedinstvene verzije objekta**.

Da bi se pristupilo tajnama pohranjenim u vault-u, moguće je izabrati između 2 modela dozvola prilikom kreiranja vault-a:

- **Politika pristupa vault-u**
- **Azure RBAC** (najčešći i preporučen)
- Sve granularne dozvole podržane možete pronaći na [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)

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

Pristup resursu Key Vault-a kontroliše se kroz dva plana:

- **plan upravljanja**, čija je meta [management.azure.com](http://management.azure.com/).
- Koristi se za upravljanje key vault-om i **politikama pristupa**. Samo Azure kontrola pristupa zasnovana na ulogama (**RBAC**) je podržana.
- **plan podataka**, čija je meta **`<vault-name>.vault.azure.com`**.
- Koristi se za upravljanje i pristup **podacima** (ključevi, tajne i sertifikati) **u key vault-u**. Ovo podržava **politike pristupa key vault-u** ili Azure **RBAC**.

Uloga kao što je **Contributor** koja ima dozvole u planu upravljanja za upravljanje politikama pristupa može dobiti pristup tajnama modifikovanjem politika pristupa.

### Ugrađene uloge Key Vault RBAC <a href="#rbac-built-in-roles" id="rbac-built-in-roles"></a>

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

### Mrežni pristup

U Azure Key Vault-u, **firewall** pravila mogu se postaviti da **dozvole operacije na planu podataka samo iz određenih virtuelnih mreža ili IPv4 opsega adresa**. Ova ograničenja takođe utiču na pristup kroz Azure administrativni portal; korisnici neće moći da listaju ključeve, tajne ili sertifikate u key vault-u ako njihova IP adresa nije unutar autorizovanog opsega.

Za analizu i upravljanje ovim podešavanjima, možete koristiti **Azure CLI**:
```bash
az keyvault show --name name-vault --query networkAcls
```
Prethodna komanda će prikazati podešavanja f**irewall-a `name-vault`**, uključujući omogućene IP opsege i politike za odbijeni saobraćaj.

Pored toga, moguće je kreirati **privatni endpoint** kako bi se omogućila privatna konekcija ka vault-u.

### Zaštita od brisanja

Kada se kreira key vault, minimalan broj dana koji se dozvoljava za brisanje je 7. Što znači da kada god pokušate da obrišete taj key vault, biće potrebno **najmanje 7 dana da bude obrisan**.

Međutim, moguće je kreirati vault sa **onemogućenim zaštitom od brisanja**, što omogućava da se key vault i objekti obrišu tokom perioda zadržavanja. Ipak, kada se ova zaštita omogući za vault, ne može se onemogućiti.

## Enumeracija

{{#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>
```
{{#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 }}

## Eskalacija privilegija

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

## Post eksploatacija

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

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