Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-ecs-

This commit is contained in:
Translator
2026-05-03 08:46:56 +00:00
parent 69da9d6f97
commit 82e708b017
@@ -6,28 +6,28 @@
### Informazioni di base ### Informazioni di base
Amazon **Elastic Container Services** o ECS fornisce una piattaforma per **ospitare applicazioni containerizzate nel cloud**. ECS ha due metodi di **distribuzione**, tipo di istanza **EC2** e un'opzione **serverless**, **Fargate**. Il servizio **rende molto facile e senza problemi eseguire container nel cloud**. Amazon **Elastic Container Services** o ECS fornisce una piattaforma per **ospitare applicazioni containerizzate nel cloud**. ECS ha due metodi di **deployment**, il tipo di istanza **EC2** e un'opzione **serverless**, **Fargate**. Il servizio **rende l'esecuzione dei container nel cloud molto facile e senza problemi**.
ECS opera utilizzando i seguenti tre elementi fondamentali: **Cluster**, **Servizi** e **Definizioni di Task**. ECS opera usando i seguenti tre blocchi fondamentali: **Clusters**, **Services** e **Task Definitions**.
- **Cluster** sono **gruppi di container** che stanno girando nel cloud. Come già accennato, ci sono due tipi di avvio per i container, EC2 e Fargate. AWS definisce il tipo di avvio **EC2** come che consente ai clienti “di eseguire \[le loro\] applicazioni containerizzate su un cluster di istanze Amazon EC2 che \[essi\] **gestiscono**”. **Fargate** è simile e viene definito come “\[consentendo\] di eseguire le proprie applicazioni containerizzate **senza la necessità di fornire e gestire** l'infrastruttura di backend”. - **Clusters** sono **gruppi di container** che stanno girando nel cloud. Come detto in precedenza, ci sono due launch types per i container, EC2 e Fargate. AWS definisce il launch type **EC2** come quello che permette ai clienti “di eseguire \[le loro] applicazioni containerizzate su un cluster di istanze Amazon EC2 che \[loro] **gestiscono**”. **Fargate** è simile ed è definito come “\[che consente] di eseguire le tue applicazioni containerizzate **senza la necessità di provisionare e gestire** l'infrastruttura backend”.
- **Servizi** vengono creati all'interno di un cluster e sono responsabili per **eseguire i task**. All'interno di una definizione di servizio **si definisce il numero di task da eseguire, l'auto scaling, il fornitore di capacità (Fargate/EC2/Esterno),** informazioni di **networking** come VPC, subnet e gruppi di sicurezza. - **Services** vengono creati all'interno di un cluster e sono responsabili di **eseguire i tasks**. All'interno di una definizione di service **definisci il numero di tasks da eseguire, auto scaling, capacity provider (Fargate/EC2/External),** informazioni di **networking** come VPC, subnet e security groups.
- Ci sono **2 tipi di applicazioni**: - Ci sono **2 tipi di applicazioni**:
- **Servizio**: Un gruppo di task che gestisce un lavoro di calcolo a lungo termine che può essere interrotto e riavviato. Ad esempio, un'applicazione web. - **Service**: Un gruppo di tasks che gestisce un carico di lavoro computazionale a lunga durata che può essere fermato e riavviato. Per esempio, un'applicazione web.
- **Task**: Un task autonomo che viene eseguito e termina. Ad esempio, un lavoro batch. - **Task**: Un task autonomo che viene eseguito e termina. Per esempio, un batch job.
- Tra le applicazioni di servizio, ci sono **2 tipi di pianificatori di servizio**: - Tra le applicazioni di service, ci sono **2 tipi di service schedulers**:
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): La strategia di pianificazione replica posiziona e **mantiene il numero desiderato** di task nel tuo cluster. Se per qualche motivo un task si spegne, ne viene avviato uno nuovo nello stesso o in un nodo diverso. - [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): La strategia di scheduling replica posiziona e **mantiene il numero desiderato** di tasks nel tuo cluster. Se per qualche motivo un task si arresta, ne viene avviato uno nuovo nello stesso nodo o in un nodo diverso.
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Distribuisce esattamente un task su ciascuna istanza di container attiva che ha i requisiti necessari. Non è necessario specificare un numero desiderato di task, una strategia di posizionamento dei task o utilizzare le politiche di Auto Scaling del Servizio. - [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Distribuisce esattamente un task su ogni container instance attiva che abbia i requisiti necessari. Non è necessario specificare un numero desiderato di tasks, una task placement strategy o usare le policy di Service Auto Scaling.
- **Definizioni di Task** sono responsabili per **definire quali container verranno eseguiti** e i vari parametri che verranno configurati con i container come **mappature delle porte** con l'host, **variabili d'ambiente**, **entrypoint** di Docker... - **Task Definitions** sono responsabili di **definire quali container verranno eseguiti** e i vari parametri che saranno configurati con i container, come **port mappings** con l'host, **env variables**, Docker **entrypoint**...
- Controlla **le variabili d'ambiente per informazioni sensibili**! - Controlla le **env variables per info sensibili**!
### Dati sensibili nelle Definizioni di Task ### Dati sensibili nelle Task Definitions
Le definizioni di task sono responsabili per **configurare i container effettivi che verranno eseguiti in ECS**. Poiché le definizioni di task definiscono come verranno eseguiti i container, una miriade di informazioni può essere trovata al loro interno. Le task definitions sono responsabili di **configurare i container effettivi che verranno eseguiti in ECS**. Poiché le task definitions definiscono come i container verranno eseguiti, al loro interno si può trovare una grande quantità di informazioni.
Pacu può enumerare ECS (list-clusters, list-container-instances, list-services, list-task-definitions), può anche estrarre le definizioni di task. Pacu può enumerare ECS (list-clusters, list-container-instances, list-services, list-task-definitions), può anche fare il dump delle task definitions.
### Enumerazione ### Enumeration
```bash ```bash
# Clusters info # Clusters info
aws ecs list-clusters aws ecs list-clusters
@@ -51,7 +51,40 @@ aws ecs describe-tasks --cluster <cluster> --tasks <tasks>
## Look for env vars and secrets used from the task definition ## Look for env vars and secrets used from the task definition
aws ecs describe-task-definition --task-definition <TASK_NAME>:<VERSION> aws ecs describe-task-definition --task-definition <TASK_NAME>:<VERSION>
``` ```
### Accesso non autenticato ### Enumerazione On-Host tramite il database di stato dell'ECS Agent (`agent.db`)
Quando hai **shell access su un ECS container instance** , oppure hai **escaped da un container con un host bind-mount di `/var/lib/ecs`** (una comune misconfiguration quando i task girano privileged o con `volumesFrom` che espone la directory dati dell'host), l'ECS agent lascia `agent.db` su disco che può essere letto **senza alcuna chiamata alle AWS API**, **senza alcun permesso IAM**, e **senza attivare CloudTrail**.
```
/var/lib/ecs/data/agent.db
```
(o, quando si legge da un container che ha l'host montato su `/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
```
#### Cosa puoi recuperare
A seconda dell'età del cluster e del churn del workload, `strings` su `agent.db` in genere restituisce:
- **ARN delle IAM role di task ed execution** (`taskRoleArn`, `executionRoleArn`) per ogni task eseguito dall'agent — target utili per [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`).
- **Definizioni complete dei task** — image URI (spesso repository ECR private), command, entrypoint, port mappings, mount points, log configuration e **variabili d'ambiente in plaintext** che spesso includono database URL, API token e secret di terze parti.
- **Riferimenti ai secret** — blocchi `secretOptions` e `secrets` che puntano a path di SSM Parameter Store e ARN di Secrets Manager (ottima lista di pivot).
- **ARN dell'container instance, ARN del cluster e registration token** — conferma il nome del cluster e il contesto account/region senza alcuna API call.
- **Metadati ENI** — IP privati, indirizzi MAC, subnet ID e security group ID assegnati in modalità `awsvpc` (utili per pianificare lateral movement).
- **Credenziali di image pull** — quando la definizione del task usa `repositoryCredentials`, l'ARN di Secrets Manager referenziato è qui; sugli agent più vecchi anche i blob di auth per private registry (`ECS_ENGINE_AUTH_DATA`) possono essere cached.
- **Container di task recentemente fermati** — inclusi nomi, ID, exit code e label, a volte molto dopo che la corrispondente chiamata `aws ecs describe-tasks` li ha rimossi dalla risposta API.
### Unauthenticated Access
{{#ref}} {{#ref}}
../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md ../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md
@@ -59,7 +92,7 @@ aws ecs describe-task-definition --task-definition <TASK_NAME>:<VERSION>
### Privesc ### Privesc
Nella pagina seguente puoi controllare come **abusare delle autorizzazioni ECS per escalare i privilegi**: Nella pagina seguente puoi vedere come **abuse ECS permissions to escalate privileges**:
{{#ref}} {{#ref}}
../aws-privilege-escalation/aws-ecs-privesc/README.md ../aws-privilege-escalation/aws-ecs-privesc/README.md
@@ -71,7 +104,7 @@ Nella pagina seguente puoi controllare come **abusare delle autorizzazioni ECS p
../aws-post-exploitation/aws-ecs-post-exploitation/README.md ../aws-post-exploitation/aws-ecs-post-exploitation/README.md
{{#endref}} {{#endref}}
### Persistenza ### Persistence
{{#ref}} {{#ref}}
../aws-persistence/aws-ecs-persistence/README.md ../aws-persistence/aws-ecs-persistence/README.md