AWS - Relational Database (RDS) Enum

支持 HackTricks

基本信息

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

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

RDS 的主要特点包括:

  • 数据库实例的管理 简化。

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

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

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

  • AWS 身份与访问管理 (IAM) 以实现强大的访问控制。

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

  • AWS 密钥管理服务 (KMS) 以确保静态加密。

凭证

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

  • 自己指定 一个 密码

  • 告诉 RDS 自动生成

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

认证

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

公共访问与 VPC

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

与其暴露 DB 实例,不如创建一个 RDS 代理,它 提高 了 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

未认证访问

权限提升

利用后

持久性

SQL 注入

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

支持 HackTricks

Last updated