21 KiB
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:
- 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.
- 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.
- 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.
- 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"}}
# List Servers
az sql server list # managed identities are enumerated here too
## List Server Usages
az sql server list-usages --name <server_name> --resource-group <resource_group>
## List Server Firewalls
az sql server firewall-rule list --resource-group <resource_group> --server <server_name>
## List of Azure Active Directory administrators in a server.
az sql server ad-admin list --resource-group <resource_group> --server <server_name>
## Gets an advanced threat protection
az sql server advanced-threat-protection-setting show --resource-group <resource_group> --name <server_name>
## Get server's auditing policy.
az sql server audit-policy show --resource-group <resource_group> --name <server_name>
## Gets a server's secure connection policy.
az sql server conn-policy show --resource-group <resource_group> --server <server_name>
## Gets a list of server DNS aliases for a server.
az sql server dns-alias list --resource-group <resource_group> --server <server_name>
## List of server keys.
az sql server key list --resource-group <resource_group> --server <server_name>
## Gets a server encryption protector.
az sql server tde-key show --resource-group <resource_group> --server <server_name>
# List Databases in a SQL server
az sql db list --server <server_name> --resource-group <resource_group> #--output table
## Get details of a specific database
az sql db show --name <database_name> --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List of operations performed on the database.
az sql db op list --database <database_name> --server <server_name> --resource-group <resource_group>
## List sql database classification
az sql db classification list --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention backups for a SQL database
az sql db ltr-backup list --database <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db ltr-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db str-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List the replicas of a database and their replication status
az sql db replica list-links --name <database_name> --server <server_name> --resource-group <resource_group>
## List deleted SQL databases
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List restorable dropped databases in a SQL server
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List advanced threat protection setting show
az sql db advanced-threat-protection-setting --name <database_name> --server <server_name> --resource-group <resource_group>
# List all elastic pools in a SQL server
az sql elastic-pool list --server <server_name> --resource-group <resource_group> #--output table
## List all databases in a specific elastic pool
az sql elastic-pool show --name <elastic_pool_name> --server <server_name> --resource-group <resource_group>
## List of databases in an elastic pool.
az sql elastic-pool list-dbs --name <elastic_pool_name> --server <server_name> --resource-group <resource_group>
# List all managed Instances
az sql mi list
az sql mi show --resource-group <res-grp> --name <name>
az sql midb list
az sql midb show --resource-group <res-grp> --name <name>
# Lis all sql VM
az sql vm list
az sql vm show --resource-group <res-grp> --name <name>
{{#endtab}}
{{#tab name="Az PowerShell"}}
# List Servers
Get-AzSqlServer -ResourceGroupName "<resource-group-name>"
# List All Databases in a SQL Server
Get-AzSqlDatabase -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# Get Details of a Specific Database
Get-AzSqlDatabase -Name "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List Operations Performed on the Database
Get-AzSqlDatabaseActivity -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List SQL Database Classification
Get-AzSqlDatabaseSensitivityClassification -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List Long-Term Retention Backups for a SQL Database
Get-AzSqlDatabaseLongTermRetentionBackup -ResourceGroupName "<resource_group>" -Location "<location>"
# List Replicas of a Database and Their Replication Status
Get-AzSqlDatabaseReplicationLink -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List Deleted SQL Databases
Get-AzSqlDeletedDatabaseBackup -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List All Elastic Pools in a SQL Server
Get-AzSqlElasticPool -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List All Databases in a Specific Elastic Pool
Get-AzSqlElasticPoolDatabase -ElasticPoolName "<elastic_pool_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List all managed Instances
Get-AzSqlInstance
Get-AzSqlInstance -ResourceGroupName <ResourceGroupName> -Name <ManagedInstanceName>
# List All Databases in a SQL Managed Instance
Get-AzSqlInstanceDatabase -ResourceGroupName <ResourceGroupName> -InstanceName <ManagedInstanceName>
# 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:
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 <server-name> --resource-group <resource-group>, e também se a regra do firewall permite que nosso IP acesse:
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
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/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/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}}