Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-sql.

This commit is contained in:
Translator
2026-07-13 14:07:30 +00:00
parent 35ae0fe55b
commit 573438fcdd
@@ -4,45 +4,47 @@
## 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 ist eine Familie von verwalteten, sicheren und intelligenten Produkten, die die **SQL Server database engine in der Azure cloud** verwenden. Das bedeutet, dass du dir keine Sorgen um die physische Administration deiner Server machen musst und dich auf die Verwaltung deiner Daten konzentrieren kannst.
Azure SQL besteht aus vier Hauptangeboten:
1. **Azure SQL Server**: Ein Server wird für die **Bereitstellung und Verwaltung** von SQL Server-Datenbanken benötigt.
2. **Azure SQL-Datenbank**: Dies ist ein **vollständig verwalteter Datenbankdienst**, der es Ihnen ermöglicht, einzelne Datenbanken in der Azure-Cloud zu hosten.
3. **Azure SQL Managed Instance**: Dies ist für größere, gesamte SQL Server-Instanz-Umsetzungen.
4. **Azure SQL Server auf Azure-VMs**: Dies ist am besten für Architekturen geeignet, bei denen Sie **Kontrolle über das Betriebssystem** und die SQL Server-Instanz wünschen.
2. **Azure SQL Database**: Dies ist ein **vollständig verwalteter Database Service**, mit dem du einzelne Datenbanken in der Azure cloud hosten kannst.
3. **Azure SQL Managed Instance**: Dies ist für Deployments mit größerem Umfang und für gesamte SQL Server instance-scoped Deployments gedacht.
4. **Azure SQL Server on Azure VMs**: Dies ist am besten für Architekturen geeignet, bei denen du **Kontrolle über das operating system** und die SQL Server instance haben möchtest.
### SQL Server-Sicherheitsfunktionen
### SQL Server Security Features
**Netzwerkzugang:**
**Network access:**
- Öffentlicher Endpunkt (kann den Zugriff auf bestimmte Netzwerke beschränken).
- Private Endpunkte.
- Es ist auch möglich, Verbindungen basierend auf Domainnamen einzuschränken.
- Es ist auch möglich, Azure-Dienste den Zugriff zu erlauben (zum Beispiel um den Abfrage-Editor im Portal zu verwenden oder um einer Azure-VM die Verbindung zu erlauben).
- Public endpoint (kann den Zugriff auf bestimmte networks beschränken).
- Private endpoints.
- Es ist auch möglich, Verbindungen basierend auf domain names einzuschränken.
- Es ist auch möglich, Azure services den Zugriff darauf zu erlauben (z. B. um den Query editor im portal zu verwenden oder damit sich eine Azure VM verbinden kann).
- Wenn bei einem SQL Server *Allow Azure services and resources to access this server* auf "Enabled" gesetzt ist, erstellt Azure automatisch eine versteckte firewall rule, die sämtlichen network traffic erlaubt, der aus Azure kommt, um sich mit dem SQL Server zu verbinden — einschließlich Ressourcen aus jedem tenant.
- Das bedeutet, dass du, wenn du gültige SQL credentials erhältst, dich von einer Azure VM innerhalb deines eigenen, vom Angreifer kontrollierten tenant mit dem Azure SQL Server des Opfers verbinden kannst. [Die MS docs erklärt das](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services)
**Authentifizierungsmethoden:**
**Authentication Methods:**
- Microsoft **Entra-only**-Authentifizierung: Sie müssen die Entra-Prinzipien angeben, die Zugriff auf den Dienst haben werden.
- **Sowohl SQL- als auch Microsoft Entra**-Authentifizierung: Traditionelle SQL-Authentifizierung mit Benutzername und Passwort zusammen mit Microsoft Entra.
- **Nur SQL**-Authentifizierung: Nur Zugriff über Datenbankbenutzer erlauben.
- Microsoft **Entra-only** authentication: Du musst die Entra principals angeben, die Zugriff auf den service haben.
- **Both SQL and Microsoft Entra** authentication: Klassische SQL authentication mit username und password zusätzlich zu Microsoft Entra.
- **Only SQL** authentication: Zugriff nur über database users erlauben.
Beachten Sie, dass, wenn eine SQL-Authentifizierung erlaubt ist, ein Administrationsbenutzer (Benutzername + Passwort) angegeben werden muss, und wenn die Entra-ID-Authentifizierung ausgewählt ist, muss auch mindestens ein Prinzip mit Administrationszugriff angegeben werden.
Beachte: Wenn irgendeine SQL auth erlaubt ist, muss ein admin user (username + password) angegeben werden, und wenn Entra ID auth ausgewählt ist, muss ebenfalls mindestens ein principal mit admin access angegeben werden.
**Verschlüsselung:**
**Encryption:**
- Es wird als „Transparente Datenverschlüsselung“ bezeichnet und verschlüsselt Datenbanken, Backups und Protokolle im Ruhezustand.
- Wie immer wird standardmäßig ein von Azure verwalteter Schlüssel verwendet, aber es könnte auch ein vom Kunden verwalteter Verschlüsselungsschlüssel (CMEK) verwendet werden.
**Verwaltete Identitäten:**
- Sie heißt “Transparent data encryption” und verschlüsselt databases, backups und logs at rest.
- Wie immer wird standardmäßig ein Azure managed key verwendet, aber ein customer managed encryption key (CMEK) kann ebenfalls verwendet werden.
**Managed Identities:**
- Es ist möglich, system- und benutzerverwaltete MIs zuzuweisen.
- Wird verwendet, um auf den Verschlüsselungsschlüssel zuzugreifen (wenn ein CMEK verwendet wird) und auf andere Dienste von den Datenbanken.
- Für einige Beispiele der Azure-Dienste, die von der Datenbank aus zugegriffen werden können, siehe [diese Seite der Dokumentation](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
- Wenn mehr als eine UMI zugewiesen ist, ist es möglich, die Standard-UMI anzugeben, die verwendet werden soll.
- Es ist möglich, eine föderierte Client-Identität für den Zugriff über Mandanten hinweg zu konfigurieren.
- Es ist möglich, system- und user-managed MIs zuzuweisen.
- Wird verwendet, um auf den encryption key zuzugreifen (falls ein CMEK verwendet wird) und auf andere services aus den databases.
- Beispiele r Azure services, auf die von der database aus zugegriffen werden kann, findest du auf [dieser Seite der docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
- Wenn mehr als eine UMI zugewiesen ist, ist es möglich, die default one anzugeben, die verwendet werden soll.
- Es ist möglich, eine federated client identity für cross-tenant access zu konfigurieren.
Einige Befehle, um Informationen innerhalb eines Blob-Speichers von einer SQL-Datenbank aus zuzugreifen:
Einige commands, um Informationen innerhalb eines blob storage aus einer SQL database zuzugreifen:
```sql
-- Create a credential for the managed identity
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
@@ -69,57 +71,58 @@ GO
```
**Microsoft Defender:**
- Nützlich zur „Minderung potenzieller Datenbankanfälligkeiten und zur Erkennung anomaler Aktivitäten“
- Wir werden in einer eigenen Lektion über Defender sprechen (er kann in mehreren anderen Azure-Diensten aktiviert werden)
- Useful for “mitigating potential database vulnerabilities, and detecting anomalous activities”
- We will talk about Defender in its own lesson (it can be enabled in several other Azure services)
**Backups:**
- Die Backup-Frequenz wird in den Aufbewahrungsrichtlinien verwaltet.
- Backup frequency is managed in the retention policies.
**Gelöschte Datenbanken:**
- Es ist möglich, DBs, die aus bestehenden Backups gelöscht wurden, wiederherzustellen.
**Deleted databases:**
- Its possible to restore DBs that have been deleted from existing backups.
## Azure SQL-Datenbank
## Azure SQL Database
**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.
**Azure SQL Database** ist eine **fully managed database platform as a service (PaaS)**, die skalierbare und sichere relationale Datenbanklösungen bereitstellt. Es basiert auf den neuesten SQL Server-Technologien und macht Infrastrukturmanagement überflüssig, was es zu einer beliebten Wahl für cloud-based Anwendungen macht.
Um eine SQL-Datenbank zu erstellen, muss der SQL-Server angegeben werden, auf dem sie gehostet wird.
To create a SQL database its needed to indicate the SQL server where itll be hosted.
### Sicherheitsmerkmale der SQL-Datenbank
### SQL Database Security Features
- **Immer auf dem neuesten Stand**: Läuft auf der neuesten stabilen Version von SQL Server und erhält automatisch neue Funktionen und Patches.
- **Vererbte Sicherheitsmerkmale von SQL Server:**
- Authentifizierung (SQL und/oder Entra ID)
- Zugewiesene verwaltete Identitäten
- Netzwerkbeschränkungen
- Verschlüsselung
- **Always Up-to-Date**: Läuft auf der neuesten stabilen Version von SQL Server und erhält neue Features und Patches automatisch.
- **Inherited SQL Server security features:**
- Authentication (SQL and/or Entra ID)
- Assigned Managed Identities
- Network restrictions
- Encryption
- Backups
-
- **Datenredundanz:** Optionen sind lokal, zonen-, geo- oder geo-zonenredundant.
- **Ledger:** Es verifiziert kryptografisch die Integrität der Daten und stellt sicher, dass jede Manipulation erkannt wird. Nützlich für Finanz-, Medizin- und jede Organisation, die mit sensiblen Daten umgeht.
- **Data redundancy:** Optionen sind local, zone, Geo oder Geo-Zone redundant.
- **Ledger:** Es verifiziert kryptografisch die Integrität von Daten und stellt sicher, dass jede Manipulation erkannt wird. Nützlich für Finanz-, Medizin- und alle Organisationen, die sensitive data verwalten.
Eine SQL-Datenbank könnte Teil eines **elastischen Pools** sein. Elastische Pools sind eine kosteneffiziente Lösung zur Verwaltung mehrerer Datenbanken, indem konfigurierbare Rechen- (eDTUs) und Speicherressourcen unter ihnen geteilt werden, wobei die Preisgestaltung ausschließlich auf den zugewiesenen Ressourcen und nicht auf der Anzahl der Datenbanken basiert.
#### Azure SQL-Spaltenebene-Sicherheit (Maskierung) & Zeilenebene-Sicherheit
A SQL database could be part of an **elastic Pool**. Elastic pools are a cost-effective solution for managing multiple databases by sharing configurable compute (eDTUs) and storage resources among them, with pricing based solely on the resources allocated rather than the number of databases.
**Die dynamische** Datenmaskierung von Azure SQL ist eine Funktion, die **sensible Informationen schützt, indem sie sie** vor unbefugten Benutzern verbirgt. Anstatt die tatsächlichen Daten zu ändern, maskiert sie dynamisch die angezeigten Daten, sodass sensible Details wie Kreditkartennummern verborgen bleiben.
#### Azure SQL Column Level Security (Masking) & Row Level Security
Die **dynamische Datenmaskierung** betrifft alle Benutzer, außer denjenigen, die nicht maskiert sind (diese Benutzer müssen angegeben werden) und Administratoren. Es gibt die Konfigurationsoption, die angibt, welche SQL-Benutzer von der dynamischen Datenmaskierung ausgenommen sind, wobei **Administratoren immer ausgeschlossen** sind.
**Azure SQL's dynamic** data masking is a feature that helps **protect sensitive information by hiding it** from unauthorized users. Instead of altering the actual data, it dynamically masks the displayed data, ensuring that sensitive details like credit card numbers are obscured.
**Die Zeilenebene-Sicherheit (RLS) von Azure SQL** ist eine Funktion, die **steuert, welche Zeilen ein Benutzer anzeigen oder ändern kann**, sodass jeder Benutzer nur die für ihn relevanten Daten sieht. Durch die Erstellung von Sicherheitsrichtlinien mit Filter- oder Blockprädikaten können Organisationen einen feingranularen Zugriff auf Datenbankebene durchsetzen.
The **Dynamic Data Masking** affects to all users except the ones that are unmasked (these users need to be indicated) and administrators. It has the configuration option that specifies which SQL users are exempt from dynamic data masking, with **administrators always excluded**.
**Azure SQL Row Level Security (RLS)** is a feature that **controls which rows a user can view or modify**, ensuring each user only sees the data relevant to them. By creating security policies with filter or block predicates, organizations can enforce fine-grained access at the database level.
### Azure SQL Managed Instance
**Azure SQL Managed Instances** sind für größere, gesamte SQL Server-Instanz-Scoped-Bereitstellungen. Sie bietet nahezu 100% Kompatibilität mit dem neuesten SQL Server vor Ort (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 lokale SQL Server-Kunden vorteilhaft ist.
**Azure SQL Managed Instances** are for larger scale, entire SQL Server instance-scoped deployments. It provides near 100% compatibility with the latest SQL Server on-premises (Enterprise Edition) Database Engine, which provides a native virtual network (VNet) implementation that addresses common security concerns, and a business model favorable for on-premises SQL Server customers.
### Azure SQL-VMs
### Azure SQL Virtual Machines
**Azure SQL-VMs** ermöglichen es, **das Betriebssystem** und die SQL Server-Instanz zu **steuern**, da eine VM im VM-Dienst, der den SQL-Server ausführt, erstellt wird.
**Azure SQL Virtual Machines** allows to **control the operating system** and the SQL Server instance, as a VM will be spawn in the VM service running the SQL server.
Wenn eine SQL-VM erstellt wird, ist es möglich, **alle Einstellungen der VM auszuwählen** (wie in der VM-Lektion gezeigt), die den SQL-Server hosten wird.
- Das bedeutet, dass die VM auf einige VNet(s) zugreifen wird, möglicherweise **verwaltete Identitäten angehängt** hat, Datei-Share gemountet haben könnte… was ein **Pivoting vom SQL** zur VM super interessant macht.
- Darüber hinaus ist es möglich, eine App-ID und ein Geheimnis zu konfigurieren, um **dem SQL den Zugriff auf einen bestimmten Schlüsselbund zu ermöglichen**, der sensible Informationen enthalten könnte.
When a SQL Virtual Machine is created its possible to **selected all the settings of the VM** (as shown the VM lesson) that will be hosting the SQL server.
- This means that the VM will be accessing some VNet(s), might have **Managed Identities attached** to it, could have file shares mounted… making a **pivoting from the SQL** to the VM super interesting.
- Moreover, its possible to configure an app id and secret to **allow the SQL to access an specific key vault**, which could contain sensitive info.
Es ist auch möglich, Dinge wie **automatische SQL-Updates**, **automatische Backups**, **Entra ID-Authentifizierung** und die meisten Funktionen der anderen SQL-Dienste zu konfigurieren.
It's also possible to configure things like **automatic SQL updates**, **automatic backups**, **Entra ID authentication** and most of the features of the other SQL services.
## Enumeration
@@ -258,7 +261,7 @@ Get-AzSqlVM
{{#endtab}}
{{#endtabs}}
Zusätzlich, wenn Sie die Dynamic Data Masking und Row Level-Richtlinien innerhalb der Datenbank auflisten möchten, können Sie abfragen:
Zusätzlich kannst du, wenn du Dynamic Data Masking und Row Level policies innerhalb der Datenbank enumerieren möchtest, folgende Abfrage verwenden:
```sql
--Enumerates the masked columns
SELECT
@@ -285,7 +288,7 @@ ON sp.object_id = sp2.object_id;
```
### Verbinden und SQL-Abfragen ausführen
Sie könnten eine Verbindungszeichenfolge (die Anmeldeinformationen enthält) aus dem Beispiel [Auflisten einer Az WebApp](az-app-services.md) finden:
Du könntest einen Verbindungsstring finden (der Anmeldedaten enthält) aus dem Beispiel [Enumerierung einer Az WebApp](az-app-services.md):
```bash
function invoke-sql{
param($query)
@@ -304,30 +307,30 @@ $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:
Du kannst auch sqlcmd verwenden, um auf die Datenbank zuzugreifen. Es ist wichtig zu wissen, ob der Server öffentliche Verbindungen erlaubt `az sql server show --name <server-name> --resource-group <resource-group>`, und auch, ob die Firewall-Regel unsere IP den Zugriff erlaubt:
```bash
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
```
## Referenzen
## References
- [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)
## Privilegieneskalation
## Privilege Escalation
{{#ref}}
../az-privilege-escalation/az-sql-privesc.md
{{#endref}}
## Post-Exploitation
## Post Exploitation
{{#ref}}
../az-post-exploitation/az-sql-post-exploitation.md
{{#endref}}
### Persistenz
### Persistence
{{#ref}}
../az-persistence/az-sql-persistence.md