mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-30 22:50:43 -08:00
Translated ['src/pentesting-cloud/azure-security/az-services/az-sql.md']
This commit is contained in:
@@ -11,7 +11,7 @@ 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 haben möchten.
|
||||
4. **Azure SQL Server auf Azure VMs**: Dies ist am besten für Architekturen geeignet, in denen Sie **Kontrolle über das Betriebssystem** und die SQL Server-Instanz haben möchten.
|
||||
|
||||
### SQL Server-Sicherheitsfunktionen
|
||||
|
||||
@@ -20,31 +20,57 @@ Azure SQL besteht aus vier Hauptangeboten:
|
||||
- Ö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 (z. B. um den Abfrage-Editor im Portal zu verwenden oder um einer Azure-VM die Verbindung zu erlauben).
|
||||
- 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).
|
||||
|
||||
**Authentifizierungsmethoden:**
|
||||
|
||||
- Microsoft **Entra-only**-Authentifizierung: Sie müssen die Entra-Prinzipien angeben, die Zugriff auf den Dienst haben.
|
||||
- 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 zulassen.
|
||||
- **Nur SQL**-Authentifizierung: Nur Zugriff über Datenbankbenutzer 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.
|
||||
|
||||
**Verschlüsselung:**
|
||||
|
||||
- Es wird als „Transparente Datenverschlüsselung“ bezeichnet und verschlüsselt Datenbanken, Backups und Protokolle im Ruhezustand.
|
||||
- Wie immer wird standardmäßig ein Azure-verwalteter Schlüssel verwendet, aber es könnte auch ein vom Kunden verwalteter Verschlüsselungsschlüssel (CMEK) verwendet werden.
|
||||
- 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:**
|
||||
|
||||
- Es ist möglich, system- und benutzerverwaltete MIs zuzuweisen.
|
||||
- Wird verwendet, um auf den Verschlüsselungsschlüssel (wenn ein CMEK verwendet wird) und andere Dienste aus den Datenbanken zuzugreifen.
|
||||
- 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.
|
||||
|
||||
Einige Befehle, um Informationen innerhalb eines Blob-Speichers von einer SQL-Datenbank aus zuzugreifen:
|
||||
```sql
|
||||
-- Create a credential for the managed identity
|
||||
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
|
||||
WITH IDENTITY = 'Managed Identity';
|
||||
GO
|
||||
|
||||
-- Create an external data source pointing to the blob storage to access
|
||||
CREATE EXTERNAL DATA SOURCE ManagedIdentity
|
||||
WITH (
|
||||
TYPE = BLOB_STORAGE,
|
||||
LOCATION = 'https://testsqlidentity.blob.core.windows.net/sqlcontainer',
|
||||
CREDENTIAL = ManagedIdentityCredential
|
||||
);
|
||||
GO
|
||||
|
||||
-- Read a file from ths storage and return it
|
||||
SELECT *
|
||||
FROM OPENROWSET(
|
||||
BULK 'message.txt',
|
||||
DATA_SOURCE = 'ManagedIdentity',
|
||||
SINGLE_CLOB
|
||||
) AS DataFile;
|
||||
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).
|
||||
- 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)
|
||||
|
||||
**Backups:**
|
||||
- Die Backup-Frequenz wird in den Aufbewahrungsrichtlinien verwaltet.
|
||||
@@ -61,39 +87,39 @@ Um eine SQL-Datenbank zu erstellen, muss der SQL-Server angegeben werden, auf de
|
||||
### Sicherheitsfunktionen der SQL-Datenbank
|
||||
|
||||
- **Immer auf dem neuesten Stand**: Läuft auf der neuesten stabilen Version von SQL Server und erhält automatisch neue Funktionen und Patches.
|
||||
- **Vererbte SQL Server-Sicherheitsfunktionen:**
|
||||
- Authentifizierung (SQL und/oder Entra-ID)
|
||||
- **Vererbte Sicherheitsfunktionen von SQL Server:**
|
||||
- Authentifizierung (SQL und/oder Entra ID)
|
||||
- Zugewiesene verwaltete Identitäten
|
||||
- Netzwerkbeschränkungen
|
||||
- Verschlüsselung
|
||||
- Backups
|
||||
- …
|
||||
- **Datenredundanz:** Optionen sind lokal, zonen-, geo- oder geo-zonenredundant.
|
||||
- **Ledger:** Es überprüft 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.
|
||||
- **Ledger:** Es überprüft kryptografisch die Integrität der Daten und stellt sicher, dass Manipulationen erkannt werden. Nützlich für Finanz-, Medizin- und jede Organisation, die mit sensiblen Daten umgeht.
|
||||
|
||||
Eine SQL-Datenbank könnte Teil eines **elastischen Pools** sein. Elastische Pools sind eine kosteneffektive Lösung zur Verwaltung mehrerer Datenbanken, indem konfigurierbare Rechenressourcen (eDTUs) und Speicherressourcen unter ihnen geteilt werden, wobei die Preisgestaltung ausschließlich auf den zugewiesenen Ressourcen und nicht auf der Anzahl der Datenbanken basiert.
|
||||
Eine SQL-Datenbank könnte Teil eines **Elastic Pools** sein. Elastic 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
|
||||
|
||||
**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 unkenntlich gemacht werden.
|
||||
|
||||
Die **dynamische Datenmaskierung** betrifft alle Benutzer, außer denjenigen, die nicht maskiert sind (diese Benutzer müssen angegeben werden) und Administratoren. Sie hat die Konfigurationsoption, die angibt, welche SQL-Benutzer von der dynamischen Datenmaskierung ausgenommen sind, wobei **Administratoren immer ausgeschlossen** sind.
|
||||
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-Zeilenebene-Sicherheit (RLS)** 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.
|
||||
**Azure SQL-Zeilenebene-Sicherheit (RLS)** ist eine Funktion, die **steuert, welche Zeilen ein Benutzer sehen 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.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
**Azure SQL Managed Instances** sind für größere, gesamte SQL Server-Instanz-Umsetzungen. Es 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** sind für größere, gesamte SQL Server-Instanz-Scoped-Bereitstellungen. Sie bieten 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-VMs
|
||||
|
||||
**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-VMs** ermöglichen es, **das Betriebssystem** und die SQL Server-Instanz zu **steuern**, da eine VM im VM-Dienst gestartet wird, der den SQL-Server ausführt.
|
||||
|
||||
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) zugreift, 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.
|
||||
- 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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
## Enumeration
|
||||
|
||||
@@ -304,7 +330,7 @@ sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passwork
|
||||
### Persistenz
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-sql-persistance.md
|
||||
../az-persistence/az-sql-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user