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 ist eine Familie von verwalteten, sicheren und intelligenten Produkten, die die SQL Server-Datenbank-Engine in der Azure-Cloud verwenden. Das bedeutet, dass Sie sich nicht um die physische Verwaltung Ihrer Server kümmern müssen und sich auf die Verwaltung Ihrer Daten konzentrieren können.

Azure SQL besteht aus drei Hauptangeboten:

  1. Azure SQL-Datenbank: Dies ist ein vollständig verwalteter Datenbankdienst, der es Ihnen ermöglicht, einzelne Datenbanken in der Azure-Cloud zu hosten. Er bietet integrierte Intelligenz, die Ihre einzigartigen Datenbankmuster lernt und maßgeschneiderte Empfehlungen sowie automatische Optimierungen bereitstellt.
  2. Azure SQL Managed Instance: Dies ist für größere, gesamte SQL Server-Instanz-Umsetzungen gedacht. Es bietet nahezu 100% Kompatibilität mit der neuesten SQL Server On-Premises (Enterprise Edition) Datenbank-Engine, die eine native Implementierung des virtuellen Netzwerks (VNet) bietet, die häufige Sicherheitsbedenken anspricht, und ein Geschäftsmodell, das für On-Premises SQL Server-Kunden vorteilhaft ist.
  3. Azure SQL Server auf Azure VMs: Dies ist Infrastructure as a Service (IaaS) und eignet sich am besten für Migrationen, bei denen Sie Kontrolle über das Betriebssystem und die SQL Server-Instanz haben möchten, als ob es sich um einen Server handelt, der On-Premises läuft.

Azure SQL-Datenbank

Azure SQL-Datenbank ist eine vollständig verwaltete Datenbankplattform als Dienst (PaaS), die skalierbare und sichere relationale Datenbanklösungen bietet. Sie basiert auf den neuesten SQL Server-Technologien und beseitigt die Notwendigkeit für Infrastrukturmanagement, was sie zu einer beliebten Wahl für cloudbasierte Anwendungen macht.

Hauptmerkmale

  • Immer auf dem neuesten Stand: Läuft auf der neuesten stabilen Version von SQL Server und erhält automatisch neue Funktionen und Patches.
  • PaaS-Funktionen: Integrierte hohe Verfügbarkeit, Backups und Updates.
  • Datenflexibilität: Unterstützt relationale und nicht-relationale Daten (z. B. Grafiken, JSON, räumliche Daten und XML).

Kaufmodelle / Dienstebenen

  • vCore-basiert: Wählen Sie Compute, Speicher und Speicher unabhängig. Für allgemeine Zwecke, geschäftskritisch (mit hoher Resilienz und Leistung für OLTP-Anwendungen) und bis zu 128 TB Speicher.
  • DTU-basiert: Bündelt Compute, Speicher und I/O in festen Ebenen. Ausgewogene Ressourcen für gängige Aufgaben.
  • Standard: Ausgewogene Ressourcen für gängige Aufgaben.
  • Premium: Hohe Leistung für anspruchsvolle Workloads.

Bereitstellungsmodelle

Azure SQL-Datenbank unterstützt flexible Bereitstellungsoptionen, um verschiedenen Bedürfnissen gerecht zu werden:

  • Einzelne Datenbank:
  • Eine vollständig isolierte Datenbank mit eigenen dedizierten Ressourcen.
  • Ideal für Microservices oder Anwendungen, die eine einzige Datenquelle benötigen.
  • Elastischer Pool:
  • Ermöglicht mehreren Datenbanken, Ressourcen innerhalb eines Pools zu teilen.
  • Kosten effizient für Anwendungen mit schwankenden Nutzungsmustern über mehrere Datenbanken.

Skalierbare Leistung und Pools

  • Einzelne Datenbanken: Jede Datenbank ist isoliert und hat ihre eigenen dedizierten Compute-, Speicher- und Speicherressourcen. Ressourcen können dynamisch (hoch oder runter) ohne Ausfallzeiten skaliert werden (1128 vCores, 32 GB4 TB Speicher und bis zu 128 TB).
  • Elastische Pools: Teilen Sie Ressourcen über mehrere Datenbanken in einem Pool, um die Effizienz zu maximieren und Kosten zu sparen. Ressourcen können auch dynamisch für den gesamten Pool skaliert werden.
  • Flexibilität der Dienstebene: Beginnen Sie klein mit einer einzelnen Datenbank in der allgemeinen Zweckebene. Upgrade auf geschäftskritische oder Hyperscale-Ebenen, wenn die Bedürfnisse wachsen.
  • Skalierungsoptionen: Dynamische Skalierung oder Autoscaling-Alternativen.

