AWS - 关系型数据库 (RDS) 枚举

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

基本信息

AWS 提供的 Relational Database Service (RDS) 旨在简化在云中部署、运行和扩展 关系型数据库 的流程。该服务在提高成本效率和可扩展性的同时,自动化了诸如硬件配置、数据库配置、补丁和备份等耗时的任务。

AWS RDS 支持多种常用的关系型数据库引擎,包括 MySQL、PostgreSQL、MariaDB、Oracle Database、Microsoft SQL Server 和 Amazon Aurora,并对 MySQL 和 PostgreSQL 提供兼容性。

RDS 的主要特性包括:

  • 数据库实例的管理 得到简化。
  • 创建 只读副本 (read replicas) 以提升读取性能。
  • 配置 多可用区 (multi-Availability Zone, AZ) 部署 以保证高可用性和故障切换机制。
  • 与其他 AWS 服务的 集成,例如:
    • AWS Identity and Access Management (IAM) 用于强大的访问控制。
    • AWS CloudWatch 用于全面的监控和指标。
    • AWS Key Management Service (KMS) 用于确保存储加密。

凭据

在创建 DB cluster 时,可以配置主用户的 username(默认为 admin)。要为该用户生成密码,你可以:

  • 自行指定 一个 密码
  • 告诉 RDS 自动生成 密码
  • 告诉 RDS 在 AWS Secret Manager 中使用 KMS key 对其进行管理和加密

认证

有 3 种认证选项,但总是允许使用 主密码 (master password)

公共访问 & VPC

默认情况下 不授予数据库公共访问权限,但也 可以被授予。因此,默认情况下只有来自相同 VPC 的机器能访问它,前提是所选的 security group(存储在 EC2 SG 中)允许访问。

与其直接暴露 DB 实例,也可以创建一个 RDS Proxy,它能 提升 DB cluster 的 可扩展性可用性

此外,数据库端口也可以被修改

加密

默认启用加密,使用 AWS 托管的密钥(也可以选择使用 CMK)。

启用加密后,你将为存储、快照、只读副本和备份启用 静态加密 (encryption at rest)。管理这些加密的密钥可以通过 KMS 颁发。
在数据库创建后无法添加此级别的加密。必须在创建时启用

不过,有一个 变通方法可以将未加密的数据库加密:你可以对未加密的数据库创建快照(snapshot),然后创建该快照的加密副本,使用该加密快照创建一个新的数据库,这样新数据库就会是加密的。

透明数据加密 (TDE)

除了 RDS 在应用层提供的加密能力外,RDS 还支持 平台级别的额外加密机制 来保护静态数据。这包括针对 Oracle 和 SQL Server 的 Transparent Data Encryption (TDE)。需要注意的是,虽然 TDE 通过对静态数据加密来增强安全性,但它也可能 影响数据库性能。当与 MySQL 的加密函数或 Microsoft Transact-SQL 的加密函数结合使用时,这种性能影响尤其明显。

要使用 TDE,需要满足以下前提步骤:

  1. Option Group 关联
    • 数据库必须与一个 option group 关联。option group 用作设置和功能的容器,便于管理数据库,包括安全性增强。
    • 注意,option group 仅适用于特定的数据库引擎和版本。
  2. 在 Option Group 中包含 TDE
    • 关联到 option group 后,需要在该组中包含 Oracle 的 Transparent Data Encryption 选项。
    • 需注意,一旦在 option group 中添加了 TDE 选项,该选项将成为永久配置,无法移除。
  3. TDE 加密模式
    • TDE 提供两种不同的加密模式:
      • TDE Tablespace Encryption:对整个表空间进行加密,提供更广范围的数据保护。
      • TDE Column Encryption:对数据库中的特定列进行加密,允许更细粒度的加密控制。

理解这些先决条件和 TDE 的操作细节对于在 RDS 中有效实施和管理加密非常重要,从而确保数据安全并符合必要的合规标准。

枚举

# 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

Unauthenticated Access

AWS - RDS Unauthenticated Enum

Privesc

AWS - RDS Privesc

Post Exploitation

AWS - RDS Post Exploitation

Persistence

AWS - RDS Persistence

SQL Injection

可以使用 SQL syntax 访问 DynamoDB 的数据,因此典型的 SQL injections 也是可能的。

SQL Injection - HackTricks

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks