Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-services/az-sql.md

15 KiB
Raw Blame History

Az - SQL

{{#include ../../../banners/hacktricks-training.md}}

Azure SQL

Azure SQL è una famiglia di prodotti gestiti, sicuri e intelligenti che utilizzano il motore di database SQL Server nel cloud Azure. Questo significa che non devi preoccuparti dell'amministrazione fisica dei tuoi server e puoi concentrarti sulla gestione dei tuoi dati.

Azure SQL consiste in tre principali offerte:

  1. Azure SQL Database: Questo è un servizio di database completamente gestito, che ti consente di ospitare database individuali nel cloud Azure. Offre intelligenza integrata che apprende i tuoi schemi di database unici e fornisce raccomandazioni personalizzate e ottimizzazione automatica.
  2. Azure SQL Managed Instance: Questo è per implementazioni su larga scala, a livello di intera istanza SQL Server. Fornisce quasi il 100% di compatibilità con l'ultima versione del motore di database SQL Server on-premises (Enterprise Edition), che offre un'implementazione nativa della rete virtuale (VNet) che affronta le comuni preoccupazioni di sicurezza, e un modello di business favorevole per i clienti SQL Server on-premises.
  3. Azure SQL Server su Azure VMs: Questo è Infrastructure as a Service (IaaS) ed è migliore per le migrazioni in cui desideri controllo sul sistema operativo e sull'istanza SQL Server, come se fosse un server in esecuzione on-premises.

Azure SQL Database

Azure SQL Database è una piattaforma di database completamente gestita come servizio (PaaS) che fornisce soluzioni di database relazionali scalabili e sicure. È costruita sulle ultime tecnologie SQL Server ed elimina la necessità di gestione dell'infrastruttura, rendendola una scelta popolare per le applicazioni basate su cloud.

Caratteristiche Chiave

  • Sempre Aggiornato: Funziona sull'ultima versione stabile di SQL Server e riceve automaticamente nuove funzionalità e patch.
  • Capacità PaaS: Alta disponibilità integrata, backup e aggiornamenti.
  • Flessibilità dei Dati: Supporta dati relazionali e non relazionali (ad es., grafi, JSON, spaziali e XML).

Modelli di Acquisto / Livelli di Servizio

  • Basato su vCore: Scegli computazione, memoria e archiviazione in modo indipendente. Per General Purpose, Business Critical (con alta resilienza e prestazioni per app OLTP), e scala fino a 128 TB di archiviazione.
  • Basato su DTU: Raggruppa computazione, memoria e I/O in livelli fissi. Risorse bilanciate per compiti comuni.
  • Standard: Risorse bilanciate per compiti comuni.
  • Premium: Alte prestazioni per carichi di lavoro esigenti.

Modelli di Distribuzione

Azure SQL Database supporta opzioni di distribuzione flessibili per soddisfare varie esigenze:

  • Database Singolo:
  • Un database completamente isolato con le proprie risorse dedicate.
  • Ottimo per microservizi o applicazioni che richiedono una singola fonte di dati.
  • Elastic Pool:
  • Consente a più database di condividere risorse all'interno di un pool.
  • Economico per applicazioni con modelli di utilizzo fluttuanti tra più database.

Prestazioni Scalabili e Pool

  • Database Singoli: Ogni database è isolato e ha le proprie risorse dedicate di computazione, memoria e archiviazione. Le risorse possono essere scalate dinamicamente (su o giù) senza tempi di inattività (1128 vCores, 32 GB4 TB di archiviazione, e fino a 128 TB).
  • Elastic Pools: Condividono risorse tra più database in un pool per massimizzare l'efficienza e risparmiare costi. Le risorse possono anche essere scalate dinamicamente per l'intero pool.
  • Flessibilità del Livello di Servizio: Inizia in piccolo con un database singolo nel livello General Purpose. Aggiorna a livelli Business Critical o Hyperscale man mano che le esigenze crescono.
  • Opzioni di Scalabilità: Scalabilità Dinamica o Alternative di Autoscalabilità.

Monitoraggio e Ottimizzazione Integrati

  • Query Store: Monitora i problemi di prestazioni, identifica i principali consumatori di risorse e offre raccomandazioni praticabili.
  • Ottimizzazione Automatica: Ottimizza proattivamente le prestazioni con funzionalità come indicizzazione automatica e correzioni del piano di query.
  • Integrazione Telemetrica: Supporta il monitoraggio tramite Azure Monitor, Event Hubs o Azure Storage per approfondimenti personalizzati.

Recupero Dall'Incidente e Disponibilità

  • Backup Automatici: SQL Database esegue automaticamente backup completi, differenziali e di log delle transazioni dei database.
  • Ripristino a Punto nel Tempo: Recupera i database a qualsiasi stato passato all'interno del periodo di retention dei backup.
  • Geo-Redundancy
  • Gruppi di Failover: Semplifica il recupero dall'incidente raggruppando i database per failover automatico tra le regioni.

Azure SQL Managed Instance

Azure SQL Managed Instance è un motore di database Platform as a Service (PaaS) che offre quasi il 100% di compatibilità con SQL Server e gestisce automaticamente la maggior parte dei compiti di gestione (ad es., aggiornamenti, patching, backup, monitoraggio). Fornisce una soluzione cloud per migrare i database SQL Server on-premises con minime modifiche.

Livelli di Servizio

  • General Purpose: Opzione economica per applicazioni con requisiti standard di I/O e latenza.
  • Business Critical: Opzione ad alte prestazioni con bassa latenza di I/O per carichi di lavoro critici.

Caratteristiche di Sicurezza Avanzate

  • Protezione dalle Minacce: Avvisi di Protezione Avanzata dalle Minacce per attività sospette e attacchi di SQL injection. Audit per monitorare e registrare eventi del database per la conformità.
  • Controllo degli Accessi: Autenticazione Microsoft Entra per la gestione centralizzata dell'identità. Sicurezza a Livello di Riga e Mascheramento Dinamico dei Dati per un controllo degli accessi granulare.
  • Backup: Backup automatizzati e manuali con capacità di ripristino a punto nel tempo.

Azure SQL Virtual Machines

Azure SQL Virtual Machines è migliore per le migrazioni in cui desideri controllo sul sistema operativo e sull'istanza SQL Server, come se fosse un server in esecuzione on-premises. Può avere diverse dimensioni di macchina e una vasta selezione di versioni e edizioni di SQL Server.

Caratteristiche Chiave

Backup Automatico: Pianifica backup per i database SQL.
Patch Automatiche: Automatizza l'installazione degli aggiornamenti di Windows e SQL Server durante una finestra di manutenzione.
Integrazione con Azure Key Vault: Configura automaticamente Key Vault per le VM SQL Server.
Integrazione con Defender for Cloud: Visualizza le raccomandazioni di Defender for SQL nel portale.
Flessibilità di Versione/Edizione: Cambia i metadati della versione o edizione di SQL Server senza ridistribuire la VM.

Caratteristiche di Sicurezza

Microsoft Defender for SQL: Approfondimenti e avvisi di sicurezza.
Integrazione con Azure Key Vault: Archiviazione sicura di credenziali e chiavi di crittografia.
Microsoft Entra (Azure AD): Autenticazione e controllo degli accessi.

Enumerazione

{{#tabs}} {{#tab name="az cli"}}

# List Servers
az sql server list # --output table
## 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}}

Connettersi ed eseguire query SQL

Potresti trovare una stringa di connessione (contenente credenziali) dall'esempio enumerando un 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;'

Puoi anche usare sqlcmd per accedere al database. È importante sapere se il server consente connessioni pubbliche az sql server show --name <server-name> --resource-group <resource-group>, e anche se la regola del firewall consente al nostro IP di accedere:

sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>

Riferimenti

Escalation dei privilegi

{{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}}

Post Exploitation

{{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}}

{{#include ../../../banners/hacktricks-training.md}}