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

This commit is contained in:
Translator
2026-07-09 16:57:45 +00:00
parent 65c8b04210
commit 12b9615b5e
@@ -4,52 +4,52 @@
## Informazioni di base
Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che forniscono cloud **storage scalabile, sicuro e altamente disponibile per vari tipi di dati**, inclusi blobs (binary large objects), files, queues e tables. Funzionano come container che raggruppano insieme questi diversi servizi di storage sotto un unico namespace per una gestione semplice.
Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che forniscono cloud **storage scalabile, sicuro e altamente disponibile per vari tipi di dati**, inclusi blobs (binary large objects), files, queues e tables. Funzionano come contenitori che raggruppano insieme questi diversi storage services sotto un unico namespace per una facile gestione.
**Opzioni principali di configurazione**:
- Ogni storage account deve avere un **nome univoco in tutto Azure**.
- Ogni storage account è distribuito in una **region** o in una Azure extended zone
- È possibile selezionare la versione **premium** dello storage account per migliori prestazioni
- È possibile scegliere tra **4 tipi di redundancy per proteggersi** da rack, drive e datacenter **failures**.
- Ogni storage account viene distribuito in una **region** o in una Azure extended zone
- È possibile selezionare la versione **premium** dello storage account per prestazioni migliori
- È possibile scegliere tra **4 tipi di redundancy per proteggersi** da failure di rack, drive e datacenter.
**Opzioni di configurazione della sicurezza**:
- **Require secure transfer for REST API operations**: Richiede TLS in qualsiasi comunicazione con lo storage
- **Allows enabling anonymous access on individual containers**: In caso contrario, in futuro non sarà possibile abilitare l'accesso anonimo
- **Allows enabling anonymous access on individual containers**: In caso contrario, non sarà possibile abilitare l'anonimous access in futuro
- **Enable storage account key access**: In caso contrario, l'accesso con Shared Keys sarà vietato
- **Minimum TLS version**
- **Permitted scope for copy operations**: Consenti da qualsiasi storage account, da qualsiasi storage account dello stesso tenant Entra oppure da storage account con private endpoints nella stessa virtual network.
- **Permitted scope for copy operations**: Consenti da qualsiasi storage account, da qualsiasi storage account dello stesso tenant Entra o da storage account con private endpoints nella stessa virtual network.
**Opzioni Blob Storage**:
**Opzioni di Blob Storage**:
- **Allow cross-tenant replication**
- **Access tier**: Hot (dati accessati frequentemente), Cool e Cold (dati accessati raramente)
- **Access tier**: Hot (dati accessati frequentemente), Cool e Cold (raramente accessati)
**Opzioni di networking**:
- **Network access**:
- Consenti da tutte le networks
- Consenti da virtual networks e indirizzi IP selezionati
- Disabilita l'accesso pubblico e usa accesso privato
- Consenti da tutte le network
- Consenti da selezionate virtual networks e indirizzi IP
- Disabilita l'accesso pubblico e usa l'accesso privato
- **Private endpoints**: Consente una connessione privata allo storage account da una virtual network
**Opzioni di protezione dei dati**:
- **Point-in-time restore for containers**: Consente di ripristinare i container a uno stato precedente
- **Point-in-time restore for containers**: Consente di ripristinare i containers a uno stato precedente
- Richiede che versioning, change feed e blob soft delete siano abilitati.
- **Enable soft delete for blobs**: Abilita un periodo di retention in giorni per i blobs eliminati (anche se sovrascritti)
- **Enable soft delete for containers**: Abilita un periodo di retention in giorni per i container eliminati
- **Enable soft delete for file shares**: Abilita un periodo di retention in giorni per i file shared eliminati
- **Enable soft delete for blobs**: Abilita un retention period in giorni per i blobs eliminati (anche sovrascritti)
- **Enable soft delete for containers**: Abilita un retention period in giorni per i containers eliminati
- **Enable soft delete for file shares**: Abilita un retention period in giorni per i file shared eliminati
- **Enable versioning for blobs**: Mantiene le versioni precedenti dei tuoi blobs
- **Enable blob change feed**: Mantiene i log delle modifiche di create, modification e delete ai blobs
- **Enable version-level immutability support**: Consente di impostare una policy di retention basata sul tempo a livello di account che si applicherà a tutte le blob versions.
- Version-level immutability support e point-in-time restore for containers non possono essere abilitati contemporaneamente.
- **Enable version-level immutability support**: Consente di impostare una retention policy basata sul tempo a livello di account che si applicherà a tutte le versioni dei blob.
- Version-level immutability support e point-in-time restore for containers non possono essere abilitati simultaneamente.
**Opzioni di configurazione della cifratura**:
**Opzioni di configurazione della crittografia**:
- **Encryption type**: È possibile usare Microsoft-managed keys (MMK) o Customer-managed keys (CMK)
- **Enable infrastructure encryption**: Consente di cifrare due volte i dati "for more security"
- **Enable infrastructure encryption**: Consente di doppiare la crittografia dei dati "for more security"
### Storage endpoints
@@ -64,19 +64,19 @@ Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che fornisco
### Esposizione pubblica
Se "Allow Blob public access" è **abilitato** (disabilitato per impostazione predefinita), quando si crea un container è possibile:
Se "Allow Blob public access" è **abilitato** (disabilitato per default), quando si crea un container è possibile:
- Dare **accesso pubblico per leggere i blobs** (devi conoscere il nome).
- **Elencare i blobs del container** e **leggerli**.
- **List container blobs** e **leggerli**.
- Renderlo completamente **privato**
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
### Esposizione static website (`$web`) & leaked secrets
### Esposizione del sito statico (`$web`) e secrets leaked
- I **static websites** sono serviti dal container speciale `$web` tramite un endpoint specifico per region come `https://<account>.z13.web.core.windows.net/`.
- Il container `$web` può riportare `publicAccess: null` tramite la blob API, ma i file sono comunque raggiungibili attraverso l'endpoint del sito statico, quindi inserirvi config/IaC artifacts può far leak di secrets.
- Quick audit workflow:
- I **siti statici** vengono serviti dal container speciale `$web` tramite un endpoint specifico per region come `https://<account>.z13.web.core.windows.net/`.
- Il container `$web` può riportare `publicAccess: null` tramite la blob API, ma i file restano comunque raggiungibili attraverso l'endpoint del sito statico, quindi lasciare lì artifact di configurazione/IaC può leak secrets.
- Flusso rapido di audit:
```bash
# Identify storage accounts with static website hosting enabled
az storage blob service-properties show --account-name <acc-name> --auth-mode login
@@ -87,11 +87,11 @@ 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
```
### Auditing anonymous blob exposure
### Auditare l'esposizione anonima dei blob
- **Individuare gli storage accounts** che possono esporre dati: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` è `false` non puoi rendere public i containers.
- **Ispezionare gli account a rischio** per confermare il flag e altre impostazioni deboli: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
- **Enumerare l'esposizione a livello di container** dove il flag è abilitato:
- **Individua gli storage account** che possono esporre dati: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` è `false` non puoi rendere i container public.
- **Ispeziona gli account a rischio** per confermare il flag e altre impostazioni deboli: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
- **Enumera l'esposizione a livello di container** dove il flag è abilitato:**
```bash
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
@@ -115,11 +115,11 @@ Se trovi uno **storage** a cui puoi connetterti, puoi usare lo strumento [**Micr
### RBAC
È possibile usare i principal di Entra ID con **RBAC roles** per accedere agli storage accounts ed è il metodo raccomandato.
È possibile usare i principal di Entra ID con i **RBAC roles** per accedere agli storage account ed è il metodo consigliato.
### Access Keys
Gli storage accounts hanno access keys che possono essere usate per accedervi. Questo fornisce f**ull access to the storage account.**
Gli storage account hanno access keys che possono essere usate per accedervi. Questo fornisce f**ull access to the storage account.**
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
@@ -128,12 +128,12 @@ Gli storage accounts hanno access keys che possono essere usate per accedervi. Q
È possibile [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) firmate con le access keys per autorizzare l'accesso a determinate risorse tramite una signed URL.
> [!NOTE]
> Nota che la parte `CanonicalizedResource` rappresenta la risorsa dei storage services (URI). E se una parte nell'URL è encoded, deve esserlo anche all'interno di `CanonicalizedResource`.
> Nota che la parte `CanonicalizedResource` rappresenta la risorsa dei storage services (URI). E se una parte nella URL è encoded, deve essere encoded anche all'interno di `CanonicalizedResource`.
> [!NOTE]
> Questo è **used by default by `az` cli** per autenticare le richieste. Per far sì che usi le credenziali del principal di Entra ID indica il parametro `--auth-mode login`.
> Questo viene **used by default by `az` cli** per autenticare le richieste. Per far sì che usi le credenziali del principal di Entra ID indica il parametro `--auth-mode login`.
- È possibile generare una **shared key per blob, queue and file services** firmando le seguenti informazioni:
- È possibile generate una **shared key for blob, queue and file services** firmando le seguenti informazioni:
```bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
@@ -150,7 +150,7 @@ Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
```
- È possibile generare una **shared key per i table services** firmando le seguenti informazioni:
- È possibile generare una **shared key per table services** firmando le seguenti informazioni:
```bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
@@ -172,7 +172,7 @@ CanonicalizedResource;
StringToSign = Date + "\n"
CanonicalizedResource
```
Poi, per usare la key, si può fare nell'header Authorization seguendo la sintassi:
Poi, per usare la key, si può fare nell'Authorization header seguendo la sintassi:
```bash
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
#e.g.
@@ -186,20 +186,20 @@ Content-Length: 0
```
### **Shared Access Signature** (SAS)
Shared Access Signatures (SAS) sono URL sicuri e a tempo limitato che **concedono permessi specifici per accedere alle risorse** in un account Azure Storage senza esporre le access keys dell'account. Mentre le access keys forniscono accesso amministrativo completo a tutte le risorse, SAS permette un controllo granulare specificando i permessi (come read o write) e definendo un tempo di scadenza.
Shared Access Signatures (SAS) sono URL sicuri e a tempo limitato che **concedono permessi specifici per accedere a risorse** in un Azure Storage account senza esporre le access keys dell'account. Mentre le access keys forniscono accesso amministrativo completo a tutte le risorse, SAS consente un controllo granulare specificando i permessi (come read o write) e definendo un tempo di scadenza.
#### SAS Types
- **User delegation SAS**: Viene creato da un **Entra ID principal** che firmerà il SAS e delegherà i permessi dall'utente al SAS. Può essere usato solo con **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). È possibile **revocare** tutti i user delegated SAS generati.
- Anche se è possibile generare un delegation SAS con permessi "più" ampi di quelli dell'utente. Tuttavia, se il principal non li ha, non funzionerà (no privesc).
- **Service SAS**: Viene firmato usando una delle **access keys** dell'account di storage. Può essere usato per concedere accesso a risorse specifiche in un singolo storage service. Se la key viene rinnovata, il SAS smetterà di funzionare.
- **Account SAS**: Viene anch'esso firmato con una delle **access keys** dell'account di storage. Concede accesso alle risorse attraverso i servizi di un account storage (Blob, Queue, Table, File) e può includere operazioni a livello di servizio.
- Anche se è possibile generare un delegation SAS con "più" permessi di quelli dell'utente. Tuttavia, se il principal non li ha, non funzionerà (no privesc).
- **Service SAS**: È firmato usando una delle **access keys** dello storage account. Può essere usato per concedere accesso a risorse specifiche in un singolo storage service. Se la key viene rinnovata, il SAS smetterà di funzionare.
- **Account SAS**: È anch'esso firmato con una delle **access keys** dello storage account. Concede accesso a risorse attraverso i servizi di uno storage account (Blob, Queue, Table, File) e può includere operazioni a livello di service.
Un URL SAS firmato con una **access key** ha questo aspetto:
Un SAS URL firmato da una **access key** appare così:
- `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`
Un URL SAS firmato come **user delegation** ha questo aspetto:
Un SAS URL firmato come **user delegation** appare così:
- `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`
@@ -211,43 +211,43 @@ Nota alcuni **http params**:
#### SAS permissions
Quando si genera un SAS è necessario indicare i permessi che deve concedere. A seconda dell'oggetto su cui il SAS viene generato, possono essere inclusi permessi diversi. Per esempio:
Quando si genera un SAS è necessario indicare i permessi che deve concedere. A seconda dell'oggetto su cui viene generato il SAS, possono essere inclusi permessi diversi. Per esempio:
- (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 ora supporta l'SSH File Transfer Protocol (SFTP), permettendo il trasferimento e la gestione sicura dei file direttamente su Blob Storage senza richiedere soluzioni custom o prodotti di terze parti.
Azure Blob Storage ora supporta lo SSH File Transfer Protocol (SFTP), consentendo il transfer sicuro dei file e la gestione direttamente su Blob Storage senza richiedere soluzioni custom o prodotti di terze parti.
### Key Features
- Protocol Support: SFTP funziona con account Blob Storage configurati con hierarchical namespace (HNS). Questo organizza i blob in directory e sottodirectory per una navigazione più semplice.
- Security: SFTP usa identità utente locali per l'autenticazione e non si integra con RBAC o ABAC. Ogni utente locale può autenticarsi tramite:
- Protocol Support: SFTP funziona con Blob Storage accounts configurati con hierarchical namespace (HNS). Questo organizza i blob in directory e sottodirectory per una navigazione più semplice.
- Security: SFTP può usare identità di local user, ma supporta anche accesso basato su Microsoft Entra ID con Azure RBAC per l'autorizzazione. Questo significa che l'accesso può essere concesso con i normali Blob Storage data-plane roles invece di creare local SFTP users. I local users possono autenticarsi tramite:
- Azure-generated passwords
- Public-private SSH key pairs
- Granular Permissions: Permessi come Read, Write, Delete e List possono essere assegnati a utenti locali per un massimo di 100 container.
- Networking Considerations: Le connessioni SFTP vengono effettuate tramite la porta 22. Azure supporta configurazioni di rete come firewall, private endpoints o virtual networks per proteggere il traffico SFTP.
- Granular Permissions: Permessi come Read, Write, Delete e List possono essere assegnati ai local users per fino a 100 containers.
- Networking Considerations: Le connessioni SFTP vengono effettuate tramite la porta 22. Azure supporta configurazioni di rete come firewalls, private endpoints o virtual networks per proteggere il traffico SFTP.
### Setup Requirements
- Hierarchical Namespace: HNS deve essere abilitato quando si crea l'account di storage.
- Supported Encryption: Richiede algoritmi crittografici approvati da Microsoft Security Development Lifecycle (SDL) (ad es. rsa-sha2-256, ecdsa-sha2-nistp256).
- Hierarchical Namespace: HNS deve essere abilitato quando si crea lo storage account.
- Supported Encryption: Richiede algoritmi crittografici approvati dal Microsoft Security Development Lifecycle (SDL) (ad esempio, rsa-sha2-256, ecdsa-sha2-nistp256).
- SFTP Configuration:
- Abilita SFTP sull'account di storage.
- Crea identità utente locali con i permessi appropriati.
- Configura le home directories per gli utenti per definire la loro posizione iniziale all'interno del container.
- Abilita SFTP sullo storage account.
- Per l'accesso local-user, crea local user identities con i permessi appropriati.
- Per i local users, configura home directories per definire la loro posizione iniziale all'interno del container.
### Permissions
| Permission | Symbol | Description |
| ---------------------- | ------ | ------------------------------------ |
| **Read** | `r` | Leggi il contenuto del file. |
| **Write** | `w` | Carica file e crea directory. |
| **List** | `l` | Elenca il contenuto delle directory. |
| **Delete** | `d` | Elimina file o directory. |
| **Create** | `c` | Crea file o directory. |
| **Modify Ownership** | `o` | Cambia l'utente o il gruppo owner. |
| **Modify Permissions** | `p` | Cambia le ACL su file o directory. |
| **Read** | `r` | Leggere il contenuto del file. |
| **Write** | `w` | Caricare file e creare directory. |
| **List** | `l` | Elencare il contenuto delle directory. |
| **Delete** | `d` | Eliminare file o directory. |
| **Create** | `c` | Creare file o directory. |
| **Modify Ownership** | `o` | Cambiare l'utente o il gruppo proprietario. |
| **Modify Permissions** | `p` | Cambiare gli ACL su file o directory. |
## Enumeration
@@ -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)