21 KiB
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 vier Hauptangeboten:
- Azure SQL Server: Azure SQL Server ist ein verwalteter relationaler Datenbankdienst, der die Bereitstellung und Verwaltung von SQL Server-Datenbanken vereinfacht, mit integrierten Sicherheits- und Leistungsfunktionen.
- 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.
- 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, um gängige Sicherheitsbedenken zu adressieren, und ein Geschäftsmodell, das für On-Premises SQL Server-Kunden vorteilhaft ist.
- 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 Server
Azure SQL Server ist ein relationales Datenbankmanagementsystem (RDBMS), das Transact-SQL für Datenoperationen verwendet und für die Verarbeitung von Unternehmenssystemen ausgelegt ist. Es bietet robuste Funktionen für Leistung, Sicherheit, Skalierbarkeit und Integration mit verschiedenen Microsoft-Anwendungen. Azure SQL-Datenbanken basieren auf diesem Server, da diese auf diesen Servern aufgebaut sind und es der Einstiegspunkt für Benutzer ist, um auf die Datenbanken zuzugreifen.
Netzwerk
Netzwerkverbindung: Wählen Sie, ob Sie den Zugriff über einen öffentlichen Endpunkt oder einen privaten Endpunkt aktivieren möchten. Wenn Sie "Kein Zugriff" auswählen, werden keine Endpunkte erstellt, bis dies manuell konfiguriert wird:
- Kein Zugriff: Es sind keine Endpunkte konfiguriert, wodurch eingehende Verbindungen blockiert werden, bis sie manuell eingerichtet werden.
- Öffentlicher Endpunkt: Ermöglicht direkte Verbindungen über das öffentliche Internet, unterliegt Firewall-Regeln und anderen Sicherheitskonfigurationen.
- Privater Endpunkt: Beschränkt die Konnektivität auf ein privates Netzwerk.
Verbindungsrichtlinie: Definieren Sie, wie Clients mit dem SQL-Datenbankserver kommunizieren:
- Standard: Verwendet eine Umleitungsrichtlinie für alle Clientverbindungen von innerhalb von Azure (außer für solche, die private Endpunkte verwenden) und eine Proxy-Richtlinie für Verbindungen von außerhalb von Azure.
- Proxy: Leitet alle Clientverbindungen über das Azure SQL-Datenbank-Gateway.
- Umleitung: Clients verbinden sich direkt mit dem Knoten, der die Datenbank hostet.
Authentifizierungsmethoden
Azure SQL unterstützt verschiedene Authentifizierungsmethoden zur Sicherung des Datenbankzugriffs:
- Microsoft Entra-Only-Authentifizierung: Verwendet Microsoft Entra (ehemals Azure AD) für zentrales Identitätsmanagement und Single Sign-On.
- Sowohl SQL- als auch Microsoft Entra-Authentifizierung: Ermöglicht die Verwendung traditioneller SQL-Authentifizierung zusammen mit Microsoft Entra.
- SQL-Authentifizierung: Vertraut ausschließlich auf SQL Server-Benutzernamen und -Passwörter.
Sicherheitsmerkmale
SQL-Server haben verwaltete Identitäten. Verwaltete Identitäten ermöglichen es Ihrem Server, sich sicher mit anderen Azure-Diensten zu authentifizieren, ohne Anmeldeinformationen zu speichern. Sie ermöglichen den Zugriff auf andere Dienste, die eine systemzugewiesene verwaltete Identität haben, und können von anderen Diensten mit anderen Identitäten, die eine benutzerzugewiesene verwaltete Identität sind, aufgerufen werden. Einige der Dienste, auf die SQL zugreifen kann, sind Azure Storage Account(V2), Azure Data Lake Storage Gen2, SQL Server, Oracle, Teradata, MongoDB oder Cosmos DB API für MongoDB, generisches ODBC, Bulk-Operationen und S3-kompatible Objektspeicherung.
Weitere Sicherheitsmerkmale, die der SQL-Server hat, sind:
- Firewall-Regeln: Firewall-Regeln steuern den Zugriff auf Ihren Server, indem sie den Datenverkehr einschränken oder zulassen. Dies ist auch eine Funktion der Datenbanken selbst.
- Transparente Datenverschlüsselung (TDE): TDE verschlüsselt Ihre Datenbanken, Backups und Protokolle im Ruhezustand, um Ihre Daten zu schützen, selbst wenn der Speicher kompromittiert ist. Dies kann mit einem dienstverwalteten Schlüssel oder einem kundenverwalteten Schlüssel erfolgen.
- Microsoft Defender für SQL: Microsoft Defender für SQL kann aktiviert werden und bietet Schwachstellenbewertungen und erweiterten Bedrohungsschutz für einen Server.
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 einzelne 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.
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).
Netzwerk
Netzwerkverbindung: Wählen Sie, ob Sie den Zugriff über einen öffentlichen Endpunkt oder einen privaten Endpunkt aktivieren möchten. Wenn Sie "Kein Zugriff" auswählen, werden keine Endpunkte erstellt, bis dies manuell konfiguriert wird:
- Kein Zugriff: Es sind keine Endpunkte konfiguriert, wodurch eingehende Verbindungen blockiert werden, bis sie manuell eingerichtet werden.
- Öffentlicher Endpunkt: Ermöglicht direkte Verbindungen über das öffentliche Internet, unterliegt Firewall-Regeln und anderen Sicherheitskonfigurationen.
- Privater Endpunkt: Beschränkt die Konnektivität auf ein privates Netzwerk.
Verbindungsrichtlinie: Definieren Sie, wie Clients mit dem SQL-Datenbankserver kommunizieren:
- Standard: Verwendet eine Umleitungsrichtlinie für alle Clientverbindungen von innerhalb von Azure (außer für solche, die private Endpunkte verwenden) und eine Proxy-Richtlinie für Verbindungen von außerhalb von Azure.
- Proxy: Leitet alle Clientverbindungen über das Azure SQL-Datenbank-Gateway.
- Umleitung: Clients verbinden sich direkt mit dem Knoten, der die Datenbank hostet.
Sicherheitsmerkmale
- Microsoft Defender für SQL: kann aktiviert werden und bietet Schwachstellenbewertungen und erweiterten Bedrohungsschutz.
- Ledger: überprüft kryptografisch die Integrität der Daten und stellt sicher, dass jede Manipulation erkannt wird.
- Serveridentität: verwendet systemzugewiesene und benutzerzugewiesene verwaltete Identitäten, um den zentralen Zugriff zu ermöglichen.
- Verwaltung der transparenten Datenverschlüsselungsschlüssel: verschlüsselt Datenbanken, Backups und Protokolle im Ruhezustand, ohne dass Änderungen an der Anwendung erforderlich sind. Die Verschlüsselung kann für jede Datenbank aktiviert werden, und wenn sie auf Datenbankebene konfiguriert ist, überschreiben diese Einstellungen die serverseitige Konfiguration.
- Immer verschlüsselt: ist eine Suite von erweiterten Datenschutzfunktionen, die das Eigentum an Daten von der Datenverwaltung trennt. Dies stellt sicher, dass Administratoren oder Betreiber mit hohen Berechtigungen nicht auf sensible Daten zugreifen können.
Kaufmodelle / Dienststufen
- 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-Apps) und skaliert bis zu 128 TB Speicher.
- DTU-basiert: Bündelt Compute, Speicher und I/O in festen Stufen. Ausgewogene Ressourcen für gängige Aufgaben.
- Standard: Ausgewogene Ressourcen für gängige Aufgaben.
- Premium: Hohe Leistung für anspruchsvolle Workloads.
Skalierbare Leistung und Pools
- Einzelne Datenbanken: Jede Datenbank ist isoliert und hat ihre eigenen dedizierten Compute-, Speicher- und Speicherressourcen. Ressourcen können dynamisch (nach oben oder unten) ohne Ausfallzeiten skaliert werden (1–128 vCores, 32 GB–4 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 Dienststufen: Beginnen Sie klein mit einer einzelnen Datenbank in der allgemeinen Zweckstufe. Upgrade auf geschäftskritische oder Hyperscale-Stufen, wenn die Anforderungen wachsen.
- Skalierungsoptionen: Dynamische Skalierung oder Autoscaling-Alternativen.
Integrierte Überwachung & Optimierung
- Abfrage-Store: Verfolgt Leistungsprobleme, identifiziert die größten Ressourcenverbraucher 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 übernimmt. Es bietet eine Cloud-Lösung für die Migration von On-Premises SQL Server-Datenbanken mit minimalen Änderungen.
Dienststufen
- Allgemeiner Zweck: Kostenwirksame 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: Erweiteter Bedrohungsschutz warnt vor verdächtigen Aktivitäten und SQL-Injection-Angriffen. Auditing zur Verfolgung und Protokollierung von Datenbankereignissen zur Einhaltung von Vorschriften.
- 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 Virtual Machines
Azure SQL Virtual Machines 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. Es kann verschiedene 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 automatisch Key Vault für SQL Server VMs. Defender für Cloud-Integration: Anzeigen von Defender für SQL-Empfehlungen im Portal. Versions-/Editionen-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 # 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}}
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
- 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
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}}