diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index 92c3731cc..f9f6ce4c9 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -4,22 +4,22 @@ ## Secrets Manager -For more information check: +詳細は次を参照してください: {{#ref}} ../aws-services/aws-secrets-manager-enum.md {{#endref}} -### Secretsの読み取り +### シークレットの読み取り -その**secrets自体は機密情報です**。読み取り方法については[check the privesc page](../aws-privilege-escalation/aws-secrets-manager-privesc.md)を参照してください。 +シークレット自体は機密情報です。読み取り方法については[privesc ページ](../aws-privilege-escalation/aws-secrets-manager-privesc.md)を参照してください。 -### DoS — Secretの値を変更 +### DoS — シークレット値の変更 -secretの値を変更すると、その値に依存するすべてのシステムを**DoS**することができます。 +シークレットの値を変更すると、その値に依存するすべてのシステムを**DoS**してしまう可能性があります。 > [!WARNING] -> 以前の値も保存されるので、簡単に前の値に戻すことができます。 +> 以前の値も保存されるので、簡単に以前の値に戻すことができます。 ```bash # Requires permission secretsmanager:PutSecretValue aws secretsmanager put-secret-value \ @@ -28,19 +28,19 @@ aws secretsmanager put-secret-value \ ``` ### DoS Change KMS key -攻撃者が secretsmanager:UpdateSecret 権限を持っている場合、attacker が所有する KMS key を使用するように secret を設定できます。その key は最初、誰でもアクセスして使用できるように設定されているため、secret を新しい key で更新することが可能です。もしその key にアクセスできなければ、secret を更新することはできません。 +攻撃者が secretsmanager:UpdateSecret 権限を持っている場合、攻撃者が所有する KMS key を使うように secret を構成できます。そのキーは最初、誰でもアクセス・使用できるように設定されているため、secret をその新しいキーで更新することが可能です。もしキーにアクセスできなければ、secret は更新できません。 -secret の key を変更した後、attacker はその key の設定を変更して自分だけがアクセスできるようにします。こうすることで、以降の secret バージョンは新しい key で暗号化され、アクセスできなくなるため、secret を取得することが不可能になります。 +secret のキーを変更した後、攻撃者は自分のキーの設定を変更して自分のみがアクセスできるようにします。こうすることで、以降のバージョンの secret は新しいキーで暗号化され、そのキーにアクセスできないため secret を取得することができなくなります。 -このアクセス不能は、現在のバージョンが依然として元の KMS key で暗号化されているため、secret の内容が変更された後の以降のバージョンでのみ発生する点に注意してください。 +重要なのは、このアクセス不能は secret の内容が変更された後の以降のバージョンでのみ発生する点です。現在のバージョンはまだ元の KMS key で暗号化されているため、現時点では影響を受けません。 ```bash aws secretsmanager update-secret \ --secret-id MyTestSecret \ --kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE ``` -### DoS による Secret の削除 +### DoS Deleting Secret -Secret を削除するための最短日数は7日です。 +シークレットを削除するための最小日数は7日です ```bash aws secretsmanager delete-secret \ --secret-id MyTestSecret \ @@ -48,7 +48,7 @@ aws secretsmanager delete-secret \ ``` ## secretsmanager:RestoreSecret -シークレットを復元することが可能で、これは削除予定になっているシークレットを復元できることを意味します。シークレットの最短削除期間は7日、最長は30日です。secretsmanager:GetSecretValue 権限と組み合わせることで、それらの内容を取得することができます。 +シークレットは復元可能です。シークレットの削除期間は最短7日、最長30日であるため、削除予定になっているシークレットを復元できます。secretsmanager:GetSecretValue 権限があれば、その内容を取得できます。 削除処理中のシークレットを復元するには、次のコマンドを使用します: ```bash @@ -57,7 +57,7 @@ aws secretsmanager restore-secret \ ``` ## secretsmanager:DeleteResourcePolicy -このアクションは、シークレットへのアクセスを制御するリソースポリシーを削除できるようにします。リソースポリシーが特定のユーザーにのみアクセスを許可するように構成されている場合、これはDoSにつながる可能性があります。 +このアクションは、シークレットへのアクセスを誰が許可されるかを制御するリソースポリシーを削除できるようにします。リソースポリシーが特定のユーザー群へのアクセスを許可するように設定されていた場合、これはDoSにつながる可能性があります。 リソースポリシーを削除するには: ```bash @@ -66,11 +66,11 @@ aws secretsmanager delete-resource-policy \ ``` ## secretsmanager:UpdateSecretVersionStage -秘密の状態はシークレットのバージョン管理に使用されます。AWSCURRENT はアプリケーションが使用するアクティブなバージョンを示し、AWSPREVIOUS は必要に応じてロールバックできるよう前のバージョンを保持し、AWSPENDING は新しいバージョンを現在のものにする前に準備および検証するローテーション処理で使用されます。 +シークレットのステートはシークレットのバージョン管理に使われます。AWSCURRENT はアプリケーションが使用するアクティブなバージョンを示し、AWSPREVIOUS は必要に応じてロールバックできるよう前のバージョンを保持し、AWSPENDING はローテーション処理で新しいバージョンを準備・検証して現在のバージョンにする前に使われます。 -アプリケーションは常に AWSCURRENT のバージョンを読みます。誰かがそのラベルを誤ったバージョンに移動すると、アプリは無効な資格情報を使用して失敗する可能性があります。 +アプリケーションは常に AWSCURRENT が付いたバージョンを読みます。誰かがそのラベルを誤ったバージョンに移動すると、アプリは無効な認証情報を使ってしまい、動作が失敗する可能性があります。 -AWSPREVIOUS は自動的には使用されません。ただし、AWSCURRENT が削除されたり誤って再割り当てされた場合、すべてがまだ前のバージョンで動作しているように見えることがあります。 +AWSPREVIOUS は自動で使用されるわけではありません。しかし、AWSCURRENT が削除されたり誤って再割り当てされた場合、すべてが前のバージョンで稼働しているように見えることがあります。 ```bash aws secretsmanager update-secret-version-stage \ --secret-id \ @@ -79,3 +79,48 @@ aws secretsmanager update-secret-version-stage \ --remove-from-version-id ``` {{#include ../../../banners/hacktricks-training.md}} + +### Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call) + +Secrets Manager の BatchGetSecretValue API を悪用して、1回のリクエストで最大20個のシークレットを取得します。これは各シークレットごとに GetSecretValue を繰り返す場合と比べて API コール数を大幅に削減できます。フィルタ(tags/name)を使用する場合は ListSecrets の権限も必要です。CloudTrail はバッチで取得された各シークレットについて個別に GetSecretValue イベントを記録します。 + +必要な権限 +- secretsmanager:BatchGetSecretValue +- secretsmanager:GetSecretValue(各対象シークレットごとに) +- secretsmanager:ListSecrets(--filters を使用する場合) +- kms:Decrypt(シークレットで使用される CMKs に対して。aws/secretsmanager を使用していない場合) + +> [!WARNING] +> `secretsmanager:BatchGetSecretValue` の権限だけではシークレットを取得するのに十分ではありません。取得したい各シークレットに対して `secretsmanager:GetSecretValue` も必要です。 + +Exfiltrate by explicit list +```bash +aws secretsmanager batch-get-secret-value \ +--secret-id-list \ +--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' +``` +フィルタによるExfiltrate (tag key/value or name prefix) +```bash +# By tag key +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-key,Values=env \ +--max-results 20 \ +--query 'SecretValues[].{Name:Name,Val:SecretString}' + +# By tag value +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-value,Values=prod \ +--max-results 20 + +# By name prefix +aws secretsmanager batch-get-secret-value \ +--filters Key=name,Values=MyApp +``` +部分的な失敗の処理 +```bash +# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters +aws secretsmanager batch-get-secret-value --secret-id-list +``` +影響 +- より少ない API コールで多くの secrets を迅速に “smash-and-grab” し、GetSecretValue の急増に合わせて調整されたアラートを回避する可能性がある。 +- CloudTrail ログには、batch で取得された各 secret ごとに 1 件の GetSecretValue イベントが含まれる。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index 177a0c972..4d16677c9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -4,7 +4,7 @@ ## Secrets Manager -secrets managerの詳細は以下を参照してください: +Secrets Managerの詳細は次を確認してください: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -12,18 +12,18 @@ secrets managerの詳細は以下を参照してください: ### `secretsmanager:GetSecretValue` -この権限を持つ攻撃者は、**シークレット内に保存された値**をAWSの**Secretsmanager**から取得できます。 +この権限を持つ攻撃者は、AWS **Secretsmanager** の **シークレット内に保存された値** を取得できます。 ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` -**潜在的影響:** AWS secrets manager service 内の機密性の高いデータへアクセスできる。 +**Potential Impact:** AWS secrets manager service 内の高機密データへアクセス可能。 > [!WARNING] -> 注意: `secretsmanager:BatchGetSecretValue` の許可があっても、機密シークレットを取得するには `secretsmanager:GetSecretValue` も必要です。 +> `secretsmanager:BatchGetSecretValue` の権限があっても、機密シークレットを取得するには `secretsmanager:GetSecretValue` が別途必要である点に注意。 ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -前述の権限があれば、**他のプリンシパル/アカウント(外部を含む)にアクセス権を付与して** **シークレット** にアクセスさせることができます。 ただし、KMSキーで暗号化された**シークレットを読み取る**には、ユーザーは**KMSキーへのアクセス権**も持っている必要があります(詳細は [KMS Enum page](../aws-services/aws-kms-enum.md) を参照)。 +これらの権限があれば、**他のプリンシパル/アカウント(外部を含む)にシークレットへのアクセス権を付与することが可能**です。KMSキーで暗号化されたシークレットを**読み取る**ためには、ユーザーは**KMSキーへのアクセス権**も必要である点に注意(more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)). ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id