AWS - Base de Datos Relacional (RDS) - Enumeración
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información básica
El Relational Database Service (RDS) ofrecido por AWS está diseñado para simplificar el despliegue, la operación y el 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 consumen mucho trabajo manual como el aprovisionamiento de hardware, la configuración de la base de datos, el parcheo y las copias de seguridad.
AWS RDS soporta varios motores de bases de datos relacionales ampliamente usados 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:
- Gestión de instancias de bases de datos simplificada.
- Creación de read replicas para mejorar el rendimiento de lectura.
- Configuración de implementaciones multi-Availability Zone (AZ) para asegurar alta disponibilidad y mecanismos de failover.
- Integración con otros servicios de AWS, tales como:
- AWS Identity and Access Management (IAM) para un control de acceso robusto.
- AWS CloudWatch para monitorización y métricas completas.
- AWS Key Management Service (KMS) para asegurar el cifrado en reposo.
Credenciales
Al crear el DB cluster el username maestro puede configurarse (admin por defecto). Para generar la contraseña de este usuario puedes:
- Indicar una password tú mismo
- Decirle a RDS que la auto genere
- Decirle a RDS que la gestione en AWS Secret Manager encriptada con una clave KMS
.png)
Autenticación
Hay 3 tipos de opciones de autenticación, pero usar la master password siempre está permitido:
.png)
Acceso público & 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 máquinas desde la misma VPC podrán acceder si el security group seleccionado (están almacenados en EC2 SG) lo permite.
En lugar de exponer una instancia DB, es posible crear un RDS Proxy que mejora la escalabilidad y la disponibilidad del DB cluster.
Además, el puerto de la base de datos puede ser modificado también.
Encriptación
La encriptación está habilitada por defecto usando una clave gestionada por AWS (se podría elegir una CMK).
Al habilitar la encriptación, estás habilitando encriptación en reposo para tu almacenamiento, snapshots, read replicas y tus back-ups. Las claves para gestionar esta encriptación pueden ser emitidas usando KMS.
No es posible añadir este nivel de encriptación después de que tu base de datos haya sido creada. Tiene que hacerse durante su creación.
Sin embargo, existe una solución alternativa que te permite encriptar una base de datos no encriptada de la siguiente manera. Puedes crear un snapshot de tu base de datos no encriptada, crear una copia encriptada de ese snapshot, usar ese snapshot encriptado para crear una nueva base de datos y, finalmente, tu base de datos quedaría encriptada.
Transparent Data Encryption (TDE)
Junto con las capacidades de encriptación inherentes a RDS a nivel de aplicación, RDS también soporta mecanismos adicionales de encriptación a nivel de plataforma para proteger los datos en reposo. Esto incluye Transparent Data Encryption (TDE) para Oracle y SQL Server. Sin embargo, es crucial notar que aunque TDE mejora la seguridad al encriptar los datos en reposo, también puede afectar el rendimiento de la base de datos. Este impacto en el rendimiento es especialmente notable cuando se usa en conjunto con las funciones criptográficas de MySQL o las funciones criptográficas de Microsoft Transact-SQL.
Para utilizar TDE, se requieren ciertos pasos preliminares:
- Asociación a Option Group:
- La base de datos debe estar asociada con un option group. Los option groups sirven como contenedores para configuraciones y características, facilitando la gestión de la base de datos, incluyendo mejoras de seguridad.
- Sin embargo, es importante notar que los option groups solo están disponibles para motores y versiones de base de datos específicos.
- Inclusión de TDE en el Option Group:
- Una vez asociada con un option group, la opción Oracle Transparent Data Encryption necesita ser incluida en ese grupo.
- Es esencial reconocer que una vez que la opción TDE es añadida a un option group, se vuelve una pieza permanente y no puede ser removida.
- Modos de encriptación TDE:
- TDE ofrece dos modos de encriptación distintos:
- TDE Tablespace Encryption: Este modo encripta tablas enteras, proporcionando un alcance más amplio de protección de datos.
- TDE Column Encryption: Este modo se centra en encriptar elementos individuales específicos dentro de la base de datos, permitiendo un control más granular sobre qué datos se encriptan.
Entender estos requisitos previos y las complejidades operacionales de TDE es crucial para implementar y gestionar efectivamente la encriptación dentro de RDS, asegurando tanto la seguridad de los datos como el cumplimiento con los estándares necesarios.
Enumeración
# 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
Acceso no autenticado
AWS - RDS Unauthenticated Enum
Privesc
Post Exploitation
Persistence
SQL Injection
Hay formas de acceder a los datos de DynamoDB con SQL syntax, por lo tanto, los típicos SQL injections are also possible.
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks Cloud