Eingebaute Überwachung & Optimierung

  • Abfrage-Store: Verfolgt Leistungsprobleme, identifiziert die Hauptressourcennutzer und bietet umsetzbare Empfehlungen.
  • Automatische Optimierung: Optimiert proaktiv die Leistung mit Funktionen wie automatischer Indizierung und Korrekturen von Abfrageplänen.
  • Telemetrie-Integration: Unterstützt die Überwachung über Azure Monitor, Event Hubs oder Azure Storage für maßgeschneiderte Einblicke.

Notfallwiederherstellung & Verfügbarkeit

  • Automatische Backups: SQL-Datenbank führt automatisch vollständige, differenzielle und Transaktionsprotokoll-Backups von Datenbanken durch.
  • Punkt-in-Zeit-Wiederherstellung: Stellen Sie Datenbanken in jeden früheren Zustand innerhalb des Backup-Aufbewahrungszeitraums wieder her.
  • Geo-Redundanz
  • Failover-Gruppen: Vereinfacht die Notfallwiederherstellung, indem Datenbanken für automatisches Failover über Regionen gruppiert werden.

Azure SQL Managed Instance

Azure SQL Managed Instance ist eine Plattform als Dienst (PaaS) Datenbank-Engine, die nahezu 100% Kompatibilität mit SQL Server bietet und die meisten Verwaltungsaufgaben (z. B. Upgrade, Patchen, Backups, Überwachung) automatisch erledigt. Es bietet eine Cloud-Lösung für die Migration von On-Premises SQL Server-Datenbanken mit minimalen Änderungen.

Dienstebenen

  • Allgemeiner Zweck: Kosten effektive Option für Anwendungen mit standardmäßigen I/O- und Latenzanforderungen.
  • Geschäftskritisch: Hochleistungsoption mit niedriger I/O-Latenz für kritische Workloads.

Erweiterte Sicherheitsmerkmale

  • Bedrohungsschutz: Erweiterte Bedrohungsschutzwarnungen für verdächtige Aktivitäten und SQL-Injection-Angriffe. Auditing zur Verfolgung und Protokollierung von Datenbankereignissen zur Einhaltung.
  • Zugriffskontrolle: Microsoft Entra-Authentifizierung für zentrales Identitätsmanagement. Zeilenebene-Sicherheit und dynamische Datenmaskierung für granulare Zugriffskontrolle.
  • Backups: Automatisierte und manuelle Backups mit Punkt-in-Zeit-Wiederherstellungsfähigkeit.

Azure SQL Virtuelle Maschinen

Azure SQL Virtuelle Maschinen sind am besten für Migrationen geeignet, bei denen Sie Kontrolle über das Betriebssystem und die SQL Server-Instanz haben möchten, als ob es sich um einen Server handelt, der On-Premises läuft. Sie können unterschiedliche Maschinen Größen und eine große Auswahl an SQL Server-Versionen und -Editionen haben.

Hauptmerkmale

Automatisiertes Backup: Planen Sie Backups für SQL-Datenbanken. Automatische Patchverwaltung: Automatisiert die Installation von Windows- und SQL Server-Updates während eines Wartungsfensters. Azure Key Vault-Integration: Konfiguriert Key Vault automatisch für SQL Server-VMs. Defender für Cloud-Integration: Sehen Sie sich die Empfehlungen von Defender für SQL im Portal an. Versions-/Edition-Flexibilität: Ändern Sie die SQL Server-Version oder -Edition-Metadaten, ohne die VM neu bereitzustellen.

Sicherheitsmerkmale

Microsoft Defender für SQL: Sicherheitsinformationen und -warnungen. Azure Key Vault-Integration: Sichere Speicherung von Anmeldeinformationen und Verschlüsselungsschlüsseln. Microsoft Entra (Azure AD): Authentifizierung und Zugriffskontrolle.

Enumeration

{{#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}}

Verbinden und SQL-Abfragen ausführen

Sie könnten eine Verbindungszeichenfolge (die Anmeldeinformationen enthält) aus dem Beispiel Auflisten einer Az WebApp finden:

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;'

Sie können auch sqlcmd verwenden, um auf die Datenbank zuzugreifen. Es ist wichtig zu wissen, ob der Server öffentliche Verbindungen zulässt az sql server show --name <server-name> --resource-group <resource-group>, und auch, ob die Firewallregel unsere IP den Zugriff erlaubt:

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

Referenzen

Privilegieneskalation

{{#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}}