Az - Облікові записи зберігання та блоби
Reading time: 14 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Основна інформація
Облікові записи зберігання Azure є основними службами в Microsoft Azure, які забезпечують масштабоване, безпечне та високо доступне хмарне зберігання для різних типів даних, включаючи блоби (бінарні великі об'єкти), файли, черги та таблиці. Вони слугують контейнерами, які групують ці різні служби зберігання під єдиним простором імен для зручного управління.
Основні параметри конфігурації:
- Кожен обліковий запис зберігання повинен мати унікальне ім'я серед усіх Azure.
- Кожен обліковий запис зберігання розгортається в регіоні або в розширеній зоні Azure.
- Можна вибрати преміум версію облікового запису зберігання для кращої продуктивності.
- Можна вибрати серед 4 типів надмірності для захисту від відмов в стійках, дисках та дата-центрах.
Параметри конфігурації безпеки:
- Вимагати безпечну передачу для операцій REST API: Вимагати TLS у будь-якому спілкуванні зі зберіганням.
- Дозволяє ввімкнення анонімного доступу до окремих контейнерів: Якщо ні, у майбутньому не буде можливості ввімкнути анонімний доступ.
- Увімкнути доступ за ключем облікового запису зберігання: Якщо ні, доступ з використанням спільних ключів буде заборонено.
- Мінімальна версія TLS.
- Дозволений обсяг для операцій копіювання: Дозволити з будь-якого облікового запису зберігання, з будь-якого облікового запису зберігання з того ж орендаря Entra або з облікового запису зберігання з приватними кінцевими точками в тій же віртуальній мережі.
Параметри зберігання блобів:
- Дозволити крос-орендаторну реплікацію.
- Рівень доступу: Гарячий (часто доступні дані), Холодний і Прохолодний (рідко доступні дані).
Параметри мережі:
- Доступ до мережі:
- Дозволити з усіх мереж.
- Дозволити з вибраних віртуальних мереж та IP-адрес.
- Вимкнути публічний доступ і використовувати приватний доступ.
- Приватні кінцеві точки: Дозволяє приватне з'єднання з обліковим записом зберігання з віртуальної мережі.
Параметри захисту даних:
- Відновлення на момент часу для контейнерів: Дозволяє відновити контейнери до попереднього стану.
- Це вимагає ввімкнення версійності, зміни потоку та м'якого видалення блобів.
- Увімкнути м'яке видалення для блобів: Дозволяє період зберігання в днях для видалених блобів (навіть перезаписаних).
- Увімкнути м'яке видалення для контейнерів: Дозволяє період зберігання в днях для видалених контейнерів.
- Увімкнути м'яке видалення для загальних папок: Дозволяє період зберігання в днях для видалених загальних папок.
- Увімкнути версійність для блобів: Зберігати попередні версії ваших блобів.
- Увімкнути зміну потоку блобів: Зберігати журнали створення, модифікації та видалення змін до блобів.
- Увімкнути підтримку незмінності на рівні версії: Дозволяє встановити політику зберігання на основі часу на рівні облікового запису, яка буде застосовуватися до всіх версій блобів.
- Підтримка незмінності на рівні версії та відновлення на момент часу для контейнерів не можуть бути увімкнені одночасно.
Параметри конфігурації шифрування:
- Тип шифрування: Можна використовувати ключі, керовані Microsoft (MMK) або ключі, керовані клієнтом (CMK).
- Увімкнути інфраструктурне шифрування: Дозволяє подвоїти шифрування даних "для більшої безпеки".
Кінцеві точки зберігання
Служба зберігання | Кінцева точка |
---|---|
Зберігання блобів | https:// https:// |
Зберігання Data Lake | https:// |
Azure Files | https:// |
Зберігання черг | https:// |
Зберігання таблиць | https:// |
Публічне відкриття
Якщо "Дозволити публічний доступ до блобів" увімкнено (за замовчуванням вимкнено), при створенні контейнера можна:
- Надати публічний доступ для читання блобів (необхідно знати ім'я).
- Переглядати блоби контейнера та читати їх.
- Зробити його повністю приватним.
Підключення до зберігання
Якщо ви знайдете будь-яке зберігання, до якого можете підключитися, ви можете використовувати інструмент Microsoft Azure Storage Explorer для цього.
Доступ до зберігання
RBAC
Можна використовувати принципи Entra ID з ролями RBAC для доступу до облікових записів зберігання, і це рекомендований спосіб.
Ключі доступу
Облікові записи зберігання мають ключі доступу, які можна використовувати для доступу до них. Це забезпечує повний доступ до облікового запису зберігання.
.png)
Спільні ключі та легкі спільні ключі
Можна згенерувати спільні ключі, підписані ключами доступу, для авторизації доступу до певних ресурсів через підписане URL.
note
Зверніть увагу, що частина CanonicalizedResource
представляє ресурс служби зберігання (URI). І якщо будь-яка частина в URL закодована, вона також повинна бути закодована всередині CanonicalizedResource
.
note
Це використовується за замовчуванням az
cli для аутентифікації запитів. Щоб використовувати облікові дані принципу Entra ID, вкажіть параметр --auth-mode login
.
- Можна згенерувати спільний ключ для блобів, черг та файлових служб, підписавши таку інформацію:
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
Content-Language + "\n" +
Content-Length + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
If-Modified-Since + "\n" +
If-Match + "\n" +
If-None-Match + "\n" +
If-Unmodified-Since + "\n" +
Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
- Можливо згенерувати спільний ключ для сервісів таблиць, підписавши таку інформацію:
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
- Можливо згенерувати lite shared key для blob, queue та file services, підписавши наступну інформацію:
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
- Можливо згенерувати lite shared key для сервісів таблиць, підписавши таку інформацію:
StringToSign = Date + "\n"
CanonicalizedResource
Тоді, щоб використовувати ключ, це можна зробити в заголовку Authorization, дотримуючись синтаксису:
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
#e.g.
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
PUT http://myaccount/mycontainer?restype=container&timeout=30 HTTP/1.1
x-ms-version: 2014-02-14
x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Content-Length: 0
Shared Access Signature (SAS)
Shared Access Signatures (SAS) - це безпечні, обмежені за часом URL-адреси, які надають конкретні дозволи для доступу до ресурсів в обліковому записі Azure Storage без розкриття ключів доступу облікового запису. Хоча ключі доступу надають повний адміністративний доступ до всіх ресурсів, SAS дозволяє здійснювати детальний контроль, вказуючи дозволи (наприклад, читання або запис) і визначаючи час закінчення терміну дії.
Типи SAS
- SAS делегування користувача: Це створюється з Entra ID principal, який підпише SAS і делегує дозволи від користувача до SAS. Його можна використовувати лише з blob і data lake storage (docs). Можливо анулювати всі згенеровані SAS делегування користувача.
- Навіть якщо можливо згенерувати SAS делегування з "більшими" дозволами, ніж ті, які має користувач. Однак, якщо у принципала їх немає, це не спрацює (без підвищення привілеїв).
- Service SAS: Це підписується за допомогою одного з ключів доступу облікового запису. Його можна використовувати для надання доступу до конкретних ресурсів в одному сервісі зберігання. Якщо ключ буде оновлено, SAS перестане працювати.
- Account SAS: Він також підписується одним з ключів доступу облікового запису. Він надає доступ до ресурсів через сервіси облікового запису зберігання (Blob, Queue, Table, File) і може включати операції на рівні сервісу.
URL-адреса SAS, підписана ключем доступу, виглядає так:
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
URL-адреса SAS, підписана як делегування користувача, виглядає так:
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:
- Параметр
se
вказує на дату закінчення терміну дії SAS - Параметр
sp
вказує на дозволи SAS sig
- це підпис, що підтверджує 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 для Azure Blob Storage
Azure Blob Storage тепер підтримує протокол передачі файлів SSH (SFTP), що дозволяє безпечну передачу та управління файлами безпосередньо до Blob Storage без необхідності в кастомних рішеннях або продуктах третіх сторін.
Ключові особливості
- Підтримка протоколу: SFTP працює з обліковими записами Blob Storage, налаштованими з ієрархічним простором імен (HNS). Це організовує блоби в каталоги та підкаталоги для зручнішої навігації.
- Безпека: SFTP використовує локальні ідентичності користувачів для аутентифікації і не інтегрується з RBAC або ABAC. Кожен локальний користувач може аутентифікуватися через:
- Паролі, згенеровані Azure
- Пара ключів SSH (публічний-приватний)
- Детальні дозволи: Дозволи, такі як Читання, Запис, Видалення та Список, можуть бути призначені локальним користувачам для до 100 контейнерів.
- Мережеві міркування: З'єднання SFTP здійснюються через порт 22. Azure підтримує мережеві конфігурації, такі як брандмауери, приватні кінцеві точки або віртуальні мережі для захисту трафіку SFTP.
Вимоги до налаштування
- Ієрархічний простір імен: HNS повинен бути увімкнено при створенні облікового запису зберігання.
- Підтримуване шифрування: Потрібні криптографічні алгоритми, схвалені Microsoft Security Development Lifecycle (SDL) (наприклад, rsa-sha2-256, ecdsa-sha2-nistp256).
- Налаштування SFTP:
- Увімкніть SFTP на обліковому записі зберігання.
- Створіть локальні ідентичності користувачів з відповідними дозволами.
- Налаштуйте домашні каталоги для користувачів, щоб визначити їх початкове місце розташування в контейнері.
Дозволи
Дозвіл | Символ | Опис |
---|---|---|
Читання | r | Читати вміст файлу. |
Запис | w | Завантажувати файли та створювати каталоги. |
Список | l | Переглядати вміст каталогів. |
Видалення | d | Видаляти файли або каталоги. |
Створення | c | Створювати файли або каталоги. |
Зміна власності | o | Змінювати користувача або групу, що володіє. |
Зміна дозволів | p | Змінювати ACL на файлах або каталогах. |
Перерахування
# Get storage accounts
az storage account list #Get the account name from here
# BLOB STORAGE
## List containers
az storage container list --account-name <name>
## Check if public access is allowed
az storage container show-permission \
--account-name <acc-name> \
-n <container-name>
## Make a container public
az storage container set-permission \
--public-access container \
--account-name <acc-name> \
-n <container-name>
## List blobs in a container
az storage blob list \
--container-name <container name> \
--account-name <account name>
## Download blob
az storage blob download \
--account-name <account name> \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Create container policy
az storage container policy create \
--account-name mystorageaccount \
--container-name mycontainer \
--name fullaccesspolicy \
--permissions racwdl \
--start 2023-11-22T00:00Z \
--expiry 2024-11-22T00:00Z
# QUEUE
az storage queue list --account-name <name>
az storage message peek --account-name <name> --queue-name <queue-name>
# ACCESS KEYS
az storage account keys list --account-name <name>
## Check key policies (expiration time?)
az storage account show -n <name> --query "{KeyPolicy:keyPolicy}"
## Once having the key, it's possible to use it with the argument --account-key
## Enum blobs with account key
az storage blob list \
--container-name <container name> \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw=="
## Download a file using an account key
az storage blob download \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Upload a file using an account key
az storage blob upload \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--file </path/to/local/file>
# SAS
## List access policies
az storage <container|queue|share|table> policy list \
--account-name <acc name> \
--container-name <container name>
## Generate SAS with all permissions using an access key
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
-n <container-name>
## Generate SAS with all permissions using via user delegation
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
--as-user --auth-mode login \
-n <container-name>
## Generate account SAS
az storage account generate-sas \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
--services qt \
--resource-types sco \
--permissions acdfilrtuwxy
## Use the returned SAS key with the param --sas-token
## e.g.
az storage blob show \
--account-name <account name> \
--container-name <container name> \
--sas-token 'se=2024-12-31T23%3A59%3A00Z&sp=racwdxyltfmei&sv=2022-11-02&sr=c&sig=ym%2Bu%2BQp5qqrPotIK5/rrm7EMMxZRwF/hMWLfK1VWy6E%3D' \
--name 'asd.txt'
#Local-Users
## List users
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>
## Get user
az storage account local-user show \
--account-name <storage-account-name> \
--resource-group <resource-group-name> \
--name <local-user-name>
## List keys
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>
Файлові спільноти
Підвищення привілеїв
Постексплуатація
Az - Blob Storage Post Exploitation
Персистентність
Посилання
- 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/blobs/secure-file-transfer-protocol-support
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.