mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -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}}
|
||||
|
||||
Reference in New Issue
Block a user