Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-rela

This commit is contained in:
Translator
2025-11-01 11:05:48 +00:00
parent 5bf45bf55f
commit d3e66f2e4f
2 changed files with 61 additions and 43 deletions
@@ -1,74 +1,74 @@
# AWS - Enumeración de Base de Datos Relacional (RDS)
# AWS - Base de Datos Relacional (RDS) - Enumeración
{{#include ../../../banners/hacktricks-training.md}}
## Información Básica
## 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.
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 utilizados, incluyendo MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server y Amazon Aurora, con compatibilidad para MySQL y PostgreSQL.
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:
- **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:
- **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 monitoreo y métricas completas.
- AWS Key Management Service (**KMS**) para asegurar la encriptación en reposo.
- AWS **CloudWatch** para monitorización y métricas completas.
- AWS Key Management Service (**KMS**) para asegurar el cifrado 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:
Al crear el DB cluster el **username** maestro puede configurarse (**`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**
- **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
<figure><img src="../../../images/image (144).png" alt=""><figcaption></figcaption></figure>
### Autenticación
Hay 3 tipos de opciones de autenticación, pero usar la **contraseña maestra siempre está permitido**:
Hay 3 tipos de opciones de autenticación, pero usar la **master password siempre está permitido**:
<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>
### Acceso Público y VPC
### 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 las máquinas de la misma VPC podrán acceder si el **grupo de seguridad** seleccionado (almacenado en EC2 SG) lo permite.
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 de DB, es posible crear un **RDS Proxy** que **mejora** la **escalabilidad** y **disponibilidad** del clúster de DB.
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** utilizando una clave gestionada por AWS (se podría elegir una CMK en su lugar).
**La encriptación está habilitada por defecto** usando una clave gestionada por AWS (se podría elegir una CMK).
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**.
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, 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.
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.
#### Encriptación de Datos Transparente (TDE)
#### Transparent Data Encryption (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.
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:
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**:
1. **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.
2. **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.
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.
- **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 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.
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
```bash
@@ -80,6 +80,10 @@ 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?
@@ -91,6 +95,7 @@ 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
@@ -105,33 +110,33 @@ 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
### Acceso no autenticado
{{#ref}}
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md
{{#endref}}
### Escalación de Privilegios
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-rds-privesc/README.md
{{#endref}}
### Post Explotación
### Post Exploitation
{{#ref}}
../aws-post-exploitation/aws-rds-post-exploitation/README.md
{{#endref}}
### Persistencia
### Persistence
{{#ref}}
../aws-persistence/aws-rds-persistence/README.md
{{#endref}}
### Inyección SQL
### SQL Injection
Hay formas de acceder a los datos de DynamoDB con **sintaxis SQL**, por lo tanto, **inyecciones SQL típicas también son posibles**.
Hay formas de acceder a los datos de DynamoDB con **SQL syntax**, por lo tanto, los típicos **SQL injections are also possible**.
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
@@ -10,13 +10,13 @@ Para más información consulta:
../../aws-services/aws-relational-database-rds-enum.md
{{#endref}}
## Public Port
## Puerto público
Es posible dar acceso público a la **base de datos desde Internet**. El atacante aún necesitará **conocer el username y password,** acceso IAM, o un **exploit** para entrar en la base de datos.
Es posible dar acceso público a la **base de datos desde internet**. El atacante aún necesitará **conocer el username y password**, acceso IAM, o un **exploit** para ingresar en la base de datos.
## Public RDS Snapshots
## Snapshots RDS públicos
AWS permite otorgar **acceso a cualquiera para descargar RDS snapshots**. Puedes listar estos public RDS snapshots muy fácilmente desde tu propia cuenta:
AWS permite dar **acceso a cualquiera para descargar snapshots RDS**. Puedes listar estos snapshots RDS públicos muy fácilmente desde tu propia cuenta:
```bash
# Public RDS snapshots
aws rds describe-db-snapshots --include-public
@@ -32,6 +32,19 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2]
## Even if in the console appear as there are public snapshot it might be public
## snapshots from other accounts used by the current account
```
## Instantáneas públicas de clúster RDS
De forma similar, puedes buscar instantáneas de clúster
```bash
# Public RDS cluster snapshots
aws rds describe-db-cluster-snapshots --include-public
## Search by account ID
aws rds describe-db-cluster-snapshots --include-public --query 'DBClusterSnapshots[?contains(DBClusterSnapshotIdentifier, `284546856933:`) == `true`]'
# From the own account you can check if there is any public cluster snapshot with:
aws rds describe-db-cluster-snapshots --snapshot-type public [--region us-west-2]
```
### Plantilla de URL pública
```
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306