diff --git a/src/pentesting-cloud/azure-security/az-services/az-storage.md b/src/pentesting-cloud/azure-security/az-services/az-storage.md index 118cade7c..b14e23600 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -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**
### Static website (`$web`) exposure & leaked secrets -- **Static websites** se serve sa specijalnog `$web` container-a preko region-specific endpoint-a kao što je `https://.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://.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 --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 --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 --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 --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. +- **Enumerate container-level exposure** gde je flag omogućen: ```bash az storage container list --account-name \ --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://.blob.core.windows.net/?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://.blob.core.windows.net/?restype=container&comp=list"`. +- For both `Blob` and `Container`, anonimni blob download radi kada je naziv poznat: ```bash az storage blob download -c -n --account-name --file /dev/stdout # or via raw HTTP @@ -109,31 +109,31 @@ curl "https://.blob.core.windows.net//" ``` ### 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 ### 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.**
### **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] :" #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://.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://.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)