From 599b599c36f8ef0d59c5f581880564e8fb8717ac Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 Jan 2026 15:04:46 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor --- .../azure-security/az-services/az-storage.md | 172 ++++++++++-------- 1 file changed, 94 insertions(+), 78 deletions(-) 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 658688c38..c8f70bbd5 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -4,27 +4,27 @@ ## Osnovne informacije -Azure Storage Accounts su osnovne usluge u Microsoft Azure koje pružaju skalabilno, sigurno i visoko dostupno cloud **skladište 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 pod jednim namespace-om radi lakšeg upravljanja. +Azure Storage Accounts su fundamentalni servisi u Microsoft Azure koji obezbeđuju skalabilan, siguran i visoko dostupan cloud **storage for various data types**, uključujući blobs (binary large objects), files, queues i tables. Služe kao kontejneri koji grupišu ove različite storage servise pod jedinstvenim namespace-om radi lakšeg upravljanja. **Glavne opcije konfiguracije**: -- Svaki storage account mora imati **jedinstveno ime preko celog Azura**. -- Svaki storage account je deploy-ovan u jednoj **regiji** ili u Azure extended zoni -- Moguće je izabrati **premium** verziju storage account-a za bolji performans -- Moguće je izabrati među **4 tipa redundancije za zaštitu** od rack, drive i datacenter **grešaka**. +- Svaki storage account mora imati **uniq name across all Azure**. +- Svaki storage account je deploy-ovan u nekoj **region** ili u Azure extended zone +- Moguće je izabrati **premium** verziju storage account-a za bolji performance +- Moguće je izabrati između **4 types of redundancy to protect** protiv rack, drive i datacenter **failures**. -**Opcije sigurnosne konfiguracije**: +**Opcije bezbednosne 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 uključiti anonymous access -- **Enable storage account key access**: Ako nije omogućeno, pristup pomoću Shared Keys će biti zabranjen +- **Require secure transfer for REST API operations**: Zahteva TLS za svu komunikaciju sa storage-om +- **Allows enabling anonymous access on individual containers**: Ako nije omogućeno, kasnije neće biti moguće omogućiti anonymous access +- **Enable storage account key access**: Ako nije omogućeno, pristup sa Shared Keys će biti zabranjen - **Minimum TLS version** - **Permitted scope for copy operations**: Dozvoljava 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 virtualnoj mreži. -**Blob Storage options**: +**Opcije Blob Storage-a**: - **Allow cross-tenant replication** -- **Access tier**: Hot (često pristupani podaci), Cool i Cold (retko pristupani podaci) +- **Access tier**: Hot (često pristupan podaci), Cool i Cold (retko pristupan podaci) **Mrežne opcije**: @@ -32,54 +32,69 @@ Azure Storage Accounts su osnovne usluge u Microsoft Azure koje pružaju skalabi - Allow from all networks - Allow from selected virtual networks and IP addresses - Disable public access and use private access -- **Private endpoints**: Omogućava privatnu konekciju do storage account-a iz virtualne mreže +- **Private endpoints**: Dozvoljava privatnu konekciju ka storage account-u iz virtualne mreže -**Opcije za zaštitu podataka**: +**Opcije zaštite podataka**: -- **Point-in-time restore for containers**: Dozvoljava vraćanje kontejnera u ranije stanje -- Zahteva uključeno versioning, change feed i blob soft delete. -- **Enable soft delete for blobs**: Omogućava period čuvanja u danima za obrisane blob-ove (čak i prepisane) -- **Enable soft delete for containers**: Omogućava period čuvanja u danima za obrisane kontejnere -- **Enable soft delete for file shares**: Omogućava period čuvanja u danima za obrisane file share-ove +- **Point-in-time restore for containers**: Dozvoljava vraćanje containera u ranije stanje +- Zahteva omogućene versioning, change feed i blob soft delete. +- **Enable soft delete for blobs**: Omogućava zadržavanje izbrisanih blob-ova (čak i prepisanih) tokom definisanog perioda u danima +- **Enable soft delete for containers**: Omogućava zadržavanje izbrisanih containera tokom definisanog perioda u danima +- **Enable soft delete for file shares**: Omogućava zadržavanje izbrisanih file share-ova tokom definisanog perioda u danima - **Enable versioning for blobs**: Čuva prethodne verzije vaših blob-ova -- **Enable blob change feed**: Čuva logove kreiranja, modifikacije i brisanja blob-ova -- **Enable version-level immutability support**: Dozvoljava postavljanje vremenski bazirane politike zadržavanja na nivou account-a koja će se primenjivati na sve verzije blob-ova. +- **Enable blob change feed**: Beleži create, modification i delete promene na blob-ovima +- **Enable version-level immutability support**: Dozvoljava postavljanje time-based retention politike na nivou account-a koja će važiti za sve verzije blob-ova. - Version-level immutability support i point-in-time restore for containers ne mogu biti omogućeni istovremeno. **Opcije enkripcije**: - **Encryption type**: Moguće je koristiti Microsoft-managed keys (MMK) ili Customer-managed keys (CMK) -- **Enable infrastructure encryption**: Omogućava duplu enkripciju podataka "za veću sigurnost" +- **Enable infrastructure encryption**: Dozvoljava duplu enkripciju podataka "za dodatnu sigurnost" ### Storage endpoints -
Usluga skladištenjaEndpoint
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
+
Servis skladištaEndpoint
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
### Javna izloženost -Ako je "Allow Blob public access" **omogućeno** (po default-u onemogućeno), pri kreiranju kontejnera je moguće: +Ako je "Allow Blob public access" **enabled** (disabled by default), pri kreiranju containera moguće je: -- Dati **javni pristup za čitanje blob-ova** (potrebno je znati ime). -- **Listati blob-ove u kontejneru** i **čitati** ih. -- Napraviti ga potpuno **privatnim** +- Dati **public access to read blobs** (potrebno je poznavati ime). +- **List container blobs** i **read** ih. +- Učiniti ga potpuno **private**
-#### Revizija anonimnog izlaganja blob-ova +### Static website (`$web`) exposure & leaked secrets -- **Pronađi storage accounte** koji mogu izložiti podatke: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Ako je `allowBlobPublicAccess` `false` ne možeš uključiti javni pristup kontejnerima. -- **Ispitaj rizične accounte** da potvrdiš zastavicu i druge slabe postavke: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. -- **Enumeriši izlaganje na nivou kontejnera** gde je zastavica omogućena: +- **Static websites** se serviraju iz specijalnog `$web` containera preko region-specific endpoint-a kao što je `https://.z13.web.core.windows.net/`. +- `$web` container može prijaviti `publicAccess: null` preko blob API-ja, ali fajlovi su i dalje dostupni kroz static site endpoint, tako da postavljanje config/IaC artefakata tamo može leak secrets. +- Brzi workflow za audit: +```bash +# Identify storage accounts with static website hosting enabled +az storage blob service-properties show --account-name --auth-mode login +# Enumerate containers (including $web) and their public flags +az storage container list --account-name --auth-mode login +# List files served by the static site even when publicAccess is null +az storage blob list --container-name '$web' --account-name --auth-mode login +# 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 anonimnog izlaganja blobova + +- **Pronađite storage accounts** koji mogu izložiti podatke: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Ako je `allowBlobPublicAccess` `false` ne možete postaviti kontejnere kao javne. +- **Pregledajte rizične naloge** da potvrdite zastavicu i druga slaba podešavanja: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. +- **Enumerišite izlaganje na nivou kontejnera** gde je zastavica omogućena: ```bash az storage container list --account-name \ --query '[].{name:name, access:properties.publicAccess}' ``` -- `"Blob"`: anonimno čitanje dozvoljeno **samo kada je ime bloba poznato** (bez mogućnosti listanja). -- `"Container"`: anonimno **listanje + čitanje** svih blobova. -- `null`: privatno; potrebna autentifikacija. -- **Dokaži pristup** bez kredencijala: +- `"Blob"`: anonimno čitanje dozvoljeno **samo kada je ime bloba poznato** (nema listanja). +- `"Container"`: anonimno **listanje + čitanje** svakog bloba. +- `null`: privatno; potrebna autentikacija. +- **Dokažite pristup** bez kredencijala: - Ako je `publicAccess` `Container`, anonimno listanje radi: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. -- Za oba `"Blob"` i `"Container"`, anonimno preuzimanje bloba radi kada je ime poznato: +- Za oba `Blob` i `Container`, anonimno preuzimanje bloba funkcioniše kada je ime poznato: ```bash az storage blob download -c -n --account-name --file /dev/stdout # or via raw HTTP @@ -87,31 +102,31 @@ curl "https://.blob.core.windows.net//" ``` ### Povezivanje sa Storage -Ako pronađete bilo koji **storage** na koji se možete povezati, možete koristiti alat [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) za to. +Ako pronađete bilo koji **storage** kojem se možete povezati, možete koristiti alat [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) za to. -## Pristup Storage-u +## Pristup Storage ### RBAC -Moguće je koristiti Entra ID principals uz **RBAC roles** da se pristupi storage account-ima i to je preporučeni način. +Moguće je koristiti Entra ID principals sa **RBAC roles** za pristup storage accounts i to je preporučeni način. ### Access Keys -Storage account-i imaju access keys koje se mogu koristiti za pristup. Ovo daje f**ull access to the storage account.** +Storage accounts imaju access keys koje se mogu koristiti za pristup. Ovo pruža **potpun pristup na storage account.**
### **Shared Keys & Lite Shared Keys** -Moguće je [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) potpisane access keys-ima kako bi se autorizovao pristup određenim resursima putem potpisanog URL-a. +Moguće je [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) potpisanih access keys-ima da autorizujete pristup određenim resursima putem potpisanog URL-a. > [!NOTE] -> Imajte na umu da deo `CanonicalizedResource` predstavlja resurs storage servisa (URI). Ako je bilo koji deo u URL-u kodiran, trebalo bi da bude kodiran i unutar `CanonicalizedResource`. +> Imajte na umu da deo `CanonicalizedResource` predstavlja resurs storage servisa (URI). I ako je bilo koji deo u URL-u enkodiran, treba biti enkodiran i unutar `CanonicalizedResource`. > [!NOTE] -> Ovo se **podrazumevano koristi od strane `az` cli** za autentifikaciju zahteva. Da biste naterali da koristi Entra ID principal credentials, navedite parametar `--auth-mode login`. +> Ovo je **koristi se po defaultu od strane `az` cli** za autentifikaciju zahteva. Da bi koristio Entra ID principal credentials navedite parametar `--auth-mode login`. -- Moguće je generisati **shared key for blob, queue and file services** potpisivanjem sledećih informacija: +- Moguće je generisati a **shared key for blob, queue and file services** potpisivanjem sledećih informacija: ```bash StringToSign = VERB + "\n" + Content-Encoding + "\n" + @@ -150,7 +165,7 @@ CanonicalizedResource; StringToSign = Date + "\n" CanonicalizedResource ``` -Zatim, da biste koristili ključ, to se može učiniti u Authorization headeru prateći sledeću sintaksu: +Zatim, da biste koristili ključ, to se može uraditi u Authorization header prateći sintaksu: ```bash Authorization="[SharedKey|SharedKeyLite] :" #e.g. @@ -164,16 +179,16 @@ Content-Length: 0 ``` ### **Deljeni pristupni potpis** (SAS) -Shared Access Signatures (SAS) su sigurni, vremenski ograničeni URL-ovi koji **dodeljuju specifična ovlašćenja za pristup resursima** u Azure Storage nalogu bez izlaganja pristupnih ključeva naloga. Dok pristupni ključevi obezbeđuju punu administratorsku kontrolu nad svim resursima, SAS omogućava granularnu kontrolu određivanjem dozvola (npr. read ili write) i definisanjem vremena isteka. +Shared Access Signatures (SAS) su sigurni URL-ovi ograničenog trajanja koji **dodeljuju specifična ovlašćenja za pristup resursima** u Azure Storage account bez izlaganja account's access keys. Dok access keys pružaju potpuni administratorski pristup svim resursima, SAS omogućava granularnu kontrolu navođenjem dozvola (npr. read ili write) i definisanjem vremena isteka. -#### Tipovi SAS-a +#### Tipovi SAS -- **User delegation SAS**: Kreira se pomoću **Entra ID principal** koji će potpisati SAS i delegirati dozvole od korisnika ka SAS-u. 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 **opozvati** sve generisane user delegated SAS. -- Moguće je generisati delegation SAS sa "više" dozvola nego što korisnik ima. Međutim, ako principal nema te dozvole, neće raditi (no privesc). -- **Service SAS**: Potpisuje se korišćenjem jednog od pristupnih ključeva storage account-a. Može se koristiti za dodeljivanje pristupa specifičnim resursima u jednoj storage usluzi. Ako se ključ obnovi, SAS prestaje sa radom. -- **Account SAS**: Takođe se potpisuje jednim od pristupnih ključeva storage account-a. Dodeljuje pristup resursima preko usluga storage account-a (Blob, Queue, Table, File) i može uključivati operacije na nivou servisa. +- **User delegation SAS**: Kreira se od strane **Entra ID principal** koji će potpisati SAS i delegirati ovlašćenja 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** svih generisanih user delegated SAS. +- Moguće je generisati delegation SAS sa “više” permisija nego što korisnik ima. Međutim, ako principal nema te permisije, neće raditi (no privesc). +- **Service SAS**: Potpisuje se korišćenjem jednog od storage account **access keys**. Može se koristiti za dodeljivanje pristupa specifičnim resursima u jednoj storage service. Ako se key obnovi, SAS prestaje da radi. +- **Account SAS**: Takođe se potpisuje jednim od storage account **access keys**. Dodeljuje pristup resursima preko servisa unutar storage account-a (Blob, Queue, Table, File) i može uključivati operacije na nivou servisa. -A SAS URL potpisan pomoću **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` @@ -181,51 +196,51 @@ 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 parametre**: +Obratite pažnju na neke **http params**: -- The **`se`** param indicates the **expiration date** of the SAS -- The **`sp`** param indicates the **permissions** of the SAS -- The **`sig`** is the **signature** validating the SAS +- The **`se`** param označava **datum isteka** SAS-a +- The **`sp`** param označava **dozvole** SAS-a +- The **`sig`** je **potpis** koji validira SAS #### SAS permissions -Prilikom generisanja SAS-a potrebno je navesti dozvole koje treba da dodeli. U zavisnosti od objekta preko kojeg se SAS generiše, mogu biti uključene različite dozvole. Na primer: +Pri generisanju SAS potrebno je navesti dozvole koje treba da obezbeđuje. U zavisnosti od objekta nad kojim se SAS generiše mogu biti uključene različite permisije. 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 -## Podrška za SFTP za Azure Blob Storage +## SFTP Support for Azure Blob Storage -Azure Blob Storage sada podržava SSH File Transfer Protocol (SFTP), omogućavajući siguran prenos fajlova i upravljanje direktno u Blob Storage bez potrebe za prilagođenim rešenjima ili proizvodima trećih strana. +Azure Blob Storage sada podržava SSH File Transfer Protocol (SFTP), omogućavajući siguran prenos fajlova i upravljanje direktno u Blob Storage bez potrebe za custom rešenjima ili third-party proizvodima. -### Ključne funkcije +### Ključne karakteristike -- Protocol Support: SFTP radi sa Blob Storage nalozima konfigurisanim sa hierarchical namespace (HNS). Ovo organizuje blobs u direktorijume i poddirektorijume radi lakše navigacije. -- Security: SFTP koristi lokalne korisničke identitete za autentifikaciju i ne integriše se sa RBAC ili ABAC. Svaki lokalni korisnik može da se autentifikuje preko: - - Azure-generated passwords - - Public-private SSH key pairs -- Granular Permissions: Dozvole kao što su Read, Write, Delete i List mogu biti dodeljene lokalnim korisnicima za do 100 kontejnera. -- Networking Considerations: SFTP konekcije se rade preko porta 22. Azure podržava mrežne konfiguracije kao što su firewalls, private endpoints ili virtual networks za zaštitu SFTP saobraćaja. +- Protocol Support: SFTP radi sa Blob Storage account-ima konfigurisanim sa hierarchical namespace (HNS). Ovo organizuje blob-ove u direktorijume i poddirektorijume radi lakše navigacije. +- Security: SFTP koristi lokalne korisničke identitete za autentikaciju i ne integriše se sa RBAC ili ABAC. Svaki lokalni korisnik može da se autentifikuje putem: +- Azure-generated passwords +- Public-private SSH key pairs +- Granular Permissions: Dozvole kao što su Read, Write, Delete i List mogu se dodeliti lokalnim korisnicima za do 100 containers. +- Networking Considerations: SFTP konekcije se uspostavljaju preko porta 22. Azure podržava mrežne konfiguracije kao što su firewalls, private endpoints, ili virtual networks za zaštitu SFTP saobraćaja. -### Zahtevi za podešavanje +### Zahtevi za postavljanje - Hierarchical Namespace: HNS mora biti omogućen prilikom kreiranja storage account-a. -- Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-odobrene kriptografske algoritme (npr. rsa-sha2-256, ecdsa-sha2-nistp256). +- Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-approved kriptografske algoritme (npr. 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. +- 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. ### Dozvole -| Dozvola | Simbol | Opis | +| Permission | Symbol | Description | | ---------------------- | ------ | ------------------------------------ | | **Read** | `r` | Čitanje sadržaja fajla. | -| **Write** | `w` | Upload fajlova i kreiranje direktorijuma. | -| **List** | `l` | Lista sadržaja direktorijuma. | +| **Write** | `w` | Otprema fajlova i kreiranje direktorijuma. | +| **List** | `l` | Listanje sadržaja direktorijuma. | | **Delete** | `d` | Brisanje fajlova ili direktorijuma. | | **Create** | `c` | Kreiranje fajlova ili direktorijuma. | -| **Modify Ownership** | `o` | Promena vlasnika (user ili grupa). | -| **Modify Permissions** | `p` | Promena ACL-a na fajlovima ili direktorijumima. | +| **Modify Ownership** | `o` | Promena owning user ili grupe. | +| **Modify Permissions** | `p` | Promena ACL-ova na fajlovima ili direktorijumima. | ## Enumeracija @@ -357,7 +372,7 @@ az storage account local-user list \ {{#tab name="Az PowerShell" }}
-Az PowerShell enumeration +Az PowerShell enumeracija ```powershell # Get storage accounts Get-AzStorageAccount | fl @@ -420,7 +435,7 @@ New-AzStorageBlobSASToken ` {{#endtab }} {{#endtabs }} -### Deljene datoteke +### Deljeni fajlovi {{#ref}} az-file-shares.md @@ -432,7 +447,7 @@ az-file-shares.md ../az-privilege-escalation/az-storage-privesc.md {{#endref}} -## Nakon eksploatacije +## Post-eksploatacija {{#ref}} ../az-post-exploitation/az-blob-storage-post-exploitation.md @@ -449,6 +464,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) +- [Holiday Hack Challenge 2025 – Rezervni ključ (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) - [https://learn.microsoft.com/en-us/cli/azure/storage/container](https://learn.microsoft.com/en-us/cli/azure/storage/container)