# AWS - S3 Post Exploitation

{{#include ../../../../banners/hacktricks-training.md}}

## S3

詳細は次を参照してください：

{{#ref}}
../../aws-services/aws-s3-athena-and-glacier-enum.md
{{#endref}}

### 機密情報

バケット内のファイルが読み取り可能な場合、機密情報が見つかることがあります。例えば、terraform state のシークレットなど。

### Pivoting

さまざまなプラットフォームが S3 に機密資産を保存している可能性があります。例えば、**airflow** は **DAGs** **code** を保存していることがあり、**web pages** が S3 から直接配信されている場合もあります。書き込み権限を持つ攻撃者は、バケット内のコードを **modify the code** して他のプラットフォームへ **pivot** したり、**JS files** を改変してアカウントを **takeover accounts** することができます。

### S3 Ransomware

このシナリオでは、攻撃者は自分の AWS アカウント（または別の侵害されたアカウント）に KMS (Key Management Service) キーを作成します。次にそのキーを世界中の誰でも使えるようにし、任意の AWS ユーザー、ロール、またはアカウントがそのキーでオブジェクトを暗号化できるようにします。しかし、オブジェクトは復号できなくなります。

攻撃者はターゲットの S3 バケットを特定し、様々な手段で書き込みレベルのアクセスを得ます。これはバケットの不適切な設定で公開されている場合や、攻撃者が AWS 環境自体にアクセスした場合などが考えられます。攻撃者は通常、PII、PHI、ログ、バックアップなどの機密情報を含むバケットを狙います。

ランサムウェアの標的にできるかを判断するため、攻撃者はバケットの設定を確認します。これには S3 Object Versioning が有効か、multi-factor authentication delete (MFA delete) が有効かどうかの確認が含まれます。Object Versioning が有効でない場合、攻撃者はそのまま進めます。Object Versioning が有効で MFA delete が無効の場合、攻撃者は Object Versioning を無効化できます。Object Versioning と MFA delete の両方が有効な場合、その特定のバケットをランサムウェア化するのはより難しくなります。

攻撃者は AWS API を使用して、バケット内の各オブジェクトを自分の KMS キーで暗号化されたコピーに置き換えます。これによりバケット内のデータは事実上暗号化され、キーがなければアクセスできなくなります。

さらにプレッシャーをかけるために、攻撃者は攻撃に使用した KMS キーの削除をスケジュールすることがあります。これにより、キーが削除されデータが永久に失われる前に、対象はデータを回復するための 7 日間の猶予を与えられます。

最後に、攻撃者は通常 "ransom-note.txt" という名前の最終ファイルをアップロードし、ファイルの取り戻し方法を指示します。このファイルは暗号化せずにアップロードされ、被害者の注意を引きランサムウェア攻撃に気づかせるために使われます。

#### SSE-C (Customer-Provided Key) Ransomware (Codefinger-like)

別のバリエーションとして、**SSE-C**（S3 server-side encryption with **customer-provided keys**）を悪用する手口があります。SSE-C ではクライアントが毎リクエストで暗号化キーを提供し、AWS はそのキーを保存しません。したがって、攻撃者が自分の SSE-C キーを使ってオブジェクトを書き換えると、被害者は攻撃者管理のキーを提供できない限りデータを読めなくなります。

- **前提条件:** 侵害された AWS 資格情報（または適切な権限を持つ任意のプリンシパル）と、**rewrite objects**（例: `s3:PutObject` をターゲットのキー/プレフィックスに対して実行できること）。これは破壊的なライフサイクルポリシーを設定する能力（下記参照）、例: `s3:PutLifecycleConfiguration` と組み合わされることが多いです。
- **攻撃チェーン:**
1. 攻撃者はランダムな 256-bit キー (AES-256) を生成し保持します。
2. 攻撃者は既存のオブジェクト（同じオブジェクトキー）を書き換え、SSE-C ヘッダを使って保存オブジェクトを攻撃者のキーで暗号化されたものにします。
3. 被害者は SSE-C キーを提供できない限りダウンロード/復号できません（IAM 権限が問題ない場合でも）。
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>
```
##### 圧力をかける: ライフサイクルの「タイマー」悪用

バックアップオプション（古いバージョンなど）を除去するため、攻撃者は SSE-C の書き換えを、オブジェクトを期限切れにしたり短期間で非現行バージョンを削除したりする **ライフサイクルルール** と組み合わせることができます:

- バケット上の `s3:PutLifecycleConfiguration` は、攻撃者が各オブジェクト/バージョンごとに明示的な削除操作を行わずに削除をスケジュールできるようにします。
- これは **バージョニングが有効な場合** に特に影響が大きく、通常であれば復旧を可能にする「以前の正常なバージョン」を削除できてしまうためです。

##### 検出と軽減策

- SSE-C を許可する強い運用上の理由がない限り、**SSE-KMS**（または SSE-S3）を SSE-C より優先してください。
- SSE-C ヘッダを使用した `PutObject` リクエストを監視/アラート（CloudTrail データイベント for S3）。
- 予期しない `PutBucketLifecycleConfiguration`（ライフサイクルの変更）を監視/アラート。
- 上書きアクティビティの急増（同じキーが短時間で頻繁に更新される）や delete-marker/バージョンの削除を監視/アラート。
- 高リスクな権限を制限する: `s3:PutObject` を必要なプレフィックスに限定する; `s3:PutLifecycleConfiguration` と `s3:PutBucketVersioning` を厳しく制限する; 機密性の高い管理操作には（該当する場合）MFA を要求することを検討し、承認付きの別個の管理ロールを使用してください。
- 復旧態勢: **バージョニング**、**バックアップ**、および変更不可能/オフラインのコピー（S3 レプリケーションを保護されたアカウントへ、バックアップボールト等）を利用する; 非現行バージョンが過度に削除されないよう保護し、ライフサイクルの変更を SCPs / ガードレールで守る。

### `s3:RestoreObject`

s3:RestoreObject 権限を持つ攻撃者は Glacier や Deep Archive にアーカイブされたオブジェクトを再アクティブ化（復元）でき、一時的にアクセス可能にします。これにより、通常は手の届かない過去にアーカイブされたデータ（バックアップ、スナップショット、ログ、証明書、古いシークレット等）の復元および exfiltration を可能にします。攻撃者がこの権限を読み取り権限（例: s3:GetObject）と組み合わせると、機密データの完全なコピーを入手できます。
```bash
aws s3api restore-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--restore-request '{
"Days": <NUMBER_OF_DAYS>,
"GlacierJobParameters": { "Tier": "Standard" }
}'
```
### `s3:Delete*`

s3:Delete* 権限を持つ攻撃者は、オブジェクト、バージョン、バケット全体を削除し、バックアップを妨害し、即時かつ不可逆的なデータ損失、証拠の破壊、またはバックアップ／リカバリ成果物の改ざん・損失を引き起こす可能性があります。
```bash
# Delete an object from a bucket
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY>

# Delete a specific version
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--version-id <VERSION_ID>

# Delete a bucket
aws s3api delete-bucket \
--bucket <BUCKET_NAME>
```
**詳しくは** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**

{{#include ../../../../banners/hacktricks-training.md}}
