AWS - Relational Database (RDS) Enum

支持 HackTricks

基本信息

AWS 提供的 Relational Database Service (RDS) 旨在简化 云中关系数据库 的部署、操作和扩展。该服务提供了成本效益和可扩展性的优势,同时自动化了硬件配置、数据库配置、打补丁和备份等繁重任务。

AWS RDS 支持多种广泛使用的关系数据库引擎,包括 MySQL、PostgreSQL、MariaDB、Oracle Database、Microsoft SQL Server 和 Amazon Aurora,兼容 MySQL 和 PostgreSQL。

RDS 的主要功能包括:

  • 简化数据库实例管理

  • 创建 只读副本 以增强读取性能。

  • 配置 多可用区 (AZ) 部署 以确保高可用性和故障转移机制。

  • 与其他 AWS 服务集成,例如:

  • AWS Identity and Access Management (IAM) 以实现强大的访问控制。

  • AWS CloudWatch 以进行全面的监控和指标。

  • AWS Key Management Service (KMS) 以确保静态加密。

凭证

创建 DB 集群时,可以配置主 用户名(默认是 admin)。要生成此用户的密码,可以:

  • 自己指定 一个 密码

  • 告诉 RDS 自动生成

  • 告诉 RDS 在 AWS Secret Manager 中管理它,并使用 KMS 密钥加密

认证

有 3 种认证选项,但始终允许使用 主密码

公共访问和 VPC

默认情况下,不授予数据库公共访问权限,但可以 授予。因此,默认情况下,只有来自同一 VPC 的机器才能访问它,如果所选的 安全组(存储在 EC2 SG 中)允许的话。

与其暴露 DB 实例,不如创建一个 RDS Proxy,它可以 提高 DB 集群的 可扩展性可用性

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

加密

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

启用加密后,您将启用 存储、快照、只读副本和备份的静态加密。管理此加密的密钥可以通过 KMS 发行。 在创建数据库后无法添加此级别的加密。必须在创建时完成

但是,有一种 解决方法允许您加密未加密的数据库。您可以创建未加密数据库的快照,创建该快照的加密副本,使用该加密快照创建新数据库,然后,您的数据库将被加密。

透明数据加密 (TDE)

除了 RDS 在应用程序级别的加密功能外,RDS 还支持 额外的平台级加密机制 以保护静态数据。这包括 Oracle 和 SQL Server 的 透明数据加密 (TDE)。然而,重要的是要注意,虽然 TDE 通过加密静态数据增强了安全性,但它也可能 影响数据库性能。这种性能影响在与 MySQL 加密函数或 Microsoft Transact-SQL 加密函数一起使用时尤为明显。

要使用 TDE,需要执行某些预备步骤:

  1. 选项组关联

  • 数据库必须与选项组关联。选项组作为设置和功能的容器,便于数据库管理,包括安全增强。

  • 但是,重要的是要注意,选项组仅适用于特定的数据库引擎和版本。

  1. 在选项组中包含 TDE

  • 一旦与选项组关联,Oracle 透明数据加密选项需要包含在该组中。

  • 需要认识到,一旦将 TDE 选项添加到选项组中,它将成为永久性设置,无法删除。

  1. TDE 加密模式

  • TDE 提供两种不同的加密模式:

  • TDE 表空间加密:此模式加密整个表,提供更广泛的数据保护范围。

  • TDE 列加密:此模式专注于加密数据库中的特定单个元素,允许更细粒度地控制加密的数据。

了解这些前提条件和 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

# 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

未认证访问

AWS - RDS Unauthenticated Enum

权限提升

AWS - RDS Privesc

利用后操作

AWS - RDS Post Exploitation

持久化

AWS - RDS Persistence

SQL 注入

有一些方法可以使用 SQL 语法 访问 DynamoDB 数据,因此,典型的 SQL 注入也是可能的

支持 HackTricks

Last updated