Az - Storage Accounts & Blobs

Reading time: 16 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Basic Information

Azure Storage Accounts Microsoft Azure में मौलिक सेवाएँ हैं जो विभिन्न डेटा प्रकारों के लिए स्केलेबल, सुरक्षित और अत्यधिक उपलब्ध क्लाउड स्टोरेज प्रदान करती हैं, जिसमें ब्लॉब (बाइनरी बड़े ऑब्जेक्ट), फ़ाइलें, कतारें और तालिकाएँ शामिल हैं। ये विभिन्न स्टोरेज सेवाओं को एकल नामस्थान के तहत एक साथ समूहित करने के लिए कंटेनर के रूप में कार्य करते हैं ताकि प्रबंधन आसान हो सके।

मुख्य कॉन्फ़िगरेशन विकल्प:

  • प्रत्येक स्टोरेज खाता का सभी Azure में एक अद्वितीय नाम होना चाहिए
  • प्रत्येक स्टोरेज खाता एक क्षेत्र या Azure विस्तारित क्षेत्र में तैनात किया जाता है।
  • बेहतर प्रदर्शन के लिए स्टोरेज खाते का प्रीमियम संस्करण चुनना संभव है।
  • रैक, ड्राइव और डेटा सेंटर विफलताओं के खिलाफ सुरक्षा के लिए 4 प्रकार की पुनरावृत्ति में से चुनना संभव है।

सुरक्षा कॉन्फ़िगरेशन विकल्प:

  • REST API संचालन के लिए सुरक्षित ट्रांसफर की आवश्यकता: स्टोरेज के साथ किसी भी संचार में TLS की आवश्यकता होती है।
  • व्यक्तिगत कंटेनरों पर गुमनाम पहुंच सक्षम करने की अनुमति: यदि नहीं, तो भविष्य में गुमनाम पहुंच सक्षम करना संभव नहीं होगा।
  • स्टोरेज खाता कुंजी पहुंच सक्षम करें: यदि नहीं, तो साझा कुंजी के साथ पहुंच वर्जित होगी।
  • न्यूनतम TLS संस्करण
  • कॉपी संचालन के लिए अनुमत दायरा: किसी भी स्टोरेज खाते से, उसी Entra टेनेन्ट से किसी भी स्टोरेज खाते से या समान वर्चुअल नेटवर्क में निजी एंडपॉइंट वाले स्टोरेज खाते से अनुमति दें।

Blob Storage विकल्प:

  • क्रॉस-टेनेन्ट पुनरावृत्ति की अनुमति दें
  • एक्सेस स्तर: हॉट (बार-बार एक्सेस किया गया डेटा), कूल और कोल्ड (कभी-कभी एक्सेस किया गया डेटा)।

नेटवर्किंग विकल्प:

  • नेटवर्क एक्सेस:
  • सभी नेटवर्क से अनुमति दें।
  • चयनित वर्चुअल नेटवर्क और IP पते से अनुमति दें।
  • सार्वजनिक पहुंच को अक्षम करें और निजी पहुंच का उपयोग करें।
  • निजी एंडपॉइंट: यह वर्चुअल नेटवर्क से स्टोरेज खाते के लिए एक निजी कनेक्शन की अनुमति देता है।

