Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2026-02-14 19:50:21 +00:00
parent 91a533803b
commit b6166342c7

View File

@@ -4,38 +4,77 @@
## S3
更多信息请参见:
有关更多信息请参见:
{{#ref}}
../../aws-services/aws-s3-athena-and-glacier-enum.md
{{#endref}}
### 敏感信息
### Sensitive Information
有时你可以在 buckets 中以可读形式找到敏感信息。例如terraform state 中的 secrets。
有时你可以在 buckets 中以可读形式发现敏感信息。例如terraform state secrets。
### Pivoting
Different platforms could be using S3 to store sensitive assets.\
For example, **airflow** could be storing **DAGs** **code** in there, or **web pages** could be directly served from S3. An attacker with write permissions could **modify the code** from the bucket to **pivot** to other platforms, or **takeover accounts** modifying JS files.
不同平台可能会使用 S3 存储敏感资产。\
例如,**airflow** 可能在其中存放 **DAGs** **code**,或者 **web pages** 可能直接从 S3 提供服务。具有写权限的攻击者可以从 bucket **modify the code****pivot** 到其他平台,或通过修改 JS 文件 **takeover accounts**
### S3 Ransomware
这种场景中,**attacker creates a KMS (Key Management Service) key in their own AWS account** 或在另一个被攻破的账户中创建 KMS key。然后他们使**key accessible to anyone in the world**,允许任何 AWS user、role 或 account 使用此 key 对对象进行加密但这些对象无法被解密。
场景中,攻击者会在自己的 AWS 账户或另一个已被攻陷的账户中**创建一个 KMS (Key Management Service) key**。随后他们**key 设为 world-accessible**,允许任何 AWS 用户、角色或账户使用此 key 对对象进行加密但这些对象无法被解密。
攻击者识别目标 **S3 bucket 并获得写级别访问**,方多样。可能是由于 bucket 配置不当导致公开暴露,或攻击者得了 AWS 环境本身的访问权限。攻击者通常针对包含敏感信息的桶,如 PII、PHI、日志、备份等。
攻击者识别目标 **S3 bucket 并获得写权限**,方法多种多样。可能是由于 bucket 配置不当导致公开暴露,或攻击者得了 AWS 环境的访问权限。攻击者通常针对包含敏感信息的 bucket如 PII、PHI、日志、备份等。
为了确定该 bucket 是否可作为勒索目标,攻击者会检查其配置,包括验证 **S3 Object Versioning** 是否启用以及 **multi-factor authentication delete (MFA delete)** 是否启用。如果 Object Versioning 未启用,攻击者可继续。如果 Object Versioning 启用 MFA delete 未启用,攻击者可以 **disable Object Versioning**。如果同时启用了 Object Versioning 和 MFA delete则对该 bucket 实施勒索将更加困难。
为了确定该 bucket 是否可作为 ransomware 目标,攻击者会检查其配置,包括确认是否启用了 **S3 Object Versioning**,以及是否启用 **multi-factor authentication delete (MFA delete)**。如果未启用 Object Versioning攻击者可继续。如果启用了 Object Versioning 但未启用 MFA delete攻击者可以**disable Object Versioning**。如果两者都启用,则对该 bucket 进行 ransomware 会更困难。
通过 AWS API攻击者**用使用其 KMS key 加密的副本替换桶中的每个对象**。这会有效地加密桶中的数据,未持有密钥则无法访问。
使用 AWS API攻击者**用他们的 KMS key 替换 bucket 中的每个对象为加密副本**。这会有效地加密 bucket 中的数据,使得没有该 key 的情况下无法访问。
施加更大压力,攻击者会安排删除用于攻击的 KMS key。这会给目标一个 7 天窗口来恢复数据,在密钥被删除并且数据永久丢失之前
了增加压力,攻击者会安排删除用于攻击的 KMS key。这会给目标一个 7 天窗口来恢复数据,之后 key 被删除数据永久丢失。
最后,攻击者可能会上传一个最终文件,通常名为 "ransom-note.txt",其中包含关于如何取回文件的说明。文件通常以未加密形式上传,以引起目标注意并告知其遭遇了勒索攻击。
最后,攻击者可能会上传一个最终文件,通常名为 "ransom-note.txt",其中包含如何取回文件的说明。文件通常不加密上传,以便引起目标注意并告知其遭遇了 ransomware 攻击。
#### SSE-C (Customer-Provided Key) Ransomware (Codefinger-like)
另一种变体是滥用 **SSE-C**S3 server-side encryption with **customer-provided keys**)。在 SSE-C 中,**客户端在每次请求时提供加密密钥****AWS 不会存储该密钥**。这意味着如果攻击者使用**自己的 SSE-C key** 重写对象,被害者的数据会变得不可读,除非被害者能够提供该攻击者控制的 key。
- **Preconditions:** 已泄露的 AWS 凭证(或任何具有相应权限的主体)以及能够**rewrite objects** 的能力(例如对目标 key/prefixes 的 `s3:PutObject`)。这通常还伴随能够设置破坏性 lifecycle 策略的能力(见下文),例如 `s3:PutLifecycleConfiguration`
- **Attack chain:**
1. 攻击者生成一个随机的 256-bit key (AES-256) 并保存该密钥。
2. 攻击者使用 SSE-C headers **rewrites** 现有对象(相同的对象 keys因此存储的对象现在使用攻击者的密钥加密。
3. 即使 IAM 权限正常,受害者在不提供 SSE-C key 的情况下也无法下载/解密。
4. 攻击者可以删除该密钥(或根本不提供),使数据无法恢复。
Example (conceptual) CLI usage:
```bash
# Upload/overwrite an object encrypted with attacker-provided SSE-C key
aws s3 cp ./file s3://<BUCKET>/<KEY> \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>
# Download requires providing the same key again
aws s3 cp s3://<BUCKET>/<KEY> ./file \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>
```
##### 增加压力Lifecycle "Timer" Abuse
为了移除恢复选项(例如旧版本),攻击者可以将 SSE-C 重写与 **生命周期规则** 配对,设置对象在短期后过期和/或删除非当前版本:
- `s3:PutLifecycleConfiguration` 在 bucket 上允许攻击者安排删除,而无需对每个对象/版本发起显式删除操作。
-**versioning is enabled** 时尤其具有影响力,因为它可以移除本可用于恢复的“之前的良好版本”。
##### 检测与缓解
- 除非有充分的运维理由需要允许 SSE-C否则优先使用 **SSE-KMS**(或 SSE-S3替代 SSE-C。
- 监控/告警使用 SSE-C 头的 `PutObject` 请求S3 的 CloudTrail 数据事件)。
- 监控/告警意外的 `PutBucketLifecycleConfiguration`(生命周期更改)。
- 监控/告警覆盖活动的突增(相同 key 被快速更新)以及 delete-marker/版本删除。
- 限制高风险权限:将 `s3:PutObject` 限制到必要的前缀;严格限制 `s3:PutLifecycleConfiguration``s3:PutBucketVersioning`;考虑对敏感管理操作(如适用)要求 MFA并使用带审批的独立管理员角色。
- 恢复策略:使用 **versioning**、**backups** 和 不可变/离线副本(例如将 S3 replication 到受保护账号、备份库等);保护非当前版本免受激进删除,并通过 SCPs / guardrails 约束生命周期更改。
### `s3:RestoreObject`
拥有 s3:RestoreObject permission 的攻击者可以重新激活存档在 Glacier 或 Deep Archive 的对象,使其暂时可访问。这使得恢复并外泄历史档数据(备份、快照、日志、证书、旧 secrets成为可能这些数据通常无法触及。如果攻击者将此权限与读取权限(例如 s3:GetObject结合使用,就可以获取敏感数据的完整副本。
拥有 s3:RestoreObject 权限的攻击者可以重新激活存档在 Glacier 或 Deep Archive 的对象,使其暂时可访问。这使得恢复并 exfiltration 历史档数据(backups、snapshots、logs、certifications、old secrets成为可能这些数据通常不可获取。如果攻击者将此权限与读取权限(例如 s3:GetObject结合,则可以获取敏感数据的完整副本。
```bash
aws s3api restore-object \
--bucket <BUCKET_NAME> \
@@ -47,7 +86,7 @@ aws s3api restore-object \
```
### `s3:Delete*`
拥有 `s3:Delete*` 权限的攻击者可以删除对象、版本和整个桶,破坏备份,并导致即且不可逆的数据丢失、证据毁灭以及备份或恢复工件的泄露或损坏
拥有 s3:Delete* 权限的攻击者可以删除对象、版本和整个存储桶,破坏备份,并导致即且不可逆的数据丢失、证据销毁,以及备份或恢复工件被破坏或泄露
```bash
# Delete an object from a bucket
aws s3api delete-object \
@@ -64,6 +103,6 @@ aws s3api delete-object \
aws s3api delete-bucket \
--bucket <BUCKET_NAME>
```
**欲了解更多信息** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
**更多信息** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
{{#include ../../../../banners/hacktricks-training.md}}