mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor
This commit is contained in:
@@ -1,85 +1,100 @@
|
||||
# Az - Облікові записи сховища та Blobs
|
||||
# Az - Storage Accounts & Blobs
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Основна інформація
|
||||
## Basic Information
|
||||
|
||||
Azure Storage Accounts — це базові сервіси в Microsoft Azure, які забезпечують масштабоване, захищене та високо доступне хмарне **зберігання для різних типів даних**, включно з blobs (binary large objects), файли, черги та таблиці. Вони виступають контейнерами, що групують ці різні сервіси зберігання під єдиним простором імен для зручного управління.
|
||||
Azure Storage Accounts — це базові сервіси в Microsoft Azure, які забезпечують масштабоване, безпечне та високо доступне хмарне **storage for various data types**, включаючи blobs (binary large objects), files, queues та tables. Вони слугують контейнерами, що групують ці різні служби зберігання під єдиним простором імен для зручного керування.
|
||||
|
||||
**Основні параметри конфігурації**:
|
||||
**Main configuration options**:
|
||||
|
||||
- Кожен обліковий запис сховища повинен мати **унікальну назву в межах всього Azure**.
|
||||
- Кожен обліковий запис розгортається в **регіоні** або в розширеній зоні Azure
|
||||
- Можна вибрати **premium**-версію облікового запису сховища для кращої продуктивності
|
||||
- Можна обрати серед **4 типів реплікації для захисту** від відмов стійки, диска та дата-центру.
|
||||
- Кожен storage account має мати **uniq name across all Azure**.
|
||||
- Кожен storage account деплоїться в певному **region** або в Azure extended zone.
|
||||
- Можна обрати **premium** версію storage account для кращої продуктивності.
|
||||
- Можна обрати серед **4 types of redundancy to protect** від rack, drive та datacenter **failures**.
|
||||
|
||||
**Параметри безпеки**:
|
||||
**Security configuration options**:
|
||||
|
||||
- **Require secure transfer for REST API operations**: Вимагати TLS у будь-якому з'єднанні зі сховищем
|
||||
- **Allows enabling anonymous access on individual containers**: Якщо вимкнено, у майбутньому неможливо буде увімкнути анонімний доступ
|
||||
- **Enable storage account key access**: Якщо вимкнено, доступ за допомогою Shared Keys буде заборонено
|
||||
- **Require secure transfer for REST API operations**: Вимагати TLS для будь-якої комунікації зі storage.
|
||||
- **Allows enabling anonymous access on individual containers**: Якщо вимкнено, в майбутньому не вдасться увімкнути anonymous access.
|
||||
- **Enable storage account key access**: Якщо вимкнено, доступ через Shared Keys буде заборонено.
|
||||
- **Minimum TLS version**
|
||||
- **Permitted scope for copy operations**: Дозволений обсяг для операцій копіювання: дозволити з будь-якого storage account, з будь-якого storage account з того самого Entra tenant або зі storage account з private endpoints в тій же virtual network.
|
||||
- **Permitted scope for copy operations**: Дозволити з будь-якого storage account, з будь-якого storage account того ж Entra tenant або зі storage account з private endpoints у тій же віртуальній мережі.
|
||||
|
||||
**Параметри Blob Storage**:
|
||||
**Blob Storage options**:
|
||||
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot (часто використовувані дані), Cool і Cold (рідко використовувані дані)
|
||||
- **Access tier**: Hot (часто використовувані дані), Cool та Cold (рідко використовувані дані)
|
||||
|
||||
**Параметри мережі**:
|
||||
**Networking options**:
|
||||
|
||||
- **Network access**:
|
||||
- Дозволити з усіх мереж
|
||||
- Дозволити з вибраних virtual networks та IP-адрес
|
||||
- Вимкнути публічний доступ і використовувати приватний доступ
|
||||
- **Private endpoints**: Дозволяє приватне з'єднання з обліковим записом сховища з virtual network
|
||||
- Allow from all networks
|
||||
- Allow from selected virtual networks and IP addresses
|
||||
- Disable public access and use private access
|
||||
- **Private endpoints**: Дозволяє приватне підключення до storage account з virtual network
|
||||
|
||||
**Параметри захисту даних**:
|
||||
**Data protection options**:
|
||||
|
||||
- **Point-in-time restore for containers**: Дозволяє відновити контейнери до попереднього стану
|
||||
- Потребує увімкнення versioning, change feed та blob soft delete.
|
||||
- **Enable soft delete for blobs**: Встановлює період збереження в днях для видалених blobs (навіть перезаписаних)
|
||||
- **Enable soft delete for containers**: Встановлює період збереження в днях для видалених контейнерів
|
||||
- **Enable soft delete for file shares**: Встановлює період збереження в днях для видалених file shares
|
||||
- **Enable versioning for blobs**: Зберігати попередні версії ваших blobs
|
||||
- **Enable blob change feed**: Зберігати журнали створення, модифікації та видалення змін у blobs
|
||||
- **Enable version-level immutability support**: Дозволяє встановити політику збереження на рівні облікового запису, що застосовується до всіх версій blob.
|
||||
- Підтримка immutability на рівні версій і point-in-time restore для контейнерів не можна увімкнути одночасно.
|
||||
- **Point-in-time restore for containers**: Дозволяє відновлювати контейнери до попереднього стану
|
||||
- Вимагає увімкнених versioning, change feed та blob soft delete.
|
||||
- **Enable soft delete for blobs**: Увімкнення періоду зберігання в днях для видалених blob-ів (навіть перезаписаних)
|
||||
- **Enable soft delete for containers**: Увімкнення періоду зберігання в днях для видалених контейнерів
|
||||
- **Enable soft delete for file shares**: Увімкнення періоду зберігання в днях для видалених file shares
|
||||
- **Enable versioning for blobs**: Зберігання попередніх версій ваших blob-ів
|
||||
- **Enable blob change feed**: Ведення журналу створення, модифікацій та видалень blob-ів
|
||||
- **Enable version-level immutability support**: Дозволяє встановити політику збереження на рівні часу для всіх версій blob-ів на рівні аккаунта.
|
||||
- Version-level immutability support і point-in-time restore for containers не можуть бути увімкнені одночасно.
|
||||
|
||||
**Параметри шифрування**:
|
||||
**Encryption configuration options**:
|
||||
|
||||
- **Encryption type**: Можна використовувати Microsoft-managed keys (MMK) або Customer-managed keys (CMK)
|
||||
- **Enable infrastructure encryption**: Дозволяє подвійне шифрування даних "для підвищення безпеки"
|
||||
- **Enable infrastructure encryption**: Дозволяє подвійно зашифрувати дані "for more security"
|
||||
|
||||
### Кінцеві точки сховища
|
||||
### Storage endpoints
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">Сервіс зберігання</th><th>Кінцева точка</th></tr></thead><tbody><tr><td><strong>Blob storage</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Data Lake Storage</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="197">Storage Service</th><th>Endpoint</th></tr></thead><tbody><tr><td><strong>Blob storage</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Data Lake Storage</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
|
||||
### Публічна доступність
|
||||
### Public Exposure
|
||||
|
||||
Якщо "Allow Blob public access" **увімкнено** (за замовчуванням вимкнено), при створенні контейнера можливо:
|
||||
Якщо "Allow Blob public access" **увімкнено** (за замовчуванням вимкнено), під час створення контейнера можна:
|
||||
|
||||
- Надати **публічний доступ для читання blobs** (потрібно знати ім'я).
|
||||
- **Перелік blob'ів контейнера** та **читання** їх.
|
||||
- Зробити його повністю **приватним**
|
||||
- Надати **public access to read blobs** (потрібно знати ім'я).
|
||||
- **List container blobs** та **read** їх.
|
||||
- Зробити його повністю **private**
|
||||
|
||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Аудит анонімного доступу до blob
|
||||
### Static website (`$web`) exposure & leaked secrets
|
||||
|
||||
- **Знайти storage accounts**, які можуть розкривати дані: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Якщо `allowBlobPublicAccess` є `false`, ви не зможете увімкнути публічний доступ для контейнерів.
|
||||
- **Перевірити ризикові облікові записи**, щоб підтвердити прапорець та інші слабкі налаштування: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Перелічити експозицію на рівні контейнерів** там, де прапорець увімкнено:
|
||||
- **Static websites** are served from the special `$web` container over a region-specific endpoint such as `https://<account>.z13.web.core.windows.net/`.
|
||||
- The `$web` container may report `publicAccess: null` via the blob API, but files are still reachable through the static site endpoint, so dropping config/IaC artifacts there can leak secrets.
|
||||
- Quick audit workflow:
|
||||
```bash
|
||||
# Identify storage accounts with static website hosting enabled
|
||||
az storage blob service-properties show --account-name <acc-name> --auth-mode login
|
||||
# Enumerate containers (including $web) and their public flags
|
||||
az storage container list --account-name <acc-name> --auth-mode login
|
||||
# List files served by the static site even when publicAccess is null
|
||||
az storage blob list --container-name '$web' --account-name <acc-name> --auth-mode login
|
||||
# Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS)
|
||||
az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name <acc-name> --auth-mode login
|
||||
```
|
||||
### Аудит анонімного доступу до blob
|
||||
|
||||
- **Знайдіть storage accounts**, які можуть відкривати дані: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Якщо `allowBlobPublicAccess` має значення `false`, ви не зможете зробити контейнери публічними.
|
||||
- **Перевірте ризикові облікові записи**, щоб підтвердити прапорець і інші слабкі налаштування: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Перелічіть публічний доступ на рівні контейнера** там, де прапорець увімкнено:
|
||||
```bash
|
||||
az storage container list --account-name <acc> \
|
||||
--query '[].{name:name, access:properties.publicAccess}'
|
||||
```
|
||||
- `"Blob"`: дозволено анонімне читання **лише коли ім'я blob відоме** (без листингу).
|
||||
- `"Container"`: анонімний **листинг + читання** кожного blob.
|
||||
- `"Blob"`: дозволено анонімне читання **лише коли відоме ім'я blob** (без переліку).
|
||||
- `"Container"`: анонімний **перелік + читання** кожного blob.
|
||||
- `null`: приватний; потрібна автентифікація.
|
||||
- **Підтвердити доступ** без облікових даних:
|
||||
- Якщо `publicAccess` встановлено в `Container`, анонімний листинг працює: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Для обох `Blob` та `Container`, анонімне завантаження blob працює, коли ім'я відоме:
|
||||
- **Доведіть доступ** без облікових даних:
|
||||
- Якщо `publicAccess` — `Container`, анонімне перелічення працює: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Для обох `Blob` і `Container`, анонімне завантаження blob працює, коли ім'я відоме:
|
||||
```bash
|
||||
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
|
||||
# or via raw HTTP
|
||||
@@ -87,31 +102,31 @@ curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
|
||||
```
|
||||
### Підключення до сховища
|
||||
|
||||
Якщо ви знайдете будь-яке **сховище**, до якого можна підключитися, ви можете використовувати інструмент [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) для цього.
|
||||
Якщо ви знайдете будь-яке **сховище**, до якого можна підключитися, ви можете скористатися інструментом [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) для цього.
|
||||
|
||||
## Доступ до сховища <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
Можна використовувати принципали Entra ID з **RBAC roles** для доступу до облікових записів сховища, і це рекомендований підхід.
|
||||
Можна використовувати суб'єкти Entra ID з ролями **RBAC** для доступу до облікових записів сховища — це рекомендований спосіб.
|
||||
|
||||
### Ключі доступу
|
||||
|
||||
Облікові записи сховища мають ключі доступу, за допомогою яких можна отримати доступ. Це надає **повний доступ до облікового запису сховища.**
|
||||
Облікові записи сховища мають ключі доступу, які можна використовувати для доступу до них. Це надає **повний доступ до облікового запису сховища.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
Можна [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) підписані ключами доступу для авторизації доступу до певних ресурсів через підписане URL.
|
||||
It's possible to [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) signed with the access keys to authorize access to certain resources via a signed URL.
|
||||
|
||||
> [!NOTE]
|
||||
> Зверніть увагу, що частина `CanonicalizedResource` представляє ресурс служби сховища (URI). І якщо будь-яка частина в URL закодована, вона також має бути закодована всередині `CanonicalizedResource`.
|
||||
|
||||
> [!NOTE]
|
||||
> За замовчуванням для автентифікації запитів **використовується `az` cli**. Щоб змусити його використовувати облікові дані принципала Entra ID, вкажіть параметр `--auth-mode login`.
|
||||
> За замовчуванням для автентифікації запитів **використовується `az` cli**. Щоб змусити його використовувати облікові дані суб'єкта Entra ID, вкажіть параметр `--auth-mode login`.
|
||||
|
||||
- Можна згенерувати **shared key для служб blob, queue та file**, підписавши таку інформацію:
|
||||
- Можна згенерувати **shared key for blob, queue and file services** шляхом підпису наступної інформації:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -136,7 +151,7 @@ Content-Type + "\n" +
|
||||
Date + "\n" +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Можна згенерувати **lite shared key for blob, queue and file services** підписавши наступну інформацію:
|
||||
- Можна згенерувати **lite shared key for blob, queue and file services**, підписавши наступну інформацію:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -145,12 +160,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Можна згенерувати **lite shared key for table services**, підписавши таку інформацію:
|
||||
- Можна згенерувати **lite shared key for table services** підписавши наступну інформацію:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
Тоді, щоб використати ключ, його можна передати в заголовку Authorization за таким синтаксисом:
|
||||
Тоді, щоб використати ключ, це можна зробити в заголовку Authorization, використовуючи синтаксис:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -162,78 +177,78 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
|
||||
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
|
||||
Content-Length: 0
|
||||
```
|
||||
### **Підпис для спільного доступу** (SAS)
|
||||
### **Shared Access Signature** (SAS)
|
||||
|
||||
Shared Access Signatures (SAS) — це безпечні, обмежені в часі URL, які надають конкретні дозволи на доступ до ресурсів в Azure Storage account без розкриття ключів доступу облікового запису. У той час як access keys дають повний адміністративний доступ до всіх ресурсів, SAS дозволяє тонко керувати доступом, вказуючи дозволи (наприклад read або write) та визначаючи час закінчення дії.
|
||||
Shared Access Signatures (SAS) — це безпечні URL з обмеженим терміном дії, які **grant specific permissions to access resource**s в обліковому записі Azure Storage і дозволяють отримати доступ до ресурсів без розкриття ключів доступу облікового запису. У той час як access keys дають повний адміністративний доступ до всіх ресурсів, SAS дозволяє здійснювати тонке управління доступом, вказуючи дозволи (наприклад, read або write) і визначаючи час закінчення дії.
|
||||
|
||||
#### SAS Types
|
||||
|
||||
- **User delegation SAS**: Створюється від імені **Entra ID principal**, який підписує SAS і делегує дозволи від користувача до SAS. Може використовуватись лише з **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Можна **revoke** всі згенеровані user delegated SAS.
|
||||
- Навіть якщо можливо згенерувати delegation SAS з "більшими" дозволами, ніж має користувач, якщо принципал їх не має, це не спрацює (немає privesc).
|
||||
- **Service SAS**: Підписується за допомогою одного з access keys облікового запису storage. Може надавати доступ до конкретних ресурсів в межах однієї storage service. Якщо ключ буде оновлено, SAS перестане працювати.
|
||||
- **Account SAS**: Також підписується одним з access keys облікового запису storage. Надає доступ до ресурсів по всіх сервісах storage account (Blob, Queue, Table, File) і може включати операції на рівні сервісу.
|
||||
- **User delegation SAS**: Створюється від імені **Entra ID principal**, який підписує SAS і делегує дозволи від користувача до SAS. Може використовуватися лише з **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Можна **revoke** всі згенеровані user delegated SAS.
|
||||
- Навіть якщо можливо згенерувати delegation SAS з "більшими" дозволами, ніж має користувач, якщо у принципала їх немає — це не спрацює (no privesc).
|
||||
- **Service SAS**: Підписується за допомогою одного з access keys облікового запису storage. Може давати доступ до конкретних ресурсів в межах одного сервісу storage. Якщо ключ буде оновлено, SAS перестане працювати.
|
||||
- **Account SAS**: Теж підписується одним з access keys облікового запису. Надає доступ до ресурсів у межах сервісів облікового запису (Blob, Queue, Table, File) і може включати операції на рівні сервісу.
|
||||
|
||||
SAS URL, підписаний за допомогою **access key**, виглядає так:
|
||||
A SAS URL signed by an **access key** looks like this:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||
|
||||
SAS URL, підписаний як **user delegation**, виглядає так:
|
||||
A SAS URL signed as a **user delegation** looks like this:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D`
|
||||
|
||||
Зверніть увагу на деякі **http params**:
|
||||
Note some **http params**:
|
||||
|
||||
- Параметр **`se`** вказує **дату закінчення дії** SAS
|
||||
- Параметр **`sp`** вказує **дозволи** SAS
|
||||
- **`sig`** — це **підпис**, що валідовує SAS
|
||||
- The **`se`** param indicates the **expiration date** of the SAS
|
||||
- The **`sp`** param indicates the **permissions** of the SAS
|
||||
- The **`sig`** is the **signature** validating the SAS
|
||||
|
||||
#### SAS permissions
|
||||
|
||||
При генерації SAS потрібно вказати дозволи, які він має надавати. Залежно від об'єкта, для якого створюється SAS, можуть включатися різні дозволи. Наприклад:
|
||||
При генерації SAS потрібно вказати дозволи, які він повинен надавати. В залежності від об'єкта, для якого створюється SAS, можуть бути включені різні дозволи. Наприклад:
|
||||
|
||||
- (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete
|
||||
|
||||
## SFTP Support for Azure Blob Storage
|
||||
|
||||
Azure Blob Storage тепер підтримує SSH File Transfer Protocol (SFTP), що дозволяє безпечно передавати файли та керувати ними безпосередньо в Blob Storage без необхідності кастомних рішень або сторонніх продуктів.
|
||||
Azure Blob Storage тепер підтримує SSH File Transfer Protocol (SFTP), що дозволяє безпечно передавати файли і керувати ними безпосередньо в Blob Storage без потреби у кастомних рішеннях або продуктах сторонніх розробників.
|
||||
|
||||
### Key Features
|
||||
|
||||
- Protocol Support: SFTP працює з Blob Storage accounts, сконфігурованими з hierarchical namespace (HNS). Це організовує blobs у директорії та піддиректорії для зручнішої навігації.
|
||||
- Security: SFTP використовує локальні user identities для аутентифікації і не інтегрується з RBAC або ABAC. Кожен локальний user може аутентифікуватись через:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Дозволи такі як Read, Write, Delete та List можуть бути призначені локальним users для до 100 containers.
|
||||
- Networking Considerations: SFTP-з'єднання здійснюються через порт 22. Azure підтримує мережеві конфігурації, як-от firewalls, private endpoints або virtual networks для захисту SFTP-трафіку.
|
||||
- Protocol Support: SFTP працює з Blob Storage accounts, налаштованими з hierarchical namespace (HNS). Це організовує blobs у директорії та піддиректорії для зручнішої навігації.
|
||||
- Security: SFTP використовує локальні користувацькі облікові записи для автентифікації і не інтегрується з RBAC або ABAC. Кожен локальний користувач може автентифікуватися за допомогою:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Такі дозволи, як Read, Write, Delete і List, можна призначати локальним користувачам для максимум 100 контейнерів.
|
||||
- Networking Considerations: SFTP-з'єднання відбуваються через порт 22. Azure підтримує мережеві конфігурації такі як firewalls, private endpoints або virtual networks для захисту трафіку SFTP.
|
||||
|
||||
### Setup Requirements
|
||||
|
||||
- Hierarchical Namespace: HNS має бути увімкнено при створенні storage account.
|
||||
- Supported Encryption: Потребує криптографічних алгоритмів, схвалених Microsoft Security Development Lifecycle (SDL) (наприклад rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- Hierarchical Namespace: HNS має бути ввімкнено під час створення storage account.
|
||||
- Supported Encryption: Потрібні криптографічні алгоритми, затверджені Microsoft SDL (наприклад, rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP Configuration:
|
||||
- Увімкніть SFTP на storage account.
|
||||
- Створіть локальні user identities з відповідними дозволами.
|
||||
- Налаштуйте home directories для user, щоб визначити їх початкове розташування в контейнері.
|
||||
- Enable SFTP on the storage account.
|
||||
- Create local user identities with appropriate permissions.
|
||||
- Configure home directories for users to define their starting location within the container.
|
||||
|
||||
### Permissions
|
||||
|
||||
| Permission | Symbol | Description |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Read** | `r` | Читання вмісту файлу. |
|
||||
| **Write** | `w` | Завантаження файлів та створення директорій. |
|
||||
| **List** | `l` | Перелік вмісту директорій. |
|
||||
| **Delete** | `d` | Видалення файлів або директорій. |
|
||||
| **Create** | `c` | Створення файлів або директорій. |
|
||||
| **Modify Ownership** | `o` | Зміна власника або групи. |
|
||||
| **Modify Permissions** | `p` | Зміна ACLs на файлах або директоріях. |
|
||||
| **Read** | `r` | Читати вміст файлу. |
|
||||
| **Write** | `w` | Завантажувати файли та створювати директорії. |
|
||||
| **List** | `l` | Перелічувати вміст директорій. |
|
||||
| **Delete** | `d` | Видаляти файли або директорії. |
|
||||
| **Create** | `c` | Створювати файли або директорії. |
|
||||
| **Modify Ownership** | `o` | Змінювати власника користувача або групи. |
|
||||
| **Modify Permissions** | `p` | Змінювати ACL на файлах або директоріях. |
|
||||
|
||||
## Перерахування
|
||||
## Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
<details>
|
||||
<summary>az cli enumeration</summary>
|
||||
<summary>az cli перерахування</summary>
|
||||
```bash
|
||||
# Get storage accounts
|
||||
az storage account list #Get the account name from here
|
||||
@@ -357,7 +372,7 @@ az storage account local-user list \
|
||||
{{#tab name="Az PowerShell" }}
|
||||
|
||||
<details>
|
||||
<summary>Az PowerShell enumeration</summary>
|
||||
<summary>Az PowerShell перерахування</summary>
|
||||
```powershell
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount | fl
|
||||
@@ -420,25 +435,25 @@ New-AzStorageBlobSASToken `
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### File Shares
|
||||
### Файлові ресурси
|
||||
|
||||
{{#ref}}
|
||||
az-file-shares.md
|
||||
{{#endref}}
|
||||
|
||||
## Privilege Escalation
|
||||
## Підвищення привілеїв
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Post Exploitation
|
||||
## Пост-експлуатація
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-blob-storage-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## Persistence
|
||||
## Персистентність
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-storage-persistence.md
|
||||
@@ -449,6 +464,7 @@ az-file-shares.md
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support)
|
||||
- [Holiday Hack Challenge 2025 – Spare Key (Azure static website SAS leak)](https://0xdf.gitlab.io/holidayhack2025/act1/spare-key)
|
||||
- [Holiday Hack Challenge 2025: Blob Storage (Storage Secrets)](https://0xdf.gitlab.io/holidayhack2025/act1/blob-storage)
|
||||
- [https://learn.microsoft.com/en-us/cli/azure/storage/account](https://learn.microsoft.com/en-us/cli/azure/storage/account)
|
||||
- [https://learn.microsoft.com/en-us/cli/azure/storage/container](https://learn.microsoft.com/en-us/cli/azure/storage/container)
|
||||
|
||||
Reference in New Issue
Block a user