AWS - Serviço de Banco de Dados Relacional (RDS) Enum

Reading time: 7 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Informações Básicas

O Relational Database Service (RDS) oferecido pela AWS é projetado para simplificar a implantação, operação e escalabilidade de um banco de dados relacional na nuvem. Esse serviço oferece vantagens de custo e escalabilidade enquanto automatiza tarefas trabalhosas como provisionamento de hardware, configuração do banco de dados, patching e backups.

O AWS RDS suporta diversos motores de banco de dados relacionais amplamente usados, incluindo MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server e Amazon Aurora, com compatibilidade para MySQL e PostgreSQL.

Principais funcionalidades do RDS incluem:

  • Gerenciamento de instâncias de banco de dados simplificado.
  • Criação de réplicas de leitura para melhorar o desempenho de leitura.
  • Configuração de implantações multi-Availability Zone (AZ) para garantir alta disponibilidade e mecanismos de failover.
  • Integração com outros serviços AWS, tais como:
  • AWS Identity and Access Management (IAM) para controle de acesso robusto.
  • AWS CloudWatch para monitoramento e métricas abrangentes.
  • AWS Key Management Service (KMS) para garantir criptografia em repouso.

Credenciais

Ao criar o DB cluster, o username master pode ser configurado (admin por padrão). Para gerar a senha desse usuário você pode:

  • Informar uma senha você mesmo
  • Dizer ao RDS para gerar automaticamente a senha
  • Dizer ao RDS para gerenciá-la no AWS Secret Manager criptografada com uma chave KMS

Autenticação

Existem 3 tipos de opções de autenticação, mas o uso da senha master é sempre permitido:

Acesso Público & VPC

Por padrão nenhum acesso público é concedido aos bancos de dados, entretanto ele pode ser concedido. Portanto, por padrão apenas máquinas da mesma VPC poderão acessá-lo se o security group selecionado (são armazenados em EC2 SG) permitir.

Ao invés de expor uma DB instance, é possível criar um RDS Proxy que melhora a escalabilidade e a disponibilidade do DB cluster.

Além disso, a porta do banco de dados também pode ser modificada.

Criptografia

A criptografia é habilitada por padrão usando uma chave gerenciada pela AWS (um CMK pode ser escolhido em vez disso).

Ao habilitar a criptografia, você está ativando a criptografia em repouso para seu storage, snapshots, réplicas de leitura e seus backups. Chaves para gerenciar essa criptografia podem ser emitidas usando KMS.
Não é possível adicionar esse nível de criptografia após o banco de dados ter sido criado. Deve ser feito durante a criação.

No entanto, existe uma solução alternativa que permite criptografar um banco de dados não criptografado da seguinte forma. Você pode criar um snapshot do seu banco de dados não criptografado, criar uma cópia criptografada desse snapshot, usar esse snapshot criptografado para criar um novo banco de dados e, finalmente, seu banco de dados estará criptografado.

Transparent Data Encryption (TDE)

Além das capacidades de criptografia inerentes ao RDS no nível de aplicação, o RDS também suporta mecanismos adicionais de criptografia em nível de plataforma para proteger dados em repouso. Isso inclui Transparent Data Encryption (TDE) para Oracle e SQL Server. No entanto, é importante notar que, embora o TDE aumente a segurança ao criptografar dados em repouso, ele também pode impactar o desempenho do banco de dados. Esse impacto de desempenho é especialmente perceptível quando usado em conjunto com funções criptográficas do MySQL ou funções criptográficas do Microsoft Transact-SQL.

Para utilizar o TDE, certos passos preliminares são necessários:

  1. Associação a um Option Group:
  • O banco de dados deve estar associado a um option group. Option groups servem como contêineres para configurações e recursos, facilitando o gerenciamento do banco de dados, incluindo melhorias de segurança.
  • Entretanto, é importante notar que option groups estão disponíveis apenas para motores e versões específicos de banco de dados.
  1. Inclusão do TDE no Option Group:
  • Uma vez associado a um option group, a opção Oracle Transparent Data Encryption precisa ser incluída nesse grupo.
  • É essencial reconhecer que, uma vez adicionada a opção TDE a um option group, ela se torna uma configuração permanente e não pode ser removida.
  1. Modos de Criptografia TDE:
  • O TDE oferece dois modos distintos de criptografia:
  • TDE Tablespace Encryption: esse modo criptografa tabelas inteiras, fornecendo um escopo mais amplo de proteção de dados.
  • TDE Column Encryption: esse modo foca em criptografar elementos específicos e individuais dentro do banco de dados, permitindo um controle mais granular sobre quais dados são criptografados.

Compreender esses pré-requisitos e as complexidades operacionais do TDE é crucial para implementar e gerenciar efetivamente a criptografia dentro do RDS, garantindo tanto a segurança dos dados quanto a conformidade com os padrões necessários.

Enumeração

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

Acesso Não Autenticado

AWS - RDS Unauthenticated Enum

Privesc

AWS - RDS Privesc

Post Exploitation

AWS - RDS Post Exploitation

Persistence

AWS - RDS Persistence

SQL Injection

Existem maneiras de acessar dados do DynamoDB com SQL syntax, portanto, típicas SQL injections também são possíveis.

SQL Injection - HackTricks

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks