AWS - ECS Post Exploitation

支持 HackTricks

ECS

有关更多信息,请查看:

主机 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 任务或容器已停止。有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,允许它下载镜像(你可以在其中搜索敏感信息)。

支持HackTricks

Last updated