mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-05 09:17:24 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-unauthenticated-e
This commit is contained in:
@@ -1,76 +1,76 @@
|
||||
# AWS - Relational Database (RDS) Enum
|
||||
# AWS - Relationale Datenbank (RDS) Aufzählung
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Grundinformationen
|
||||
## Grundlegende Informationen
|
||||
|
||||
Der **Relational Database Service (RDS)**, der von AWS angeboten wird, ist darauf ausgelegt, die Bereitstellung, den Betrieb und die Skalierung einer **relationalen Datenbank in der Cloud** zu optimieren. Dieser Dienst bietet die Vorteile von Kosteneffizienz und Skalierbarkeit, während arbeitsintensive Aufgaben wie Hardwarebereitstellung, Datenbankkonfiguration, Patchen und Backups automatisiert werden.
|
||||
Der **Relational Database Service (RDS)** von AWS ist dafür ausgelegt, die Bereitstellung, den Betrieb und die Skalierung einer **relationalen Datenbank in der Cloud** zu vereinfachen. Dieser Service bietet Kosteneffizienz und Skalierbarkeit und automatisiert gleichzeitig aufwändige Aufgaben wie Hardware-Bereitstellung, Datenbankkonfiguration, Patching und Backups.
|
||||
|
||||
AWS RDS unterstützt verschiedene weit verbreitete relationale Datenbank-Engines, darunter MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server und Amazon Aurora, mit Kompatibilität für sowohl MySQL als auch PostgreSQL.
|
||||
AWS RDS unterstützt verschiedene weitverbreitete relationale Datenbank-Engines, darunter MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server und Amazon Aurora, mit Kompatibilität für MySQL und PostgreSQL.
|
||||
|
||||
Wichtige Funktionen von RDS sind:
|
||||
Wesentliche Funktionen von RDS umfassen:
|
||||
|
||||
- **Verwaltung von Datenbankinstanzen** ist vereinfacht.
|
||||
- Erstellung von **Read Replicas**, um die Leseleistung zu verbessern.
|
||||
- Konfiguration von **Multi-Availability Zone (AZ) Bereitstellungen**, um hohe Verfügbarkeit und Failover-Mechanismen sicherzustellen.
|
||||
- **Integration** mit anderen AWS-Diensten, wie:
|
||||
- AWS Identity and Access Management (**IAM**) für robuste Zugriffskontrolle.
|
||||
- AWS **CloudWatch** für umfassende Überwachung und Metriken.
|
||||
- AWS Key Management Service (**KMS**) zur Sicherstellung der Verschlüsselung im Ruhezustand.
|
||||
- Die **Verwaltung von Datenbankinstanzen** wird vereinfacht.
|
||||
- Erstellen von **Read Replicas**, um die Leseleistung zu verbessern.
|
||||
- Konfiguration von **Multi-Availability Zone (AZ) Deployments**, um hohe Verfügbarkeit und Failover-Mechanismen sicherzustellen.
|
||||
- **Integration** mit anderen AWS-Services, wie z. B.:
|
||||
- AWS Identity and Access Management (**IAM**) für robustes Zugriffsmanagement.
|
||||
- AWS **CloudWatch** für umfassendes Monitoring und Metriken.
|
||||
- AWS Key Management Service (**KMS**) zur Gewährleistung der Verschlüsselung ruhender Daten.
|
||||
|
||||
## Anmeldeinformationen
|
||||
## Anmeldedaten
|
||||
|
||||
Beim Erstellen des DB-Clusters kann der Master-**Benutzername** konfiguriert werden (**`admin`** standardmäßig). Um das Passwort dieses Benutzers zu generieren, können Sie:
|
||||
Beim Erstellen des DB-Clusters kann der Master-**Benutzername** konfiguriert werden (standardmäßig **`admin`**). Um das Passwort dieses Benutzers zu erzeugen, können Sie:
|
||||
|
||||
- **Ein Passwort** selbst **angeben**
|
||||
- RDS anweisen, es **automatisch zu generieren**
|
||||
- RDS anweisen, es im **AWS Secret Manager** zu verwalten, verschlüsselt mit einem KMS-Schlüssel
|
||||
- **Ein eigenes Passwort angeben**
|
||||
- RDS das Passwort **automatisch generieren** lassen
|
||||
- RDS anweisen, es im **AWS Secret Manager** verschlüsselt mit einem KMS-Key zu verwalten
|
||||
|
||||
<figure><img src="../../../images/image (144).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Authentifizierung
|
||||
|
||||
Es gibt 3 Arten von Authentifizierungsoptionen, aber die Verwendung des **Master-Passworts ist immer erlaubt**:
|
||||
Es gibt 3 Arten der Authentifizierung, aber die Verwendung des **Master-Passworts ist immer erlaubt**:
|
||||
|
||||
<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Öffentlicher Zugriff & VPC
|
||||
|
||||
Standardmäßig wird **kein öffentlicher Zugriff** auf die Datenbanken gewährt, jedoch **kann er gewährt werden**. Daher können standardmäßig nur Maschinen aus derselben VPC darauf zugreifen, wenn die ausgewählte **Sicherheitsgruppe** (die in EC2 SG gespeichert ist) dies zulässt.
|
||||
Standardmäßig wird **kein öffentlicher Zugriff** auf die Datenbanken gewährt, jedoch **kann** er gewährt werden. Daher können standardmäßig nur Maschinen aus derselben VPC darauf zugreifen, sofern die ausgewählte **security group** (in EC2 SG gespeichert) dies erlaubt.
|
||||
|
||||
Anstatt eine DB-Instanz exponieren, ist es möglich, einen **RDS Proxy** zu erstellen, der die **Skalierbarkeit** und **Verfügbarkeit** des DB-Clusters **verbessert**.
|
||||
Anstatt eine DB-Instanz zu exponieren, ist es möglich, einen **RDS Proxy** zu erstellen, der die **Skalierbarkeit** und **Verfügbarkeit** des DB-Clusters verbessert.
|
||||
|
||||
Darüber hinaus kann auch der **Datenbankport geändert** werden.
|
||||
Auch der **Datenbankport kann geändert** werden.
|
||||
|
||||
### Verschlüsselung
|
||||
|
||||
**Verschlüsselung ist standardmäßig aktiviert** und verwendet einen von AWS verwalteten Schlüssel (ein CMK kann stattdessen ausgewählt werden).
|
||||
**Verschlüsselung ist standardmäßig aktiviert** und verwendet einen von AWS verwalteten Key (stattdessen kann ein CMK gewählt werden).
|
||||
|
||||
Durch die Aktivierung Ihrer Verschlüsselung aktivieren Sie die **Verschlüsselung im Ruhezustand für Ihren Speicher, Snapshots, Read Replicas und Ihre Backups**. Schlüssel zur Verwaltung dieser Verschlüsselung können durch die Verwendung von **KMS** ausgegeben werden.\
|
||||
Es ist nicht möglich, dieses Niveau der Verschlüsselung hinzuzufügen, nachdem Ihre Datenbank erstellt wurde. **Es muss während ihrer Erstellung erfolgen**.
|
||||
Durch Aktivierung der Verschlüsselung aktivieren Sie die **Verschlüsselung ruhender Daten (encryption at rest) für Storage, Snapshots, Read Replicas und Backups**. Schlüssel zur Verwaltung dieser Verschlüsselung können über **KMS** ausgegeben werden.\
|
||||
Es ist nicht möglich, diese Verschlüsselungsebene hinzuzufügen, nachdem Ihre Datenbank erstellt wurde. **Sie muss während der Erstellung konfiguriert werden**.
|
||||
|
||||
Es gibt jedoch einen **Workaround, der es Ihnen ermöglicht, eine unverschlüsselte Datenbank wie folgt zu verschlüsseln**. Sie können einen Snapshot Ihrer unverschlüsselten Datenbank erstellen, eine verschlüsselte Kopie dieses Snapshots erstellen, diesen verschlüsselten Snapshot verwenden, um eine neue Datenbank zu erstellen, und schließlich wäre Ihre Datenbank dann verschlüsselt.
|
||||
Es gibt jedoch einen **Workaround, mit dem Sie eine unverschlüsselte Datenbank wie folgt verschlüsseln können**: Sie können einen Snapshot Ihrer unverschlüsselten Datenbank erstellen, eine verschlüsselte Kopie dieses Snapshots anlegen, diesen verschlüsselten Snapshot verwenden, um eine neue Datenbank zu erstellen — damit ist die neue Datenbank verschlüsselt.
|
||||
|
||||
#### Transparente Datenverschlüsselung (TDE)
|
||||
#### Transparent Data Encryption (TDE)
|
||||
|
||||
Neben den Verschlüsselungsfunktionen, die RDS auf Anwendungsebene bietet, unterstützt RDS auch **zusätzliche plattformseitige Verschlüsselungsmechanismen**, um Daten im Ruhezustand zu schützen. Dazu gehört die **Transparente Datenverschlüsselung (TDE)** für Oracle und SQL Server. Es ist jedoch wichtig zu beachten, dass TDE zwar die Sicherheit erhöht, indem es Daten im Ruhezustand verschlüsselt, es jedoch auch **die Datenbankleistung beeinträchtigen kann**. Diese Leistungsbeeinträchtigung ist besonders bemerkbar, wenn sie in Verbindung mit MySQL-Kryptografiefunktionen oder Microsoft Transact-SQL-Kryptografiefunktionen verwendet wird.
|
||||
Zusätzlich zu den auf Anwendungsebene vorhandenen Verschlüsselungsfunktionen von RDS unterstützt RDS auch **plattformseitige zusätzliche Verschlüsselungsmechanismen**, um ruhende Daten zu schützen. Dazu gehört **Transparent Data Encryption (TDE)** für Oracle und SQL Server. Es ist jedoch wichtig zu beachten, dass TDE zwar die Sicherheit durch Verschlüsselung ruhender Daten erhöht, aber auch die **Datenbankleistung beeinträchtigen** kann. Diese Leistungsbeeinträchtigung ist besonders auffällig bei Verwendung in Verbindung mit MySQL-Kryptofunktionen oder Microsoft Transact-SQL-Kryptofunktionen.
|
||||
|
||||
Um TDE zu nutzen, sind bestimmte vorbereitende Schritte erforderlich:
|
||||
|
||||
1. **Option Group Association**:
|
||||
- Die Datenbank muss mit einer Optionsgruppe verbunden sein. Optionsgruppen dienen als Container für Einstellungen und Funktionen und erleichtern die Datenbankverwaltung, einschließlich Sicherheitsverbesserungen.
|
||||
- Es ist jedoch wichtig zu beachten, dass Optionsgruppen nur für bestimmte Datenbank-Engines und -Versionen verfügbar sind.
|
||||
2. **Einbeziehung von TDE in die Optionsgruppe**:
|
||||
- Sobald die Datenbank mit einer Optionsgruppe verbunden ist, muss die Oracle-Option für die transparente Datenverschlüsselung in diese Gruppe aufgenommen werden.
|
||||
- Es ist wichtig zu erkennen, dass die TDE-Option, sobald sie zu einer Optionsgruppe hinzugefügt wurde, ein permanentes Element wird und nicht entfernt werden kann.
|
||||
1. **Option Group-Zuordnung**:
|
||||
- Die Datenbank muss einer Option Group zugewiesen sein. Option Groups dienen als Container für Einstellungen und Features, die die Datenbankverwaltung erleichtern, einschließlich Sicherheitsverbesserungen.
|
||||
- Es ist jedoch wichtig zu beachten, dass Option Groups nur für bestimmte Datenbank-Engines und -Versionen verfügbar sind.
|
||||
2. **Aufnahme von TDE in die Option Group**:
|
||||
- Sobald die Datenbank einer Option Group zugewiesen ist, muss die Oracle Transparent Data Encryption-Option in dieser Gruppe enthalten sein.
|
||||
- Es ist wichtig zu erkennen, dass sobald die TDE-Option zu einer Option Group hinzugefügt wurde, sie dauerhaft ist und nicht entfernt werden kann.
|
||||
3. **TDE-Verschlüsselungsmodi**:
|
||||
- TDE bietet zwei verschiedene Verschlüsselungsmodi:
|
||||
- **TDE Tablespace Encryption**: Dieser Modus verschlüsselt gesamte Tabellen und bietet einen breiteren Schutzbereich für Daten.
|
||||
- **TDE Tablespace Encryption**: Dieser Modus verschlüsselt komplette Tablespaces/Tabellen und bietet einen breiteren Schutzumfang.
|
||||
- **TDE Column Encryption**: Dieser Modus konzentriert sich auf die Verschlüsselung spezifischer, einzelner Elemente innerhalb der Datenbank und ermöglicht eine granularere Kontrolle darüber, welche Daten verschlüsselt werden.
|
||||
|
||||
Das Verständnis dieser Voraussetzungen und der betrieblichen Einzelheiten von TDE ist entscheidend für die effektive Implementierung und Verwaltung der Verschlüsselung innerhalb von RDS, um sowohl die Datensicherheit als auch die Einhaltung notwendiger Standards zu gewährleisten.
|
||||
Das Verständnis dieser Voraussetzungen und der betrieblichen Feinheiten von TDE ist entscheidend, um Verschlüsselung innerhalb von RDS effektiv zu implementieren und zu verwalten und sowohl Datensicherheit als auch Compliance mit erforderlichen Standards sicherzustellen.
|
||||
|
||||
### Enumeration
|
||||
### Aufzählung
|
||||
```bash
|
||||
# Clusters info
|
||||
## Get Endpoints, username, port, iam auth enabled, attached roles, SG
|
||||
@@ -80,6 +80,10 @@ aws rds describe-db-cluster-backtracks --db-cluster-identifier <cluster-name>
|
||||
|
||||
## Cluster snapshots
|
||||
aws rds describe-db-cluster-snapshots
|
||||
aws rds describe-db-cluster-snapshots --include-public --snapshot-type public
|
||||
|
||||
## Restore cluster snapshot as new instance
|
||||
aws rds restore-db-instance-from-db-snapshot --db-cluster-identifier <ID> --snapshot-identifier <ID>
|
||||
|
||||
# Get DB instances info
|
||||
aws rds describe-db-instances #username, url, port, vpc, SG, is public?
|
||||
@@ -91,6 +95,7 @@ aws rds describe-db-instance-automated-backups
|
||||
## Find snapshots
|
||||
aws rds describe-db-snapshots
|
||||
aws rds describe-db-snapshots --include-public --snapshot-type public
|
||||
|
||||
## Restore snapshot as new instance
|
||||
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier <ID> --db-snapshot-identifier <ID> --availability-zone us-west-2a
|
||||
|
||||
@@ -105,7 +110,7 @@ aws rds describe-db-proxy-targets
|
||||
## reset credentials of MasterUsername
|
||||
aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password <NewPassword> --apply-immediately
|
||||
```
|
||||
### Unauthenticated Access
|
||||
### Nicht authentifizierter Zugriff
|
||||
|
||||
{{#ref}}
|
||||
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md
|
||||
@@ -131,7 +136,7 @@ aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password
|
||||
|
||||
### SQL Injection
|
||||
|
||||
Es gibt Möglichkeiten, auf DynamoDB-Daten mit **SQL-Syntax** zuzugreifen, daher sind typische **SQL-Injektionen ebenfalls möglich**.
|
||||
Es gibt Möglichkeiten, auf DynamoDB-Daten mit **SQL syntax** zuzugreifen; daher sind typische **SQL injections** ebenfalls möglich.
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
|
||||
|
||||
@@ -12,11 +12,11 @@ Für weitere Informationen siehe:
|
||||
|
||||
## Öffentlicher Port
|
||||
|
||||
Es ist möglich, einer **Datenbank aus dem Internet** öffentlichen Zugriff zu gewähren. Der Angreifer müsste jedoch weiterhin den **Benutzernamen und das Passwort** kennen, IAM-Zugriff haben oder einen **exploit**, um in die Datenbank einzudringen.
|
||||
Es ist möglich, **öffentlichen Zugriff auf die Datenbank aus dem Internet** zu gewähren. Der Angreifer benötigt jedoch weiterhin **Benutzername und Passwort,** IAM-Zugriff oder einen **exploit**, um in die Datenbank einzudringen.
|
||||
|
||||
## Öffentliche RDS Snapshots
|
||||
|
||||
AWS erlaubt es, **jedem den Zugriff zum Herunterladen von RDS-Snapshots** zu gewähren. Du kannst diese öffentlichen RDS-Snapshots sehr einfach aus deinem eigenen Account auflisten:
|
||||
AWS erlaubt es, **jedem den Zugriff zum Herunterladen von RDS-Snapshots** zu gewähren. Du kannst diese öffentlichen RDS-Snapshots sehr einfach von deinem eigenen Account aus auflisten:
|
||||
```bash
|
||||
# Public RDS snapshots
|
||||
aws rds describe-db-snapshots --include-public
|
||||
@@ -32,6 +32,19 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2]
|
||||
## Even if in the console appear as there are public snapshot it might be public
|
||||
## snapshots from other accounts used by the current account
|
||||
```
|
||||
## Öffentliche RDS Cluster Snapshots
|
||||
|
||||
Ebenso kannst du nach Cluster Snapshots suchen
|
||||
```bash
|
||||
# Public RDS cluster snapshots
|
||||
aws rds describe-db-cluster-snapshots --include-public
|
||||
|
||||
## Search by account ID
|
||||
aws rds describe-db-cluster-snapshots --include-public --query 'DBClusterSnapshots[?contains(DBClusterSnapshotIdentifier, `284546856933:`) == `true`]'
|
||||
|
||||
# From the own account you can check if there is any public cluster snapshot with:
|
||||
aws rds describe-db-cluster-snapshots --snapshot-type public [--region us-west-2]
|
||||
```
|
||||
### Öffentliche URL-Vorlage
|
||||
```
|
||||
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306
|
||||
|
||||
Reference in New Issue
Block a user