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