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使用docker来运行ECS任务,因此如果您可以逃逸到节点或访问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 可以实现这一点:

# 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