10 KiB
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 для отримання повних деталей.
Згідно з документацією, 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
Контроль доступу
Доступ до ресурсу Key Vault контролюється двома площинами:
- площина управління, ціль якої - management.azure.com.
- Використовується для управління ключовим сховищем та політиками доступу. Підтримується лише контроль доступу на основі ролей Azure (RBAC).
- площина даних, ціль якої -
<vault-name>.vault.azure.com. - Використовується для управління та доступу до даних (ключів, секретів і сертифікатів) в ключовому сховищі. Це підтримує політики доступу до ключового сховища або Azure RBAC.
Роль, така як Contributor, яка має дозволи в площині управління для управління політиками доступу, може отримати доступ до секретів, змінюючи політики доступу.
Вбудовані ролі RBAC Key Vault

Мережевий доступ
У Azure Key Vault можна налаштувати правила брандмауера, щоб дозволити операції площини даних лише з вказаних віртуальних мереж або діапазонів IPv4 адрес. Це обмеження також впливає на доступ через портал адміністрування Azure; користувачі не зможуть перерахувати ключі, секрети або сертифікати в ключовому сховищі, якщо їх IP-адреса не входить до авторизованого діапазону.
Для аналізу та управління цими налаштуваннями ви можете використовувати Azure CLI:
az keyvault show --name name-vault --query networkAcls
Попередня команда відобразить налаштування брандмауера name-vault, включаючи активовані IP-діапазони та політики для забороненого трафіку.
Більше того, можливо створити приватний кінець для дозволу приватного з'єднання з сейфом.
Захист від видалення
Коли створюється ключовий сейф, мінімальна кількість днів для дозволу на видалення становить 7. Це означає, що щоразу, коли ви намагаєтеся видалити цей ключовий сейф, йому знадобиться принаймні 7 днів для видалення.
Однак можливо створити сейф з вимкненим захистом від очищення, що дозволяє очищати ключовий сейф та об'єкти під час періоду зберігання. Хоча, як тільки цей захист увімкнено для сейфа, його не можна вимкнути.
Перерахування
{{#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 }}
Підвищення Привілеїв
{{#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}}