# Az - SQL {{#include ../../../banners/hacktricks-training.md}} ## 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 consiste em quatro ofertas principais: 1. **Azure SQL Server**: Azure SQL Server é um serviço de banco de dados relacional gerenciado que simplifica a implantação e o gerenciamento de bancos de dados SQL Server, com recursos de segurança e desempenho integrados. 2. **Azure SQL Database**: Este é um **serviço de banco de dados totalmente gerenciado**, que permite hospedar bancos de dados individuais na nuvem Azure. Oferece inteligência integrada que aprende seus padrões únicos de banco de dados e fornece recomendações personalizadas e ajuste automático. 3. **Azure SQL Managed Instance**: Este é para implantações em maior escala, com toda a instância do SQL Server. Ele fornece quase 100% de compatibilidade com o mais recente motor de banco de dados SQL Server local (Edição Enterprise), que oferece 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 local. 4. **Azure SQL Server em VMs Azure**: Este é Infraestrutura como Serviço (IaaS) e é melhor para migrações onde você deseja **controle sobre o sistema operacional e a instância do SQL Server**, como se fosse um servidor rodando localmente. ### Azure SQL Server Azure SQL Server é um sistema de gerenciamento de banco de dados relacional (RDBMS) que utiliza Transact-SQL para operações de dados e é construído para lidar com sistemas de nível empresarial. Oferece recursos robustos para desempenho, segurança, escalabilidade e integração com várias aplicações da Microsoft. Os bancos de dados Azure SQL dependem deste servidor, pois são construídos sobre esses servidores e é o ponto de entrada para o usuário acessar os bancos de dados. #### Rede **Conectividade de Rede**: Escolha se deseja habilitar o acesso via ponto de extremidade público ou ponto de extremidade privado. Se você selecionar Sem acesso, nenhum ponto de extremidade é criado até que seja configurado manualmente: - Sem acesso: Nenhum ponto de extremidade é configurado, bloqueando conexões de entrada até que seja configurado manualmente. - Ponto de extremidade público: Permite conexões diretas pela internet pública, sujeitas a regras de firewall e outras configurações de segurança. - Ponto de extremidade privado: Restringe a conectividade a uma rede privada. **Política de Conexão**: Defina como os clientes se comunicam com o servidor de banco de dados SQL: - Padrão: Usa uma política de Redirecionamento para todas as conexões de clientes de dentro do Azure (exceto aquelas usando Pontos de Extremidade Privados) e uma política de Proxy para conexões de fora do Azure. - Proxy: Roteia todas as conexões de clientes através do gateway do Azure SQL Database. - Redirecionar: Os clientes se conectam diretamente ao nó que hospeda o banco de dados. #### Métodos de Autenticação Azure SQL suporta vários métodos de autenticação para proteger o acesso ao banco de dados: - **Autenticação apenas do Microsoft Entra**: Usa o Microsoft Entra (anteriormente Azure AD) para gerenciamento centralizado de identidade e autenticação única. - **Autenticação SQL e Microsoft Entra**: Permite usar a autenticação SQL tradicional juntamente com o Microsoft Entra. - **Autenticação SQL**: Baseia-se exclusivamente em nomes de usuário e senhas do SQL Server. #### Recursos de Segurança Os servidores SQL têm **Identidades Gerenciadas**. As identidades gerenciadas permitem que seu servidor autentique de forma segura com outros serviços Azure sem armazenar credenciais. Permite acessar outros serviços que seriam identidade gerenciada atribuída ao sistema e ser acessada por outros serviços com outras identidades, que é identidade gerenciada atribuída ao usuário. Alguns dos serviços que o SQL pode acessar são Azure Storage Account(V2), Azure Data Lake Storage Gen2, SQL Server, Oracle, Teradata, MongoDB ou Cosmos DB API para MongoDB, ODBC genérico, Operações em massa e armazenamento de objetos compatível com S3. Outros recursos de segurança que o servidor SQL possui são: - **Regras de Firewall**: As regras de firewall controlam o acesso ao seu servidor restringindo ou permitindo tráfego. Este é um recurso dos próprios bancos de dados também. - **Criptografia de Dados Transparente (TDE)**: TDE criptografa seus bancos de dados, backups e logs em repouso para proteger seus dados mesmo que o armazenamento seja comprometido. Pode ser feito com uma chave gerenciada pelo serviço ou uma chave gerenciada pelo cliente. - **Microsoft Defender para SQL**: O Microsoft Defender para SQL pode ser habilitado oferecendo avaliações de vulnerabilidade e proteção avançada contra ameaças para um servidor. #### Modelos de Implantação O Azure SQL Database suporta opções de implantação flexíveis para atender a várias necessidades: - **Banco de Dados Único**: - Um banco de dados totalmente isolado com seus próprios recursos dedicados. - Ótimo para microsserviços ou aplicações que requerem uma única fonte de dados. - **Pool Elástico**: - Permite que vários bancos de dados compartilhem recursos dentro de um pool. - Custo-efetivo para aplicações com padrões de uso flutuantes em vários bancos de dados. ### 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. #### Recursos Principais - **Sempre Atualizado**: Funciona na versão estável mais recente do SQL Server e recebe novos recursos e patches automaticamente. - **Capacidades PaaS**: Alta disponibilidade, backups e atualizações integrados. - **Flexibilidade de Dados**: Suporta dados relacionais e não relacionais (por exemplo, gráficos, JSON, espacial e XML). #### Rede **Conectividade de Rede**: Escolha se deseja habilitar o acesso via ponto de extremidade público ou ponto de extremidade privado. Se você selecionar Sem acesso, nenhum ponto de extremidade é criado até que seja configurado manualmente: - Sem acesso: Nenhum ponto de extremidade é configurado, bloqueando conexões de entrada até que seja configurado manualmente. - Ponto de extremidade público: Permite conexões diretas pela internet pública, sujeitas a regras de firewall e outras configurações de segurança. - Ponto de extremidade privado: Restringe a conectividade a uma rede privada. **Política de Conexão**: Defina como os clientes se comunicam com o servidor de banco de dados SQL: - Padrão: Usa uma política de Redirecionamento para todas as conexões de clientes de dentro do Azure (exceto aquelas usando Pontos de Extremidade Privados) e uma política de Proxy para conexões de fora do Azure. - Proxy: Roteia todas as conexões de clientes através do gateway do Azure SQL Database. - Redirecionar: Os clientes se conectam diretamente ao nó que hospeda o banco de dados. #### Recursos de Segurança - **Microsoft Defender para SQL**: pode ser habilitado oferecendo avaliações de vulnerabilidade e proteção avançada contra ameaças. - **Ledger**: verifica criptograficamente a integridade dos dados, garantindo que qualquer adulteração seja detectada. - **Identidade do Servidor**: usa identidades gerenciadas atribuídas ao sistema e ao usuário para permitir acesso centralizado. - **Gerenciamento de Chaves de Criptografia de Dados Transparentes**: criptografa bancos de dados, backups e logs em repouso sem exigir alterações no aplicativo. A criptografia pode ser habilitada em cada banco de dados e, se configurada no nível do banco de dados, essas configurações substituem a configuração no nível do servidor. - **Sempre Criptografado**: é um conjunto de recursos avançados de proteção de dados que separa a propriedade dos dados do gerenciamento dos dados. Isso garante que administradores ou operadores com altos privilégios não possam acessar dados sensíveis. #### Modelos de Compra / Níveis de Serviço - **Baseado em vCore**: Escolha computação, memória e armazenamento de forma independente. Para Uso Geral, Crítico para Negócios (com alta resiliência e desempenho para aplicativos OLTP) e escala até 128 TB de armazenamento. - **Baseado em DTU**: Agrupa computação, memória e I/O em níveis fixos. Recursos equilibrados para tarefas comuns. - Padrão: Recursos equilibrados para tarefas comuns. - Premium: Alto desempenho para cargas de trabalho exigentes. #### Desempenho escalável e pools - **Bancos de Dados Únicos**: Cada banco de dados é isolado e possui seus próprios recursos dedicados de computação, memória e armazenamento. Os recursos podem ser escalados dinamicamente (para cima ou para baixo) sem tempo de inatividade (1–128 vCores, 32 GB–4 TB de armazenamento e até 128 TB). - **Pools Elásticos**: Compartilham recursos entre vários bancos de dados em um pool para maximizar a eficiência e economizar custos. Os recursos também podem ser escalados dinamicamente para todo o pool. - **Flexibilidade de Nível de Serviço**: Comece pequeno com um único banco de dados no nível de Uso Geral. Faça upgrade para níveis Críticos para Negócios ou Hiperscale à medida que as necessidades crescem. - **Opções de Escalonamento**: Escalonamento Dinâmico ou Alternativas de Autoscaling. #### Monitoramento e Otimização Integrados - **Query Store**: Acompanha problemas de desempenho, identifica os principais consumidores de recursos e oferece recomendações acionáveis. - **Ajuste Automático**: Otimiza proativamente o desempenho com recursos como indexação automática e correções de plano de consulta. - **Integração de Telemetria**: Suporta monitoramento através do Azure Monitor, Event Hubs ou Azure Storage para insights personalizados. #### Recuperação de Desastres e Disponibilidade - **Backups automáticos**: O SQL Database realiza automaticamente backups completos, diferenciais e de logs de transações dos bancos de dados. - **Restauração em um Ponto no Tempo**: Recupera bancos de dados para qualquer estado passado dentro do período de retenção de backup. - **Geo-Redundância** - **Grupos de Failover**: Simplifica a recuperação de desastres agrupando bancos de dados para failover automático entre regiões. ### Azure SQL Managed Instance **Azure SQL Managed Instance** é um motor de banco de dados como serviço (PaaS) que oferece quase 100% de compatibilidade com o SQL Server e lida automaticamente com a maioria das tarefas de gerenciamento (por exemplo, atualização, correção, backups, monitoramento). Ele fornece uma solução em nuvem para migrar bancos de dados SQL Server locais com mínimas alterações. #### Níveis de Serviço - **Uso Geral**: Opção econômica para aplicações com requisitos padrão de I/O e latência. - **Crítico para Negócios**: Opção de alto desempenho com baixa latência de I/O para cargas de trabalho críticas. #### Recursos Avançados de Segurança * **Proteção contra Ameaças**: Alertas de Proteção Avançada contra Ameaças para atividades suspeitas e ataques de injeção SQL. Auditoria para rastrear e registrar eventos de banco de dados para conformidade. * **Controle de Acesso**: Autenticação Microsoft Entra para gerenciamento centralizado de identidade. Segurança em Nível de Linha e Máscara de Dados Dinâmica para controle de acesso granular. * **Backups**: Backups automatizados e manuais com capacidade de restauração em um ponto no tempo. ### Azure SQL Virtual Machines **Azure SQL Virtual Machines** é melhor para migrações onde você deseja **controle sobre o sistema operacional e a instância do SQL Server**, como se fosse um servidor rodando localmente. Pode ter diferentes tamanhos de máquina e uma ampla seleção de versões e edições do SQL Server. #### Recursos Principais **Backup Automatizado**: Agende backups para bancos de dados SQL. **Correção Automática**: Automatiza a instalação de atualizações do Windows e do SQL Server durante uma janela de manutenção. **Integração com Azure Key Vault**: Configura automaticamente o Key Vault para VMs do SQL Server. **Integração com Defender for Cloud**: Visualize as recomendações do Defender para SQL no portal. **Flexibilidade de Versão/Edição**: Altere a versão ou edição do SQL Server sem redistribuir a VM. #### Recursos de Segurança **Microsoft Defender para SQL**: Insights e alertas de segurança. **Integração com Azure Key Vault**: Armazenamento seguro de credenciais e chaves de criptografia. **Microsoft Entra (Azure AD)**: Autenticação e controle de acesso. ## Enumeração {{#tabs}} {{#tab name="az cli"}} ```bash # List Servers az sql server list # managed identities are enumerated here too ## List Server Usages az sql server list-usages --name --resource-group ## List Server Firewalls az sql server firewall-rule list --resource-group --server ## List of Azure Active Directory administrators in a server. az sql server ad-admin list --resource-group --server ## Gets an advanced threat protection az sql server advanced-threat-protection-setting show --resource-group --name ## Get server's auditing policy. az sql server audit-policy show --resource-group --name ## Gets a server's secure connection policy. az sql server conn-policy show --resource-group --server ## Gets a list of server DNS aliases for a server. az sql server dns-alias list --resource-group --server ## List of server keys. az sql server key list --resource-group --server ## Gets a server encryption protector. az sql server tde-key show --resource-group --server # List Databases in a SQL server az sql db list --server --resource-group #--output table ## Get details of a specific database az sql db show --name --server --resource-group ## List database usages az sql db list-usages --name --server --resource-group ## List of operations performed on the database. az sql db op list --database --server --resource-group ## List sql database classification az sql db classification list --name --server --resource-group ## List long-term retention backups for a SQL database az sql db ltr-backup list --database --server --resource-group ## List long-term retention policy az sql db ltr-policy --name --server --resource-group ## List long-term retention policy az sql db str-policy --name --server --resource-group ## List the replicas of a database and their replication status az sql db replica list-links --name --server --resource-group ## List deleted SQL databases az sql db list-deleted --server --resource-group ## List database usages az sql db list-usages --name --server --resource-group ## List restorable dropped databases in a SQL server az sql db list-deleted --server --resource-group ## List advanced threat protection setting show az sql db advanced-threat-protection-setting --name --server --resource-group # List all elastic pools in a SQL server az sql elastic-pool list --server --resource-group #--output table ## List all databases in a specific elastic pool az sql elastic-pool show --name --server --resource-group ## List of databases in an elastic pool. az sql elastic-pool list-dbs --name --server --resource-group # List all managed Instances az sql mi list az sql mi show --resource-group --name az sql midb list az sql midb show --resource-group --name # Lis all sql VM az sql vm list az sql vm show --resource-group --name ``` {{#endtab}} {{#tab name="Az PowerShell"}} ```bash # List Servers Get-AzSqlServer -ResourceGroupName "" # List All Databases in a SQL Server Get-AzSqlDatabase -ServerName "" -ResourceGroupName "" # Get Details of a Specific Database Get-AzSqlDatabase -Name "" -ServerName "" -ResourceGroupName "" # List Operations Performed on the Database Get-AzSqlDatabaseActivity -DatabaseName "" -ServerName "" -ResourceGroupName "" # List SQL Database Classification Get-AzSqlDatabaseSensitivityClassification -DatabaseName "" -ServerName "" -ResourceGroupName "" # List Long-Term Retention Backups for a SQL Database Get-AzSqlDatabaseLongTermRetentionBackup -ResourceGroupName "" -Location "" # List Replicas of a Database and Their Replication Status Get-AzSqlDatabaseReplicationLink -DatabaseName "" -ServerName "" -ResourceGroupName "" # List Deleted SQL Databases Get-AzSqlDeletedDatabaseBackup -ServerName "" -ResourceGroupName "" # List All Elastic Pools in a SQL Server Get-AzSqlElasticPool -ServerName "" -ResourceGroupName "" # List All Databases in a Specific Elastic Pool Get-AzSqlElasticPoolDatabase -ElasticPoolName "" -ServerName "" -ResourceGroupName "" # List all managed Instances Get-AzSqlInstance Get-AzSqlInstance -ResourceGroupName -Name # List All Databases in a SQL Managed Instance Get-AzSqlInstanceDatabase -ResourceGroupName -InstanceName # Lis all sql VM Get-AzSqlVM ``` {{#endtab}} {{#endtabs}} ### 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): ```bash function invoke-sql{ param($query) $Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" $Connection = New-Object System.Data.SqlClient.SqlConnection $Connection_string $Connection.Open() $Command = New-Object System.Data.SqlClient.SqlCommand $Command.Connection = $Connection $Command.CommandText = $query $Reader = $Command.ExecuteReader() while ($Reader.Read()) { $Reader.GetValue(0) } $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: ```bash sqlcmd -S .database.windows.net -U -P -d ``` ## 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égios {{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}} ## Pós Exploração {{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}