डेटा सुरक्षा विकल्प:

  • कंटेनरों के लिए समय-निर्धारित पुनर्स्थापना: यह कंटेनरों को पहले की स्थिति में पुनर्स्थापित करने की अनुमति देता है।
  • इसके लिए संस्करणन, परिवर्तन फ़ीड, और ब्लॉब सॉफ़्ट डिलीट सक्षम होना आवश्यक है।
  • ब्लॉब के लिए सॉफ़्ट डिलीट सक्षम करें: यह हटाए गए ब्लॉब (यहां तक कि ओवरराइट किए गए) के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
  • कंटेनरों के लिए सॉफ़्ट डिलीट सक्षम करें: यह हटाए गए कंटेनरों के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
  • फ़ाइल शेयरों के लिए सॉफ़्ट डिलीट सक्षम करें: यह हटाए गए फ़ाइल शेयरों के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
  • ब्लॉब के लिए संस्करणन सक्षम करें: अपने ब्लॉब के पिछले संस्करणों को बनाए रखें।
  • ब्लॉब परिवर्तन फ़ीड सक्षम करें: ब्लॉब में निर्माण, संशोधन, और हटाने के परिवर्तनों के लॉग रखें।
  • संस्करण-स्तरीय अपरिवर्तनीयता समर्थन सक्षम करें: यह आपको खाता स्तर पर समय-आधारित संरक्षण नीति सेट करने की अनुमति देता है जो सभी ब्लॉब संस्करणों पर लागू होगी।
  • संस्करण-स्तरीय अपरिवर्तनीयता समर्थन और कंटेनरों के लिए समय-निर्धारित पुनर्स्थापना को एक साथ सक्षम नहीं किया जा सकता है।

एन्क्रिप्शन कॉन्फ़िगरेशन विकल्प:

  • एन्क्रिप्शन प्रकार: Microsoft-प्रबंधित कुंजी (MMK) या ग्राहक-प्रबंधित कुंजी (CMK) का उपयोग करना संभव है।
  • इन्फ्रास्ट्रक्चर एन्क्रिप्शन सक्षम करें: डेटा को "अधिक सुरक्षा के लिए" डबल एन्क्रिप्ट करने की अनुमति देता है।

Storage endpoints

Storage ServiceEndpoint
Blob storagehttps://.blob.core.windows.net

https://.blob.core.windows.net/?restype=container&comp=list
Data Lake Storagehttps://.dfs.core.windows.net
Azure Fileshttps://.file.core.windows.net
Queue storagehttps://.queue.core.windows.net
Table storagehttps://.table.core.windows.net

Public Exposure

यदि "Allow Blob public access" सक्षम है (डिफ़ॉल्ट रूप से अक्षम), तो कंटेनर बनाते समय यह संभव है:

  • ब्लॉब पढ़ने के लिए सार्वजनिक पहुंच दें (आपको नाम जानना होगा)।
  • कंटेनर ब्लॉब की सूची बनाएं और उन्हें पढ़ें
  • इसे पूरी तरह से निजी बनाएं।

Connect to Storage

यदि आप कोई स्टोरेज पाते हैं जिससे आप कनेक्ट कर सकते हैं, तो आप ऐसा करने के लिए Microsoft Azure Storage Explorer उपकरण का उपयोग कर सकते हैं।

Access to Storage

RBAC

स्टोरेज खातों तक पहुंच के लिए RBAC भूमिकाओं के साथ Entra ID प्रिंसिपल का उपयोग करना संभव है और यह अनुशंसित तरीका है।

Access Keys

स्टोरेज खातों में एक्सेस कुंजी होती हैं जिनका उपयोग इसे एक्सेस करने के लिए किया जा सकता है। यह स्टोरेज खाते तक पूर्ण पहुंच प्रदान करता है।

Shared Keys & Lite Shared Keys

यह संभव है कि Shared Keys उत्पन्न करें जो एक्सेस कुंजियों के साथ हस्ताक्षरित होते हैं ताकि एक हस्ताक्षरित URL के माध्यम से कुछ संसाधनों तक पहुंच को अधिकृत किया जा सके।

note

ध्यान दें कि CanonicalizedResource भाग स्टोरेज सेवाओं के संसाधन (URI) का प्रतिनिधित्व करता है। और यदि URL में कोई भाग एन्कोड किया गया है, तो इसे CanonicalizedResource के अंदर भी एन्कोड किया जाना चाहिए।

note

