mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor
This commit is contained in:
@@ -1,97 +1,117 @@
|
||||
# Az - Contas de Armazenamento e Blobs
|
||||
# Az - Contas de Armazenamento & Blobs
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
As Contas de Armazenamento do Azure são serviços fundamentais no Microsoft Azure que fornecem armazenamento em nuvem **escalável, seguro e altamente disponível para vários tipos de dados**, incluindo blobs (objetos grandes binários), arquivos, filas e tabelas. Elas servem como contêineres que agrupam esses diferentes serviços de armazenamento sob um único namespace para fácil gerenciamento.
|
||||
Azure Storage Accounts são serviços fundamentais no Microsoft Azure que fornecem armazenamento em nuvem escalável, seguro e altamente disponível para vários tipos de dados, incluindo blobs (binary large objects), files, queues e tables. Eles servem como contêineres que agrupam esses diferentes serviços de armazenamento sob um único namespace para facilitar o gerenciamento.
|
||||
|
||||
**Principais opções de configuração**:
|
||||
|
||||
- Cada conta de armazenamento deve ter um **nome único em todo o Azure**.
|
||||
- Cada conta de armazenamento é implantada em uma **região** ou em uma zona estendida do Azure.
|
||||
- É possível selecionar a versão **premium** da conta de armazenamento para melhor desempenho.
|
||||
- É possível escolher entre **4 tipos de redundância para proteger** contra falhas de rack, disco e datacenter.
|
||||
- Toda storage account deve ter um **nome único em todo o Azure**.
|
||||
- Cada storage account é implantada em uma **região** ou em uma zona estendida do Azure.
|
||||
- É possível selecionar a versão **premium** da storage account para melhor performance.
|
||||
- É possível selecionar entre **4 tipos de redundância para proteger** contra falhas de rack, disco e datacenter.
|
||||
|
||||
**Opções de configuração de segurança**:
|
||||
|
||||
- **Exigir transferência segura para operações da API REST**: Exigir TLS em qualquer comunicação com o armazenamento.
|
||||
- **Permitir acesso anônimo em contêineres individuais**: Caso contrário, não será possível habilitar o acesso anônimo no futuro.
|
||||
- **Habilitar acesso à chave da conta de armazenamento**: Caso contrário, o acesso com Chaves Compartilhadas será proibido.
|
||||
- **Versão mínima do TLS**.
|
||||
- **Escopo permitido para operações de cópia**: Permitir de qualquer conta de armazenamento, de qualquer conta de armazenamento do mesmo inquilino Entra ou de conta de armazenamento com endpoints privados na mesma rede virtual.
|
||||
- **Require secure transfer for REST API operations**: Exigir TLS em qualquer comunicação com o storage.
|
||||
- **Allows enabling anonymous access on individual containers**: Se não habilitado, não será possível ativar acesso anônimo no futuro.
|
||||
- **Enable storage account key access**: Se não habilitado, o acesso com Shared Keys será proibido.
|
||||
- **Minimum TLS version**
|
||||
- **Permitted scope for copy operations**: Permitir de qualquer storage account, de qualquer storage account do mesmo Entra tenant ou de storage accounts com private endpoints na mesma virtual network.
|
||||
|
||||
**Opções de Armazenamento de Blobs**:
|
||||
**Opções do Blob Storage**:
|
||||
|
||||
- **Permitir replicação entre inquilinos**.
|
||||
- **Camada de acesso**: Quente (dados acessados com frequência), Frio e Frio (dados acessados raramente).
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot (dados acessados com frequência), Cool e Cold (dados raramente acessados)
|
||||
|
||||
**Opções de Rede**:
|
||||
|
||||
- **Acesso à rede**:
|
||||
- Permitir de todas as redes.
|
||||
- Permitir de redes virtuais e endereços IP selecionados.
|
||||
- Desabilitar acesso público e usar acesso privado.
|
||||
- **Endpoints privados**: Permite uma conexão privada à conta de armazenamento a partir de uma rede virtual.
|
||||
- **Network access**:
|
||||
- Allow from all networks
|
||||
- Allow from selected virtual networks and IP addresses
|
||||
- Disable public access and use private access
|
||||
- **Private endpoints**: Permite uma conexão privada à storage account a partir de uma virtual network
|
||||
|
||||
**Opções de proteção de dados**:
|
||||
|
||||
- **Restauração ponto a ponto para contêineres**: Permite restaurar contêineres para um estado anterior.
|
||||
- Exige versionamento, feed de alterações e exclusão suave de blobs para ser habilitado.
|
||||
- **Habilitar exclusão suave para blobs**: Habilita um período de retenção em dias para blobs excluídos (mesmo sobrescritos).
|
||||
- **Habilitar exclusão suave para contêineres**: Habilita um período de retenção em dias para contêineres excluídos.
|
||||
- **Habilitar exclusão suave para compartilhamentos de arquivos**: Habilita um período de retenção em dias para compartilhamentos de arquivos excluídos.
|
||||
- **Habilitar versionamento para blobs**: Manter versões anteriores dos seus blobs.
|
||||
- **Habilitar feed de alterações de blobs**: Manter registros de criação, modificação e exclusão de alterações em blobs.
|
||||
- **Habilitar suporte à imutabilidade em nível de versão**: Permite definir uma política de retenção baseada em tempo no nível da conta que se aplicará a todas as versões de blobs.
|
||||
- O suporte à imutabilidade em nível de versão e a restauração ponto a ponto para contêineres não podem ser habilitados simultaneamente.
|
||||
- **Point-in-time restore for containers**: Permite restaurar containers para um estado anterior.
|
||||
- Requer que versioning, change feed e blob soft delete estejam habilitados.
|
||||
- **Enable soft delete for blobs**: Habilita um período de retenção em dias para blobs deletados (mesmo sobrescritos).
|
||||
- **Enable soft delete for containers**: Habilita um período de retenção em dias para containers deletados.
|
||||
- **Enable soft delete for file shares**: Habilita um período de retenção em dias para file shares deletados.
|
||||
- **Enable versioning for blobs**: Mantém versões anteriores dos seus blobs.
|
||||
- **Enable blob change feed**: Mantém logs de criação, modificação e exclusão de blobs.
|
||||
- **Enable version-level immutability support**: Permite definir uma política de retenção baseada em tempo no nível da conta que se aplicará a todas as versões de blob.
|
||||
- Version-level immutability support e point-in-time restore for containers não podem ser habilitados simultaneamente.
|
||||
|
||||
**Opções de configuração de criptografia**:
|
||||
**Opções de criptografia**:
|
||||
|
||||
- **Tipo de criptografia**: É possível usar chaves gerenciadas pela Microsoft (MMK) ou chaves gerenciadas pelo cliente (CMK).
|
||||
- **Habilitar criptografia de infraestrutura**: Permite criptografar os dados duas vezes "para mais segurança".
|
||||
- **Encryption type**: É possível usar chaves gerenciadas pela Microsoft (MMK) ou chaves gerenciadas pelo cliente (CMK).
|
||||
- **Enable infrastructure encryption**: Permite criptografar os dados duas vezes "para mais segurança".
|
||||
|
||||
### Endpoints de Armazenamento
|
||||
### Storage endpoints
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">Serviço de Armazenamento</th><th>Endpoint</th></tr></thead><tbody><tr><td><strong>Armazenamento de Blobs</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>Armazenamento de Data Lake</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>Armazenamento de Filas</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Armazenamento de Tabelas</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="197">Serviço de Armazenamento</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>
|
||||
|
||||
### Exposição Pública
|
||||
|
||||
Se "Permitir acesso público a Blobs" estiver **habilitado** (desabilitado por padrão), ao criar um contêiner é possível:
|
||||
Se "Allow Blob public access" estiver **enabled** (disabled por padrão), ao criar um container é possível:
|
||||
|
||||
- Dar **acesso público para ler blobs** (é necessário saber o nome).
|
||||
- **Listar blobs do contêiner** e **lê-los**.
|
||||
- Torná-lo totalmente **privado**.
|
||||
- Conceder **acesso público para leitura de blobs** (é necessário conhecer o nome).
|
||||
- **Listar blobs do container** e **lê-los**.
|
||||
- Tornar o container totalmente **privado**.
|
||||
|
||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Conectar ao Armazenamento
|
||||
#### Auditando exposição anônima de blobs
|
||||
|
||||
Se você encontrar algum **armazenamento** ao qual possa se conectar, você pode usar a ferramenta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para isso.
|
||||
- **Localizar storage accounts** que podem expor dados: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` for `false` você não pode tornar containers públicos.
|
||||
- **Inspecionar contas arriscadas** para confirmar a flag e outras configurações fracas: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Enumerar exposição a nível de container** onde a flag está habilitada:
|
||||
```bash
|
||||
az storage container list --account-name <acc> \
|
||||
--query '[].{name:name, access:properties.publicAccess}'
|
||||
```
|
||||
- `"Blob"`: leituras anônimas permitidas **somente quando o nome do blob é conhecido** (sem listagem).
|
||||
- `"Container"`: listagem + leitura anônimas de cada blob.
|
||||
- `null`: privado; autenticação necessária.
|
||||
- **Comprovar acesso** sem credenciais:
|
||||
- Se `publicAccess` for `Container`, a listagem anônima funciona: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Para `Blob` e `Container`, o download anônimo do blob funciona quando o nome é conhecido:
|
||||
```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>"
|
||||
```
|
||||
### Conectar ao Storage
|
||||
|
||||
## Acesso ao Armazenamento <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
Se encontrar qualquer **storage** ao qual possa conectar-se, pode usar a ferramenta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para isso.
|
||||
|
||||
## Acesso ao Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
É possível usar princípios do Entra ID com **funções RBAC** para acessar contas de armazenamento e essa é a maneira recomendada.
|
||||
É possível usar principals do Entra ID com **RBAC roles** para acessar contas de Storage e esse é o método recomendado.
|
||||
|
||||
### Chaves de Acesso
|
||||
### Access Keys
|
||||
|
||||
As contas de armazenamento têm chaves de acesso que podem ser usadas para acessá-las. Isso fornece **acesso total à conta de armazenamento.**
|
||||
As storage accounts têm access keys que podem ser usadas para acessá-las. Isso fornece **acesso completo à conta de Storage.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Chaves Compartilhadas & Chaves Compartilhadas Lite**
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
É possível [**gerar Chaves Compartilhadas**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) assinadas com as chaves de acesso para autorizar o acesso a certos recursos via uma URL assinada.
|
||||
É possível [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) assinadas com as access keys para autorizar o acesso a certos recursos via uma URL assinada.
|
||||
|
||||
> [!NOTE]
|
||||
> Note que a parte `CanonicalizedResource` representa o recurso dos serviços de armazenamento (URI). E se qualquer parte da URL estiver codificada, ela também deve ser codificada dentro do `CanonicalizedResource`.
|
||||
> Observe que a parte `CanonicalizedResource` representa o recurso dos storage services (URI). E se qualquer parte na URL estiver codificada, ela também deve estar codificada dentro do `CanonicalizedResource`.
|
||||
|
||||
> [!NOTE]
|
||||
> Isso é **usado por padrão pelo `az` cli** para autenticar solicitações. Para fazer com que use as credenciais do principal do Entra ID, indique o parâmetro `--auth-mode login`.
|
||||
> Isto é **usado por padrão pelo `az` cli** para autenticar requisições. Para fazer com que use as credenciais do principal do Entra ID, indique o parâmetro `--auth-mode login`.
|
||||
|
||||
- É possível gerar uma **chave compartilhada para serviços de blob, fila e arquivo** assinando as seguintes informações:
|
||||
- É possível gerar uma **shared key for blob, queue and file services** assinando a seguinte informação:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -108,7 +128,7 @@ Range + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- É possível gerar uma **chave compartilhada para serviços de tabela** assinando as seguintes informações:
|
||||
- É possível gerar um **shared key for table services** assinando as seguintes informações:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -116,7 +136,7 @@ Content-Type + "\n" +
|
||||
Date + "\n" +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- É possível gerar uma **chave compartilhada lite para serviços de blob, fila e arquivo** assinando as seguintes informações:
|
||||
- É possível gerar uma **lite shared key for blob, queue and file services** assinando as seguintes informações:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -125,12 +145,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- É possível gerar uma **chave compartilhada lite para serviços de tabela** assinando as seguintes informações:
|
||||
- É possível gerar uma **lite shared key for table services** assinando a seguinte informação:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
Então, para usar a chave, pode ser feito no cabeçalho Authorization seguindo a sintaxe:
|
||||
Então, para usar a chave, isso pode ser feito no cabeçalho Authorization seguindo a sintaxe:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -142,26 +162,26 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
|
||||
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
|
||||
Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
### **Assinatura de Acesso Compartilhado** (SAS)
|
||||
|
||||
As Signaturas de Acesso Compartilhado (SAS) são URLs seguras e com tempo limitado que **concedem permissões específicas para acessar recursos** em uma conta de Armazenamento Azure sem expor as chaves de acesso da conta. Enquanto as chaves de acesso fornecem acesso administrativo total a todos os recursos, o SAS permite um controle granular ao especificar permissões (como leitura ou gravação) e definir um tempo de expiração.
|
||||
Shared Access Signatures (SAS) são URLs seguras e com tempo limitado que **concedem permissões específicas para acessar recursos** em uma conta Azure Storage sem expor as chaves de acesso da conta. Enquanto as access keys fornecem acesso administrativo completo a todos os recursos, o SAS permite controle granular ao especificar permissões (como leitura ou escrita) e definir um tempo de expiração.
|
||||
|
||||
#### Tipos de SAS
|
||||
|
||||
- **SAS de delegação de usuário**: Isso é criado a partir de um **principal do Entra ID** que assinará o SAS e delegará as permissões do usuário para o SAS. Pode ser usado apenas com **armazenamento de blob e data lake** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). É possível **revogar** todos os SAS delegados gerados pelo usuário.
|
||||
- Mesmo que seja possível gerar um SAS de delegação com "mais" permissões do que as que o usuário possui. No entanto, se o principal não as tiver, não funcionará (sem privesc).
|
||||
- **SAS de serviço**: Isso é assinado usando uma das **chaves de acesso** da conta de armazenamento. Pode ser usado para conceder acesso a recursos específicos em um único serviço de armazenamento. Se a chave for renovada, o SAS deixará de funcionar.
|
||||
- **SAS de conta**: Também é assinado com uma das **chaves de acesso** da conta de armazenamento. Concede acesso a recursos em serviços de conta de armazenamento (Blob, Queue, Table, File) e pode incluir operações em nível de serviço.
|
||||
- **User delegation SAS**: Isso é criado a partir de um **Entra ID principal** que assinará o SAS e delegará as permissões do usuário para o SAS. Só pode ser usado com **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). É possível **revogar** todos os user delegated SAS gerados.
|
||||
- Mesmo que seja possível gerar um delegation SAS com "mais" permissões do que as que o usuário possui. No entanto, se o principal não as tiver, não funcionará (sem privesc).
|
||||
- **Service SAS**: Isso é assinado usando uma das **access keys** da storage account. Pode ser usado para conceder acesso a recursos específicos em um único serviço de storage. Se a key for renovada, o SAS deixará de funcionar.
|
||||
- **Account SAS**: Também é assinado com uma das **access keys** da storage account. Concede acesso a recursos através dos serviços da storage account (Blob, Queue, Table, File) e pode incluir operações a nível de serviço.
|
||||
|
||||
Uma URL SAS assinada por uma **chave de acesso** se parece com isso:
|
||||
Uma URL SAS assinada por uma **access key** se parece com isto:
|
||||
|
||||
- `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`
|
||||
|
||||
Uma URL SAS assinada como uma **delegação de usuário** se parece com isso:
|
||||
Uma URL SAS assinada como **user delegation** se parece com isto:
|
||||
|
||||
- `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`
|
||||
|
||||
Note alguns **parâmetros http**:
|
||||
Note alguns **http params**:
|
||||
|
||||
- O parâmetro **`se`** indica a **data de expiração** do SAS
|
||||
- O parâmetro **`sp`** indica as **permissões** do SAS
|
||||
@@ -169,48 +189,51 @@ Note alguns **parâmetros http**:
|
||||
|
||||
#### Permissões do SAS
|
||||
|
||||
Ao gerar um SAS, é necessário indicar as permissões que ele deve conceder. Dependendo do objeto sobre o qual o SAS está sendo gerado, diferentes permissões podem ser incluídas. Por exemplo:
|
||||
Ao gerar um SAS é necessário indicar as permissões que ele deve conceder. Dependendo do objeto sobre o qual o SAS está sendo gerado, diferentes permissões podem ser incluídas. Por exemplo:
|
||||
|
||||
- (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
|
||||
|
||||
## Suporte a SFTP para Azure Blob Storage
|
||||
## SFTP Support for Azure Blob Storage
|
||||
|
||||
O Azure Blob Storage agora suporta o Protocolo de Transferência de Arquivos SSH (SFTP), permitindo transferência e gerenciamento seguro de arquivos diretamente para o Blob Storage sem exigir soluções personalizadas ou produtos de terceiros.
|
||||
Azure Blob Storage agora suporta o SSH File Transfer Protocol (SFTP), permitindo transferência de arquivos segura e gerenciamento diretamente no Blob Storage sem necessidade de soluções customizadas ou produtos de terceiros.
|
||||
|
||||
### Principais Recursos
|
||||
|
||||
- Suporte a Protocolo: O SFTP funciona com contas de Blob Storage configuradas com namespace hierárquico (HNS). Isso organiza blobs em diretórios e subdiretórios para facilitar a navegação.
|
||||
- Segurança: O SFTP usa identidades de usuários locais para autenticação e não se integra com RBAC ou ABAC. Cada usuário local pode se autenticar via:
|
||||
- Senhas geradas pelo Azure
|
||||
- Pares de chaves SSH pública-privada
|
||||
- Permissões Granulares: Permissões como Ler, Gravar, Excluir e Listar podem ser atribuídas a usuários locais para até 100 contêineres.
|
||||
- Considerações de Rede: Conexões SFTP são feitas através da porta 22. O Azure suporta configurações de rede como firewalls, endpoints privados ou redes virtuais para proteger o tráfego SFTP.
|
||||
- Protocol Support: SFTP funciona com contas Blob Storage configuradas com hierarchical namespace (HNS). Isso organiza blobs em diretórios e subdiretórios para facilitar a navegação.
|
||||
- Security: SFTP usa identidades de usuários locais para autenticação e não se integra com RBAC ou ABAC. Cada usuário local pode autenticar via:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Permissões como Read, Write, Delete e List podem ser atribuídas a usuários locais para até 100 containers.
|
||||
- Networking Considerations: Conexões SFTP são feitas pela porta 22. A Azure suporta configurações de rede como firewalls, private endpoints ou virtual networks para proteger o tráfego SFTP.
|
||||
|
||||
### Requisitos de Configuração
|
||||
|
||||
- Namespace Hierárquico: O HNS deve ser habilitado ao criar a conta de armazenamento.
|
||||
- Criptografia Suportada: Requer algoritmos criptográficos aprovados pelo Microsoft Security Development Lifecycle (SDL) (por exemplo, rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- Configuração do SFTP:
|
||||
- Habilitar SFTP na conta de armazenamento.
|
||||
- Criar identidades de usuários locais com permissões apropriadas.
|
||||
- Configurar diretórios pessoais para usuários definirem sua localização inicial dentro do contêiner.
|
||||
- Hierarchical Namespace: HNS deve estar habilitado ao criar a storage account.
|
||||
- Supported Encryption: Requer algoritmos criptográficos aprovados pelo Microsoft Security Development Lifecycle (SDL) (por exemplo, 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.
|
||||
|
||||
### Permissões
|
||||
|
||||
| Permissão | Símbolo | Descrição |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Ler** | `r` | Ler o conteúdo do arquivo. |
|
||||
| **Gravar** | `w` | Fazer upload de arquivos e criar diretórios. |
|
||||
| **Listar** | `l` | Listar conteúdos de diretórios. |
|
||||
| **Excluir** | `d` | Excluir arquivos ou diretórios. |
|
||||
| **Criar** | `c` | Criar arquivos ou diretórios. |
|
||||
| **Modificar Propriedade** | `o` | Alterar o usuário ou grupo proprietário. |
|
||||
| **Modificar Permissões** | `p` | Alterar ACLs em arquivos ou diretórios. |
|
||||
| Permissão | Símbolo | Descrição |
|
||||
| ---------------------- | ------- | ------------------------------------- |
|
||||
| **Leitura** | `r` | Ler o conteúdo do arquivo. |
|
||||
| **Escrita** | `w` | Fazer upload de arquivos e criar diretórios. |
|
||||
| **Listar** | `l` | Listar o conteúdo dos diretórios. |
|
||||
| **Excluir** | `d` | Excluir arquivos ou diretórios. |
|
||||
| **Criar** | `c` | Criar arquivos ou diretórios. |
|
||||
| **Modificar Ownership**| `o` | Alterar o usuário ou grupo proprietário. |
|
||||
| **Modificar Permissions** | `p` | Alterar ACLs em arquivos ou diretórios. |
|
||||
|
||||
## Enumeração
|
||||
## Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
<details>
|
||||
<summary>enumeração az cli</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>Enumeração do Az PowerShell</summary>
|
||||
```powershell
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount | fl
|
||||
# Get rules to access the storage account
|
||||
@@ -387,28 +415,30 @@ New-AzStorageBlobSASToken `
|
||||
-Permission racwdl `
|
||||
-ExpiryTime (Get-Date "2024-12-31T23:59:00Z")
|
||||
```
|
||||
</details>
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Compartilhamentos de Arquivos
|
||||
### Compartilhamento de Arquivos
|
||||
|
||||
{{#ref}}
|
||||
az-file-shares.md
|
||||
{{#endref}}
|
||||
|
||||
## Escalação de Privilégios
|
||||
## Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Pós Exploração
|
||||
## Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-blob-storage-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## Persistência
|
||||
## 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}}
|
||||
|
||||
Reference in New Issue
Block a user