AWS - ECS Post Exploitation

HackTricksをサポート

ECS

詳細は以下を参照してください:

AWS - ECS Enum

ホストIAMロール

ECSでは、コンテナ内で実行されているタスクにIAMロールを割り当てることができます。タスクがEC2インスタンス内で実行されている場合、EC2インスタンスには別のIAMロールがアタッチされています。 つまり、ECSインスタンスを侵害することができれば、ECRおよびEC2インスタンスに関連付けられたIAMロールを取得する可能性があります。これらの資格情報を取得する方法について詳細は以下を参照してください:

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にタスクまたはコンテナが停止されたことを示すことで、タスクの再実行を強制する方法です。これを行うための潜在的なAPIは3つあります:

# 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権限も持っており、それによりイメージをダウンロードできます(それらに機密情報が含まれている可能性があります)。

Last updated