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 ad1e51889..382208a2f 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -4,45 +4,47 @@ ## Azure SQL -Azure SQL é uma família de produtos gerenciados, seguros e inteligentes que utilizam o **motor de banco de dados SQL Server na nuvem Azure**. Isso significa que você não precisa se preocupar com a administração física de seus servidores, e pode se concentrar em gerenciar seus dados. +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 consiste em quatro ofertas principais: -1. **Azure SQL Server**: Um servidor é necessário para a **implantação e 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 nuvem Azure. -3. **Azure SQL Managed Instance**: Este é para implantações em maior escala, abrangendo toda a instância do SQL Server. -4. **Azure SQL Server em VMs Azure**: Este é o melhor para arquiteturas onde você deseja **controle sobre o sistema operacional** e a instância do SQL Server. +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. -### Recursos de Segurança do SQL Server +### SQL Server Security Features -**Acesso à rede:** +**Network access:** -- Endpoint público (pode limitar o acesso a redes específicas). -- Endpoints privados. +- Public endpoint (pode limitar o acesso a redes específicas). +- Private endpoints. - Também é possível restringir conexões com base em nomes de domínio. -- Também é possível permitir que serviços Azure acessem (como usar o editor de consultas no portal ou permitir que uma VM Azure se conecte). +- 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) -**Métodos de Autenticação:** +**Authentication Methods:** -- Autenticação **somente Entra da Microsoft**: Você precisa indicar os princípios Entra que terão acesso ao serviço. -- Autenticação **tanto SQL quanto Microsoft Entra**: Autenticação SQL tradicional com nome de usuário e senha juntamente com Microsoft Entra. -- Autenticação **somente SQL**: Permitir acesso apenas via usuários de banco de dados. +- 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. -Observe que, se qualquer autenticação SQL for permitida, um usuário administrador (nome de usuário + senha) precisa ser indicado e, se a autenticação Entra ID for selecionada, também é necessário indicar pelo menos um princípio com acesso de administrador. +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. -**Criptografia:** +**Encryption:** -- É chamada de “Criptografia de dados transparente” e criptografa bancos de dados, backups e logs em repouso. -- Como sempre, uma chave gerenciada pela Azure é usada por padrão, mas uma chave de criptografia gerenciada pelo cliente (CMEK) também pode ser utilizada. -**Identidades Gerenciadas:** +- 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. +**Managed Identities:** -- É possível atribuir identidades gerenciadas de sistema e de usuário. -- Usadas para acessar a chave de criptografia (se uma CMEK for usada) e outros serviços dos bancos de dados. -- Para alguns exemplos dos serviços 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 locatários. +- É 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. -Alguns comandos para acessar informações dentro de um blob storage a partir de um banco de dados SQL: +Alguns comandos para acessar informações dentro de um blob storage a partir de um database SQL: ```sql -- Create a credential for the managed identity CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential] @@ -69,59 +71,60 @@ GO ``` **Microsoft Defender:** -- Útil para “mitigar potenciais vulnerabilidades de banco de dados e detectar atividades anômalas” -- Vamos falar sobre o Defender em sua própria lição (ele pode ser habilitado em vários outros serviços do Azure) +- Ú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) **Backups:** -- A frequência de backup é gerenciada nas políticas de retenção. +- A frequência do backup é gerenciada nas políticas de retenção. -**Bancos de dados excluídos:** -- É possível restaurar DBs que foram excluídos de backups existentes. +**Deleted databases:** +- É possível restaurar DBs que foram apagados a partir de backups existentes. ## Azure SQL Database -**Azure SQL Database** é uma **plataforma de banco de dados totalmente gerenciada como serviço (PaaS)** que fornece soluções de banco de dados relacionais escaláveis e seguras. É construído nas mais recentes tecnologias do SQL Server e elimina a necessidade de gerenciamento de infraestrutura, tornando-se uma escolha popular para aplicações baseadas em nuvem. +**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. -Para criar um banco de dados SQL, é necessário indicar o servidor SQL onde ele será hospedado. +Para criar um SQL database é necessário indicar o SQL server onde ele será hospedado. -### Recursos de Segurança do Banco de Dados SQL +### SQL Database Security Features -- **Sempre Atualizado**: Executa na versão estável mais recente do SQL Server e recebe novos recursos e patches automaticamente. -- **Recursos de segurança herdados do SQL Server:** -- Autenticação (SQL e/ou Entra ID) -- Identidades Gerenciadas Atribuídas -- Restrições de rede -- Criptografia +- **Always Up-to-Date**: Executa na versão estável mais recente do SQL Server e recebe novos recursos e patches automaticamente. +- **Inherited SQL Server security features:** +- Authentication (SQL and/or Entra ID) +- Assigned Managed Identities +- Network restrictions +- Encryption - Backups - … -- **Redundância de dados:** As opções são local, zona, Geo ou redundante Geo-Zona. -- **Ledger:** Verifica criptograficamente a integridade dos dados, garantindo que qualquer adulteração seja detectada. Útil para organizações financeiras, médicas e qualquer organização que gerencie dados sensíveis. +- **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. -Um banco de dados SQL pode fazer parte de um **elastic Pool**. Elastic pools são uma solução econômica para gerenciar vários bancos de dados compartilhando recursos de computação (eDTUs) e armazenamento configuráveis entre eles, com preços baseados exclusivamente nos recursos alocados, em vez do número de bancos de dados. -#### Segurança em Nível de Coluna (Mascaramento) e Segurança em Nível de Linha do Azure SQL +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. -O **mascaramento de dados dinâmico** do Azure SQL é um recurso que ajuda a **proteger informações sensíveis ocultando-as** 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, sejam obscurecidos. +#### Azure SQL Column Level Security (Masking) & Row Level Security -O **Mascaramento de Dados Dinâmico** afeta todos os usuários, exceto aqueles que estão desmascarados (esses usuários precisam ser indicados) e administradores. Ele possui a opção de configuração que especifica quais usuários SQL estão isentos do mascaramento dinâmico de dados, com **administradores sempre excluídos**. +**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. -A **Segurança em Nível de Linha do Azure SQL (RLS)** é um recurso que **controla quais linhas um usuário pode visualizar ou modificar**, garantindo que cada usuário veja apenas os dados relevantes para ele. Ao criar políticas de segurança com predicados de filtro ou bloqueio, as organizações podem impor acesso granular no nível do banco de dados. +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**. + +**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 Managed Instance -As **Instâncias Gerenciadas do Azure SQL** são para implantações em maior escala, abrangendo toda a instância do SQL Server. Elas oferecem quase 100% de compatibilidade com o mecanismo de banco de dados SQL Server on-premises mais recente (Edição Enterprise), que fornece uma implementação nativa de rede virtual (VNet) que aborda preocupações comuns de segurança, e um modelo de negócios favorável para clientes do SQL Server on-premises. +**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 Virtual Machines -As **Máquinas Virtuais do Azure SQL** permitem **controlar o sistema operacional** e a instância do SQL Server, já que uma VM será criada no serviço de VM executando o servidor SQL. +**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. -Quando uma Máquina Virtual SQL é criada, é possível **selecionar todas as configurações da VM** (como mostrado na lição da VM) que hospedará o servidor SQL. -- Isso significa que a VM estará acessando algumas VNet(s), pode ter **Identidades Gerenciadas anexadas** a ela, pode ter compartilhamentos de arquivos montados… tornando um **pivoting do SQL** para a VM super interessante. -- Além disso, é possível configurar um ID de aplicativo e segredo para **permitir que o SQL acesse um cofre de chaves específico**, que pode conter informações sensíveis. +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. -Também é possível configurar coisas como **atualizações automáticas do SQL**, **backups automáticos**, **autenticação do Entra ID** e a maioria dos recursos dos outros serviços SQL. +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. -## Enumeração +## Enumeration {{#tabs}} {{#tab name="az cli"}} @@ -258,7 +261,7 @@ Get-AzSqlVM {{#endtab}} {{#endtabs}} -Além disso, se você quiser enumerar a Máscara de Dados Dinâmica e as políticas de Nível de Linha, dentro do banco de dados, você pode consultar: +Além disso, se você quiser enumerar o Dynamic Data Masking e as políticas Row Level dentro do database, você pode consultar: ```sql --Enumerates the masked columns SELECT @@ -285,7 +288,7 @@ ON sp.object_id = sp2.object_id; ``` ### Conectar e executar consultas SQL -Você pode encontrar uma string de conexão (contendo credenciais) do exemplo [enumerando um Az WebApp](az-app-services.md): +Você poderia encontrar uma connection string (contendo credenciais) a partir de um exemplo [enumerating an Az WebApp](az-app-services.md): ```bash function invoke-sql{ param($query) @@ -304,24 +307,24 @@ $Connection.Close() invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` -Você também pode usar 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 do firewall permite que nosso IP acesse: +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: ```bash sqlcmd -S .database.windows.net -U -P -d ``` -## Referências +## References - [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égios +## Escalação de Privilégio {{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}} -## Pós Exploração +## Pós-Exploração {{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md