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

This commit is contained in:
Translator
2026-07-09 16:57:44 +00:00
parent 4d6b231030
commit dbe96868c9
@@ -4,20 +4,20 @@
## Osnovne informacije
Azure Storage Accounts su fundamentalne usluge u Microsoft Azure koje pružaju skalabilno, bezbedno i visoko dostupno cloud **storage za različite tipove podataka**, uključujući blobs (binary large objects), files, queues i tables. One služe kao kontejneri koji grupišu ove različite storage usluge zajedno pod jednim namespace-om radi lakšeg upravljanja.
Azure Storage Accounts su fundamentalne usluge u Microsoft Azure koje obezbeđuju skalabilan, bezbedan i visoko dostupan cloud **storage za različite tipove podataka**, uključujući blobs (binary large objects), files, queues i tables. One služe kao kontejneri koji grupišu ove različite storage servise zajedno pod jednim namespace-om radi lakšeg upravljanja.
**Glavne opcije konfiguracije**:
- Svaki storage account mora imati **uniq name across all Azure**.
- Svaki storage account se deploy-uje u **region** ili u Azure extended zone
- Moguće je izabrati **premium** verziju storage account-a radi boljih performansi
- Moguće je izabrati između **4 types of redundancy to protect** protiv rack, drive i datacenter **failures**.
- Svaki storage account mora imati **jedinstveno ime na nivou celog Azure-a**.
- Svaki storage account se deployuje u **region** ili u Azure extended zone
- Moguće je izabrati **premium** verziju storage account-a za bolje performanse
- Moguće je izabrati jednu od **4 vrste redundancy** za zaštitu od rack, drive i datacenter **failures**.
**Opcije bezbednosne konfiguracije**:
**Opcije sigurnosne konfiguracije**:
- **Require secure transfer for REST API operations**: Zahteva TLS u svakoj komunikaciji sa storage-om
- **Allows enabling anonymous access on individual containers**: Ako nije omogućeno, neće biti moguće kasnije omogućiti anonymous access
- **Enable storage account key access**: Ako nije omogućeno, access sa Shared Keys će biti zabranjen
- **Allows enabling anonymous access on individual containers**: Ako nije omogućeno, kasnije neće biti moguće uključiti anonymous access
- **Enable storage account key access**: Ako nije omogućeno, access preko Shared Keys će biti zabranjen
- **Minimum TLS version**
- **Permitted scope for copy operations**: Dozvoli sa bilo kog storage account-a, sa bilo kog storage account-a iz istog Entra tenant-a ili sa storage account-a sa private endpoints u istoj virtual network.
@@ -29,27 +29,27 @@ Azure Storage Accounts su fundamentalne usluge u Microsoft Azure koje pružaju s
**Mrežne opcije**:
- **Network access**:
- Dozvoli iz svih networks
- Dozvoli iz izabranih virtual networks i IP addresses
- Dozvoli sa svih mreža
- Dozvoli sa izabranih virtual networks i IP adresa
- Onemogući public access i koristi private access
- **Private endpoints**: Omogućava private connection ka storage account-u iz virtual network-a
- **Private endpoints**: Omogućava privatnu konekciju ka storage account-u iz virtual network
**Opcije zaštite podataka**:
- **Point-in-time restore for containers**: Omogućava vraćanje containers u ranije stanje
- Zahteva da budu omogućeni versioning, change feed i blob soft delete.
- **Enable soft delete for blobs**: Omogućava retention period u danima za obrisane blobs (čak i kada su overwrite-ovani)
- **Enable soft delete for containers**: Omogućava retention period u danima za obrisane containers
- **Point-in-time restore for containers**: Omogućava vraćanje kontejnera u ranije stanje
- Zahteva da budu uključeni versioning, change feed i blob soft delete.
- **Enable soft delete for blobs**: Omogućava retention period u danima za obrisane blobs (čak i ako su overwrite-ovani)
- **Enable soft delete for containers**: Omogućava retention period u danima za obrisane kontejnere
- **Enable soft delete for file shares**: Omogućava retention period u danima za obrisane file shared
- **Enable versioning for blobs**: Zadržava prethodne verzije vaših blobs
- **Enable blob change feed**: Čuva logs o create, modification i delete promenama na blobs
- **Enable version-level immutability support**: Omogućava da postavite time-based retention policy na account-level koja će važiti za sve blob versions.
- **Enable versioning for blobs**: Održava prethodne verzije tvojih blobs
- **Enable blob change feed**: Čuva logove create, modification i delete promena nad blobs
- **Enable version-level immutability support**: Omogućava da se na nivou account-a postavi time-based retention policy koja će se primeniti na sve blob verzije.
- Version-level immutability support i point-in-time restore for containers ne mogu biti omogućeni istovremeno.
**Opcije enkripcione konfiguracije**:
**Opcije enkripcije**:
- **Encryption type**: Moguće je koristiti Microsoft-managed keys (MMK) ili Customer-managed keys (CMK)
- **Enable infrastructure encryption**: Omogućava double encrypt the data "for more security"
- **Enable infrastructure encryption**: Omogućava double encrypt podataka "for more security"
### Storage endpoints
@@ -64,18 +64,18 @@ Azure Storage Accounts su fundamentalne usluge u Microsoft Azure koje pružaju s
### Public Exposure
Ako je "Allow Blob public access" **omogućeno** (podrazumevano je onemogućeno), pri kreiranju container-a moguće je:
Ako je "Allow Blob public access" **omogućen** (podrazumevano je onemogućen), pri kreiranju kontejnera moguće je:
- Dati **public access to read blobs** (morate znati ime).
- **List container blobs** i **read** ih.
- Dati **public access za čitanje blobs** (moraš da znaš ime).
- **Listati container blobs** i **čitati** ih.
- Učiniti ga potpuno **private**
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
### Static website (`$web`) exposure & leaked secrets
- **Static websites** se serve sa specijalnog `$web` container-a preko region-specific endpoint-a kao što je `https://<account>.z13.web.core.windows.net/`.
- `$web` container može da prijavi `publicAccess: null` preko blob API-ja, ali su fajlovi i dalje dostupni kroz static site endpoint, tako da ostavljanje config/IaC artifact-a tamo može da leak secrets.
- **Static websites** se serviraju iz specijalnog `$web` kontejnera preko endpoint-a specifičnog za region, kao što je `https://<account>.z13.web.core.windows.net/`.
- `$web` kontejner može da prijavi `publicAccess: null` preko blob API-ja, ali su fajlovi i dalje dostupni kroz static site endpoint, pa ubacivanje config/IaC artefakata tamo može leak-ovati secrets.
- Brzi audit workflow:
```bash
# Identify storage accounts with static website hosting enabled
@@ -87,21 +87,21 @@ az storage blob list --container-name '$web' --account-name <acc-name> --auth-mo
# 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
```
### Revizija anonimne izloženosti blob-a
### Auditing anonymous blob exposure
- **Locirajte storage accounts** koji mogu da izlože podatke: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Ako je `allowBlobPublicAccess` `false`, ne možete da učinite kontejnere javnim.
- **Proverite rizične accounts** da potvrdite flag i druge slabe postavke: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
- **Enumerišite izloženost na nivou kontejnera** gde je flag omogućen:
- **Pronađi storage accounts** koje mogu da izlože podatke: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Ako je `allowBlobPublicAccess` `false`, ne možeš da učiniš kontejnere javnim.
- **Proveri rizične accounts** da potvrdiš flag i ostale slabe postavke: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
- **Enumerate container-level exposure** gde je flag omogućen:
```bash
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
```
- `"Blob"`: anonimna čitanja su dozvoljena **samo kada je blob name poznat** (nema listanja).
- `"Container"`: anonimno **list + read** svakog blob-a.
- `"Blob"`: anonimni reads dozvoljeni **samo kada je naziv blob-a poznat** (nema listanja).
- `"Container"`: anonimni **list + read** svakog blob-a.
- `null`: private; authentication required.
- **Prove access** without credentials:
- Ako je `publicAccess` `Container`, anonimno listanje radi: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
- Za oba `Blob` i `Container`, anonimno preuzimanje blob-a radi kada je name poznat:
- If `publicAccess` is `Container`, anonimno listanje radi: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
- For both `Blob` and `Container`, anonimni blob download radi kada je naziv poznat:
```bash
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
# or via raw HTTP
@@ -109,31 +109,31 @@ curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
```
### Connect to Storage
If you find any **storage** you can connect to you could use the tool [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) to do so.
Ako pronađeš bilo koji **storage** na koji možeš da se povežeš, možeš koristiti alat [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) za to.
## Access to Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
### RBAC
It's possible to use Entra ID principals with **RBAC roles** to access storage accounts and it's the recommended way.
Moguće je koristiti Entra ID principals sa **RBAC roles** za pristup storage account-ovima i to je preporučeni način.
### Access Keys
The storage accounts have access keys that can be used to access it. This provides f**ull access to the storage account.**
Storage account-ovi imaju access keys koji mogu da se koriste za pristup. Ovo obezbeđuje f**ull access to the storage account.**
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
### **Shared Keys & Lite Shared Keys**
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.
Moguće je [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) potpisane sa access keys za autorizaciju pristupa određenim resursima preko signed URL.
> [!NOTE]
> Note that the `CanonicalizedResource` part represents the storage services resource (URI). And if any part in the URL is encoded, it should also be encoded inside the `CanonicalizedResource`.
> Imaj na umu da deo `CanonicalizedResource` predstavlja storage services resurs (URI). Ako je bilo koji deo u URL encoded, treba da bude encoded i unutar `CanonicalizedResource`.
> [!NOTE]
> This is **used by default by `az` cli** to authenticate requests. To make it use the Entra ID principal credentials indicate the param `--auth-mode login`.
> Ovo se **koristi podrazumevano od strane `az` cli** za autentifikaciju requests. Da bi koristio Entra ID principal credentials, navedi param `--auth-mode login`.
- It's possible to generate a **shared key for blob, queue and file services** signing the following information:
- Moguće je generate **shared key for blob, queue and file services** potpisivanjem sledećih informacija:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -172,7 +172,7 @@ CanonicalizedResource;
StringToSign = Date + "\n"
CanonicalizedResource
```
Zatim, da bi se koristio ključ, to se može uraditi u Authorization header-u prateći sintaksu:
Zatim, da bi se koristio key, to se može uraditi u Authorization header-u koristeći sledeću sintaksu:
```bash
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
#e.g.
@@ -186,56 +186,56 @@ Content-Length: 0
```
### **Shared Access Signature** (SAS)
Shared Access Signatures (SAS) su bezbedni URL-ovi sa vremenskim ograničenjem koji **dodeljuju specifične permissions za pristup resources** u Azure Storage nalogu bez izlaganja access keys naloga. Dok access keys obezbeđuju pun administrativni pristup svim resources, SAS omogućava granuliranu kontrolu definisanjem permissions (kao što su read ili write) i vremena isteka.
Shared Access Signatures (SAS) su bezbedni, vremenski ograničeni URL-ovi koji **grant specific permissions to access resource**s u Azure Storage nalogu bez otkrivanja access keys naloga. Dok access keys obezbeđuju pun administrativni pristup svim resursima, SAS omogućava granularnu kontrolu određivanjem permissions (kao što su read ili write) i definisanjem vremena isteka.
#### SAS Types
- **User delegation SAS**: Ovo se kreira iz **Entra ID principal** koji će potpisati SAS i delegirati permissions sa user-a na SAS. Može da se koristi samo sa **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Moguće je **revoke** sve generisane user delegated SAS.
- Čak i ako je moguće generisati delegation SAS sa "više" permissions nego što ih user ima. Međutim, ako principal nema te permissions, neće raditi (no privesc).
- **Service SAS**: Ovo se potpisuje pomoću jednog od storage account **access keys**. Može se koristiti za dodelu pristupa određenim resources u jednoj storage service. Ako se key obnovi, SAS će prestati da radi.
- **Account SAS**: Takođe je potpisan pomoću jednog od storage account **access keys**. Dodeljuje pristup resources kroz storage account services (Blob, Queue, Table, File) i može da uključi service-level operations.
- **User delegation SAS**: Ovo se kreira iz **Entra ID principal** koji će potpisati SAS i delegirati permissions sa korisnika na SAS. Može se koristiti samo sa **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Moguće je **revoke** sve generisane user delegated SAS.
- Čak i ako je moguće generisati delegation SAS sa više permissions nego što korisnik ima. Međutim, ako principal nema ta permissions, neće raditi (no privesc).
- **Service SAS**: Ovo se potpisuje koristeći jedan od storage account **access keys**. Može se koristiti za davanje pristupa određenim resursima u okviru jednog storage service-a. Ako se key obnovi, SAS će prestati da radi.
- **Account SAS**: Takođe se potpisuje sa jednim od storage account **access keys**. Daje pristup resursima kroz storage account services (Blob, Queue, Table, File) i može uključivati service-level operations.
SAS URL potpisan sa **access key** izgleda ovako:
A SAS URL potpisan sa **access key** izgleda ovako:
- `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 potpisan kao **user delegation** izgleda ovako:
A SAS URL potpisan kao **user delegation** izgleda ovako:
- `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`
Obratite pažnju na neke **http params**:
Note some **http params**:
- Parametar **`se`** označava **expiration date** SAS-a
- Parametar **`sp`** označava **permissions** SAS-a
- **`se`** param označava **expiration date** SAS-a
- **`sp`** param označava **permissions** SAS-a
- **`sig`** je **signature** koja validira SAS
#### SAS permissions
Prilikom generisanja SAS-a potrebno je navesti permissions koje treba da dodeli. U zavisnosti od objekta nad kojim se SAS generiše, mogu biti uključene različite permissions. Na primer:
Kada se generiše SAS, potrebno je navesti permissions koje treba da dodeljuje. U zavisnosti od objekta nad kojim se SAS generiše, mogu biti uključene različite permissions. Na primer:
- (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 sada podržava SSH File Transfer Protocol (SFTP), omogućavajući bezbedan transfer fajlova i upravljanje direktno u Blob Storage bez potrebe za custom solutions ili third-party products.
Azure Blob Storage sada podržava SSH File Transfer Protocol (SFTP), omogućavajući bezbedan transfer fajlova i upravljanje direktno ka Blob Storage bez potrebe za custom solutions ili third-party products.
### Key Features
- Protocol Support: SFTP radi sa Blob Storage nalozima konfigurisanima sa hierarchical namespace (HNS). Ovo organizuje blobs u directories i subdirectories radi lakše navigacije.
- Security: SFTP koristi lokalne user identities za autentikaciju i ne integriše se sa RBAC ili ABAC. Svaki lokalni user može da se autentikuje preko:
- Protocol Support: SFTP radi sa Blob Storage nalozima konfigurisanih sa hierarchical namespace (HNS). Ovo organizuje blobs u directories i subdirectories radi lakše navigacije.
- Security: SFTP može koristiti local user identities, ali takođe podržava Microsoft Entra ID-based access sa Azure RBAC za authorization. To znači da se access može dodeliti kroz uobičajene Blob Storage data-plane roles umesto kreiranja lokalnih SFTP korisnika. Local users mogu da se autentifikuju preko:
- Azure-generated passwords
- Public-private SSH key pairs
- Granular Permissions: Permissions kao što su Read, Write, Delete i List mogu se dodeliti lokalnim users za do 100 containers.
- Networking Considerations: SFTP connections se ostvaruju preko porta 22. Azure podržava network configurations kao što su firewalls, private endpoints ili virtual networks za zaštitu SFTP traffic.
- Granular Permissions: Permissions kao što su Read, Write, Delete, i List mogu se dodeliti local users za do 100 containers.
- Networking Considerations: SFTP connections se uspostavljaju preko porta 22. Azure podržava network konfiguracije kao što su firewalls, private endpoints, ili virtual networks za zaštitu SFTP traffic-a.
### Setup Requirements
- Hierarchical Namespace: HNS mora biti omogućen pri kreiranju storage account-a.
- Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-odobrene cryptographic algorithms (npr. rsa-sha2-256, ecdsa-sha2-nistp256).
- Hierarchical Namespace: HNS mora biti omogućen prilikom kreiranja storage account-a.
- Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-approved cryptographic algorithms (npr. rsa-sha2-256, ecdsa-sha2-nistp256).
- SFTP Configuration:
- Omogućite SFTP na storage account-u.
- Kreirajte local user identities sa odgovarajućim permissions.
- Konfigurišite home directories za users da definišete njihovu početnu lokaciju unutar container-a.
- Za local-user access, kreirajte local user identities sa odgovarajućim permissions.
- Za local users, konfigurišite home directories da definišete njihovu početnu lokaciju unutar container-a.
### Permissions
@@ -471,6 +471,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)
- [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access)
- [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)