AWS - Base de données relationnelle (RDS) - Enumération

Reading time: 7 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Le Relational Database Service (RDS) proposé par AWS est conçu pour simplifier le déploiement, l'exploitation et la montée en charge d'une base de données relationnelle dans le cloud. Ce service offre des avantages en termes de coût et de scalabilité tout en automatisant des tâches chronophages comme le provisioning matériel, la configuration de la base, le patching et les sauvegardes.

AWS RDS prend en charge plusieurs moteurs de bases de données relationnelles largement utilisés tels que MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server et Amazon Aurora, avec compatibilité pour MySQL et PostgreSQL.

Fonctionnalités clés de RDS :

  • La gestion des instances de bases de données est simplifiée.
  • Création de read replicas pour améliorer les performances en lecture.
  • Configuration de déploiements multi-Availability Zone (AZ) pour garantir la haute disponibilité et le basculement.
  • Intégration avec d'autres services AWS, tels que :
    • AWS Identity and Access Management (IAM) pour un contrôle d'accès robuste.
    • AWS CloudWatch pour le monitoring et les métriques.
    • AWS Key Management Service (KMS) pour assurer le chiffrement au repos.

Identifiants

Lors de la création du cluster DB, le username master peut être configuré (admin par défaut). Pour générer le mot de passe de cet utilisateur, vous pouvez :

  • Indiquer un mot de passe vous-même
  • Demander à RDS de le générer automatiquement
  • Demander à RDS de le gérer dans AWS Secret Manager chiffré avec une clé KMS

Authentification

Il existe 3 types d'options d'authentification, mais l'utilisation du mot de passe master est toujours autorisée :

Accès public & VPC

Par défaut aucun accès public n'est accordé aux bases de données, cependant un accès peut être accordé. Par conséquent, par défaut seules les machines du même VPC pourront y accéder si le groupe de sécurité sélectionné (stocké dans EC2 SG) le permet.

Au lieu d'exposer une instance DB, il est possible de créer un RDS Proxy qui améliore la scalabilité et la disponibilité du cluster DB.

De plus, le port de la base de données peut être modifié.

Chiffrement

Le chiffrement est activé par défaut en utilisant une clé gérée par AWS (une CMK peut être choisie à la place).

En activant le chiffrement, vous activez le chiffrement au repos pour votre stockage, vos snapshots, read replicas et vos backups. Les clés pour gérer ce chiffrement peuvent être émises via KMS.
Il n'est pas possible d'ajouter ce niveau de chiffrement après la création de votre base de données. Il doit être configuré lors de sa création.

Cependant, il existe une solution de contournement permettant de chiffrer une base non chiffrée comme suit : vous pouvez créer un snapshot de votre base non chiffrée, créer une copie chiffrée de ce snapshot, utiliser ce snapshot chiffré pour créer une nouvelle base de données, et ainsi votre base sera alors chiffrée.

Transparent Data Encryption (TDE)

En complément des capacités de chiffrement au niveau applicatif inhérentes à RDS, RDS prend également en charge des mécanismes de chiffrement au niveau plateforme pour protéger les données au repos. Cela inclut Transparent Data Encryption (TDE) pour Oracle et SQL Server. Toutefois, il est important de noter que bien que TDE renforce la sécurité en chiffrant les données au repos, il peut aussi impacter les performances de la base. Cet impact est particulièrement visible lorsqu'il est utilisé conjointement avec les fonctions cryptographiques de MySQL ou les fonctions cryptographiques Microsoft Transact-SQL.

Pour utiliser TDE, certaines étapes préliminaires sont requises :

  1. Association à un Option Group :
  • La base de données doit être associée à un option group. Les option groups servent de conteneurs pour des paramètres et fonctionnalités, facilitant la gestion de la base, y compris les améliorations de sécurité.
  • Il est néanmoins important de noter que les option groups ne sont disponibles que pour certains moteurs et versions de bases de données.
  1. Inclusion de TDE dans l'Option Group :
  • Une fois associée à un option group, l'option Oracle Transparent Data Encryption doit être incluse dans ce groupe.
  • Il est essentiel de reconnaître qu'une fois l'option TDE ajoutée à un option group, elle devient permanente et ne peut pas être supprimée.
  1. Modes de chiffrement TDE :
  • TDE propose deux modes de chiffrement distincts :
  • TDE Tablespace Encryption : ce mode chiffre des tables entières, offrant une protection plus large des données.
  • TDE Column Encryption : ce mode se concentre sur le chiffrement d'éléments spécifiques au sein de la base, permettant un contrôle plus granulaire sur les données chiffrées.

Comprendre ces prérequis et les aspects opérationnels de TDE est crucial pour implémenter et gérer efficacement le chiffrement au sein de RDS, en garantissant à la fois la sécurité des données et la conformité aux normes requises.

Énumération

bash
# 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
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?
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

Accès non authentifié

AWS - RDS Unauthenticated Enum

Privesc

AWS - RDS Privesc

Post Exploitation

AWS - RDS Post Exploitation

Persistence

AWS - RDS Persistence

SQL Injection

Il existe des moyens d'accéder aux données DynamoDB avec une syntaxe SQL, par conséquent, des SQL injections typiques sont aussi possibles.

SQL Injection - HackTricks

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks