AWS - ECS Enum

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

ECS

Basic Information

Amazon Elastic Container Services or ECS 提供了一个平台,用于在 cloud 中host 容器化 applications。ECS 有两种deployment方式:EC2 instance type 和一个serverless 选项,Fargate。这个 service 让在 cloud 中运行 containers 非常容易且省心

ECS 通过以下三个构建块运行:ClustersServicesTask Definitions

  • Clusters 是在 cloud 中运行的containers 组。如前所述,containers 有两种 launch type,EC2 和 Fargate。AWS 将 EC2 launch type 定义为允许客户“在 Amazon EC2 instances 的 cluster 上运行[their] containerized applications,而这些实例由[they] manage”。Fargate 类似,被定义为“[allowing] 你在无需 provision 和 manage 后端 infrastructure 的情况下运行 containerized applications”。
  • Services 在 cluster 内创建,负责运行 tasks。在 service definition 中,you define the number of tasks to run, auto scaling, capacity provider (Fargate/EC2/External), 以及 networking 信息,例如 VPC、subnets 和 security groups。
  • There 2 types of applications:
  • Service: 一组 tasks,负责处理可停止并重启的长期 computing work。例如 web application。
  • Task: 一个独立运行并终止的 task。例如 batch job。
  • 在 service applications 中,有 2 types of service schedulers
  • REPLICA: replica scheduling strategy 会在你的 cluster 中放置并maintain 期望数量的 tasks。如果由于某些原因某个 task 关闭了,会在同一个或不同的 node 上启动一个新的。
  • DAEMON: 在每个满足所需 requirements 的 active container instance 上精确部署一个 task。无需指定 desired number of tasks、task placement strategy,也不需要使用 Service Auto Scaling policies。
  • Task Definitions 负责定义将运行哪些 containers,以及会与 containers 一起配置的各种参数,例如与 host 的port mappingsenv variables、Docker entrypoint
  • Check env variables for sensitive info!

Sensitive Data In Task Definitions

Task definitions 负责配置将在 ECS 中实际运行的 containers。由于 task definitions 定义了 containers 的运行方式,因此其中可以找到大量信息。

Pacu can enumerate ECS (list-clusters, list-container-instances, list-services, list-task-definitions), it can also dump task definitions.

Enumeration

# Clusters info
aws ecs list-clusters
aws ecs describe-clusters --clusters <cluster>

# Container instances
## An Amazon ECS container instance is an Amazon EC2 instance that is running the Amazon ECS container agent and has been registered into an Amazon ECS cluster.
aws ecs list-container-instances --cluster <cluster>
aws ecs describe-container-instances --cluster <cluster> --container-instances <container_instance_arn>

# Services info
aws ecs list-services --cluster <cluster>
aws ecs describe-services --cluster <cluster> --services <services>
aws ecs describe-task-sets --cluster <cluster> --service <service>

# Task definitions
aws ecs list-task-definition-families
aws ecs list-task-definitions
aws ecs list-tasks --cluster <cluster>
aws ecs describe-tasks --cluster <cluster> --tasks <tasks>
## Look for env vars and secrets used from the task definition
aws ecs describe-task-definition --task-definition <TASK_NAME>:<VERSION>

通过 ECS Agent State DB (agent.db) 进行主机内枚举

当你在 ECS container instance 上拥有 shell access,或者你逃逸出了一个 container,并且挂载了主机的 bind-mount /var/lib/ecs(这是一种常见 misconfiguration,尤其是在任务以 privileged 运行,或使用 volumesFrom 暴露主机 data dir 时),ECS agent 会在磁盘上留下可读取的 agent.db,你可以无需任何 AWS API 调用无需任何 IAM permission,并且不会触发 CloudTrail 就读取它。

/var/lib/ecs/data/agent.db

(或者,当从一个已将主机挂载到 /host 的容器中读取时,/host/var/lib/ecs/data/agent.db)。

# Most useful one-liner — dumps everything readable
strings /var/lib/ecs/data/agent.db

# From inside a container with the host mounted at /host
strings /host/var/lib/ecs/data/agent.db

# Filter for the highest-value artefacts
strings /var/lib/ecs/data/agent.db | grep -aE 'arn:aws:|AKIA|ASIA|"secret|password|TOKEN|credentials|taskRoleArn|executionRoleArn'

# Save the outcome from strings for offline analysis
strings /host/var/lib/ecs/data/agent.db >> /tmp/agent.txt
tr -s '{}[],:"\\' '\n' < /tmp/agent.txt | sed 's/^[[:space:]]*//; s/[[:space:]]*$//' | awk 'NF && length($0)>2 && !/^[0-9.]+$/' | sort -u

你可以恢复的内容

根据 cluster 的年龄和 workload churn,针对 agent.db 使用 strings 通常可以提取出:

  • Task 和 execution IAM role ARNstaskRoleArn, executionRoleArn):对应 agent 运行过的每个 task——这是通过 credential retrieval via the task metadata endpoint169.254.170.2)获取凭据的有用目标。
  • 完整的 task definitions——image URIs(通常是 private ECR repos)、command、entrypoint、port mappings、mount points、log configuration,以及经常包含数据库 URLs、API tokens 和第三方 secrets 的明文 environment variables
  • Secrets references——指向 SSM Parameter Store paths 和 Secrets Manager ARNs 的 secretOptionssecrets blocks(很好的 pivot list)。
  • Container instance ARN、cluster ARN 和 registration token——无需 API call 即可确认 cluster name 和 account/region context。
  • ENI metadata——在 awsvpc mode 下分配的 private IPs、MAC addresses、subnet IDs 和 security group IDs(对 lateral movement planning 很有用)。
  • Image pull credentials——当 task definition 使用 repositoryCredentials 时,这里会保存所引用的 Secrets Manager ARN;在旧版 agents 上,private-registry auth blobs(ECS_ENGINE_AUTH_DATA)也可能被缓存。
  • Recently-stopped task containers——包括 names、IDs、exit codes 和 labels,有时即使对应的 aws ecs describe-tasks 调用结果已经从 API response 中过期很久,也仍然存在。

Unauthenticated Access

AWS - ECS Unauthenticated Enum

Privesc

在下面页面你可以查看如何 abuse ECS permissions to escalate privileges

AWS - ECS Privesc

Post Exploitation

AWS - ECS Post Exploitation

Persistence

AWS - ECS Persistence

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks