# Az - Key Vault
{{#include ../../../banners/hacktricks-training.md}}
## Основна інформація
**Azure Key Vault** - це хмарний сервіс, наданий Microsoft Azure для безпечного зберігання та управління чутливою інформацією, такою як **секрети, ключі, сертифікати та паролі**. Він діє як централізований репозиторій, пропонуючи безпечний доступ та детальний контроль за допомогою Azure Active Directory (Azure AD). З точки зору безпеки, Key Vault забезпечує **захист апаратного модуля безпеки (HSM)** для криптографічних ключів, гарантує, що секрети шифруються як в спокої, так і в русі, і пропонує надійне управління доступом через **контроль доступу на основі ролей (RBAC)** та політики. Він також має **журналювання аудиту**, інтеграцію з Azure Monitor для відстеження доступу та автоматизовану ротацію ключів для зменшення ризику від тривалого відкриття ключів.
Дивіться [Azure Key Vault REST API overview](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) для отримання повних деталей.
Згідно з [**документацією**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), Vaults підтримують зберігання програмних та HSM-підтримуваних ключів, секретів і сертифікатів. Керовані HSM пули підтримують лише HSM-підтримувані ключі.
**Формат URL** для **vaults** - `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}`, а для керованих HSM пулів - `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`
Де:
- `vault-name` - це глобально **унікальне** ім'я ключового сховища
- `object-type` може бути "keys", "secrets" або "certificates"
- `object-name` - **унікальне** ім'я об'єкта в ключовому сховищі
- `object-version` генерується системою і використовується за бажанням для адресації **унікальної версії об'єкта**.
Щоб отримати доступ до секретів, збережених у сховищі, можна вибрати між 2 моделями дозволів під час створення сховища:
- **Політика доступу до сховища**
- **Azure RBAC** (найбільш поширена та рекомендована)
- Ви можете знайти всі детальні дозволи, що підтримуються, за адресою [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)
### Контроль доступу
Доступ до ресурсу Key Vault контролюється двома площинами:
- **площа управління**, ціль якої - [management.azure.com](http://management.azure.com/).
- Використовується для управління ключовим сховищем та **політиками доступу**. Підтримується лише контроль доступу на основі ролей Azure (**RBAC**).
- **площа даних**, ціль якої - **`.vault.azure.com`**.
- Використовується для управління та доступу до **даних** (ключів, секретів і сертифікатів) **в ключовому сховищі**. Це підтримує **політики доступу до ключового сховища** або Azure **RBAC**.
Роль, така як **Contributor**, яка має дозволи в площині управління для управління політиками доступу, може отримати доступ до секретів, змінюючи політики доступу.
### Вбудовані ролі RBAC Key Vault
### Мережевий доступ
У Azure Key Vault можна налаштувати **правила брандмауера**, щоб **дозволити операції площини даних лише з вказаних віртуальних мереж або діапазонів IPv4 адрес**. Це обмеження також впливає на доступ через портал адміністрування Azure; користувачі не зможуть перерахувати ключі, секрети або сертифікати в ключовому сховищі, якщо їх IP-адреса не входить до авторизованого діапазону.
Для аналізу та управління цими налаштуваннями ви можете використовувати **Azure CLI**:
```bash
az keyvault show --name name-vault --query networkAcls
```
Попередня команда відобразить налаштування брандмауера `name-vault`, включаючи активовані IP-діапазони та політики для забороненого трафіку.
Більше того, можливо створити **приватний кінець** для дозволу приватного з'єднання з сейфом.
### Захист від видалення
Коли створюється ключовий сейф, мінімальна кількість днів для дозволу на видалення становить 7. Це означає, що щоразу, коли ви намагаєтеся видалити цей ключовий сейф, йому знадобиться **принаймні 7 днів для видалення**.
Однак можливо створити сейф з **вимкненим захистом від очищення**, що дозволяє очищати ключовий сейф та об'єкти під час періоду зберігання. Хоча, як тільки цей захист увімкнено для сейфа, його не можна вимкнути.
## Перерахування
{{#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
# Show details of a specific Key Vault
az keyvault show --name # If accessPolicies, you can see them here
# List all keys in a Key Vault
az keyvault key list --vault-name
# List all secrets in a Key Vault
az keyvault secret list --vault-name
# Get versions of a secret
az keyvault secret list-versions --vault-name --name
# List all certificates in a Key Vault
az keyvault certificate list --vault-name
# List all deleted Key Vaults in the subscription
az keyvault list-deleted
# Get properties of a deleted Key Vault
az keyvault show-deleted --name
# Get assigned roles
az role assignment list --include-inherited --scope "/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/"
# Get secret value
az keyvault secret show --vault-name --name
# Get old versions secret value
az keyvault secret show --id https://.vault.azure.net/secrets//
```
{{#endtab }}
{{#tab name="Az Powershell" }}
```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
# List all keys in a Key Vault
Get-AzKeyVaultKey -VaultName
# List all secrets in a Key Vault
Get-AzKeyVaultSecret -VaultName
# List all certificates in a Key Vault
Get-AzKeyVaultCertificate -VaultName
# List all deleted Key Vaults in the subscription
Get-AzKeyVault -InRemovedState
# Get properties of a deleted Key Vault
Get-AzKeyVault -VaultName -InRemovedState
# Get secret values
Get-AzKeyVaultSecret -VaultName -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 }}
## Підвищення Привілеїв
{{#ref}}
../az-privilege-escalation/az-key-vault-privesc.md
{{#endref}}
## Після Експлуатації
{{#ref}}
../az-post-exploitation/az-key-vault-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}