यह डिफ़ॉल्ट रूप से az cli द्वारा उपयोग किया जाता है ताकि अनुरोधों को प्रमाणित किया जा सके। इसे Entra ID प्रिंसिपल क्रेडेंशियल्स का उपयोग करने के लिए --auth-mode login पैरामीटर निर्दिष्ट करें।

  • यह ब्लॉब, कतार और फ़ाइल सेवाओं के लिए एक साझा कुंजी उत्पन्न करना संभव है, निम्नलिखित जानकारी पर हस्ताक्षर करके:
bash
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;
  • यह संभव है कि table services के लिए एक shared key उत्पन्न किया जाए निम्नलिखित जानकारी पर हस्ताक्षर करके:
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
  • यह ब्लॉब, कतार और फ़ाइल सेवाओं के लिए एक लाइट साझा कुंजी उत्पन्न करना संभव है, निम्नलिखित जानकारी पर हस्ताक्षर करके:
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
  • यह संभव है कि टेबल सेवाओं के लिए एक लाइट साझा कुंजी उत्पन्न की जाए, निम्नलिखित जानकारी पर हस्ताक्षर करके:
bash
StringToSign = Date + "\n"
CanonicalizedResource

फिर, कुंजी का उपयोग करने के लिए, इसे Authorization हेडर में निम्नलिखित सिंटैक्स का पालन करते हुए किया जा सकता है:

bash
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) सुरक्षित, समय-सीमित URLs हैं जो Azure Storage खाते में संसाधनों तक पहुँचने के लिए विशिष्ट अनुमतियाँ प्रदान करती हैं बिना खाते की पहुँच कुंजियों को उजागर किए। जबकि पहुँच कुंजियाँ सभी संसाधनों के लिए पूर्ण प्रशासनिक पहुँच प्रदान करती हैं, SAS अनुमतियों (जैसे पढ़ना या लिखना) को निर्दिष्ट करके और समाप्ति समय को परिभाषित करके सूक्ष्म नियंत्रण की अनुमति देती है।

SAS प्रकार

  • User delegation SAS: यह एक Entra ID principal से बनाया जाता है जो SAS पर हस्ताक्षर करेगा और उपयोगकर्ता से SAS को अनुमतियाँ सौंपेगा। इसका उपयोग केवल blob और data lake storage के साथ किया जा सकता है (docs). सभी उत्पन्न उपयोगकर्ता प्रतिनिधि SAS को रद्द करना संभव है।
  • भले ही "अधिक" अनुमतियों के साथ एक प्रतिनिधित्व SAS उत्पन्न करना संभव है जो उपयोगकर्ता के पास हैं। हालाँकि, यदि प्रमुख के पास वे नहीं हैं, तो यह काम नहीं करेगा (कोई प्रिवेस्क नहीं)।
  • Service SAS: यह एक स्टोरेज खाता access keys में से एक का उपयोग करके हस्ताक्षरित होता है। इसका उपयोग एकल स्टोरेज सेवा में विशिष्ट संसाधनों तक पहुँच प्रदान करने के लिए किया जा सकता है। यदि कुंजी नवीनीकरण की जाती है, तो SAS काम करना बंद कर देगा।
  • Account SAS: यह भी एक स्टोरेज खाता access keys में से एक के साथ हस्ताक्षरित होता है। यह एक स्टोरेज खाता सेवाओं (Blob, Queue, Table, File) में संसाधनों तक पहुँच प्रदान करता है और सेवा-स्तरीय संचालन को शामिल कर सकता है।

एक SAS URL जो एक access key द्वारा हस्ताक्षरित होता है, ऐसा दिखता है:

  • 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 के रूप में हस्ताक्षरित होता है, ऐसा दिखता है:

  • 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 पर ध्यान दें:

  • 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 Support for Azure Blob Storage

Azure Blob Storage अब SSH File Transfer Protocol (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फ़ाइलों या निर्देशिकाओं पर ACLs बदलें।

Enumeration

bash
# 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 - File Shares

विशेषाधिकार वृद्धि

Az - Storage Privesc

पोस्ट एक्सप्लोइटेशन

Az - Blob Storage Post Exploitation

स्थिरता

Az - Storage Persistence

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें