diff --git a/src/pentesting-cloud/azure-security/az-services/az-sql.md b/src/pentesting-cloud/azure-security/az-services/az-sql.md index 382208a2f..c2765a5c0 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -4,47 +4,47 @@ ## Azure SQL -Azure SQL é uma família de produtos gerenciados, seguros e inteligentes que usam o **SQL Server database engine na Azure cloud**. Isso significa que você não precisa se preocupar com a administração física dos seus servidores, e pode se concentrar em gerenciar seus dados. +Azure SQL é uma família de produtos gerenciados, seguros e inteligentes que usam o **mecanismo de banco de dados SQL Server na cloud do Azure**. Isso significa que você não precisa se preocupar com a administração física dos seus servidores e pode se concentrar no gerenciamento dos seus dados. Azure SQL consiste em quatro ofertas principais: -1. **Azure SQL Server**: Um server é necessário para a **implantação e gerenciamento** de databases SQL Server. -2. **Azure SQL Database**: Este é um **serviço de database totalmente gerenciado**, que permite hospedar databases individuais na Azure cloud. -3. **Azure SQL Managed Instance**: Isso é para implantações em maior escala, de escopo completo de instância do SQL Server. -4. **Azure SQL Server on Azure VMs**: Isso é melhor para arquiteturas onde você quer **controle sobre o operating system **e a instância do SQL Server. +1. **Azure SQL Server**: Um servidor é necessário para a **implantação e o gerenciamento** de bancos de dados SQL Server. +2. **Azure SQL Database**: Este é um **serviço de banco de dados totalmente gerenciado**, que permite hospedar bancos de dados individuais na cloud do Azure. +3. **Azure SQL Managed Instance**: Destinado a implantações de maior escala com escopo de instância inteira do SQL Server. +4. **Azure SQL Server on Azure VMs**: É a melhor opção para arquiteturas nas quais você deseja **controle sobre o sistema operacional **e a instância do SQL Server. -### SQL Server Security Features +### Recursos de segurança do SQL Server -**Network access:** +**Acesso à rede:** -- Public endpoint (pode limitar o acesso a redes específicas). -- Private endpoints. +- Endpoint público (pode limitar o acesso a redes específicas). +- Endpoints privados. - Também é possível restringir conexões com base em nomes de domínio. -- Também é possível permitir que serviços Azure acessem isso (como para usar o Query editor no portal ou permitir que uma Azure VM se conecte). -- Se um SQL Server tiver *Allow Azure services and resources to access this server* definido como "Enabled", o Azure criará automaticamente uma hidden firewall rule que permite que todo o network traffic originado da Azure se conecte ao SQL Server — incluindo resources de qualquer tenant. -- Isso significa que, se você obtiver credenciais válidas do SQL, pode se conectar ao victim Azure SQL Server a partir de uma Azure VM dentro do seu próprio tenant controlado pelo attacker. [A documentação da MS explica isso](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services) +- Também é possível permitir que os serviços do Azure o acessem (por exemplo, para usar o editor de consultas no portal ou permitir que uma VM do Azure se conecte). +- Se um SQL Server tiver *Allow Azure services and resources to access this server* definido como "Enabled", o Azure criará automaticamente uma regra de firewall oculta que permite que todo o tráfego de rede originado no Azure se conecte ao SQL Server — incluindo recursos de qualquer tenant. +- Isso significa que, se você obtiver credenciais SQL válidas, poderá se conectar ao Azure SQL Server da vítima a partir de uma VM do Azure dentro do seu próprio tenant controlado pelo atacante. [A documentação da MS explica isso](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services) -**Authentication Methods:** +**Métodos de autenticação:** -- Microsoft **Entra-only** authentication: Você precisa indicar os Entra principals que terão acesso ao serviço. -- **Both SQL and Microsoft Entra** authentication: Autenticação SQL tradicional com username e password junto com Microsoft Entra. -- **Only SQL** authentication: Permite acesso apenas via database users. +- Autenticação **Entra-only**: você precisa indicar os principals do Entra que terão acesso ao serviço. +- Autenticação **SQL e Microsoft Entra**: autenticação SQL tradicional com nome de usuário e senha junto com o Microsoft Entra. +- Autenticação **somente SQL**: permite acesso apenas por meio de usuários do banco de dados. -Observe que, se qualquer SQL auth for permitida, um admin user (username + password) precisa ser indicado e, se Entra ID auth for selecionada, também é necessário indicar pelo menos um principal com acesso de admin. +Observe que, se qualquer autenticação SQL for permitida, um usuário administrador (nome de usuário + senha) precisará ser indicado; e, se a autenticação Entra ID for selecionada, também será necessário indicar pelo menos um principal com acesso de administrador. -**Encryption:** +**Criptografia:** -- Isso é chamado de “Transparent data encryption” e criptografa databases, backups e logs at rest. -- Como sempre, uma Azure managed key é usada por padrão, mas uma customer managed encryption key (CMEK) também pode ser usada. +- Ela é chamada de “Transparent data encryption” e criptografa bancos de dados, backups e logs em repouso. +- Como sempre, uma chave gerenciada pelo Azure é usada por padrão, mas também pode ser usada uma chave de criptografia gerenciada pelo cliente (CMEK). **Managed Identities:** -- É possível atribuir MIs system e user managed. -- Usadas para acessar a encryption key (se uma CMEK for usada) e outros serviços a partir dos databases. -- Para alguns exemplos dos serviços Azure que podem ser acessados a partir do database, verifique [esta página da documentação](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) -- Se mais de uma UMI for atribuída, é possível indicar a default one para usar. -- É possível configurar uma federated client identity para cross-tenant access. +- É possível atribuir MIs gerenciadas pelo sistema e pelo usuário. +- Usadas para acessar a chave de criptografia (se uma CMEK for usada) e outros serviços a partir dos bancos de dados. +- Para alguns exemplos dos serviços do Azure que podem ser acessados a partir do banco de dados, consulte [esta página da documentação](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) +- Se mais de uma UMI for atribuída, é possível indicar a padrão a ser usada. +- É possível configurar uma identidade de cliente federada para acesso entre tenants. -Alguns comandos para acessar informações dentro de um blob storage a partir de um database SQL: +Alguns comandos para acessar informações dentro de um blob storage a partir de um banco de dados SQL: ```sql -- Create a credential for the managed identity CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential] @@ -71,58 +71,58 @@ GO ``` **Microsoft Defender:** -- Útil para “mitigar vulnerabilidades potenciais de bancos de dados e detectar atividades anômalas” -- Falaremos sobre Defender na sua própria lição (ele pode ser habilitado em vários outros serviços Azure) +- Útil para “mitigar posibles vulnerabilidades de bases de datos y detectar actividades anómalas” +- Hablaremos sobre Defender en su propia lección (puede habilitarse en varios otros servicios de Azure) **Backups:** -- A frequência do backup é gerenciada nas políticas de retenção. +- La frecuencia de los backups se gestiona en las políticas de retención. **Deleted databases:** -- É possível restaurar DBs que foram apagados a partir de backups existentes. +- Es posible restaurar DBs que se hayan eliminado a partir de backups existentes. ## Azure SQL Database -**Azure SQL Database** é uma **plataforma de banco de dados como serviço (PaaS) totalmente gerenciada** que fornece soluções de banco de dados relacional escaláveis e seguras. Ela é construída sobre as tecnologias mais recentes do SQL Server e elimina a necessidade de gerenciamento de infraestrutura, tornando-se uma escolha popular para aplicações baseadas em cloud. +**Azure SQL Database** es una **plataforma de base de datos totalmente gestionada como servicio (PaaS)** que proporciona soluciones de bases de datos relacionales escalables y seguras. Está basada en las tecnologías más recientes de SQL Server y elimina la necesidad de gestionar la infraestructura, lo que la convierte en una opción popular para aplicaciones basadas en cloud. -Para criar um SQL database é necessário indicar o SQL server onde ele será hospedado. +Para crear una base de datos SQL, es necesario indicar el servidor SQL donde estará alojada. ### SQL Database Security Features -- **Always Up-to-Date**: Executa na versão estável mais recente do SQL Server e recebe novos recursos e patches automaticamente. +- **Always Up-to-Date**: Se ejecuta en la versión estable más reciente de SQL Server y recibe automáticamente nuevas funcionalidades y parches. - **Inherited SQL Server security features:** -- Authentication (SQL and/or Entra ID) -- Assigned Managed Identities -- Network restrictions -- Encryption +- Autenticación (SQL y/o Entra ID) +- Managed Identities asignadas +- Restricciones de red +- Cifrado - Backups - … -- **Data redundancy:** As opções são local, zone, Geo ou Geo-Zone redundant. -- **Ledger:** Verifica criptograficamente a integridade dos dados, garantindo que qualquer alteração maliciosa seja detectada. Útil para áreas financeiras, médicas e qualquer organização que gerencie dados sensíveis. +- **Redundancia de datos:** Las opciones son redundancia local, de zona, Geo o Geo-Zone. +- **Ledger:** Verifica criptográficamente la integridad de los datos, garantizando que cualquier manipulación sea detectada. Es útil para organizaciones financieras, médicas y cualquier organización que gestione datos sensibles. -Um SQL database pode fazer parte de um **elastic Pool**. Elastic pools são uma solução econômica para gerenciar múltiplos bancos de dados compartilhando recursos configuráveis de compute (eDTUs) e storage entre eles, com preços baseados apenas nos recursos alocados e não no número de bancos de dados. +Una base de datos SQL puede formar parte de un **elastic Pool**. Los elastic pools son una solución rentable para gestionar varias bases de datos mediante el uso compartido de recursos de computación (eDTUs) y almacenamiento configurables, con precios basados únicamente en los recursos asignados y no en el número de bases de datos. #### Azure SQL Column Level Security (Masking) & Row Level Security -**Azure SQL's dynamic** data masking é um recurso que ajuda a **proteger informações sensíveis ao escondê-las** de usuários não autorizados. Em vez de alterar os dados reais, ele mascara dinamicamente os dados exibidos, garantindo que detalhes sensíveis como números de cartão de crédito fiquem ocultos. +El **dynamic** data masking de **Azure SQL** es una funcionalidad que ayuda a **proteger la información sensible ocultándola** a usuarios no autorizados. En lugar de modificar los datos reales, enmascara dinámicamente los datos mostrados, garantizando que detalles sensibles como los números de tarjetas de crédito queden ocultos. -O **Dynamic Data Masking** afeta todos os usuários, exceto aqueles que estão unmasked (esses usuários precisam ser indicados) e os administradores. Ele possui a opção de configuração que especifica quais usuários SQL estão isentos do dynamic data masking, com **administrators sempre excluídos**. +El **Dynamic Data Masking** afecta a todos los usuarios excepto a aquellos que están sin enmascarar (estos usuarios deben indicarse) y a los administradores. Incluye una opción de configuración que especifica qué usuarios SQL están exentos del dynamic data masking, y los **administradores siempre están excluidos**. -**Azure SQL Row Level Security (RLS)** é um recurso que **controla quais linhas um usuário pode ver ou modificar**, garantindo que cada usuário veja apenas os dados relevantes para ele. Ao criar security policies com filter ou block predicates, as organizações podem impor acesso com granularidade fina no nível do banco de dados. +**Azure SQL Row Level Security (RLS)** es una funcionalidad que **controla qué filas puede ver o modificar un usuario**, garantizando que cada usuario solo vea los datos relevantes para él. Mediante la creación de políticas de seguridad con predicados de filtro o bloqueo, las organizaciones pueden aplicar un control de acceso granular a nivel de base de datos. ### Azure SQL Managed Instance -**Azure SQL Managed Instances** são para deployments de maior escala, em todo o escopo de uma SQL Server instance. Ele oferece compatibilidade próxima de 100% com o mecanismo de banco de dados do SQL Server on-premises mais recente (Enterprise Edition), fornecendo uma implementação nativa de virtual network (VNet) que resolve preocupações comuns de segurança, além de um modelo de negócio favorável para clientes de SQL Server on-premises. +**Azure SQL Managed Instances** están destinadas a implementaciones de mayor escala con el ámbito de una instancia SQL Server completa. Proporcionan una compatibilidad cercana al 100 % con el motor de base de datos de la última versión de SQL Server local (Enterprise Edition), incluyen una implementación nativa en una red virtual (VNet) que aborda problemas de seguridad comunes y ofrecen un modelo de negocio favorable para los clientes de SQL Server local. ### Azure SQL Virtual Machines -**Azure SQL Virtual Machines** permite **controlar o operating system** e a SQL Server instance, já que uma VM será criada no serviço de VM executando o SQL server. +**Azure SQL Virtual Machines** permite **controlar el sistema operativo** y la instancia de SQL Server, ya que se generará una VM en el servicio de VM que ejecutará el servidor SQL. -Quando uma SQL Virtual Machine é criada, é possível **selecionar todas as configurações da VM** (como mostrado na lição de VM) que hospedará o SQL server. -- Isso significa que a VM estará acessando uma ou mais VNet(s), pode ter **Managed Identities attached** a ela, pode ter file shares montados… tornando um **pivoting a partir do SQL** para a VM super interessante. -- Além disso, é possível configurar um app id e secret para **permitir que o SQL acesse um key vault específico**, que pode conter informações sensíveis. +Cuando se crea una SQL Virtual Machine, es posible **seleccionar toda la configuración de la VM** (como se muestra en la lección sobre VM) que alojará el servidor SQL. +- Esto significa que la VM accederá a alguna(s) VNet(s), podría tener **Managed Identities asociadas**, podría tener recursos compartidos de archivos montados… lo que hace que un **pivoting desde SQL** hacia la VM sea especialmente interesante. +- Además, es posible configurar un app id y un secret para **permitir que SQL acceda a un key vault específico**, que podría contener información sensible. -Também é possível configurar coisas como **automatic SQL updates**, **automatic backups**, **Entra ID authentication** e a maioria dos recursos dos outros serviços SQL. +También es posible configurar aspectos como **automatic SQL updates**, **automatic backups**, **autenticación de Entra ID** y la mayoría de las funcionalidades de los demás servicios SQL. ## Enumeration @@ -261,7 +261,7 @@ Get-AzSqlVM {{#endtab}} {{#endtabs}} -Além disso, se você quiser enumerar o Dynamic Data Masking e as políticas Row Level dentro do database, você pode consultar: +Além disso, se quiser enumerar o Dynamic Data Masking e as políticas de Row Level dentro do banco de dados, você pode consultar: ```sql --Enumerates the masked columns SELECT @@ -288,7 +288,7 @@ ON sp.object_id = sp2.object_id; ``` ### Conectar e executar consultas SQL -Você poderia encontrar uma connection string (contendo credenciais) a partir de um exemplo [enumerating an Az WebApp](az-app-services.md): +Você pode encontrar uma string de conexão (contendo credenciais) ao, por exemplo, [enumerar um Az WebApp](az-app-services.md): ```bash function invoke-sql{ param($query) @@ -307,18 +307,18 @@ $Connection.Close() invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` -Você também pode usar sqlcmd para acessar a base de dados. É importante saber se o servidor permite conexões públicas `az sql server show --name --resource-group `, e também se a regra de firewall permite que nosso IP acesse: +Você também pode usar o sqlcmd para acessar o banco de dados. É importante saber se o servidor permite conexões públicas `az sql server show --name --resource-group ` e também se a regra de firewall permite que nosso IP acesse: ```bash sqlcmd -S .database.windows.net -U -P -d ``` -## References +## Referências - [https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql) -## Escalação de Privilégio +## Escalação de Privilégios {{#ref}} ../az-privilege-escalation/az-sql-privesc.md 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 69c030a6c..ae9337051 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -1,82 +1,82 @@ -# Az - Storage Accounts & Blobs +# Az - Contas de Storage e Blobs {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Informações básicas -Azure Storage Accounts são serviços fundamentais no Microsoft Azure que fornecem cloud **storage para vários tipos de dados** escalável, seguro e altamente disponível, incluindo blobs (binary large objects), files, queues e tables. Eles servem como containers que agrupam esses diferentes serviços de storage sob um único namespace para facilitar o gerenciamento. +As Azure Storage Accounts são serviços fundamentais do Microsoft Azure que fornecem **storage escalável, seguro e altamente disponível para vários tipos de dados**, incluindo blobs (binary large objects), files, queues e tables. Elas funcionam como containers que agrupam esses diferentes serviços de storage em um único namespace para facilitar o gerenciamento. -**Main configuration options**: +**Principais opções de configuração**: -- Every storage account must have a **uniq name across all Azure**. -- Every storage account is deployed in a **region** or in an Azure extended zone -- It's possible to select the **premium** version of the storage account for better performance -- It's possible to select among **4 types of redundancy to protect** against rack, drive and datacenter **failures**. +- Toda storage account deve ter um **nome único em todo o Azure**. +- Toda storage account é implantada em uma **região** ou em uma extended zone do Azure +- É possível selecionar a versão **premium** da storage account para obter melhor desempenho +- É possível selecionar entre **4 tipos de redundância para proteção** contra **falhas** de rack, drive e datacenter. -**Security configuration options**: +**Opções de configuração de segurança**: -- **Require secure transfer for REST API operations**: Require TLS in any communication with the storage -- **Allows enabling anonymous access on individual containers**: If not, it won't be possible to enable anonymous access in the future -- **Enable storage account key access**: If not, access with Shared Keys will be forbidden +- **Require secure transfer for REST API operations**: Exige TLS em qualquer comunicação com o storage +- **Allows enabling anonymous access on individual containers**: Caso contrário, não será possível habilitar acesso anônimo no futuro +- **Enable storage account key access**: Caso contrário, o acesso com Shared Keys será proibido - **Minimum TLS version** -- **Permitted scope for copy operations**: Allow from any storage account, from any storage account from the same Entra tenant or from storage account with private endpoints in the same virtual network. +- **Permitted scope for copy operations**: Permite operações a partir de qualquer storage account, de qualquer storage account do mesmo Entra tenant ou de uma storage account com private endpoints na mesma virtual network. -**Blob Storage options**: +**Opções de Blob Storage**: - **Allow cross-tenant replication** -- **Access tier**: Hot (frequently access data), Cool and Cold (rarely accessed data) +- **Access tier**: Hot (dados acessados frequentemente), Cool e Cold (dados acessados raramente) -**Networking options**: +**Opções de rede**: - **Network access**: -- Allow from all networks -- Allow from selected virtual networks and IP addresses -- Disable public access and use private access -- **Private endpoints**: It allows a private connection to the storage account from a virtual network +- Permitir acesso de todas as redes +- Permitir acesso de virtual networks e endereços IP selecionados +- Desabilitar o acesso público e usar acesso privado +- **Private endpoints**: Permite uma conexão privada à storage account a partir de uma virtual network -**Data protection options**: +**Opções de proteção de dados**: -- **Point-in-time restore for containers**: Allows to restore containers to an earlier state -- It requires versioning, change feed, and blob soft delete to be enabled. -- **Enable soft delete for blobs**: It enables a retention period in days for deleted blobs (even overwritten) -- **Enable soft delete for containers**: It enables a retention period in days for deleted containers -- **Enable soft delete for file shares**: It enables a retention period in days for deleted file shared -- **Enable versioning for blobs**: Maintain previous versions of your blobs -- **Enable blob change feed**: Keep logs of create, modification, and delete changes to blobs -- **Enable version-level immutability support**: Allows you to set time-based retention policy on the account-level that will apply to all blob versions. -- Version-level immutability support and point-in-time restore for containers cannot be enabled simultaneously. +- **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 excluídos (inclusive sobrescritos) +- **Enable soft delete for containers**: Habilita um período de retenção em dias para containers excluídos +- **Enable soft delete for file shares**: Habilita um período de retenção em dias para file shares excluídos +- **Enable versioning for blobs**: Mantém versões anteriores dos seus blobs +- **Enable blob change feed**: Mantém logs das alterações de criação, modificação e exclusão dos blobs +- **Enable version-level immutability support**: Permite definir uma política de retenção baseada em tempo no nível da account, que será aplicada a todas as versões de blobs. +- O version-level immutability support e o point-in-time restore for containers não podem ser habilitados simultaneamente. -**Encryption configuration options**: +**Opções de configuração de criptografia**: -- **Encryption type**: It's possible to use Microsoft-managed keys (MMK) or Customer-managed keys (CMK) -- **Enable infrastructure encryption**: Allows to double encrypt the data "for more security" +- **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 obter mais segurança" -### Storage endpoints +### Endpoints de storage -| Storage Service | Endpoint | +| Serviço de storage | Endpoint | | --- | --- | | **Blob storage** | `https://.blob.core.windows.net` | -| **Blob storage container listing** | `https://.blob.core.windows.net/?restype=container&comp=list` | +| **Listagem de containers de Blob storage** | `https://.blob.core.windows.net/?restype=container&comp=list` | | **Data Lake Storage** | `https://.dfs.core.windows.net` | | **Azure Files** | `https://.file.core.windows.net` | | **Queue storage** | `https://.queue.core.windows.net` | | **Table storage** | `https://.table.core.windows.net` | -### Public Exposure +### Exposição pública -Se "Allow Blob public access" estiver **enabled** (disabled by default), ao criar um container é possível: +Se "Allow Blob public access" estiver **habilitado** (desabilitado por padrão), ao criar um container será possível: -- Dar **public access to read blobs** (você precisa saber o nome). -- **List container blobs** e **read** them. -- Torná-lo totalmente **private** +- Conceder **acesso público para ler blobs** (é necessário conhecer o nome). +- **Listar os blobs do container** e **lê-los**. +- Torná-lo totalmente **privado**
-### Static website (`$web`) exposure & leaked secrets +### Exposição de static website (`$web`) e segredos expostos -- **Static websites** are served from the special `$web` container over a region-specific endpoint such as `https://.z13.web.core.windows.net/`. -- The `$web` container may report `publicAccess: null` via the blob API, but files are still reachable through the static site endpoint, so dropping config/IaC artifacts there can leak secrets. -- Quick audit workflow: +- **Static websites** são servidos a partir do container especial `$web` por meio de um endpoint específico da região, como `https://.z13.web.core.windows.net/`. +- O container `$web` pode informar `publicAccess: null` por meio da blob API, mas os arquivos ainda podem ser acessados pelo endpoint do static site; portanto, colocar artefatos de configuração/IaC nesse local pode causar o leak de secrets. +- Fluxo rápido de auditoria: ```bash # Identify storage accounts with static website hosting enabled az storage blob service-properties show --account-name --auth-mode login @@ -87,53 +87,53 @@ 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 ``` -### Auditing anonymous blob exposure +### Auditando a exposição anônima de blobs -- **Localize storage accounts** that can expose data: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` for `false`, you cannot turn containers public. -- **Inspect risky accounts** to confirm the flag and other weak settings: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. -- **Enumerate container-level exposure** where the flag is enabled: +- **Localize contas de armazenamento** que podem expor dados: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Se `allowBlobPublicAccess` for `false`, você não poderá tornar os containers públicos. +- **Inspecione contas de risco** para confirmar a configuração e outras definições fracas: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. +- **Enumere a exposição no nível dos containers** onde a configuração estiver habilitada: ```bash az storage container list --account-name \ --query '[].{name:name, access:properties.publicAccess}' ``` - `"Blob"`: leituras anônimas permitidas **somente quando o nome do blob é conhecido** (sem listagem). -- `"Container"`: **list + read** anônimos de cada blob. -- `null`: privado; autenticação é necessária. -- **Comprove acesso** sem credenciais: +- `"Container"`: **listagem + leitura anônimas** de todos os blobs. +- `null`: privado; autenticação necessária. +- **Comprove o acesso** sem credenciais: - Se `publicAccess` for `Container`, a listagem anônima funciona: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. -- Para ambos `Blob` e `Container`, o download anônimo do blob funciona quando o nome é conhecido: +- Tanto para `Blob` quanto para `Container`, o download anônimo do blob funciona quando o nome é conhecido: ```bash az storage blob download -c -n --account-name --file /dev/stdout # or via raw HTTP curl "https://.blob.core.windows.net//" ``` -### Connect to Storage +### Conectar ao Storage -Se você encontrar qualquer **storage** 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 fazer isso. +Se você encontrar algum **storage** ao qual possa se conectar, poderá usar a ferramenta [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) para isso. -## Access to Storage +## Acesso ao Storage ### RBAC -É possível usar principals do Entra ID com **RBAC roles** para acessar storage accounts, e essa é a forma recomendada. +É possível usar principals do Entra ID com **funções RBAC** para acessar contas de storage, e essa é a forma recomendada. -### Access Keys +### Chaves de acesso -As storage accounts têm access keys que podem ser usadas para acessá-las. Isso fornece acesso **total à storage account.** +As contas de storage possuem chaves de acesso que podem ser usadas para acessá-las. Isso fornece **acesso total à conta de storage.**
-### **Shared Keys & Lite Shared Keys** +### **Shared Keys e Lite Shared Keys** -É 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 acesso a certos recursos via uma signed URL. +É possível [**gerar Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) assinadas com as chaves de acesso para autorizar o acesso a determinados recursos por meio de uma URL assinada. > [!NOTE] -> Note que a parte `CanonicalizedResource` representa o resource (URI) dos storage services. E se qualquer parte da URL estiver encoded, ela também deve estar encoded dentro de `CanonicalizedResource`. +> Observe que a parte `CanonicalizedResource` representa o recurso dos serviços de storage (URI). E, se alguma parte da URL estiver codificada, ela também deverá ser codificada dentro de `CanonicalizedResource`. > [!NOTE] -> Isso é **used by default by `az` cli** para autenticar requests. Para fazer com que ele use as credentials do principal do Entra ID, indique o param `--auth-mode login`. +> Isso é **usado por padrão pelo `az` cli** para autenticar requisições. Para fazê-lo usar as credenciais do principal do Entra ID, indique o parâmetro `--auth-mode login`. -- É possível gerar uma **shared key para os serviços blob, queue e file** assinando as seguintes informações: +- É possível gerar uma **shared key para os serviços de blob, queue e file**, assinando as seguintes informações: ```bash StringToSign = VERB + "\n" + Content-Encoding + "\n" + @@ -150,7 +150,7 @@ Range + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- É possível gerar uma **shared key para table services** assinando as seguintes informações: +- É possível gerar uma **chave compartilhada para serviços de tabela** assinando as seguintes informações: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -158,7 +158,7 @@ Content-Type + "\n" + Date + "\n" + CanonicalizedResource; ``` -- É possível gerar uma **lite shared key for blob, queue and file services** assinando as seguintes informações: +- É possível gerar uma **lite shared key para os serviços blob, queue e file** assinando as seguintes informações: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -167,12 +167,12 @@ Date + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- É possível gerar uma **lite shared key para table services** assinando a seguinte informação: +- É possível gerar uma **chave compartilhada lite para serviços de tabela** assinando as seguintes informações: ```bash StringToSign = Date + "\n" CanonicalizedResource ``` -Então, para usar a key, isso pode ser feito no header 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] :" #e.g. @@ -186,76 +186,76 @@ Content-Length: 0 ``` ### **Shared Access Signature** (SAS) -Shared Access Signatures (SAS) são URLs seguras e limitadas por tempo que **concedem permissões específicas para acessar resources** em uma Azure Storage account sem expor as access keys da conta. Enquanto as access keys fornecem acesso administrativo total a todos os resources, SAS permite controle granular ao especificar permissões (como read ou write) e definir um tempo de expiração. +Shared Access Signatures (SAS) são URLs seguras e limitadas por tempo que **concedem permissões específicas para acessar recursos** em uma conta do Azure Storage sem expor as chaves de acesso da conta. Enquanto as chaves de acesso fornecem acesso administrativo completo a todos os recursos, o SAS permite um controle granular ao especificar permissões (como leitura ou escrita) e definir um tempo de expiração. -#### SAS Types +#### Tipos de SAS -- **User delegation SAS**: Isso é criado a partir de um **Entra ID principal** que assinará o SAS e delegará as permissões do user 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 permissões "maiores" do que as que o user tem. No entanto, se o principal não as tiver, isso não funcionará (no privesc). -- **Service SAS**: É assinado usando uma das **access keys** da storage account. Pode ser usado para conceder acesso a resources específicos em um único storage service. 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 resources entre os serviços da storage account (Blob, Queue, Table, File) e pode incluir operações em nível de service. +- **User delegation SAS**: É criado a partir de um **principal do Entra ID**, que assinará o SAS e delegará as permissões do usuário ao SAS. Ele só pode ser usado com **blob e 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, se o principal não tiver essas permissões, ele não funcionará (sem privesc). +- **Service SAS**: É assinado usando uma das **chaves de acesso** da conta de storage. Pode ser usado para conceder acesso a recursos específicos em um único serviço de storage. Se a chave for renovada, o SAS deixará de funcionar. +- **Account SAS**: Também é assinado com uma das **chaves de acesso** da conta de storage. Ele concede acesso a recursos em vários serviços de uma conta de storage (Blob, Queue, Table, File) e pode incluir operações no nível do serviço. -Uma SAS URL assinada por uma **access key** se parece com isto: +Uma URL SAS assinada por uma **chave de acesso** é semelhante a esta: - `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` -Uma SAS URL assinada como **user delegation** se parece com isto: +Uma URL SAS assinada como **user delegation** é semelhante a esta: - `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` -Note alguns **http params**: +Observe alguns **http params**: -- O param **`se`** indica a **data de expiração** do SAS -- O param **`sp`** indica as **permissões** do SAS -- O **`sig`** é a **signature** que valida o SAS +- O parâmetro **`se`** indica a **data de expiração** do SAS +- O parâmetro **`sp`** indica as **permissões** do SAS +- O **`sig`** é a **assinatura** que valida o SAS -#### SAS permissions +#### 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: -- (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 +- (a)dicionar, (c)riar, (d)eletar, (e)xecutar, (f)ilter_by_tags, (i)set_immutability_policy, (l)istar, (m)over, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete -## SFTP Support for Azure Blob Storage +## Suporte a SFTP para Azure Blob Storage -Azure Blob Storage agora suporta o SSH File Transfer Protocol (SFTP), permitindo transferência segura de arquivos e gerenciamento diretamente para Blob Storage sem exigir soluções personalizadas ou produtos de terceiros. +O Azure Blob Storage agora oferece suporte ao SSH File Transfer Protocol (SFTP), permitindo a transferência e o gerenciamento seguros de arquivos diretamente no Blob Storage sem exigir soluções personalizadas ou produtos de terceiros. -### Key Features +### Principais recursos -- Protocol Support: SFTP funciona com Blob Storage accounts configuradas com hierarchical namespace (HNS). Isso organiza blobs em directories e subdirectories para facilitar a navegação. -- Security: SFTP pode usar local user identities, mas também suporta acesso baseado em Microsoft Entra ID com Azure RBAC para autorização. Isso significa que o acesso pode ser concedido com os roles de Blob Storage data-plane usuais, em vez de criar local SFTP users. Local users podem 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 local users para até 100 containers. -- Networking Considerations: Conexões SFTP são feitas pela porta 22. Azure suporta configurações de network como firewalls, private endpoints ou virtual networks para proteger o tráfego SFTP. +- Suporte a protocolos: O SFTP funciona com contas do Blob Storage configuradas com hierarchical namespace (HNS). Isso organiza os blobs em diretórios e subdiretórios para facilitar a navegação. +- Segurança: O SFTP pode usar identidades de usuários locais, mas também oferece suporte ao acesso baseado no Microsoft Entra ID com Azure RBAC para autorização. Isso significa que o acesso pode ser concedido com as funções usuais do data-plane do Blob Storage, em vez de criar usuários SFTP locais. Usuários locais podem se autenticar por meio de: +- Senhas geradas pelo Azure +- Pares de chaves SSH públicas e privadas +- Permissões granulares: Permissões como Read, Write, Delete e List podem ser atribuídas a usuários locais para até 100 containers. +- Considerações de rede: As conexões SFTP são feitas pela porta 22. O Azure oferece suporte a configurações de rede como firewalls, private endpoints ou redes virtuais para proteger o tráfego SFTP. -### Setup Requirements +### Requisitos de configuração -- 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: -- Habilite SFTP na storage account. -- Para acesso de local-user, crie local user identities com as permissões apropriadas. -- Para local users, configure home directories para definir sua localização inicial dentro do container. +- Hierarchical Namespace: O HNS deve estar habilitado ao criar a conta de storage. +- Criptografia compatível: Requer algoritmos criptográficos aprovados pelo Microsoft Security Development Lifecycle (SDL) (por exemplo, rsa-sha2-256, ecdsa-sha2-nistp256). +- Configuração do SFTP: +- Habilite o SFTP na conta de storage. +- Para acesso de usuários locais, crie identidades de usuários locais com as permissões apropriadas. +- Para usuários locais, configure os diretórios home para definir sua localização inicial dentro do container. -### Permissions +### Permissões -| Permission | Symbol | Description | +| Permissão | Símbolo | Descrição | | ---------------------- | ------ | ------------------------------------ | -| **Read** | `r` | Read file content. | -| **Write** | `w` | Upload files and create directories. | -| **List** | `l` | List contents of directories. | -| **Delete** | `d` | Delete files or directories. | -| **Create** | `c` | Create files or directories. | -| **Modify Ownership** | `o` | Change the owning user or group. | -| **Modify Permissions** | `p` | Change ACLs on files or directories. | +| **Read** | `r` | Ler o conteúdo dos arquivos. | +| **Write** | `w` | Fazer upload de arquivos e criar diretórios. | +| **List** | `l` | Listar o conteúdo dos diretórios. | +| **Delete** | `d` | Deletar arquivos ou diretórios. | +| **Create** | `c` | Criar arquivos ou diretórios. | +| **Modify Ownership** | `o` | Alterar o usuário ou grupo proprietário. | +| **Modify Permissions** | `p` | Alterar ACLs em arquivos ou diretórios. | -## Enumeration +## Enumeração {{#tabs }} {{#tab name="az cli" }}
-az cli enumeration +enumeração do az cli ```bash # Get storage accounts az storage account list #Get the account name from here @@ -448,13 +448,13 @@ New-AzStorageBlobSASToken ` az-file-shares.md {{#endref}} -## Escalação de Privilégio +## Escalonamento de Privilégios {{#ref}} ../az-privilege-escalation/az-storage-privesc.md {{#endref}} -## Pós-Exploitation +## Pós-Exploração {{#ref}} ../az-post-exploitation/az-blob-storage-post-exploitation.md