AWS - Relational Database (RDS) Enum

Support HackTricks

Podstawowe Informacje

Relational Database Service (RDS) oferowany przez AWS jest zaprojektowany, aby uprościć wdrażanie, obsługę i skalowanie relacyjnej bazy danych w chmurze. Usługa ta oferuje korzyści w zakresie efektywności kosztowej i skalowalności, automatyzując pracochłonne zadania, takie jak dostarczanie sprzętu, konfiguracja bazy danych, aktualizacje i kopie zapasowe.

AWS RDS obsługuje różne powszechnie używane silniki baz danych, w tym MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server i Amazon Aurora, z kompatybilnością zarówno dla MySQL, jak i PostgreSQL.

Kluczowe cechy RDS obejmują:

  • Zarządzanie instancjami baz danych jest uproszczone.

  • Tworzenie replik do odczytu w celu zwiększenia wydajności odczytu.

  • Konfiguracja wdrożeń w wielu strefach dostępności (AZ) w celu zapewnienia wysokiej dostępności i mechanizmów przełączania awaryjnego.

  • Integracja z innymi usługami AWS, takimi jak:

  • AWS Identity and Access Management (IAM) dla solidnej kontroli dostępu.

  • AWS CloudWatch dla kompleksowego monitorowania i metryk.

  • AWS Key Management Service (KMS) w celu zapewnienia szyfrowania danych w spoczynku.

Poświadczenia

Podczas tworzenia klastra DB można skonfigurować główną nazwę użytkownika (admin domyślnie). Aby wygenerować hasło dla tego użytkownika, można:

  • Wskazać hasło samodzielnie

  • Powiedzieć RDS, aby wygenerował je automatycznie

  • Powiedzieć RDS, aby zarządzał nim w AWS Secret Manager zaszyfrowanym kluczem KMS

Uwierzytelnianie

Istnieją 3 rodzaje opcji uwierzytelniania, ale użycie głównego hasła jest zawsze dozwolone:

Dostęp Publiczny i VPC

Domyślnie nie przyznaje się dostępu publicznego do baz danych, jednak może być przyznany. Dlatego domyślnie tylko maszyny z tej samej VPC będą mogły uzyskać do niej dostęp, jeśli wybrana grupa zabezpieczeń (przechowywana w EC2 SG) na to pozwala.

Zamiast eksponować instancję DB, można utworzyć RDS Proxy, który poprawia skalowalność i dostępność klastra DB.

Ponadto port bazy danych może być zmodyfikowany.

Szyfrowanie

Szyfrowanie jest domyślnie włączone przy użyciu zarządzanego klucza AWS (można wybrać CMK zamiast tego).

Włączając szyfrowanie, włączasz szyfrowanie danych w spoczynku dla swojego magazynu, migawki, replik do odczytu i kopii zapasowych. Klucze do zarządzania tym szyfrowaniem mogą być wydawane za pomocą KMS. Nie można dodać tego poziomu szyfrowania po utworzeniu bazy danych. Musi to być zrobione podczas jej tworzenia.

Jednak istnieje obejście pozwalające na zaszyfrowanie niezaszyfrowanej bazy danych w następujący sposób. Można utworzyć migawkę niezaszyfrowanej bazy danych, utworzyć zaszyfrowaną kopię tej migawki, użyć tej zaszyfrowanej migawki do utworzenia nowej bazy danych, a następnie baza danych będzie zaszyfrowana.

Transparent Data Encryption (TDE)

Oprócz wbudowanych możliwości szyfrowania na poziomie aplikacji, RDS obsługuje również dodatkowe mechanizmy szyfrowania na poziomie platformy w celu ochrony danych w spoczynku. Obejmuje to Transparent Data Encryption (TDE) dla Oracle i SQL Server. Jednak ważne jest, aby zauważyć, że chociaż TDE zwiększa bezpieczeństwo poprzez szyfrowanie danych w spoczynku, może również wpływać na wydajność bazy danych. Ten wpływ na wydajność jest szczególnie zauważalny, gdy jest używany w połączeniu z funkcjami kryptograficznymi MySQL lub funkcjami kryptograficznymi Microsoft Transact-SQL.

Aby skorzystać z TDE, wymagane są pewne wstępne kroki:

  1. Powiązanie z grupą opcji:

  • Baza danych musi być powiązana z grupą opcji. Grupy opcji służą jako kontenery dla ustawień i funkcji, ułatwiając zarządzanie bazą danych, w tym ulepszenia bezpieczeństwa.

  • Ważne jest jednak, aby zauważyć, że grupy opcji są dostępne tylko dla określonych silników baz danych i wersji.

  1. Dodanie TDE do grupy opcji:

  • Po powiązaniu z grupą opcji, opcja Oracle Transparent Data Encryption musi być dodana do tej grupy.

  • Ważne jest, aby zauważyć, że po dodaniu opcji TDE do grupy opcji, staje się ona stałym elementem i nie można jej usunąć.

  1. Tryby szyfrowania TDE:

  • TDE oferuje dwa różne tryby szyfrowania:

  • Szyfrowanie przestrzeni tabel TDE: Ten tryb szyfruje całe tabele, zapewniając szerszy zakres ochrony danych.

  • Szyfrowanie kolumn TDE: Ten tryb koncentruje się na szyfrowaniu określonych, indywidualnych elementów w bazie danych, umożliwiając bardziej szczegółową kontrolę nad tym, które dane są szyfrowane.

Zrozumienie tych wymagań wstępnych i operacyjnych zawiłości TDE jest kluczowe dla skutecznego wdrożenia i zarządzania szyfrowaniem w RDS, zapewniając zarówno bezpieczeństwo danych, jak i zgodność z niezbędnymi standardami.

Enumeracja

# 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

Nieautoryzowany Dostęp

AWS - RDS Unauthenticated Enum

Privesc

AWS - RDS Privesc

Post Exploitation

AWS - RDS Post Exploitation

Utrzymanie Dostępu

AWS - RDS Persistence

SQL Injection

Istnieją sposoby na dostęp do danych DynamoDB za pomocą składni SQL, dlatego typowe SQL injections są również możliwe.

Wspieraj HackTricks

Last updated