diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md index 8059825e8..21bc7eff7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md @@ -4,30 +4,30 @@ ## ECS -### Basiese Inligting +### Basic Information -Amazon **Elastic Container Services** of ECS bied 'n platform om **gecontaineriseerde toepassings in die wolk te huisves**. ECS het twee **ontplooiing** metodes, **EC2** instansie tipe en 'n **serverless** opsie, **Fargate**. Die diens **maak dit baie maklik en probleemloos om houers in die wolk te laat loop**. +Amazon **Elastic Container Services** or ECS bied ’n platform om **gekontaineriseerde toepassings in the cloud te host**. ECS het twee **deployment** metodes, **EC2** instansietipe en ’n **serverless** opsie, **Fargate**. Die diens **maak dit baie maklik en pynloos om containers in the cloud te laat loop**. -ECS werk met die volgende drie boublokke: **Clusters**, **Dienste**, en **Taak Definisies**. +ECS werk met die volgende drie boublokke: **Clusters**, **Services**, en **Task Definitions**. -- **Clusters** is **groepe van houers** wat in die wolk loop. Soos voorheen genoem, is daar twee lanseringstipes vir houers, EC2 en Fargate. AWS definieer die **EC2** lanseringstype as wat kliënte “toelaat om \[hul] gecontaineriseerde toepassings op 'n kluster van Amazon EC2 instansies wat \[hul] **bestuur**” te laat loop. **Fargate** is soortgelyk en word gedefinieer as “\[wat] jou toelaat om jou gecontaineriseerde toepassings **sonder die behoefte om** die agtergrondinfrastruktuur te voorsien en te bestuur”. -- **Dienste** word binne 'n kluster geskep en is verantwoordelik vir **die uitvoering van die take**. Binne 'n diensdefinisie **definieer jy die aantal take om te loop, outo-skaal, kapasiteitsverskaffer (Fargate/EC2/Buitenshuise),** **netwerk** inligting soos VPC’s, subnetwerke, en sekuriteitsgroepe. +- **Clusters** is **groepe containers** wat in the cloud loop. Soos vroeër genoem, is daar twee launch types vir containers, EC2 en Fargate. AWS definieer die **EC2** launch type as dat dit kliënte toelaat “om \[their] containerized applications on a cluster of Amazon EC2 instances that \[they] **manage**” te laat loop. **Fargate** is soortgelyk en word gedefinieer as “\[allowing] you to run your containerized applications **without the need to provision and manage** the backend infrastructure”. +- **Services** word binne ’n cluster geskep en is verantwoordelik vir **running the tasks**. Binne ’n service-definisie **definieer jy die aantal tasks om te run, auto scaling, capacity provider (Fargate/EC2/External),** **networking** inligting soos VPC’s, subnets, en security groups. - Daar is **2 tipes toepassings**: -- **Diens**: 'n Groep take wat 'n langlopende rekenaarwerk hanteer wat gestop en herbegin kan word. Byvoorbeeld, 'n webtoepassing. -- **Taak**: 'n Standalone taak wat loop en beëindig. Byvoorbeeld, 'n batch werk. -- Onder die diens toepassings, is daar **2 tipes diens skeduleerders**: -- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Die replika skeduleringstrategie plaas en **onderhou die gewenste aantal** take oor jou kluster. As om een of ander rede 'n taak afsluit, word 'n nuwe een in dieselfde of 'n ander node gelanseer. -- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Ontplooi presies een taak op elke aktiewe houerinstansie wat die nodige vereistes het. Daar is geen behoefte om 'n gewenste aantal take, 'n taak plasingstrategie, of diens outo-skaalbeleide te spesifiseer nie. -- **Taak Definisies** is verantwoordelik vir **die definisie van watter houers sal loop** en die verskillende parameters wat saam met die houers geconfigureer sal word soos **poorttoewysings** met die gasheer, **omgewing veranderlikes**, Docker **entrypoint**... -- Kyk na **omgewing veranderlikes vir sensitiewe inligting**! +- **Service**: ’n Groep tasks wat ’n langlopende rekenwerk hanteer wat gestop en weer begin kan word. Byvoorbeeld, ’n webtoepassing. +- **Task**: ’n selfstandige task wat loop en beëindig word. Byvoorbeeld, ’n batch job. +- Onder die service-toepassings is daar **2 tipes service schedulers**: +- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Die replica scheduling strategy plaas en **handhaaf die verlangde aantal** tasks oor jou cluster. As ’n task om een of ander rede afgeskakel word, word ’n nuwe een in dieselfde of ’n ander node geloods. +- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Ontplooi presies een task op elke aktiewe container instance wat die nodige vereistes het. Daar is geen behoefte om ’n verlangde aantal tasks, ’n task placement strategy, of Service Auto Scaling policies te spesifiseer nie. +- **Task Definitions** is verantwoordelik vir **die definisie van watter containers sal loop** en die verskeie parameters wat met die containers gekonfigureer sal word, soos **port mappings** met die host, **env variables**, Docker **entrypoint**... +- Kontroleer **env variables vir sensitiewe inligting**! -### Sensitiewe Gegewens In Taak Definisies +### Sensitiewe Data In Task Definitions -Taak definisies is verantwoordelik vir **die konfigurasie van die werklike houers wat in ECS sal loop**. Aangesien taak definisies definieer hoe houers sal loop, kan 'n oorvloed van inligting daarin gevind word. +Task definitions is verantwoordelik vir **die konfigurasie van die werklike containers wat in ECS sal loop**. Aangesien task definitions definieer hoe containers sal loop, kan ’n oorvloed inligting daarin gevind word. -Pacu kan ECS opnoem (lys-klusters, lys-houer-instansies, lys-dienste, lys-taak-definisies), dit kan ook taak definisies dump. +Pacu kan ECS enum (list-clusters, list-container-instances, list-services, list-task-definitions), dit kan ook task definitions dump. -### Opname +### Enumeration ```bash # Clusters info aws ecs list-clusters @@ -51,27 +51,60 @@ aws ecs describe-tasks --cluster --tasks ## Look for env vars and secrets used from the task definition aws ecs describe-task-definition --task-definition : ``` -### Ongeauthentiseerde Toegang +### Op-gas Enumerasie via die ECS Agent State DB (`agent.db`) + +Wanneer jy **shell access op 'n ECS container instance** het, of jy het **uit 'n container ge-escape met 'n host bind-mount van `/var/lib/ecs`** (’n algemene misconfiguratie wanneer tasks privileged loop of met `volumesFrom` wat die host data dir blootstel), laat die ECS agent `agent.db` op disk agter wat gelees kan word **sonder enige AWS API call**, **sonder enige IAM permission**, en **sonder om CloudTrail te trigger**. +``` +/var/lib/ecs/data/agent.db +``` +(of, wanneer dit vanaf ’n container gelees word wat die host gemonteer het by `/host`, `/host/var/lib/ecs/data/agent.db`). +```bash +# 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 +``` +#### Wat jy kan herwin + +Afhangend van die cluster se ouderdom en workload churn, lewer `strings` teenoor `agent.db` tipies: + +- **Task and execution IAM role ARNs** (`taskRoleArn`, `executionRoleArn`) vir elke task wat die agent al uitgevoer het — nuttige teikens vir [credential retrieval via the task metadata endpoint](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.html) (`169.254.170.2`). +- **Full task definitions** — image URIs (dikwels private ECR repos), command, entrypoint, port mappings, mount points, log configuration, en **plaintext environment variables** wat dikwels database URLs, API tokens, en third-party secrets insluit. +- **Secrets references** — `secretOptions` en `secrets` blocks wat na SSM Parameter Store paths en Secrets Manager ARNs wys (groot pivot list). +- **Container instance ARN, cluster ARN, and registration token** — bevestig die cluster name en account/region konteks sonder enige API call. +- **ENI metadata** — private IPs, MAC addresses, subnet IDs, en security group IDs toegeken in `awsvpc` mode (nuttig vir lateral movement beplanning). +- **Image pull credentials** — wanneer die task definition `repositoryCredentials` gebruik, is die verwysde Secrets Manager ARN hier; op ouer agents kan private-registry auth blobs (`ECS_ENGINE_AUTH_DATA`) ook gecached wees. +- **Recently-stopped task containers** — insluitend names, IDs, exit codes en labels, soms lank nadat die ooreenstemmende `aws ecs describe-tasks` call hulle uit die API response verwyder het. + +### Unauthenticated Access {{#ref}} ../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md {{#endref}} -### Privilege Escalation +### Privesc -In die volgende bladsy kan jy kyk hoe om **ECS-toestemmings te misbruik om voorregte te verhoog**: +In die volgende page kan jy kyk hoe om ECS permissions te **abuse om privileges te escalate**: {{#ref}} ../aws-privilege-escalation/aws-ecs-privesc/README.md {{#endref}} -### Post Exploitatie +### Post Exploitation {{#ref}} ../aws-post-exploitation/aws-ecs-post-exploitation/README.md {{#endref}} -### Volharding +### Persistence {{#ref}} ../aws-persistence/aws-ecs-persistence/README.md