AWS - Relational Database (RDS) Enum

Wsparcie dla HackTricks

Podstawowe informacje

Usługa Relacyjnej Bazy Danych (RDS) oferowana przez AWS jest zaprojektowana w celu uproszczenia wdrażania, obsługi i skalowania relacyjnej bazy danych w chmurze. Usługa ta oferuje zalety efektywności kosztowej i skalowalności, automatyzując pracochłonne zadania, takie jak provisionowanie sprzętu, konfiguracja bazy danych, łatanie i tworzenie kopii zapasowych.

AWS RDS obsługuje różne powszechnie używane silniki relacyjnych 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 bazy danych jest uproszczone.

  • Tworzenie replik 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 w spoczynku.

Poświadczenia

Podczas tworzenia klastra DB główny nazwa użytkownika może być skonfigurowana (admin domyślnie). Aby wygenerować hasło tego użytkownika, możesz:

  • Wskazać hasło samodzielnie

  • Powiedzieć RDS, aby automatycznie wygenerował je

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

Uwierzytelnianie

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

Publiczny dostęp i VPC

Domyślnie brak publicznego dostępu 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 narażać instancję DB, można utworzyć RDS Proxy, który poprawia skalowalność i dostępność klastra DB.

Ponadto, port bazy danych może być również modyfikowany.

Szyfrowanie

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

Włączając szyfrowanie, włączasz szyfrowanie w spoczynku dla swojego przechowywania, migawków, replik odczytu i kopii zapasowych. Klucze do zarządzania tym szyfrowaniem mogą być wydawane przy użyciu KMS. Nie można dodać tego poziomu szyfrowania po utworzeniu bazy danych. Musisz to zrobić podczas jej tworzenia.

Jednak istnieje obejście, które pozwala na szyfrowanie nieszyfrowanej bazy danych w następujący sposób. Możesz utworzyć migawkę swojej nieszyfrowanej bazy danych, utworzyć zaszyfrowaną kopię tej migawki, użyć tej zaszyfrowanej migawki do utworzenia nowej bazy danych, a następnie, w końcu, twoja baza danych będzie zaszyfrowana.

Szyfrowanie danych w trybie przezroczystym (TDE)

Obok możliwości szyfrowania inherentnych dla RDS na poziomie aplikacji, RDS wspiera również dodatkowe mechanizmy szyfrowania na poziomie platformy w celu ochrony danych w spoczynku. Obejmuje to Szyfrowanie Danych w Trybie Przezroczystym (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. Stowarzyszenie grupy 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.

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

  1. Włączenie TDE w grupie opcji:

  • Po powiązaniu z grupą opcji, opcja Oracle Transparent Data Encryption musi być włączona w tej grupie.

  • Ważne jest, aby rozpoznać, że po dodaniu opcji TDE do grupy opcji staje się ona stałym elementem i nie może być usunięta.

  1. Tryby szyfrowania TDE:

  • TDE oferuje dwa odrębne 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 konkretnych, indywidualnych elementów w bazie danych, co pozwala na bardziej szczegółową kontrolę nad tym, jakie dane są szyfrowane.

Zrozumienie tych wymagań wstępnych i operacyjnych zawirowań TDE jest kluczowe dla skutecznego wdrażania 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

Po eksploatacji

AWS - RDS Post Exploitation

Utrzymywanie

AWS - RDS Persistence

SQL Injection

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

Wsparcie HackTricks

Last updated