AWS - Relational Database (RDS) Enum

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Der von AWS angebotene Relationale Datenbankdienst (RDS) ist darauf ausgelegt, die Bereitstellung, den Betrieb und das Skalieren einer relationale Datenbank in der Cloud zu vereinfachen. Dieser Dienst bietet die Vorteile der Kosteneffizienz und Skalierbarkeit und automatisiert arbeitsintensive Aufgaben wie Hardwarebereitstellung, 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 sowohl für MySQL als auch für PostgreSQL.

Zu den wichtigsten Funktionen von RDS gehören:

  • Die Verwaltung von Datenbankinstanzen ist vereinfacht.

  • Erstellung von Lese-Replikaten zur Verbesserung der Leseleistung.

  • Konfiguration von Multi-Availability Zone (AZ)-Bereitstellungen zur Gewährleistung hoher Verfügbarkeit und Failover-Mechanismen.

  • Integration mit anderen AWS-Diensten wie:

  • AWS Identity and Access Management (IAM) für eine robuste Zugriffskontrolle.

  • AWS CloudWatch für umfassendes Monitoring und Metriken.

  • AWS Key Management Service (KMS) zur Sicherstellung der Verschlüsselung im Ruhezustand.

Anmeldeinformationen

Beim Erstellen des DB-Clusters kann der Master-Benutzername konfiguriert werden (standardmäßig admin). Um das Passwort dieses Benutzers zu generieren, können Sie:

  • Geben Sie ein Passwort selbst an

  • Lassen Sie RDS es automatisch generieren

  • Lassen Sie RDS es im AWS Secret Manager verwalten, verschlüsselt mit einem KMS-Schlüssel

Authentifizierung

Es gibt 3 Arten von Authentifizierungsoptionen, aber die Verwendung des Master-Passworts ist immer erlaubt:

Öffentlicher Zugriff & VPC

Standardmäßig wird kein öffentlicher Zugriff auf die Datenbanken gewährt, jedoch könnte er gewährt werden. Daher können standardmäßig nur Maschinen aus demselben VPC darauf zugreifen, wenn die ausgewählte Sicherheitsgruppe (in EC2 SG gespeichert) dies zulässt.

Anstatt eine DB-Instanz freizugeben, ist es möglich, einen RDS-Proxy zu erstellen, der die Skalierbarkeit und Verfügbarkeit des DB-Clusters verbessert.

Darüber hinaus kann der Datenbankport ebenfalls geändert werden.

Verschlüsselung

Die Verschlüsselung ist standardmäßig aktiviert und verwendet einen von AWS verwalteten Schlüssel (es könnte stattdessen ein CMK ausgewählt werden).

Durch Aktivieren Ihrer Verschlüsselung aktivieren Sie Verschlüsselung im Ruhezustand für Ihren Speicher, Snapshots, Lese-Replikate und Backups. Schlüssel zur Verwaltung dieser Verschlüsselung können durch Verwendung von KMS ausgestellt werden. Es ist nicht möglich, diese Verschlüsselungsebene hinzuzufügen, nachdem Ihre Datenbank erstellt wurde. Es muss während ihrer Erstellung erfolgen.

Es gibt jedoch einen Workaround, der es Ihnen ermöglicht, eine unverschlüsselte Datenbank zu verschlüsseln, wie folgt. 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 dann wäre Ihre Datenbank verschlüsselt.

Transparente Datenverschlüsselung (TDE)

Neben den Verschlüsselungsfunktionen, die in RDS auf Anwendungsebene vorhanden sind, unterstützt RDS auch zusätzliche Verschlüsselungsmechanismen auf Plattformebene, 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 die Sicherheit durch Verschlüsselung von Daten im Ruhezustand verbessert, aber auch die Datenbankleistung beeinträchtigen kann. Diese Leistungsauswirkung ist besonders spürbar, wenn sie in Verbindung mit kryptografischen Funktionen von MySQL oder Microsoft Transact-SQL verwendet wird.

Um TDE zu nutzen, sind bestimmte vorbereitende Schritte erforderlich:

  1. Zuordnung zur Optionsgruppe:

  • Die Datenbank muss mit einer Optionsgruppe verknüpft sein. Optionsgruppen dienen als Container für Einstellungen und Funktionen, die die Datenbankverwaltung erleichtern, einschließlich Sicherheitsverbesserungen.

  • Es ist jedoch wichtig zu beachten, dass Optionsgruppen nur für bestimmte Datenbank-Engines und -Versionen verfügbar sind.

  1. Einbeziehung von TDE in Optionsgruppe:

  • Sobald mit einer Optionsgruppe verknüpft, muss die Oracle Transparente Datenverschlüsselungsoption in diese Gruppe aufgenommen werden.

  • Es ist wichtig zu erkennen, dass die TDE-Option, sobald sie einer Optionsgruppe hinzugefügt wurde, eine dauerhafte Einrichtung wird und nicht entfernt werden kann.

  1. TDE-Verschlüsselungsmodi:

  • TDE bietet zwei verschiedene Verschlüsselungsmodi:

  • TDE-Tablespace-Verschlüsselung: Dieser Modus verschlüsselt ganze Tabellen und bietet einen breiteren Schutzumfang für Daten.

  • TDE-Spaltenverschlüsselung: Dieser Modus konzentriert sich auf die Verschlüsselung bestimmter einzelner Elemente innerhalb der Datenbank und ermöglicht eine genauere Kontrolle darüber, welche Daten verschlüsselt werden.

Das Verständnis dieser Voraussetzungen und der betrieblichen Feinheiten von TDE ist entscheidend für die effektive Implementierung und Verwaltung der Verschlüsselung in RDS, um sowohl die Datensicherheit als auch die Einhaltung erforderlicher Standards zu gewährleisten.

Enumeration

# Clusters info
## Get Endpoints, username, port, iam auth enabled, attached roles, SG
aws rds describe-db-clusters
aws rds describe-db-cluster-endpoints #Cluster URLs
aws rds describe-db-cluster-backtracks --db-cluster-identifier <cluster-name>

## Cluster snapshots
aws rds describe-db-cluster-snapshots

# Get DB instances info
aws rds describe-db-instances #username, url, port, vpc, SG, is public?
aws rds describe-db-security-groups

## Find automated backups
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

# Any public snapshot in the account
aws rds describe-db-snapshots --snapshot-type public

# Proxies
aws rds describe-db-proxy-endpoints
aws rds describe-db-proxy-target-groups
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

Nicht authentifizierter Zugriff

pageAWS - RDS Unauthenticated Enum

Privilege Escalation

pageAWS - RDS Privesc

Post-Exploitation

pageAWS - RDS Post Exploitation

Persistenz

pageAWS - RDS Persistence

SQL-Injection

Es gibt Möglichkeiten, auf DynamoDB-Daten mit SQL-Syntax zuzugreifen, daher sind auch typische SQL-Injections möglich.

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated