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

This commit is contained in:
Translator
2025-11-01 11:04:25 +00:00
parent 68f4e23b75
commit 6a3219aecb
2 changed files with 64 additions and 46 deletions
@@ -1,74 +1,74 @@
# AWS - Relational Database (RDS) Enum
# AWS - 关系型数据库 (RDS) 枚举
{{#include ../../../banners/hacktricks-training.md}}
## 基本信息
AWS 提供的 **关系数据库服务 (RDS)** 旨在简化 **云中关系数据库**部署、操作和扩展。该服务提供了成本效和可扩展性的优势,同时自动化了诸如硬件配置、数据库配置、补丁和备份等劳动密集型任务。
AWS 提供的 **Relational Database Service (RDS)** 旨在简化在云中部署、运行和扩展 **关系数据库**流程。该服务在提高成本效和可扩展性的同时自动化了诸如硬件配置、数据库配置、补丁和备份等耗时的任务。
AWS RDS 支持多种广泛使用的关系数据库引擎,包括 MySQL、PostgreSQL、MariaDB、Oracle 数据库、Microsoft SQL Server 和 Amazon Aurora兼容 MySQL 和 PostgreSQL。
AWS RDS 支持多种用的关系数据库引擎,包括 MySQL、PostgreSQL、MariaDB、Oracle Database、Microsoft SQL Server 和 Amazon Aurora并对 MySQL 和 PostgreSQL 提供兼容性
RDS 的主要特包括:
RDS 的主要特包括:
- **数据库实例的管理** 简化。
- 创建 **只读副本**增强读取性能。
- 配置 **多可用区 (AZ) 部署**保高可用性和故障转移机制。
- **数据库实例的管理** 得到简化。
- 创建 **只读副本 (read replicas)**提升读取性能。
- 配置 **多可用区 (multi-Availability Zone, AZ) 部署** 以保高可用性和故障切换机制。
- 与其他 AWS 服务的 **集成**,例如:
- AWS 身份和访问管理 (**IAM**) 以实现强大的访问控制。
- AWS **CloudWatch** 以进行全面监控和指标。
- AWS 密钥管理服务 (**KMS**) 以确保静态加密。
- AWS Identity and Access Management (**IAM**) 用于强大的访问控制。
- AWS **CloudWatch** 用于全面监控和指标。
- AWS Key Management Service (**KMS**) 用于确保存储加密。
## 凭
## 凭
创建 DB 集群时,可以配置主 **用户名**(默认 **`admin`**)。要生成该用户密码,可以:
创建 DB cluster 时,可以配置主用户的 **username**(默认 **`admin`**)。要该用户生成密码,可以:
- **自指定** 一个 **密码**
- 告诉 RDS **自动生成**
- 告诉 RDS 在 **AWS Secret Manager**管理它,并使用 KMS 密钥加密
- **自指定** 一个 **密码**
- 告诉 RDS **自动生成** 密码
- 告诉 RDS 在 **AWS Secret Manager** 中使用 KMS key 对其进行管理和加密
<figure><img src="../../../images/image (144).png" alt=""><figcaption></figcaption></figure>
### 认证
有 3 种类型的认证选项,但始终允许使用 **主密码**
有 3 种认证选项,但总是允许使用 **主密码 (master password)**
<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>
### 公共访问 VPC
### 公共访问 & VPC
默认情况下**不授予公共访问** 数据库,但可以 **授予**。因此,默认情况下只有来自同 VPC 的机器能访问它,如果所选的 **安全组**(存储在 EC2 SG 中)允许的话
默认情况下 **不授予数据库公共访问权限**,但也 **可以被授予**。因此,默认情况下只有来自同 VPC 的机器能访问它,前提是所选的 **security group**(存储在 EC2 SG 中)允许访问
与其暴露 DB 实例,不如创建一个 **RDS Proxy**,它 **提** DB 集群**可扩展性** **可用性**
与其直接暴露 DB 实例,也可以创建一个 **RDS Proxy**,它 **提** DB cluster **可扩展性** **可用性**
此外,**数据库端口也可以修改**。
此外,**数据库端口也可以修改**。
### 加密
**默认启用加密**,使用 AWS 管的密钥(可以选择 CMK)。
**默认启用加密**,使用 AWS 管的密钥(可以选择使用 CMK)。
通过启用加密,您启用了 **存储、快照、只读副本和备份的静态加密**。管理加密的密钥可以通过 **KMS**。\
在数据库创建后无法添加此级别的加密。**必须在创建时进行**。
启用加密后,你将为存储、快照、只读副本和备份启用 **静态加密 (encryption at rest)**。管理这些加密的密钥可以通过 **KMS** 发。\
在数据库创建后无法添加此级别的加密。**必须在创建时启用**。
然而,有一个 **变通方法允许您加密未加密的数据库,如下所示**。您可以创建未加密数据库的快照,创建该快照的加密副本,使用该加密快照创建新数据库,最后,您的数据库将被加密。
不过,有一个 **变通方法可以将未加密的数据库加密**:你可以对未加密数据库创建快照(snapshot),然后创建该快照的加密副本,使用该加密快照创建一个新的数据库,这样新数据库就会是加密
#### 透明数据加密 (TDE)
除了 RDS 在应用层固有的加密能力外,RDS 还支持 **额外的平台级加密机制** 保护静态数据。这包括 Oracle 和 SQL Server 的 **透明数据加密 (TDE)**然而,重要的是要注意,虽然 TDE 通过加密静态数据来增强安全性,但它也可能 **影响数据库性能**这种性能影响在与 MySQL 加密函数或 Microsoft Transact-SQL 加密函数结合使用时尤为明显。
除了 RDS 在应用层提供的加密能力外,RDS 还支持 **平台级别的额外加密机制** 保护静态数据。这包括针对 Oracle 和 SQL Server 的 **Transparent Data Encryption (TDE)**要注意的是,虽然 TDE 通过静态数据加密来增强安全性,但它也可能 **影响数据库性能**与 MySQL 加密函数或 Microsoft Transact-SQL 加密函数结合使用时,这种性能影响尤其明显。
要使用 TDE,需要一些初步步骤:
要使用 TDE,需要满足以下前提步骤:
1. **选项组关联**
- 数据库必须与选项组关联。选项组作为设置和功能的容器,促进数据库管理,包括安全增强。
- 但是,重要的是要注意,选项组仅适用于特定的数据库引擎和版本。
2. **在选项组中包含 TDE**
- 一旦与选项组关联,Oracle 透明数据加密选项需要包含在该组中
- 需要认识到,一旦将 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 表空间加密**:此模式加密整个表,提供更广的数据保护范围
- **TDE 列加密**:此模式专注于加密数据库中的特定单个元素,允许对加密数据进行更细粒度的控制。
- TDE 提供两种不同的加密模式:
- **TDE Tablespace Encryption**:对整个表空间进行加密,提供更广范围的数据保护。
- **TDE Column Encryption**:对数据库中的特定列进行加密,允许更细粒度的加密控制。
理解这些前提条件和 TDE 的操作复杂性对于有效实施和管理 RDS 中的加密至关重要,确保数据安全和遵守必要的标准。
理解这些先决条件和 TDE 的操作细节对于在 RDS 中有效实施和管理加密非常重要,从而确保数据安全并符合必要的合规标准。
### 枚举
```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
```
### 未经身份验证的访问
### Unauthenticated Access
{{#ref}}
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md
{{#endref}}
### 权限提升
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-rds-privesc/README.md
{{#endref}}
### 利用后
### Post Exploitation
{{#ref}}
../aws-post-exploitation/aws-rds-post-exploitation/README.md
{{#endref}}
### 持久性
### Persistence
{{#ref}}
../aws-persistence/aws-rds-persistence/README.md
{{#endref}}
### SQL 注入
### SQL Injection
有方法可以使用 **SQL 语法** 访问 DynamoDB 数据,因此典型的 **SQL 注入也是可能的**
可以使用 **SQL syntax** 访问 DynamoDB 数据,因此典型的 **SQL injections** 也是可能的
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
@@ -4,7 +4,7 @@
## RDS
更多信息请参见
更多信息请查看
{{#ref}}
../../aws-services/aws-relational-database-rds-enum.md
@@ -12,11 +12,11 @@
## 公共端口
可以将 **数据库从互联网公开访问**。攻击者仍然需要 **知道用户名和密码** IAM 访问权限,或一个 **exploit** 才能进入数据库。
可以将**数据库从互联网公开访问**。攻击者仍然需要**知道用户名和密码**IAM 访问,或一个 **exploit** 进入数据库。
## 公开 RDS 快照
## 公开 RDS 快照
AWS 允许**将下载 RDS 快照的访问权限授予任何人**。你可以非常容易地从你自己的账户列出这些公开的 RDS 快照
AWS 允许授予**任何人下载 RDS snapshots 的访问权限**。你可以非常容易地从你自己的账户列出这些公开的 RDS snapshots
```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
```
## 公开的 RDS Cluster Snapshots
类似地,你可以查找集群快照
```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]
```
### 公共 URL 模板
```
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306