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

This commit is contained in:
Translator
2026-02-14 19:50:22 +00:00
parent eb4585102e
commit 89779e2f8f

View File

@@ -4,7 +4,7 @@
## S3
詳細は以下を参照してください:
詳細はを参照してください
{{#ref}}
../../aws-services/aws-s3-athena-and-glacier-enum.md
@@ -12,30 +12,68 @@
### 機密情報
バケット内に平文で機密情報が置かれていることがあります。例えば、terraform state secrets
バケット内のファイルが読み取り可能な場合、機密情報が見つかることがあります。例えば、terraform state のシークレットなど
### 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 から直接配信されている場合もあります。書き込み権限を持つ攻撃者は、バケット内のコードを **modify the code** して他のプラットフォームへ **pivot** したり、**JS files** を改変してアカウントを **takeover accounts** することができます。
### S3 Ransomware
In this scenario, the **attacker creates a KMS (Key Management Service) key in their own AWS account** or another compromised account. They then make this **key accessible to anyone in the world**, allowing any AWS user, role, or account to encrypt objects using this key. However, the objects cannot be decrypted.
このシナリオでは、攻撃者は自分の AWS アカウント(または別の侵害されたアカウント)に KMS (Key Management Service) キーを作成します。次にそのキーを世界中の誰でも使えるようにし、任意の AWS ユーザー、ロール、またはアカウントがそのキーでオブジェクトを暗号化できるようにします。しかし、オブジェクトは復号できなくなります。
攻撃者は標的の **S3 bucket and gains write-level access** を特定し、さまざまな方法で書き込み権限を取得します。これはバケットの設定不備で公開されている場合や、攻撃者が AWS 環境自体へ侵入した場合などが考えられます。攻撃者は通常、PII、PHI、ログ、バックアップなどの機密情報を含むバケットを狙います。
攻撃者はターゲットの S3 バケットを特定し、様々な手段で書き込みレベルのアクセスを得ます。これはバケットの不適切な設定で公開されている場合や、攻撃者が AWS 環境自体にアクセスした場合などが考えられます。攻撃者は通常、PII、PHI、ログ、バックアップなどの機密情報を含むバケットを狙います。
ランサムウェアの対象にできるかを判断するため、攻撃者はバケットの設定を確認します。これには **S3 Object Versioning** が有効か、**multi-factor authentication delete (MFA delete) is enabled** かを検証することが含まれます。Object Versioning が有効でない場合攻撃者は進行できます。Object Versioning 有効で MFA delete が無効であれば、攻撃者は **disable Object Versioning** することができます。もし両方が有効であれば、そのバケットをランサムウェア化するのはより困難になります。
ランサムウェアの標的にできるかを判断するため、攻撃者はバケットの設定を確認します。これには S3 Object Versioning が有効か、multi-factor authentication delete (MFA delete) が有効かどうかの確認が含まれます。Object Versioning が有効でない場合攻撃者はそのまま進めます。Object Versioning 有効で MFA delete が無効の場合、攻撃者は Object Versioning を無効化できます。Object Versioning と MFA delete の両方が有効な場合、その特定のバケットをランサムウェア化するのはより難しくなります。
Using the AWS API, the attacker **replaces each object in the bucket with an encrypted copy using their KMS key**. これによりバケット内のデータが実質的に暗号化され、キーがなければアクセス不能になります。
攻撃者は AWS API を使用して、バケット内の各オブジェクトを自分の KMS キーで暗号化されたコピーに置き換えます。これによりバケット内のデータは事実上暗号化され、キーがなければアクセスできなくなります。
さらに圧力をかけるために、攻撃者は攻撃に使用した KMS key の削除をスケジュールすることがあります。これにより対象はキーが削除されデータが恒久的に失われる前の7日間で回復を試みる必要が生じます。
さらにプレッシャーをかけるために、攻撃者は攻撃に使用した KMS キーの削除をスケジュールすることがあります。これによりキーが削除されデータが永久に失われる前に、対象はデータを回復するための 7 日間の猶予を与えられます。
最後に、攻撃者は通常 "ransom-note.txt" と名付けた最終的なファイルをアップロードし、ファイルの取得方法についての指示を記載します。このファイルは暗号化せずにアップロードされ、対象の注意を引きランサムウェア攻撃に気づかせるために使われます。
最後に、攻撃者は通常 "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`
An attacker with the s3:RestoreObject permission can reactivate objects archived in Glacier or Deep Archive, making them temporarily accessible. これにより通常は手の届かない過去にアーカイブされたデータ(バックアップ、スナップショット、ログ、証明書、古いシークレット等)の復旧やexfiltration可能になります。もし攻撃者がこの権限を読み取り権限(例: s3:GetObjectと組み合わせれば、機密データの完全なコピーを取得することができます。
s3:RestoreObject 権限を持つ攻撃者は Glacier Deep Archive にアーカイブされたオブジェクトを再アクティブ化(復元)でき、一時的にアクセス可能にします。これにより通常は手の届かない過去にアーカイブされたデータ(バックアップ、スナップショット、ログ、証明書、古いシークレット等)の復元および exfiltration可能にます。攻撃者がこの権限を読み取り権限(例: s3:GetObjectと組み合わせると、機密データの完全なコピーを入手できます。
```bash
aws s3api restore-object \
--bucket <BUCKET_NAME> \
@@ -47,7 +85,7 @@ aws s3api restore-object \
```
### `s3:Delete*`
s3:Delete* 権限を持つ攻撃者は、オブジェクト、バージョン、バケット全体を削除したり、バックアップを妨害したりして、即時かつ回復不能なデータ損失、証拠の破壊、バックアップリカバリのアーティファクトの侵害を引き起こす可能性があります。
s3:Delete* 権限を持つ攻撃者は、オブジェクト、バージョン、バケット全体を削除し、バックアップを妨害し、即時かつ不可逆的なデータ損失、証拠の破壊、またはバックアップリカバリ成果物の改ざん・損失を引き起こす可能性があります。
```bash
# Delete an object from a bucket
aws s3api delete-object \
@@ -64,6 +102,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}}