4.0 KiB
AWS - ECS ポストエクスプロイテーション
{{#include ../../../banners/hacktricks-training.md}}
ECS
詳細については、以下を確認してください:
{{#ref}} ../aws-services/aws-ecs-enum.md {{#endref}}
ホスト IAM ロール
ECS では、IAM ロールをコンテナ内で実行されているタスクに割り当てることができます。もしタスクがEC2インスタンス内で実行されている場合、EC2 インスタンスには別の IAMロールが付与されます。
つまり、ECS インスタンスを侵害することに成功すれば、ECR および EC2 インスタンスに関連付けられた IAM ロールを取得する可能性があります。これらの資格情報を取得する方法についての詳細は、以下を確認してください:
{{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}}
Caution
EC2 インスタンスが IMDSv2 を強制している場合、ドキュメントによると、PUT リクエストの応答はホップ制限が 1となり、EC2 インスタンス内のコンテナから EC2 メタデータにアクセスすることが不可能になります。
ノードへの特権昇格と他のコンテナの資格情報および秘密の盗難
さらに、EC2 は ECs タスクを実行するために Docker を使用しているため、ノードにエスケープするか、Docker ソケットにアクセスできれば、他のコンテナがどのように実行されているかを確認でき、さらにはそれらの中に入って、付与された IAM ロールを盗むことができます。
現在のホストでコンテナを実行する
さらに、EC2 インスタンスロールは通常、クラスター内のノードとして使用されている EC2 インスタンスのコンテナインスタンスの状態を更新するのに十分な権限を持っています。攻撃者は、インスタンスの状態を DRAINING に変更することができ、その後 ECS はすべてのタスクをそこから削除し、REPLICAとして実行されているタスクは別のインスタンスで実行されることになり、潜在的に攻撃者のインスタンス内で実行されるため、彼はそれらの IAM ロールを盗むことができ、コンテナ内の潜在的な機密情報を取得することができます。
aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
同じ技術はクラスターからEC2インスタンスを登録解除することによって行うことができます。これは潜在的にあまり隠密ではありませんが、タスクを他のインスタンスで実行させることを強制します:
aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force
タスクの再実行を強制するための最終的な技術は、ECSにタスクまたはコンテナが停止したことを示すことです。これを行うための3つの潜在的なAPIがあります:
# Needs: ecs:SubmitTaskStateChange
aws ecs submit-task-state-change --cluster <value> \
--status STOPPED --reason "anything" --containers [...]
# Needs: ecs:SubmitContainerStateChange
aws ecs submit-container-state-change ...
# Needs: ecs:SubmitAttachmentStateChanges
aws ecs submit-attachment-state-changes ...
ECRコンテナから機密情報を盗む
EC2インスタンスは、おそらくecr:GetAuthorizationTokenの権限を持っており、イメージをダウンロードすることができます(その中に機密情報を探すことができます)。
{{#include ../../../banners/hacktricks-training.md}}