AWS - ECS Enum

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstütze HackTricks

ECS

Basic Information

Amazon Elastic Container Services oder ECS bietet eine Plattform, um containerized applications in der cloud zu hosten. ECS hat zwei deployment-Methoden, den EC2-Instanztyp und eine serverless-Option, Fargate. Der Service macht das Ausführen von Containern in der cloud sehr einfach und schmerzfrei.

ECS arbeitet mit den folgenden drei Bausteinen: Clusters, Services und Task Definitions.

  • Clusters sind Gruppen von Containern, die in der cloud laufen. Wie bereits erwähnt, gibt es zwei launch types für Container, EC2 und Fargate. AWS definiert den EC2-launch type so, dass Kunden damit „ihre containerized applications auf einem cluster von Amazon EC2 instances ausführen, die sie manage“. Fargate ist ähnlich und wird definiert als „[erlaubt], deine containerized applications ohne die Notwendigkeit bereitzustellen und zu managen der Backend-Infrastruktur auszuführen“.
  • Services werden innerhalb eines clusters erstellt und sind für das Ausführen der tasks verantwortlich. Innerhalb einer service definition definierst du die Anzahl der auszuführenden tasks, auto scaling, capacity provider (Fargate/EC2/External), networking-Informationen wie VPC’s, subnets und security groups.
  • Es gibt 2 Arten von applications:
  • Service: Eine Gruppe von tasks, die eine lang laufende Rechenarbeit verarbeitet, die gestoppt und neu gestartet werden kann. Zum Beispiel eine web application.
  • Task: Eine eigenständige task, die ausgeführt wird und endet. Zum Beispiel ein batch job.
  • Unter den service applications gibt es 2 Arten von service schedulers:
  • REPLICA: Die replica scheduling strategy platziert und erhält die gewünschte Anzahl von tasks über deinen cluster hinweg. Wenn aus irgendeinem Grund eine task heruntergefahren wird, wird eine neue auf demselben oder einem anderen node gestartet.
  • DAEMON: Deploys genau eine task auf jeder aktiven container instance, die die benötigten Anforderungen erfüllt. Es ist nicht nötig, eine gewünschte Anzahl von tasks, eine task placement strategy anzugeben oder Service Auto Scaling policies zu verwenden.
  • Task Definitions sind dafür verantwortlich, zu definieren, welche containers laufen werden, sowie die verschiedenen Parameter, die mit den containers konfiguriert werden, wie port mappings mit dem host, env variables, Docker entrypoint
  • Prüfe env variables auf sensitive info!

Sensitive Data In Task Definitions

Task definitions sind dafür verantwortlich, die tatsächlichen containers zu konfigurieren, die in ECS laufen werden. Da task definitions festlegen, wie containers laufen, kann darin eine Fülle von Informationen gefunden werden.

Pacu kann ECS enumerieren (list-clusters, list-container-instances, list-services, list-task-definitions), es kann auch task definitions dumpen.

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)

Wenn du Shell-Zugriff auf eine ECS container instance hast, oder aus einem container entkommen bist mit einem host bind-mount von /var/lib/ecs (eine häufige Fehlkonfiguration, wenn Tasks privileged laufen oder mit volumesFrom das host data dir exponieren), lässt der ECS agent agent.db auf dem Datenträger zurück, das ohne jeden AWS API call, ohne jede IAM permission und ohne Auslösen von CloudTrail gelesen werden kann.

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

(oder, wenn von einem Container gelesen wird, der den Host unter /host eingehängt hat, /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

Was du wiederherstellen kannst

Abhängig von Alter des Clusters und Workload-Churn liefert strings gegen agent.db typischerweise:

  • Task- und Execution-IAM-Role-ARNs (taskRoleArn, executionRoleArn) für jeden Task, den der Agent ausgeführt hat — nützliche Ziele für credential retrieval via the task metadata endpoint (169.254.170.2).
  • Vollständige Task-Definitionen — Image-URIs (oft private ECR-Repos), command, entrypoint, port mappings, mount points, log configuration und plaintext environment variables, die häufig database URLs, API tokens und Third-Party-Secrets enthalten.
  • Secrets-ReferenzensecretOptions- und secrets-Blöcke, die auf SSM Parameter Store-Pfade und Secrets Manager ARNs verweisen (sehr gute Pivot-Liste).
  • Container-Instance-ARN, Cluster-ARN und Registration Token — bestätigt den Cluster-Namen sowie den Account-/Region-Kontext ohne API-Call.
  • ENI-Metadaten — private IPs, MAC-Adressen, Subnet-IDs und Security Group IDs, die im awsvpc-Modus zugewiesen wurden (nützlich für die Planung von lateral movement).
  • Image-Pull-Credentials — wenn die Task-Definition repositoryCredentials verwendet, ist der referenzierte Secrets Manager ARN hier; auf älteren Agents können auch Auth-Blobs für private Registries (ECS_ENGINE_AUTH_DATA) gecached sein.
  • Kürzlich gestoppte Task-Container — einschließlich Namen, IDs, Exit-Codes und Labels, manchmal noch lange nachdem der entsprechende aws ecs describe-tasks-Aufruf sie aus der API-Antwort entfernt hat.

Unauthenticated Access

AWS - ECS Unauthenticated Enum

Privesc

In der folgenden Seite kannst du prüfen, wie man ECS permissions missbraucht, um Privilegien zu eskalieren:

AWS - ECS Privesc

Post Exploitation

AWS - ECS Post Exploitation

Persistence

AWS - ECS Persistence

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstütze HackTricks