Az - Storage Accounts & Blobs
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
As Contas de Armazenamento do Azure são serviços fundamentais na 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.
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.
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.
Permite habilitar acesso anônimo em contêineres individuais: Caso contrário, não será possível habilitar acesso anônimo no futuro.
Habilitar acesso com 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.
Opções de Armazenamento de Blobs:
Permitir replicação entre inquilinos.
Camada de acesso: Quente (dados acessados frequentemente), Frio e Frio (dados acessados raramente).
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.
Opções de proteção de dados:
Restauração ponto no tempo 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 no tempo para contêineres não podem ser habilitados simultaneamente.
Opções de configuração 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".
Armazenamento de Blobs
https://<storage-account>.blob.core.windows.net
https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list
Armazenamento de Data Lake
https://<storage-account>.dfs.core.windows.net
Azure Files
https://<storage-account>.file.core.windows.net
Armazenamento de Filas
https://<storage-account>.queue.core.windows.net
Armazenamento de Tabelas
https://<storage-account>.table.core.windows.net
Se "Permitir acesso público a Blobs" estiver habilitado (desabilitado por padrão), ao criar um contêiner é possível:
Dar acesso público para ler blobs (você precisa saber o nome).
Listar blobs do contêiner e lê-los.
Torná-lo totalmente privado.
Se você encontrar algum armazenamento ao qual pode se conectar, você pode usar a ferramenta Microsoft Azure Storage Explorer para isso.
É possível usar princípios do Entra ID com funções RBAC para acessar contas de armazenamento e é o método recomendado.
As contas de armazenamento têm chaves de acesso que podem ser usadas para acessá-las. Isso fornece acesso total à conta de armazenamento.
É possível gerar Chaves Compartilhadas assinadas com as chaves de acesso para autorizar o acesso a certos recursos via uma URL assinada.
Observe 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
.
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
.
É possível gerar uma chave compartilhada para serviços de blob, fila e arquivo assinando as seguintes informações:
É possível gerar uma chave compartilhada para serviços de tabela assinando as seguintes informações:
É possível gerar uma chave compartilhada lite para serviços de blob, fila e arquivo assinando as seguintes informações:
É possível gerar uma chave compartilhada lite para serviços de tabela assinando as seguintes informações:
Então, para usar a chave, pode ser feito no cabeçalho de Autorização seguindo a sintaxe:
As Assinaturas 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 do Azure sem expor as chaves de acesso da conta. Enquanto as chaves de acesso fornecem acesso administrativo total a todos os recursos, a SAS permite um controle granular ao especificar permissões (como leitura ou gravação) e definir um tempo de expiração.
SAS de delegação de usuário: Isso é criado a partir de um principal do Entra ID que assinará a SAS e delegará as permissões do usuário para a SAS. Pode ser usado apenas com armazenamento de blob e data lake (docs). É possível revogar todas as SAS delegadas geradas pelo usuário.
Mesmo que seja possível gerar uma 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, a 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.
Uma URL SAS assinada por uma chave de acesso 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 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 http params:
O se
param indica a data de expiração da SAS
O sp
param indica as permissões da SAS
O sig
é a assinatura validando a SAS
Ao gerar uma SAS, é necessário indicar as permissões que ela deve conceder. Dependendo do objeto sobre o qual a SAS está sendo gerada, 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
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.
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, Escrever, Deletar 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.
Namespace Hierárquico: O HNS deve ser habilitado ao criar a conta de armazenamento.
Criptografia Suportada: Requer algoritmos criptográficos aprovados pelo Ciclo de Vida de Desenvolvimento de Segurança da Microsoft (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.
Ler
r
Ler o conteúdo do arquivo.
Escrever
w
Fazer upload de arquivos e criar diretórios.
Listar
l
Listar conteúdos de diretórios.
Deletar
d
Deletar 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.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)