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 або ECS надає платформу для розміщення контейнеризованих застосунків у cloud. ECS має два методи deployment: тип інстансів EC2 і serverless варіант, Fargate. Цей сервіс робить запуск контейнерів у cloud дуже простим і безболісним.

ECS працює, використовуючи такі три будівельні блоки: Clusters, Services і Task Definitions.

  • Clusters — це групи контейнерів, що працюють у cloud. Як уже згадувалося, існує два launch types для контейнерів: EC2 і Fargate. AWS визначає launch type EC2 як такий, що дозволяє клієнтам “запускати [their] контейнеризовані застосунки на cluster із Amazon EC2 instances, які [they] manage”. Fargate схожий і визначається як “[allowing] you запускати your containerized applications без потреби provision і manage backend infrastructure”.
  • Services створюються всередині cluster і відповідають за запуск tasks. Усередині визначення service ви задаєте кількість tasks для запуску, auto scaling, capacity provider (Fargate/EC2/External), networking інформацію, таку як VPC’s, subnets і security groups.
  • Існує 2 типи applications:
  • Service: Група tasks, що обробляє довготривале обчислювальне завдання, яке можна зупинити і перезапустити. Наприклад, web application.
  • Task: Окрема task, яка запускається і завершується. Наприклад, batch job.
  • Серед service applications існує 2 типи service schedulers:
  • REPLICA: Стратегія replica scheduling розміщує і підтримує потрібну кількість tasks у вашому cluster. Якщо з якоїсь причини task завершиться, нова буде запущена на тому самому або іншому node.
  • DAEMON: Розгортає рівно одну task на кожному активному container instance, який має потрібні вимоги. Немає потреби вказувати бажану кількість tasks, task placement strategy або використовувати Service Auto Scaling policies.
  • Task Definitions відповідають за визначення того, які containers будуть запущені, а також різних параметрів, що будуть налаштовані для контейнерів, таких як port mappings з host, env variables, Docker entrypoint
  • Перевіряйте env variables на наявність sensitive info!

Sensitive Data In Task Definitions

Task definitions відповідають за налаштування фактичних контейнерів, які будуть працювати в ECS. Оскільки 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>

On-Host Enumeration via the ECS Agent State DB (agent.db)

Коли ви маєте shell access on an ECS container instance , або ви escaped a container with a host bind-mount of /var/lib/ecs (поширена misconfiguration, коли tasks запускаються privileged або з volumesFrom, що відкриває host data dir), ECS agent залишає agent.db на диску, який можна прочитати without any AWS API call, without any IAM permission, і without triggering CloudTrail.

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

(або, під час читання з container, що має host, змонтований у /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

Що можна відновити

Залежно від віку кластера та churn навантаження, strings проти agent.db зазвичай дає:

  • Task та execution IAM role ARNs (taskRoleArn, executionRoleArn) для кожного task, який agent запускав — корисні цілі для credential retrieval via the task metadata endpoint (169.254.170.2).
  • Повні task definitions — image URIs (часто приватні ECR repos), command, entrypoint, port mappings, mount points, log configuration, і plaintext environment variables, які часто містять database URLs, API tokens, та third-party secrets.
  • Secrets references — блоки secretOptions і secrets, що вказують на шляхи SSM Parameter Store та Secrets Manager ARNs (чудовий список для pivot).
  • Container instance ARN, cluster ARN, and registration token — підтверджує ім’я кластерa та context account/region без API call.
  • ENI metadata — private IPs, MAC addresses, subnet IDs, і security group IDs, призначені в awsvpc mode (корисно для планування lateral movement).
  • Image pull credentials — коли task definition використовує repositoryCredentials, тут є відповідний Secrets Manager ARN; на старіших agents також можуть бути cached private-registry auth blobs (ECS_ENGINE_AUTH_DATA).
  • Recently-stopped task containers — включно з names, IDs, exit codes і labels, інколи ще довго після того, як відповідний aws ecs describe-tasks call уже видалив їх з 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