# AWS - Enumeración de Base de Datos Relacional (RDS) {{#include ../../../banners/hacktricks-training.md}} ## Información Básica El **Servicio de Base de Datos Relacional (RDS)** ofrecido por AWS está diseñado para simplificar el despliegue, operación y escalado de una **base de datos relacional en la nube**. Este servicio ofrece las ventajas de eficiencia de costos y escalabilidad mientras automatiza tareas que requieren mucho trabajo, como la provisión de hardware, configuración de bases de datos, parches y copias de seguridad. AWS RDS soporta varios motores de bases de datos relacionales ampliamente utilizados, incluyendo MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server y Amazon Aurora, con compatibilidad para MySQL y PostgreSQL. Las características clave de RDS incluyen: - **La gestión de instancias de base de datos** es simplificada. - Creación de **réplicas de lectura** para mejorar el rendimiento de lectura. - Configuración de **despliegues en múltiples Zonas de Disponibilidad (AZ)** para asegurar alta disponibilidad y mecanismos de conmutación por error. - **Integración** con otros servicios de AWS, como: - AWS Identity and Access Management (**IAM**) para un control de acceso robusto. - AWS **CloudWatch** para monitoreo y métricas completas. - AWS Key Management Service (**KMS**) para asegurar la encriptación en reposo. ## Credenciales Al crear el clúster de DB, el **nombre de usuario** maestro puede ser configurado (**`admin`** por defecto). Para generar la contraseña de este usuario puedes: - **Indicar** una **contraseña** tú mismo - Decirle a RDS que **la genere automáticamente** - Decirle a RDS que la gestione en **AWS Secret Manager** encriptada con una clave KMS
### Autenticación Hay 3 tipos de opciones de autenticación, pero usar la **contraseña maestra siempre está permitido**:
### Acceso Público y VPC Por defecto, **no se concede acceso público** a las bases de datos, sin embargo, **podría concederse**. Por lo tanto, por defecto, solo las máquinas de la misma VPC podrán acceder si el **grupo de seguridad** seleccionado (almacenado en EC2 SG) lo permite. En lugar de exponer una instancia de DB, es posible crear un **RDS Proxy** que **mejora** la **escalabilidad** y **disponibilidad** del clúster de DB. Además, el **puerto de la base de datos puede ser modificado** también. ### Encriptación **La encriptación está habilitada por defecto** utilizando una clave gestionada por AWS (se podría elegir una CMK en su lugar). Al habilitar tu encriptación, estás habilitando **la encriptación en reposo para tu almacenamiento, instantáneas, réplicas de lectura y tus copias de seguridad**. Las claves para gestionar esta encriptación pueden ser emitidas utilizando **KMS**.\ No es posible añadir este nivel de encriptación después de que tu base de datos ha sido creada. **Tiene que hacerse durante su creación**. Sin embargo, hay un **método alternativo que te permite encriptar una base de datos no encriptada de la siguiente manera**. Puedes crear una instantánea de tu base de datos no encriptada, crear una copia encriptada de esa instantánea, usar esa instantánea encriptada para crear una nueva base de datos y, finalmente, tu base de datos estaría encriptada. #### Encriptación de Datos Transparente (TDE) Junto con las capacidades de encriptación inherentes a RDS a nivel de aplicación, RDS también soporta **mecanismos de encriptación a nivel de plataforma adicionales** para proteger los datos en reposo. Esto incluye **Encriptación de Datos Transparente (TDE)** para Oracle y SQL Server. Sin embargo, es crucial notar que aunque TDE mejora la seguridad al encriptar datos en reposo, también puede **afectar el rendimiento de la base de datos**. Este impacto en el rendimiento es especialmente notable cuando se utiliza en conjunto con funciones criptográficas de MySQL o funciones criptográficas de Microsoft Transact-SQL. Para utilizar TDE, se requieren ciertos pasos preliminares: 1. **Asociación de Grupo de Opciones**: - La base de datos debe estar asociada con un grupo de opciones. Los grupos de opciones sirven como contenedores para configuraciones y características, facilitando la gestión de bases de datos, incluyendo mejoras de seguridad. - Sin embargo, es importante notar que los grupos de opciones solo están disponibles para motores de bases de datos y versiones específicas. 2. **Inclusión de TDE en el Grupo de Opciones**: - Una vez asociada con un grupo de opciones, la opción de Encriptación de Datos Transparente de Oracle debe ser incluida en ese grupo. - Es esencial reconocer que una vez que la opción TDE se añade a un grupo de opciones, se convierte en una característica permanente y no puede ser eliminada. 3. **Modos de Encriptación TDE**: - TDE ofrece dos modos de encriptación distintos: - **Encriptación de Tablespace TDE**: Este modo encripta tablas enteras, proporcionando un alcance más amplio de protección de datos. - **Encriptación de Columna TDE**: Este modo se centra en encriptar elementos específicos e individuales dentro de la base de datos, permitiendo un control más granular sobre qué datos se encriptan. Entender estos requisitos previos y las complejidades operativas de TDE es crucial para implementar y gestionar eficazmente la encriptación dentro de RDS, asegurando tanto la seguridad de los datos como el cumplimiento de los estándares necesarios. ### Enumeración ```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 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 --db-snapshot-identifier --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 --master-user-password --apply-immediately ``` ### Acceso No Autenticado {{#ref}} ../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md {{#endref}} ### Escalación de Privilegios {{#ref}} ../aws-privilege-escalation/aws-rds-privesc/README.md {{#endref}} ### Post Explotación {{#ref}} ../aws-post-exploitation/aws-rds-post-exploitation/README.md {{#endref}} ### Persistencia {{#ref}} ../aws-persistence/aws-rds-persistence/README.md {{#endref}} ### Inyección SQL Hay formas de acceder a los datos de DynamoDB con **sintaxis SQL**, por lo tanto, **inyecciones SQL típicas también son posibles**. {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html {{#endref}} {{#include ../../../banners/hacktricks-training.md}}