Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor

This commit is contained in:
Translator
2026-01-13 15:05:51 +00:00
parent 6e121f4f30
commit 24c426d07a
@@ -2,96 +2,116 @@
{{#include ../../../banners/hacktricks-training.md}}
## Basic Information
## बुनियादी जानकारी
Azure Storage Accounts Microsoft Azure में मौलिक सेवाएँ हैं जो विभिन्न डेटा प्रकारों के लिए स्केलेबल, सुरक्षित और अत्यधिक उपलब्ध क्लाउड **स्टोरेज प्रदान करती हैं**, जिसमें ब्लॉब (बाइनरी बड़े ऑब्जेक्ट), फ़ाइलें, कतारें और तालिकाएँ शामिल हैं। ये विभिन्न स्टोरेज सेवाओं को एकल नामस्थान के तहत एक साथ समूहित करने के लिए कंटेनर के रूप में कार्य करते हैं ताकि प्रबंधन आसान हो सके
Azure Storage Accounts Microsoft Azure में मौलिक सेवाएँ हैं जो blobs (binary large objects), files, queues, और tables सहित विभिन्न डेटा प्रकारों के लिए स्केलेबल, सुरक्षित और उच्च उपलब्ध क्लाउड **storage for various data types** प्रदान करती हैं। ये अलग-अलग storage सेवाओं को एक ही namespace के तहत समूहित करने के लिए containers के रूप में का करते हैं ताकि प्रबंधन आसान हो।
**मुख्य कॉन्फ़िगरेशन विकल्प**:
- प्रत्येक स्टोरेज खाता का **सभी Azure में एक अद्वितीय नाम होना चाहिए**
- प्रत्येक स्टोरेज खाता एक **क्षेत्र** या Azure विस्तारित क्षेत्र में तैनात किया जाता है।
- बेहतर प्रदर्शन के लिए स्टोरेज खाते का **प्रीमियम** संस्करण चुनना संभव है।
- रैक, ड्राइव और डटा सेंटर **विफलताओं** के खिलाफ सुरक्षा के लिए **4 प्रकार की पुनरावृत्ति** में से चुनना संभव है।
- प्रत्येक storage account का नाम **Azure में unique** होना चाहिए।
- हर storage account को किसी एक **region** या Azure extended zone में डिप्लॉय किया जाता है।
- बेहतर प्रदर्शन के लिए storage account का **premium** वर्शन चुनना संभव है।
- **रैक, ड्राइव और डटासेंटर फेल्योर** से बचाव के लिए **4 प्रकार की redundancy** में से चयन किया जा सकता है।
**सुरक्षा कॉन्फ़िगरेशन विकल्प**:
- **REST API संचालन के लिए सुरक्षित ट्रांसफर की आवश्यकता**: स्टोरेज के साथ किसी भी संचार में TLS की आवश्यकता होती है
- **व्यक्तिगत कंटेनरों पर गुमनाम पहुंच सक्षम करने की अनुमति**: यदि नहीं, तो भविष्य में गुमनाम पहुंच सक्षम करना संभव नहीं होगा।
- **स्टोरेज खाता कुंजी पहुंच सक्षम करें**: यदि नहीं, तो साझा कुंजी के साथ पहुंच वर्जित होगी
- **न्यूनतम TLS संस्करण**
- **कॉपी संचालन के लिए अनुमत दायरा**: किसी भी स्टोरेज खाते से, उसी Entra टेनेन्ट से किसी भी स्टोरेज खाते से या समान वर्चुअल नेटवर्क में निजी एंडपॉइंट वाले स्टोरेज खाते से अनुमति दे
- **Require secure transfer for REST API operations**: storage के साथ किसी भी संचार में TLS आवश्यक करें
- **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 से, उसी Entra tenant के किसी भी storage account से, या उसी virtual network में private endpoints वाले storage account से अनुमति देना
**Blob Storage विकल्प**:
**Blob Storage options**:
- **क्रॉस-टेनेन्ट पुनरावृत्ति की अनुमति दें**
- **एक्सेस स्तर**: हॉट (बार-बार एक्सेस किया गया डेटा), कूल और कोल्ड (कभी-कभी एक्सेस किया गया डेटा)
- **Allow cross-tenant replication**
- **Access tier**: Hot (अक्सर access किए जाने वाले डेटा), Cool और Cold (कभी-कभार access होने वाले डेटा)
**नेटवर्किंग विकल्प**:
**Networking options**:
- **नेटवर्क एक्सेस**:
- सभी नेटवर्क से अनुमति दें।
- चयनित वर्चुअल नेटवर्क और IP पते से अनुमति दें।
- सार्वजनिक पहुंच को अक्षम करें और निजी पहुंच का उपयोग करें।
- **निजी एंडपॉइंट**: यह वर्चुअल नेटवर्क से स्टोरेज खाते के लिए एक निजी कनेक्शन की अनुमति देता है।
- **Network access**:
- Allow from all networks
- Allow from selected virtual networks and IP addresses
- Disable public access and use private access
- **Private endpoints**: यह virtual network से storage account के लिए private कनेक्शन की अनुमति देता है।
**डेटा सुरक्षा विकल्प**:
**Data protection options**:
- **कंटेनरों के लिए समय-निर्धारित पुनर्स्थापना**: यह कंटेनरों को पहले की स्थिति में पुनर्स्थापित करने की अनुमति देता है।
- इसके लिए संस्करणन, परिवर्तन फ़ीड, और ब्लॉब सॉफ़्ट डिलीट सक्षम होना आवश्यक है।
- **ब्लॉब के लिए सॉफ़्ट डिलीट सक्षम करें**: यह हटाए गए ब्लॉब (यहा तक कि ओवरराइट किए गए) के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
- **कंटेनरों के लिए सॉफ़्ट डिलीट सक्षम करें**: यह हटाए गए कंटेनरों के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
- **फ़ाइल शेयरों के लिए सॉफ़्ट डिलीट सक्षम करें**: यह हटाए गए फ़ाइल शेयरों के लिए दिनों में एक संरक्षण अवधि सक्षम करता है।
- **ब्लॉब के लिए संस्करणन सक्षम करें**: अपने ब्लॉब के पिछले संस्करणों को बनाए रखें।
- **ब्लॉब परिवर्तन फ़ीड सक्षम करें**: ब्लॉब में निर्माण, संशोधन, और हटाने के परिवर्तनों के लॉग रखें।
- **संस्करण-स्तरीय अपरिवर्तनीयता समर्थन सक्षम करें**: यह आपको खाता स्तर पर समय-आधारित संरक्षण नीति सेट करने की अनुमति देता है जो सभी ब्लॉब संस्करणों पर लागू होग
- संस्करण-स्तरीय अपरिवर्तनीयता समर्थन और कंटेनरों के लिए समय-निर्धारित पुनर्स्थापना को एक साथ सक्षम नहीं किया जा सकता है
- **Point-in-time restore for containers**: containers को पहले की स्थिति में restore करने की अनुमति देता है।
- इसके लिए versioning, change feed, और blob soft delete सक्षम होना आवश्यक है।
- **Enable soft delete for blobs**: deleted blobs (यहा तक कि overwrite हुए भी) के लिए retention period (दिनों में) सक्षम करता है।
- **Enable soft delete for containers**: deleted containers के लिए retention period सक्षम करता है।
- **Enable soft delete for file shares**: deleted file shares के लिए retention period सक्षम करता है।
- **Enable versioning for blobs**: अपने blobs के पिछले versions को बनाए रखें।
- **Enable blob change feed**: blobs पर create, modification और delete परिवर्तनों के लॉग रखें।
- **Enable version-level immutability support**: account-स्तर पर time-based retention policy सेट करने की अनुमति देता है जो सभी blob versions पर लागू होग
- Version-level immutability support और point-in-time restore for containers को एक साथ सक्षम नहीं किया जा सकता।
**एन्क्रिप्शन कॉन्फ़िगरेशन विकल्प**:
**Encryption configuration options**:
- **एन्क्रिप्शन प्रकार**: Microsoft-प्रबंधित कुंजी (MMK) या ग्राहक-प्रबंधित कुंजी (CMK) का उपयोग करना संभव है।
- **इन्फ्रास्ट्रक्चर एन्क्रिप्शन सक्षम करें**: डेटा को "अधिक सुरक्षा के लिए" डबल एनक्रिप्ट करने की अनुमति देता है।
- **Encryption type**: Microsoft-managed keys (MMK) या Customer-managed keys (CMK) का उपयोग संभव है।
- **Enable infrastructure encryption**: डेटा को "अतिरिक्त सुरक्षा" के लिए डबल एनक्रिप्ट करने की अनुमति देता है।
### Storage endpoints
<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" **सक्षम** है (डिफ़ॉल्ट रूप से disabled), तो container बनाते समय निम्न करना संभव है:
- **ब्लॉब पढ़ने के लिए सार्वजनिक पहुंच दें** (आपको नाम जानना होगा)।
- **कंटेनर ब्लॉब की सूची बनाएं** और **उन्हें पढ़ें**
- इसे पूरी तरह से **निजी** बनाएं
- blobs को पढ़ने के लिए **public access देना** (नाम पता होना चाहिए)।
- **container blobs को list** करना और उन्हें **read** करना
- इसे पूरी तरह **private** बनाना
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
#### अनामिक blob एक्सपोज़र का ऑडिट
- **ऐसे storage accounts ढूँढें** जो डेटा एक्सपोज़ कर सकते हैं: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. यदि `allowBlobPublicAccess` `false` है तो आप containers को public नहीं कर सकते।
- **जोखिम वाले accounts की जाँच करें** ताकि फ़्लैग और अन्य कमजोर सेटिंग्स की पुष्टि हो सके: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
- **जहाँ फ़्लैग सक्षम है वहाँ container-स्तर के exposure का enumeration करें**:
```bash
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
```
- `"Blob"`: anonymous पढ़ने की अनुमति है **केवल जब blob नाम ज्ञात हो** (लिस्टिंग नहीं).
- `"Container"`: anonymous हर blob की **list + read**.
- `null`: private; authentication आवश्यक है.
- **क्रेडेंशियल्स के बिना एक्सेस साबित करें**:
- यदि `publicAccess` `Container` है, तो anonymous listing काम करता है: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
- दोनों `Blob` और `Container` के लिए, anonymous blob डाउनलोड तब काम करता है जब नाम ज्ञात हो:
```bash
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
# or via raw HTTP
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
```
### Connect to Storage
यदि आप कोई **स्टोरेज** पाते हैं जिससे आप कनेक्ट कर सकते हैं, तो आप ऐसा करने के लिए [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) उपकरण का उपयोग कर सकते हैं।
यदि आप किसी भी **storage** से कनेक्ट कर सकते हैं तो आप टूल [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) का उपयोग कर सकते हैं।
## Access to Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
## Storage तक पहुँच <a href="#about-blob-storage" id="about-blob-storage"></a>
### RBAC
स्टोरेज खातों तक पहुंच के लिए **RBAC भूमिकाओं** के साथ Entra ID प्रिंसिपल का उपयोग करना संभव है और यह अनुशंसित तरीका है।
यह संभव है कि Entra ID principals को **RBAC roles** के साथ storage accounts तक पहुँच के लिए उपयोग किया जाए और यह सुझाई गई विधि है।
### Access Keys
स्टोरेज खातों में एक्सेस कुंजी होती हैं जिनका उपयोग इसे एक्सेस करने के लिए किया जा सकता है। यह **स्टोरेज खाते तक पूर्ण पहुंच प्रदान करता है।**
Storage accounts के पास access keys होती हैं जिनका उपयोग उन्हें access करने के लिए किया जा सकता है। This provides f**ull access to the storage account.**
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
### **Shared Keys & Lite Shared Keys**
यह संभव है कि [**Shared Keys उत्पन्न करें**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) जो एक्सेस कुंजियों के साथ हस्ताक्षरित होते हैं ताकि एक हस्ताक्षरित URL के माध्यम से कुछ संसाधनों तक पहुंच को अधिकृत किया जा सके।
यह संभव है कि access keys के साथ साइन किए गए [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) बनाए जाएं ताकि किसी signed URL के माध्यम से विशेष resources तक पहुँच अधिकृत क जा सके।
> [!NOTE]
> ध्यान दें कि `CanonicalizedResource` भाग स्टोरेज सेवाओं के संसाधन (URI) का प्रतिनिधित्व करता है। और यदि URL में कोई भाग एन्कोड किया गया है, तो से `CanonicalizedResource` के अंदर भी एन्कोड किया जाना चाहिए।
> ध्यान दें कि `CanonicalizedResource` हिस्सा storage services resource (URI) का प्रतिनिधित्व करता है। और यदि URL में कोई हिस्सा encoded है, तो से `CanonicalizedResource` के अंदर भी encoded होना चाहिए।
> [!NOTE]
> यह **डिफ़ॉल्ट रूप से `az` cli द्वारा उपयोग किया जाता है** ताकि अनुरोधों को प्रमाणित किया जा सके। इसे Entra ID प्रिंसिपल क्रेडेंशियल्स का उपयोग करने के लिए `--auth-mode login` पैरामीटर निर्दिष्ट करें।
> यह **used by default by `az` cli** है ताकि अनुरोधों को authenticate किया जा सके। इसे Entra ID principal credentials का उपयोग करने के लिए बाध्य करने हेतु param `--auth-mode login` दें।
- यह **ब्लॉब, कतार और फ़ाइल सेवाओं** के लिए एक साझा कुंजी उत्पन्न करना संभव है, निम्नलिखित जानकारी पर हस्ताक्षर करके:
- यह संभव है कि निम्नलिखित जानकारी पर साइन करके **shared key for blob, queue and file services** जनरेट की जाए:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -108,7 +128,7 @@ Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
- यह संभव है कि **table services** के लिए एक **shared key** उत्पन्न किया जाए निम्नलिखित जानकारी पर हस्ताक्षर करके:
- निम्नलिखित जानकारी पर साइन करके **shared key for table services** जनरेट करना संभव है:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -116,7 +136,7 @@ Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
```
- यह **ब्लॉब, कतार और फ़ाइल सेवाओं** के लिए एक लाइट साझा कुंजी उत्पन्न करना संभव है, निम्नलिखित जानकारी पर हस्ताक्षर करके:
- निम्नलिखित जानकारी पर साइन करके **lite shared key for blob, queue and file services** जनरेट करना संभव है:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -125,12 +145,12 @@ Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
- यह संभव है कि **टेबल सेवाओं के लिए एक लाइट साझा कुंजी** उत्पन्न की जाए, निम्नलिखित जानकारी पर हस्ताक्षर करके:
- निम्नलिखित जानकारी पर साइन करके **lite shared key for table services** जनरेट करना संभव है:
```bash
StringToSign = Date + "\n"
CanonicalizedResource
```
फिर, कुंजी का उपयोग करने के लिए, इसे Authorization हेडर में निम्नलिखित सिंटैक्स का पालन करते हुए किया जा सकता है:
फिर, key का उपयोग करने के लिए, इसे Authorization header में निम्नलिखित सिंटैक्स के अनुसार किया जा सकता है:
```bash
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
#e.g.
@@ -142,75 +162,78 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Content-Length: 0
```
### **Shared Access Signature** (SAS)
### **साझा एक्सेस सिग्नेचर** (SAS)
Shared Access Signatures (SAS) सुरक्षित, समय-सीमित URLs हैं जो **Azure Storage खाते में संसाधनों तक पहुचने के लिए विशिष्ट अनुमतियाँ प्रदान करत हैं** बिना खाते की पहुँच कुंजियों को उजागर किए। जबकि पहुँच कुंजियाँ सभी संसाधनों के लिए पूर्ण प्रशासनिक पहुप्रदान करती हैं, SAS अनुमतियों (जैसे पढ़ना या लिखना) को निर्दिष्ट करके और समाप्ति समय को परिभाषित करके सूक्ष्म नियंत्रण की अनुमति देती है
Shared Access Signatures (SAS) सुरक्षित, समय-सीमित URLs हैं जो किसी Azure Storage account के रिसोर्सेस तक पहुचने के लिए विशिष्ट अनुमतियाँ प्रदान करत हैं बिना account के access keys को उजागर किए। जबकि access keys सभी रिसोर्सेस के लिए पूर्ण प्रशासनिक पहुदेती हैं, SAS ग्रैन्यूलर कंट्रोल की अनुमति देता है — जैसे read या write जैसी permissions निर्दिष्ट करना और एक expiration time सेट करना
#### SAS प्रकार
- **User delegation SAS**: यह एक **Entra ID principal** से बनाया जाता है जो SAS पर हस्ताक्षर करेगा और उपयोगकर्ता से SAS को अनुमतियाँ सौंपेगा। इसका उपयोग केवल **blob और data lake storage** के साथ किया जा सकता है ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). सभी उत्पन्न उपयोगकर्ता प्रतिनिधि SAS को **रद्द**रना संभव है
- भले ही "अधिक" अनुमतियों के साथ एक प्रतिनिधित्व SAS उत्पन्न करना संभव है जो उपयोगकर्ता के पास हैं। हालाकि, यदि प्रमुख के पास वे नहीं हैं, तो यह काम नहीं करेगा (कोई प्रिवेस्क नहीं)।
- **Service SAS**: यह एक स्टोरेज खाता **access keys** में से एक का उपयोग करके हस्ताक्षरित होता है। इसका उपयोग एकल स्टोरेज सेवा में विशिष्ट संसाधनों तक पहुँच प्रदान करने के लिए किया जा सकता है। यदि कुंजी नवीनीकरण की जाती है, तो SAS काम करना बंद कर देगा।
- **Account SAS**: यह भी एक स्टोरेज खाता **access keys** में से एक के साथ हस्ताक्षरित होता है। यह एक स्टोरेज खाता सेवाओं (Blob, Queue, Table, File) में संसाधनों तक पहुच प्रदान करता है और सेवा-स्तरीय संचालन को शामिल कर सकत है।
- **User delegation SAS**: यह एक **Entra ID principal** से बनाया जाता है जो SAS को साइन करेगा और user से SAS को permissions delegate करेगा। इसे केवल **blob and data lake storage** के साथ उपयोग किया जा सकता है ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). यह संभव है कि सभी जनरेट किए गए user delegated SAS को **revoke**िया जा सके
- यह संभव है कि किसी delegation SAS को user के पास मौजूद permissions से "ज़्यादा" permissions के साथ जनरेट किया जाए। हालाकि, अगर principal के पास वे permissions नहीं हैं, तो यह काम नहीं करेगा (no privesc)।
- **Service SAS**: यह storage account के किसी एक access key का उपयोग करके साइन किया जाता है। इसका उपयोग एक ही storage service के specific resources को access देने के लिए किया जा सकता है। अगर key renew हो जाती है, तो SAS काम करना बंद कर देगा।
- **Account SAS**: यह भी storage account के किसी access key के साथ साइन किया जाता है। यह Blob, Queue, Table, File जैसे storage account services में फैले resources तक पहुच प्रदान करता है और इसमें service-level operations भी शामिल हो सकत है
एक SAS URL जो एक **access key** द्वारा हस्ताक्षरित होता है, ऐसा दिखता है:
एक access key द्वारा साइन किया गया SAS URL कुछ इस तरह दिखता है:
- `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** के रूप में हस्ताक्षरित होता है, ऐसा दिखता है:
एक user delegation के रूप में साइन किया गया SAS URL कुछ इस तरह दिखता है:
- `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** पर ध्यान दें:
ध्यान दें कुछ http params:
- **`se`** पैरामीटर SAS की **समाप्ति तिथि** को इंगित करता है
- **`sp`** पैरामीटर SAS की **अनुमतियों** को इंगित करता है
- **`sig`** SAS को मान्य करने वाला **हस्ताक्षर** है
- The **`se`** param SAS की **समाप्ति तिथि** (expiration date) बताती है
- The **`sp`** param SAS की **permissions** बताता है
- The **`sig`** SAS को validate करने वाला **signature** है
#### SAS अनुमतियाँ
#### SAS permissions
SAS उत्पन्न करते समय यह आवश्यक है कि यह निर्दिष्ट किया जाए कि यह कसी अनुमतियाँ प्रदान करेगा। जिस वस्तु पर SAS उत्पन्न किया जा रहा है, उसके आधार पर विभिन्न अनुमतियाँ शामिल की जा सकती हैं। उदाहरण के लिए:
SAS जनरेशन करते समय यह बताना जरूरी होता है कि यह किpermissions को प्रदान करेगा। जिस object पर SAS बनाया जा रहा है, उसके आधार पर अलग-अलग permissions शामिल हो सकती हैं। उदाहरण के लिए:
- (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 में सीधे secure file transfer और management संभव है बिना कस्टम सॉल्यूशंस या third-party products की जरूरत के।
### मुख्य विशेषताएँ
### Key Features
- प्रोटोकॉल समर्थन: SFTP उन Blob Storage खातों के साथ काम करता है जो हायरार्किकल नेमस्पेस (HNS) के साथ कॉन्फ़िगर किए गए है। यह ब्लॉब्स को निर्देशिकाओं और उपनिर्देशिकाओं में व्यवस्थित करता है ताकि नेविगेशन आसान हो सके
- सुरक्षा: SFTP प्रमाणीकरण के लिए स्थानीय उपयोगकर्ता पहचान का उपयोग करता है और RBAC या ABAC के साथ एकीकृत नहीं होता है। प्रत्येक स्थानीय उपयोगकर्ता प्रमाणीकरण कर सकता है:
- Azure-जनित पासवर्ड
- सार्वजनिक-निजी SSH कुंजी जोड़े
- सूक्ष्म अनुमतियाँ: स्थानीय उपयोगकर्ताओं को 100 कंटेनरों तक पढ़ने, लिखने, हटाने और सूचीबद्ध करने जैसी अनुमतियाँ सौंपी जा सकती हैं
- नेटवर्किंग विचार: SFTP कनेक्शन पोर्ट 22 के माध्यम से बनाए जाते हैं। Azure SFTP ट्रैफ़िक को सुरक्षित करने के लिए फ़ायरवॉल, निजी एंडपॉइंट या वर्चुअल नेटवर्क जैस नेटवर्क कॉन्फ़िगरेशन कमर्थन करता है।
- Protocol Support: SFTP hierarchical namespace (HNS) के साथ configured Blob Storage accounts पर काम करता है। यह blobs को directories और subdirectories में organize करता है जिससे नेविगेशन आसान हो जाता है
- Security: SFTP authentication के लिए local user identities का उपयोग करता है और यह RBAC या ABAC के साथ integrate नहीं होता है। प्रत्येक local user निम्न के माध्यम से authenticate कर सकता है:
- Azure-generated passwords
- Public-private SSH key pairs
- Granular Permissions: Read, Write, Delete, और List जैसी permissions local users को assign की जा सकती हैं, यह सुविधा 100 containers तक के लिए उपलब्ध है
- Networking Considerations: SFTP कनेक्शन port 22 के माध्यम से होते हैं। Azure firewalls, private endpoints, या virtual networks जैस नेटवर्क कॉन्फ़िगरेशन कपोर्ट करता है ताकि SFTP ट्रैफ़िक सुरक्षित रहे
### सेटअप आवश्यकताएँ
### Setup Requirements
- हायरार्किकल नेमस्पेस: स्टोरेज खाता बनाते समय HNS सक्षम होना चाहिए।
- समर्थित एन्क्रिप्शन: Microsoft Security Development Lifecycle (SDL) द्वारा अनुमोदित क्रिप्टोग्राफिक एल्गोरिदम की आवश्यकता होती है (जैसे, rsa-sha2-256, ecdsa-sha2-nistp256)।
- SFTP कॉन्फ़िगरेशन:
- स्टोरेज खाते पर SFTP सक्षम करें।
- उचित अनुमतियों के साथ स्थानीय उपयोगकर्ता पहचान बनाएं।
- उपयोगकर्ताओं के लिए होम निर्देशिकाएँ कॉन्फ़िगर करें ताकि वे कंटेनर के भीतर अपनी प्रारंभिक स्थिति को परिभाषित कर सकें।
- Hierarchical Namespace: HNS को storage account बनाते समय enable किया जाना चाहिए।
- Supported Encryption: Microsoft Security Development Lifecycle (SDL)-approved cryptographic algorithms (उदा., rsa-sha2-256, ecdsa-sha2-nistp256) की आवश्यकता होती है
- SFTP Configuration:
- 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 |
| ---------------------- | ------ | ------------------------------------ |
| **पढ़ें** | `r` | फ़ाइल सामग्री पढ़ें। |
| **लिखें** | `w` | फ़ाइलें अपलोड करें और निर्देशिकाएँ बनाएं। |
| **सूची** | `l` | निर्देशिकाओं की सामग्री सूचीबद्ध करें। |
| **हटाएँ** | `d` | फ़ाइलं या निर्देशिकाएँ हटाएँ। |
| **बनाएँ** | `c` | फ़ाइलें या निर्देशिकाएँ बनाएं। |
| **स्वामित्व संशोधित करें** | `o` | स्वामित्व उपयोगकर्ता या समूह बदलें। |
| **अनुमतियाँ संशोधित करें** | `p` | फ़ाइलों या निर्देशिकाओं पर ACLs बदलें। |
| **Read** | `r` | फ़ाइल की सामग्री पढ़ें। |
| **Write** | `w` | फ़ाइल अपलोड करें और directories बनाएं। |
| **List** | `l` | directories की सामग्री सूचीबद्ध करें। |
| **Delete** | `d` | फ़ाइलं या directories को हटाएं। |
| **Create** | `c` | फ़ाइलें या directories बनाएं। |
| **Modify Ownership** | `o` | owning user या group बदलें। |
| **Modify Permissions** | `p` | फ़ाइलों या directories पर ACLs बदलें। |
## Enumeration
{{#tabs }}
{{#tab name="az cli" }}
<details>
<summary>az cli enumeration</summary>
```bash
# Get storage accounts
az storage account list #Get the account name from here
@@ -327,10 +350,15 @@ az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>
```
</details>
{{#endtab }}
{{#tab name="Az PowerShell" }}
```bash
<details>
<summary>Az PowerShell enumeration</summary>
```powershell
# Get storage accounts
Get-AzStorageAccount | fl
# Get rules to access the storage account
@@ -387,6 +415,8 @@ New-AzStorageBlobSASToken `
-Permission racwdl `
-ExpiryTime (Get-Date "2024-12-31T23:59:00Z")
```
</details>
{{#endtab }}
{{#endtabs }}
@@ -396,19 +426,19 @@ New-AzStorageBlobSASToken `
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
@@ -419,5 +449,9 @@ 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: 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)
- [https://learn.microsoft.com/en-us/cli/azure/storage/blob](https://learn.microsoft.com/en-us/cli/azure/storage/blob)
{{#include ../../../banners/hacktricks-training.md}}